618 lines
19 KiB
YAML
618 lines
19 KiB
YAML
blueprint:
|
|
name: Aqara Magic Cube
|
|
description: Control anything using Aqara Magic Cube.
|
|
domain: automation
|
|
input:
|
|
remote:
|
|
name: Magic Cube
|
|
description: Select the Aqara Magic Cube device
|
|
selector:
|
|
device:
|
|
integration: zha
|
|
manufacturer: LUMI
|
|
flip_90:
|
|
name: Flip 90 degrees
|
|
description: 'Actions to run when cube flips 90 degrees.
|
|
|
|
This cancels all specific 90 degrees functions.
|
|
|
|
e.g From side 1 to side 2 will be the same as from side 6 to side 2'
|
|
default: false
|
|
selector:
|
|
boolean: {}
|
|
cube_flip_90:
|
|
name: Flip cube 90 degrees
|
|
description: Action to run when cube flips 90 degrees. This only works if 'Flip
|
|
90 degrees' is toggled
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
flip_180:
|
|
name: Flip 180 degrees
|
|
description: 'Actions to run when cube flips 180 degrees.
|
|
|
|
This cancels all specific 180 degrees functions
|
|
|
|
e.g From side 1 to side 4 will be the same as from side 5 to side 2'
|
|
default: false
|
|
selector:
|
|
boolean: {}
|
|
cube_flip_180:
|
|
name: Flip cube 180 degrees
|
|
description: Action to run when cube flips 180 degrees. This only works if 'Flip
|
|
180 degrees' is toggled
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
flip_any:
|
|
name: Flip to any side
|
|
description: 'Actions to run when cube flips to any side.
|
|
|
|
This cares about the end side, but cancels all specific flip functions.
|
|
|
|
e.g From side 1 to side 2 will be the same as from side 6 to side 2
|
|
|
|
but different than side 1 to side 5'
|
|
default: false
|
|
selector:
|
|
boolean: {}
|
|
cube_flip_1:
|
|
name: Flip cube to side 1
|
|
description: Action to run when cube flips to side 1. This only works if 'Flip
|
|
any' is toggled
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
cube_flip_2:
|
|
name: Flip cube to side 2
|
|
description: Action to run when cube flips to side 2. This only works if 'Flip
|
|
any' is toggled
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
cube_flip_3:
|
|
name: Flip cube to side 3
|
|
description: Action to run when cube flips to side 3. This only works if 'Flip
|
|
any' is toggled
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
cube_flip_4:
|
|
name: Flip cube to side 4
|
|
description: Action to run when cube flips to side 4. This only works if 'Flip
|
|
any' is toggled
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
cube_flip_5:
|
|
name: Flip cube to side 5
|
|
description: Action to run when cube flips to side 5. This only works if 'Flip
|
|
any' is toggled
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
cube_flip_6:
|
|
name: Flip cube to side 6
|
|
description: Action to run when cube flips to side 6. This only works if 'Flip
|
|
any' is toggled
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
slide_any_side:
|
|
name: Slide any side
|
|
description: 'Actions to run when cube slides on any side.
|
|
|
|
This cancels all specific ''slide'' functions
|
|
|
|
e.g Slide on side 1 will be the same as slide on side 2'
|
|
default: false
|
|
selector:
|
|
boolean: {}
|
|
cube_slide_any:
|
|
name: Slide cube on any side
|
|
description: Action to run when cube slides on any slide. This only works if
|
|
'Slide any side' is toggled
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
knock_any_side:
|
|
name: Knock on any side
|
|
description: 'Actions to run when knocking cube regardless of the side.
|
|
|
|
This cancels all specific ''knock'' functions
|
|
|
|
e.g Knock on side 1 will be the same as knocking side 2'
|
|
default: false
|
|
selector:
|
|
boolean: {}
|
|
cube_knock_any:
|
|
name: Knock cube on any side
|
|
description: Action to run when knocking cube on any side. This only works if
|
|
'Knock on any side' is toggled
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
one_to_two:
|
|
name: From side 1 to side 2
|
|
description: Action to run when cube goes from side 1 to side 2
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
one_to_three:
|
|
name: From side 1 to side 3
|
|
description: Action to run when cube goes from side 1 to side 3
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
one_to_four:
|
|
name: From side 1 to side 4
|
|
description: Action to run when cube goes from side 1 to side 4
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
one_to_five:
|
|
name: From side 1 to side 5
|
|
description: Action to run when cube goes from side 1 to side 5
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
one_to_six:
|
|
name: From side 1 to side 6
|
|
description: Action to run when cube goes from side 1 to side 6
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
two_to_one:
|
|
name: From side 2 to side 1
|
|
description: Action to run when cube goes from side 2 to side 1
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
two_to_three:
|
|
name: From side 2 to side 3
|
|
description: Action to run when cube goes from side 2 to side 3
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
two_to_four:
|
|
name: From side 2 to side 4
|
|
description: Action to run when cube goes from side 2 to side 4
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
two_to_five:
|
|
name: From side 2 to side 5
|
|
description: Action to run when cube goes from side 2 to side 5
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
two_to_six:
|
|
name: From side 2 to side 6
|
|
description: Action to run when cube goes from side 2 to side 6
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
three_to_one:
|
|
name: From side 3 to side 1
|
|
description: Action to run when cube goes from side 3 to side 1
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
three_to_two:
|
|
name: From side 3 to side 2
|
|
description: Action to run when cube goes from side 3 to side 2
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
three_to_four:
|
|
name: From side 3 to side 4
|
|
description: Action to run when cube goes from side 3 to side 4
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
three_to_five:
|
|
name: From side 3 to side 5
|
|
description: Action to run when cube goes from side 3 to side 5
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
three_to_six:
|
|
name: From side 3 to side 6
|
|
description: Action to run when cube goes from side 3 to side 6
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
four_to_one:
|
|
name: From side 4 to side 1
|
|
description: Action to run when cube goes from side 4 to side 1
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
four_to_two:
|
|
name: From side 4 to side 2
|
|
description: Action to run when cube goes from side 4 to side 2
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
four_to_three:
|
|
name: From side 4 to side 3
|
|
description: Action to run when cube goes from side 4 to side 3
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
four_to_five:
|
|
name: From side 4 to side 5
|
|
description: Action to run when cube goes from side 4 to side 5
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
four_to_six:
|
|
name: From side 4 to side 6
|
|
description: Action to run when cube goes from side 4 to side 6
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
five_to_one:
|
|
name: From side 5 to side 1
|
|
description: Action to run when cube goes from side 5 to side 1
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
five_to_two:
|
|
name: From side 5 to side 2
|
|
description: Action to run when cube goes from side 5 to side 2
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
five_to_three:
|
|
name: From side 5 to side 3
|
|
description: Action to run when cube goes from side 5 to side 3
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
five_to_four:
|
|
name: From side 5 to side 4
|
|
description: Action to run when cube goes from side 5 to side 4
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
five_to_six:
|
|
name: From side 5 to side 6
|
|
description: Action to run when cube goes from side 5 to side 6
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
six_to_one:
|
|
name: From side 6 to side 1
|
|
description: Action to run when cube goes from side 6 to side 1
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
six_to_two:
|
|
name: From side 6 to side 2
|
|
description: Action to run when cube goes from side 6 to side 2
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
six_to_three:
|
|
name: From side 6 to side 3
|
|
description: Action to run when cube goes from side 6 to side 3
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
six_to_four:
|
|
name: From side 6 to side 4
|
|
description: Action to run when cube goes from side 6 to side 4
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
six_to_five:
|
|
name: From side 6 to side 5
|
|
description: Action to run when cube goes from side 6 to side 5
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
one_to_one:
|
|
name: Knock - Side 1
|
|
description: Action to run when knocking on side 1
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
two_to_two:
|
|
name: Knock - Side 2
|
|
description: Action to run when knocking on side 2
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
three_to_three:
|
|
name: Knock - Side 3
|
|
description: Action to run when knocking on side 3
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
four_to_four:
|
|
name: Knock - Side 4
|
|
description: Action to run when knocking on side 4
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
five_to_five:
|
|
name: Knock - Side 5
|
|
description: Action to run when knocking on side 5
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
six_to_six:
|
|
name: Knock - Side 6
|
|
description: Action to run when knocking on side 6
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
slide_on_one:
|
|
name: Slide - Side 1 up
|
|
description: Action to run when slides with Side 1 up
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
slide_on_two:
|
|
name: Slide - Side 2 up
|
|
description: Action to run when slides with Side 2 up
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
slide_on_three:
|
|
name: Slide - Side 3 up
|
|
description: Action to run when slides with Side 3 up
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
slide_on_four:
|
|
name: Slide - Side 4 up
|
|
description: Action to run when slides with Side 4 up
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
slide_on_five:
|
|
name: Slide - Side 5 up
|
|
description: Action to run when slides with Side 5 up
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
slide_on_six:
|
|
name: Slide - Side 6 up
|
|
description: Action to run when slides with Side 6 up
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
cube_wake:
|
|
name: Wake up the cube
|
|
description: Action to run when cube wakes up
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
cube_drop:
|
|
name: Cube drops
|
|
description: Action to run when cube drops
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
cube_shake:
|
|
name: Shake cube
|
|
description: Action to run when you shake the cube
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
rotate_right:
|
|
name: Rotate right
|
|
description: Action to run when cube rotates right
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
rotate_left:
|
|
name: Rotate left
|
|
description: Action to run when cube rotates left
|
|
default: []
|
|
selector:
|
|
action: {}
|
|
source_url: https://community.home-assistant.io/t/zha-aqara-magic-cube-57-actions/297012
|
|
mode: restart
|
|
max_exceeded: silent
|
|
trigger:
|
|
- platform: event
|
|
event_type: zha_event
|
|
event_data:
|
|
device_id: !input 'remote'
|
|
action:
|
|
- variables:
|
|
command: '{{ trigger.event.data.command }}'
|
|
value: '{{ trigger.event.data.args.value | default(0) }}'
|
|
flip_degrees: '{{ trigger.event.data.args.flip_degrees | default(0) }}'
|
|
flip_any: !input 'flip_any'
|
|
flip_90: !input 'flip_90'
|
|
flip_180: !input 'flip_180'
|
|
slide_any_side: !input 'slide_any_side'
|
|
knock_any_side: !input 'knock_any_side'
|
|
flip90: 64
|
|
flip180: 128
|
|
slide: 256
|
|
knock: 512
|
|
shake: 0
|
|
drop: 3
|
|
activated_face: "\n{% if command == \"slide\" or command == \"knock\" %}\n\n \
|
|
\ {% if trigger.event.data.args.activated_face == 1 %} 1\n\n {% elif trigger.event.data.args.activated_face\
|
|
\ == 2 %} 5\n\n {% elif trigger.event.data.args.activated_face == 3 %} 6\n\n\
|
|
\ {% elif trigger.event.data.args.activated_face == 4 %} 4\n\n {% elif trigger.event.data.args.activated_face\
|
|
\ == 5 %} 2\n\n {% elif trigger.event.data.args.activated_face == 6 %} 3\n\n\
|
|
\ {% endif %}\n\n{% elif command == 'flip' %}\n\n {{ trigger.event.data.args.activated_face\
|
|
\ | int }}\n\n{% endif %}\n"
|
|
from_face: "\n{% if command == \"flip\" and flip_degrees == 90 %}\n\n {{ ((value\
|
|
\ - flip90 - (trigger.event.data.args.activated_face - 1)) / 8) + 1 | int }}\n\
|
|
\n{% endif %}\n"
|
|
relative_degrees: "\n{% if command == \"rotate_right\" or command == \"rotate_left\"\
|
|
\ %}\n\n {{ trigger.event.data.args.relative_degrees | float }}\n\n{% endif\
|
|
\ %}\n"
|
|
- choose:
|
|
- conditions:
|
|
- '{{ command == ''rotate_right'' }}'
|
|
sequence: !input 'rotate_right'
|
|
- conditions:
|
|
- '{{ command == ''rotate_left'' }}'
|
|
sequence: !input 'rotate_left'
|
|
- conditions:
|
|
- '{{ command == ''checkin'' }}'
|
|
sequence: !input 'cube_wake'
|
|
- conditions:
|
|
- '{{ value == shake }}'
|
|
sequence: !input 'cube_shake'
|
|
- conditions:
|
|
- '{{ value == drop }}'
|
|
sequence: !input 'cube_drop'
|
|
- conditions:
|
|
- '{{ command == ''knock'' and knock_any_side }}'
|
|
sequence: !input 'cube_knock_any'
|
|
- conditions:
|
|
- '{{ command == ''slide'' and slide_any_side }}'
|
|
sequence: !input 'cube_slide_any'
|
|
- conditions:
|
|
- '{{ command == ''flip'' and flip_any }}'
|
|
sequence:
|
|
- choose:
|
|
- conditions: '{{ activated_face == 1 }}'
|
|
sequence: !input 'cube_flip_1'
|
|
- conditions: '{{ activated_face == 2 }}'
|
|
sequence: !input 'cube_flip_2'
|
|
- conditions: '{{ activated_face == 3 }}'
|
|
sequence: !input 'cube_flip_3'
|
|
- conditions: '{{ activated_face == 4 }}'
|
|
sequence: !input 'cube_flip_4'
|
|
- conditions: '{{ activated_face == 5 }}'
|
|
sequence: !input 'cube_flip_5'
|
|
- conditions: '{{ activated_face == 6 }}'
|
|
sequence: !input 'cube_flip_6'
|
|
- conditions:
|
|
- '{{ flip_degrees == 90 and flip_90 }}'
|
|
sequence: !input 'cube_flip_90'
|
|
- conditions:
|
|
- '{{ flip_degrees == 180 and flip_180 }}'
|
|
sequence: !input 'cube_flip_180'
|
|
- conditions:
|
|
- '{{ flip_degrees == 90 and activated_face == 1 }}'
|
|
sequence:
|
|
- choose:
|
|
- conditions: '{{ from_face == 2 }}'
|
|
sequence: !input 'two_to_one'
|
|
- conditions: '{{ from_face == 3 }}'
|
|
sequence: !input 'three_to_one'
|
|
- conditions: '{{ from_face == 5 }}'
|
|
sequence: !input 'five_to_one'
|
|
- conditions: '{{ from_face == 6 }}'
|
|
sequence: !input 'six_to_one'
|
|
- conditions:
|
|
- '{{ flip_degrees == 90 and activated_face == 2 }}'
|
|
sequence:
|
|
- choose:
|
|
- conditions: '{{ from_face == 1 }}'
|
|
sequence: !input 'one_to_two'
|
|
- conditions: '{{ from_face == 3 }}'
|
|
sequence: !input 'three_to_two'
|
|
- conditions: '{{ from_face == 4 }}'
|
|
sequence: !input 'four_to_two'
|
|
- conditions: '{{ from_face == 6 }}'
|
|
sequence: !input 'six_to_two'
|
|
- conditions:
|
|
- '{{ flip_degrees == 90 and activated_face == 3 }}'
|
|
sequence:
|
|
- choose:
|
|
- conditions: '{{ from_face == 1 }}'
|
|
sequence: !input 'one_to_three'
|
|
- conditions: '{{ from_face == 2 }}'
|
|
sequence: !input 'two_to_three'
|
|
- conditions: '{{ from_face == 4 }}'
|
|
sequence: !input 'four_to_three'
|
|
- conditions: '{{ from_face == 5 }}'
|
|
sequence: !input 'five_to_three'
|
|
- conditions:
|
|
- '{{ flip_degrees == 90 and activated_face == 4 }}'
|
|
sequence:
|
|
- choose:
|
|
- conditions: '{{ from_face == 2 }}'
|
|
sequence: !input 'two_to_four'
|
|
- conditions: '{{ from_face == 3 }}'
|
|
sequence: !input 'three_to_four'
|
|
- conditions: '{{ from_face == 5 }}'
|
|
sequence: !input 'five_to_four'
|
|
- conditions: '{{ from_face == 6 }}'
|
|
sequence: !input 'six_to_four'
|
|
- conditions:
|
|
- '{{ flip_degrees == 90 and activated_face == 5 }}'
|
|
sequence:
|
|
- choose:
|
|
- conditions: '{{ from_face == 1 }}'
|
|
sequence: !input 'one_to_five'
|
|
- conditions: '{{ from_face == 3 }}'
|
|
sequence: !input 'three_to_five'
|
|
- conditions: '{{ from_face == 4 }}'
|
|
sequence: !input 'four_to_five'
|
|
- conditions: '{{ from_face == 6 }}'
|
|
sequence: !input 'six_to_five'
|
|
- conditions:
|
|
- '{{ flip_degrees == 90 and activated_face == 6 }}'
|
|
sequence:
|
|
- choose:
|
|
- conditions: '{{ from_face == 1 }}'
|
|
sequence: !input 'one_to_six'
|
|
- conditions: '{{ from_face == 2 }}'
|
|
sequence: !input 'two_to_six'
|
|
- conditions: '{{ from_face == 4 }}'
|
|
sequence: !input 'four_to_six'
|
|
- conditions: '{{ from_face == 5 }}'
|
|
sequence: !input 'five_to_six'
|
|
- conditions:
|
|
- '{{ value == flip180 + activated_face - 1 }}'
|
|
sequence:
|
|
- choose:
|
|
- conditions: '{{ activated_face == 1 }}'
|
|
sequence: !input 'four_to_one'
|
|
- conditions: '{{ activated_face == 2 }}'
|
|
sequence: !input 'five_to_two'
|
|
- conditions: '{{ activated_face == 3 }}'
|
|
sequence: !input 'six_to_three'
|
|
- conditions: '{{ activated_face == 4 }}'
|
|
sequence: !input 'one_to_four'
|
|
- conditions: '{{ activated_face == 5 }}'
|
|
sequence: !input 'two_to_five'
|
|
- conditions: '{{ activated_face == 6 }}'
|
|
sequence: !input 'three_to_six'
|
|
- conditions:
|
|
- '{{ command == ''knock'' and not knock_any_side }}'
|
|
sequence:
|
|
- choose:
|
|
- conditions: '{{ activated_face == 1 }}'
|
|
sequence: !input 'one_to_one'
|
|
- conditions: '{{ activated_face == 2 }}'
|
|
sequence: !input 'two_to_two'
|
|
- conditions: '{{ activated_face == 3 }}'
|
|
sequence: !input 'three_to_three'
|
|
- conditions: '{{ activated_face == 4 }}'
|
|
sequence: !input 'four_to_four'
|
|
- conditions: '{{ activated_face == 5 }}'
|
|
sequence: !input 'five_to_five'
|
|
- conditions: '{{ activated_face == 6 }}'
|
|
sequence: !input 'six_to_six'
|
|
- conditions:
|
|
- '{{ value == slide + activated_face - 1 }}'
|
|
sequence:
|
|
- choose:
|
|
- conditions: '{{ activated_face == 1 }}'
|
|
sequence: !input 'slide_on_one'
|
|
- conditions: '{{ activated_face == 2 }}'
|
|
sequence: !input 'slide_on_two'
|
|
- conditions: '{{ activated_face == 3 }}'
|
|
sequence: !input 'slide_on_three'
|
|
- conditions: '{{ activated_face == 4 }}'
|
|
sequence: !input 'slide_on_four'
|
|
- conditions: '{{ activated_face == 5 }}'
|
|
sequence: !input 'slide_on_five'
|
|
- conditions: '{{ activated_face == 6 }}'
|
|
sequence: !input 'slide_on_six'
|