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'
