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'