blueprint: name: Aqara Magic Cube Zigbee2MQTT MQTT Triggered - 2024-06-02 author: SirGoodenough description: "This Blueprint uses a Zigbee2MQTT built sensor to sort out the 38(+54) unique commands available from the Xiaomi Magic Cube Remote. (Some unique commands are available thru templating only. See the related document.)\nThe split out of functions gives you the ability to assign local scripts or functions to do the things you want the remote to do.\nFunctions that are left empty will simply do nothing.\n\n### \U0001F34E There is a set of 36 event functions that will trigger on specific actions on specific sides that are listed as **Group 1 actions \U0001F34E**.\n\n### \U0001F352 There is a set of 6 event functions that will trigger on specific actions on *ANY* side that are listed as **Group 2 actions \U0001F352**.\n\n### \U0001F350 There is a set of 30 event functions that will trigger on cube flips to & from specific sides that are listed as **Group 3 actions \U0001F350**.\n\n### \U0001F355 There are 2 actions (shake and drop) that only occur once and are OK to be combined with any other group. Listed as **Group 4 sections \U0001F355**.\n\nPlease be aware that ALL actions **except** the **Group 4 actions \U0001F355** will trigger an action in **ALL 3 groups at the same time** every time. Therefore I suggest if you just have a couple of things you want this remote to do that you choose the *ANY / Group 2 / \U0001F352* events.\nIf you want more than a few events, you should select actions in **Group 1 / \U0001F34E OR Group 3 / \U0001F350**.\n**Group 4 actions \U0001F355** will not affect others.\nWith careful selection you can use mixed groups, but you run the risk of a single cube action triggering more than 1 Home Assistant action and making a mess of things \U0001F371.\n\n#### NOTICE: This cube *can* be triggered 124 ways, but only 38(+54) of them are unique (with templating).\n\nThere is sample code to make the template sensor in the help file on GitHib named [Zigbee2MQTT - Xiaomi Cube Controller MQTT Triggered.md](https://github.com/SirGoodenough/HA_Blueprints/blob/master/Automations/Zigbee2MQTT%20-%20Xiaomi%20Cube%20Controller%20MQTT%20Triggered.md) & in the [community page related to this](https://community.home-assistant.io/t/zigbee2mqtt-xiaomi-cube-controller/393203).\n\nWithin this blueprint there is an event handler that will latch the last command that the blueprint finds and sends that to the event buss. From there a simple Template sensor can grab it and show you the last action sent. Thie will help when setting up new functions and to troubleshoot strange behaviours.\n\n> This was forked from https://community.home-assistant.io/t/z2m-xiaomi-cube-controller/263006 1.2 project authored by luckypoppy and the friends he pulled together to create the base. I sincerely thank Him (Them) for their work. I felt there needed to be more documentation for rookie users to properly set this up. I had quite a few questions and when I saw a few questions in that chat from people struggling, I wanted to help. I also had a better idea for troubleshooting info.\n\n[Community link for this blueprint](https://community.home-assistant.io/t/zigbee2mqtt-xiaomi-cube-controller/393203)\n\n## \U0001F5FFNotice\U0001F46E\U0001F3FF‍♂️:\n* Copies of the original Blueprint that were converted via the 'Take Control' feature or other means are officially not supported by me.\n\n* I may or may not be able to support you when you have a problem after you make changes to my code, as some of the code is no longer mine.\n\n* I & my license also require attribution as a link back to the original should you use this code in your own creation.\n\n* [Here is a link to my license & the original github post](https://github.com/SirGoodenough/HA_Blueprints?tab=License-1-ov-file) expected to be followed & referenced as attribution should you use this code elsewhere.\n" source_url: https://github.com/SirGoodenough/HA_Blueprints/blob/master/Automations/Zigbee2MQTT-Xiaomi_Cube_Controller_MQTT_Triggered.yaml domain: automation homeassistant: min_version: 2024.6.0 input: required_input: name: "Required input \U0001F440" icon: mdi:alert-box collapsed: false description: "This blueprint has been known to freak out when there are spaces or odd characters\n in the MQTT Topic. Make sure there are no spaces, ONLY a single word,\n and ONLY A thru Z, a thru z, and 0 thru 9 in the topic.\n \ (``` / ``` is ok between device and topic)\n\n If there are other characters, you will need to change the name of the cube to\n remove those characters.\n\n \ ### IF YOU SEE --> TemplateError: Must provide a device or entity ID\n\n \ If you get an error like that, The friendly_name in Z2M likely does not match the \n friendly_name on HA. To fix go into the Z2M ```Open web UI``` and set the \n friendly_name there. Setting this in just HA or in Z2M without ticking the update HA\n box will cause this. See the blueprint documentation page for details.\n \n" input: topic: name: Topic description: "The main MQTT Topic for your cube. \nDetails on finding the correct topic can be found here: \n[Find my Cube Topic](https://github.com/SirGoodenough/HA_Blueprints/blob/master/Automations/Zigbee2MQTT%20-%20Xiaomi%20Cube%20Controller%20MQTT%20Triggered.md#-to-make-the-blueprint-work-it-will-need)\n" default: zigbee2mqtt/? selector: text: multiline: false multiple: false optional_conditions: name: "Optional conditions\U0001F913" icon: mdi:alert-octagon-outline collapsed: true description: "This input was added by user request. With it you can add your own condition.\n If you only want the cube to work like this in the morning,\n \ then after 6pm you want it to do different actions, add a condition that\n \ will only let this run from 6am until 6pm. Then have another copy of\n the blueprint that will only run from 6pm until 6am. (for example)\n\n Any valid conditions you can dream up, you should be able to add here.\n\n Leave it as the default of you don't want to add a condition of your own.\n \n" input: additional_conditions: name: Additional conditions description: "Extra conditions you may want to add to this automation \n(Example: Home occupied, TV on, etc)\n" default: [] selector: condition: {} side_0_group_1_actions: name: "Side 0 Group 1 actions \U0001F34E" icon: mdi:numeric-0-box collapsed: true description: "These are Group 1 actions that happen with Face 0\n (the one with the 'Aqara' LOGO) of the cube up to start.\n" input: slide_face_0: name: "Group 1 actions \U0001F34E Slide the cube with face 0 up" description: Face 0 is the one with the 'Aqara' LOGO default: [] selector: action: {} doubletap_face_0: name: "Group 1 actions \U0001F34E Double tap the cube with face 0 up" description: Face 0 is the one with the 'Aqara' LOGO default: [] selector: action: {} flipped90_face_0: name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 0" description: Face 0 is the one with the 'Aqara' LOGO default: [] selector: action: {} flipped180_face_0: name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 0" description: "**NOTE:** This action is trick to master, and should be used sparingly... Face 0 is the one with the 'Aqara' LOGO" default: [] selector: action: {} flip_from_any_to_face_0: name: "Group 1 actions \U0001F34E Flip the cube from any to face 0" description: Face 0 is the one with the 'Aqara' LOGO default: [] selector: action: {} rotate_cw_face_0: name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 0 up" description: Face 0 is the one with the 'Aqara' LOGO default: [] selector: action: {} rotate_ccw_face_0: name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 0 up" description: Face 0 is the one with the 'Aqara' LOGO default: [] selector: action: {} side_1_group_1_actions: name: "Side 1 Group 1 actions \U0001F34E" icon: mdi:numeric-1-box collapsed: true description: "These are Group 1 actions that happen with Face 1\n of the cube up to start.\n" input: slide_face_1: name: "Group 1 actions \U0001F34E Slide the cube with face 1 up" default: [] selector: action: {} doubletap_face_1: name: "Group 1 actions \U0001F34E Double tap the cube with face 1 up" default: [] selector: action: {} flipped90_face_1: name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 1" default: [] selector: action: {} flipped180_face_1: name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 1" description: "**NOTE:** This action is trick to master, and should be used sparingly..." default: [] selector: action: {} flip_from_any_to_face_1: name: "Group 1 actions \U0001F34E Flip the cube from any to face 1" description: Face 1 is the one with the 'Aqara' LOGO default: [] selector: action: {} rotate_cw_face_1: name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 1 up" default: [] selector: action: {} rotate_ccw_face_1: name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 1 up" default: [] selector: action: {} side_2_group_1_actions: name: "Side 2 Group 1 actions \U0001F34E" icon: mdi:numeric-2-box collapsed: true description: "These are Group 1 actions that happen with Face 2\n of the cube up to start.\n" input: slide_face_2: name: "Group 1 actions \U0001F34E Slide the cube with face 2 up" default: [] selector: action: {} doubletap_face_2: name: "Group 1 actions \U0001F34E Double tap the cube with face 2 up" default: [] selector: action: {} flipped90_face_2: name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 2" default: [] selector: action: {} flipped180_face_2: name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 2" description: "**NOTE:** This action is trick to master, and should be used sparingly..." default: [] selector: action: {} flip_from_any_to_face_2: name: "Group 1 actions \U0001F34E Flip the cube from any to face 2" description: Face 2 is the one with the 'Aqara' LOGO default: [] selector: action: {} rotate_cw_face_2: name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 2 up" default: [] selector: action: {} rotate_ccw_face_2: name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 2 up" default: [] selector: action: {} slide_face_3: name: "Group 1 actions \U0001F34E Slide the cube with face 3 up" default: [] selector: action: {} side_3_group_1_actions: name: "Side 3 Group 1 actions \U0001F34E" icon: mdi:numeric-3-box collapsed: true description: "These are Group 1 actions that happen with Face 3\n of the cube up to start.\n" input: doubletap_face_3: name: "Group 1 actions \U0001F34E Double tap the cube with face 3 up" default: [] selector: action: {} flipped90_face_3: name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 3" default: [] selector: action: {} flipped180_face_3: name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 3" description: "**NOTE:** This action is trick to master, and should be used sparingly..." default: [] selector: action: {} flip_from_any_to_face_3: name: "Group 1 actions \U0001F34E Flip the cube from any to face 3" description: Face 3 is the one with the 'Aqara' LOGO default: [] selector: action: {} rotate_cw_face_3: name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 3 up" default: [] selector: action: {} rotate_ccw_face_3: name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 3 up" default: [] selector: action: {} side_4_group_1_actions: name: "Side 4 Group 1 actions \U0001F34E" icon: mdi:numeric-4-box collapsed: true description: "These are Group 1 actions that happen with Face 4\n of the cube up to start.\n" input: slide_face_4: name: "Group 1 actions \U0001F34E Slide the cube with face 4 up" default: [] selector: action: {} doubletap_face_4: name: "Group 1 actions \U0001F34E Double tap the cube with face 4 up" default: [] selector: action: {} flipped90_face_4: name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 4" default: [] selector: action: {} flipped180_face_4: name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 4" description: "**NOTE:** This action is trick to master, and should be used sparingly..." default: [] selector: action: {} flip_from_any_to_face_4: name: "Group 1 actions \U0001F34E Flip the cube from any to face 4" description: Face 4 is the one with the 'Aqara' LOGO default: [] selector: action: {} rotate_cw_face_4: name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 4 up" default: [] selector: action: {} rotate_ccw_face_4: name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 4 up" default: [] selector: action: {} side_5_group_1_actions: name: "Side 5 Group 1 actions \U0001F34E" icon: mdi:numeric-5-box collapsed: true description: "These are Group 1 actions that happen with Face 5\n of the cube up to start.\n" input: slide_face_5: name: "Group 1 actions \U0001F34E Slide the cube with face 5 up" default: [] selector: action: {} doubletap_face_5: name: "Group 1 actions \U0001F34E Double tap the cube with face 5 up" default: [] selector: action: {} flipped90_face_5: name: "Group 1 actions \U0001F34E Flip the cube 90 degrees to face 5" default: [] selector: action: {} flipped180_face_5: name: "Group 1 actions \U0001F34E Flip the cube 180 degrees to face 5" description: "**NOTE:** This action is trick to master, and should be used sparingly..." default: [] selector: action: {} flip_from_any_to_face_5: name: "Group 1 actions \U0001F34E Flip the cube from any to face 5" description: Face 5 is the one with the 'Aqara' LOGO default: [] selector: action: {} rotate_cw_face_5: name: "Group 1 actions \U0001F34E Rotate cube clockwise with face 5 up" default: [] selector: action: {} rotate_ccw_face_5: name: "Group 1 actions \U0001F34E Rotate cube counter clockwise with face 5 up" default: [] selector: action: {} any_side_group_2_actions: name: "Any side Group 2 actions \U0001F352" icon: mdi:fruit-cherries collapsed: true description: "\U0001F352 These are a set of 6 event functions that will trigger on specific actions\n on *ANY* side. **Group 2 actions \U0001F352**\n" input: slide_any: name: "Group 2 actions \U0001F352 Slide the cube with any side" description: "Side doesn't matter on this one.\n**!!Warning!!** The automations for the specific side will also trigger. \U0001F34E\U0001F350\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} doubletap_any: name: "Group 2 actions \U0001F352 Double tap the cube with any side" description: "Side doesn't matter on this one.\n**!!Warning!!** The automations for the specific side will also trigger. \U0001F34E\U0001F350\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} flipped90_any: name: "Group 2 actions \U0001F352 Flip the cube 90 degrees to any side" description: "Side doesn't matter on this one.\n**!!Warning!!** The automations for the specific side will also trigger. \U0001F34E\U0001F350\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} flipped180_any: name: "Group 2 actions \U0001F352 Flip the cube 180 degrees any side" description: "NOTE: This action is trick to master, and should be used sparingly... Side doesn't matter on this one.\n**!!Warning!!** The automations for the specific side will also trigger. \U0001F34E\U0001F350\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} rotate_cw_any: name: "Group 2 actions \U0001F352 Rotate cube clockwise with any side" description: "Side doesn't matter on this one.\n**!!Warning!!** The automations for the specific side will also trigger. \U0001F34E\U0001F350\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} rotate_ccw_any: name: "Group 2 actions \U0001F352 Rotate cube counter clockwise with any side" description: "Side doesn't matter on this one.\n**!!Warning!!** The automations for the specific side will also trigger. \U0001F34E\U0001F350\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} side_0_group_3_actions: name: "Side 0 Group 3 actions \U0001F350" icon: mdi:numeric-0-circle collapsed: true description: "These are Group 3 actions that happen with Face 0 as the ending point.\n (the one with the 'Aqara' LOGO) of the cube up to start.\n All are flips from another side to side 0.\n" input: 0_from_1: name: "Group 3 actions \U0001F350 Flip the cube to side 0 from side 1" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 0 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 0_from_2: name: "Group 3 actions \U0001F350 Flip the cube to side 0 from side 2" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 0 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 0_from_3: name: "Group 3 actions \U0001F350 Flip the cube to side 0 from side 3" description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 0 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 0_from_4: name: "Group 3 actions \U0001F350 Flip the cube to side 0 from side 4" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 0 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 0_from_5: name: "Group 3 actions \U0001F350 Flip the cube to side 0 from side 5" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 0 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} side_1_group_3_actions: name: "Side 1 Group 3 actions \U0001F350" icon: mdi:numeric-1-circle collapsed: true description: "These are Group 3 actions that happen with Face 1 as the ending point.\n All are flips from another side to side 1.\n" input: 1_from_0: name: "Group 3 actions \U0001F350 Flip the cube to side 1 from side 0" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 1 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 1_from_2: name: "Group 3 actions \U0001F350 Flip the cube to side 1 from side 2" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 1 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 1_from_3: name: "Group 3 actions \U0001F350 Flip the cube to side 1 from side 3" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 1 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 1_from_4: name: "Group 3 actions \U0001F350 Flip the cube to side 1 from side 4" description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 1 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 1_from_5: name: "Group 3 actions \U0001F350 Flip the cube to side 1 from side 5" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 1 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} side_2_group_3_actions: name: "Side 2 Group 3 actions \U0001F350" icon: mdi:numeric-2-circle collapsed: true description: "These are Group 3 actions that happen with Face 2 as the ending point.\n All are flips from another side to side 2.\n" input: 2_from_0: name: "Group 3 actions \U0001F350 Flip the cube to side 2 from side 0" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 2 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 2_from_1: name: "Group 3 actions \U0001F350 Flip the cube to side 2 from side 1" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 2 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 2_from_3: name: "Group 3 actions \U0001F350 Flip the cube to side 2 from side 3" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 2 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 2_from_4: name: "Group 3 actions \U0001F350 Flip the cube to side 2 from side 4" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 2 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 2_from_5: name: "Group 3 actions \U0001F350 Flip the cube to side 2 from side 5" description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 2 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} side_3_group_3_actions: name: "Side 3 Group 3 actions \U0001F350" icon: mdi:numeric-3-circle collapsed: true description: "These are Group 3 actions that happen with Face 3 as the ending point.\n All are flips from another side to side 3.\n" input: 3_from_0: name: "Group 3 actions \U0001F350 Flip the cube to side 3 from side 0" description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 3 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 3_from_1: name: "Group 3 actions \U0001F350 Flip the cube to side 3 from side 1" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 3 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 3_from_2: name: "Group 3 actions \U0001F350 Flip the cube to side 3 from side 2" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 3 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 3_from_4: name: "Group 3 actions \U0001F350 Flip the cube to side 3 from side 4" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 3 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 3_from_5: name: "Group 3 actions \U0001F350 Flip the cube to side 3 from side 5" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 3 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} side_4_group_3_actions: name: "Side 4 Group 3 actions \U0001F350" icon: mdi:numeric-4-circle collapsed: true description: "These are Group 3 actions that happen with Face 4 as the ending point.\n All are flips from another side to side 4.\n" input: 4_from_0: name: "Group 3 actions \U0001F350 Flip the cube to side 4 from side 0" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 4 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 4_from_1: name: "Group 3 actions \U0001F350 Flip the cube to side 4 from side 1" description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 4 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 4_from_2: name: "Group 3 actions \U0001F350 Flip the cube to side 4 from side 2" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 4 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 4_from_3: name: "Group 3 actions \U0001F350 Flip the cube to side 4 from side 3" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 4 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 4_from_5: name: "Group 3 actions \U0001F350 Flip the cube to side 4 from side 5" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 4 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 5_from_0: name: "Group 3 actions \U0001F350 Flip the cube to side 5 from side 0" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 5 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} side_5_group_3_actions: name: "Side 5 Group 3 actions \U0001F350" icon: mdi:numeric-5-circle collapsed: true description: "These are Group 3 actions that happen with Face 5 as the ending point.\n All are flips from another side to side 5.\n" input: 5_from_1: name: "Group 3 actions \U0001F350 Flip the cube to side 5 from side 1" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 5 and the ANY \U0001F352 automations will also trigger. \U0001F34E\U0001F350\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 5_from_2: name: "Group 3 actions \U0001F350 Flip the cube to side 5 from side 2" description: "**!!Warning!!** The flip 180 automations \U0001F34E for side 5 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 5_from_3: name: "Group 3 actions \U0001F350 Flip the cube to side 5 from side 3" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 5 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} 5_from_4: name: "Group 3 actions \U0001F350 Flip the cube to side 5 from side 4" description: "**!!Warning!!** The flip 90 automations \U0001F34E for side 5 and the ANY \U0001F352 automations will also trigger.\nI suggest using only one of the three groups of triggers, not multiple groups..." default: [] selector: action: {} group_4_actions: name: "Group 4 actions only used once (no side) \U0001F355" icon: mdi:pizza collapsed: true description: "These are Group 4 actions only used once (no side) \U0001F355\n \ they can be safely compined with any other command.\n" input: shake: name: "Shake the cube \U0001F355 Group 4" description: "This trigger only occurs once in the set-up. It can be combined in any group." default: [] selector: action: {} fall: name: "Drop the cube \U0001F355 Group 4" description: "This trigger only occurs once in the set-up. It can be combined in any group." default: [] selector: action: {} trigger: - platform: mqtt topic: !input topic variables: action: "{% if trigger.payload_json.action is defined %}\n {{ trigger.payload_json.action }}\n{% else %}\n none\n{% endif %}\n" angle: "{% if trigger.payload_json.action_angle is number %}\n {{ trigger.payload_json.action_angle | float(0.0) }}\n{% else %}\n 0.0\n{% endif %}\n" side: "{% if trigger.payload_json.side is number %}\n {{ trigger.payload_json.side | int(0) }}\n{% else %}\n 0\n{% endif %}\n" op_mode: "{% if trigger.payload_json.operation_mode is defined %}\n {{ trigger.payload_json.operation_mode }}\n{% else %}\n none\n{% endif %}\n" topic_var: !input topic friendly_name: '{{ topic_var.split(''/'')[1] | regex_replace("[^A-Za-z0-9_/./-]", "") }}' device_id: "{{ device_id( friendly_name ) }}" ieee_id_long: "{{(( device_attr( device_id, 'identifiers') |list)[0][1]) }}" ieee_id: "{{ieee_id_long.split('_')[1] }}" num_name: last side num_ha_name: "{{ 'number.' + friendly_name + '_last_side' }}" num_ha_val: "{{ states(num_ha_name) | default(0) | int(0) }}" last_side: "{# The first time it will not be there, so make sure its 0 instead of undefined. #} {% if not num_ha_val in [\"undefined\", \"unknown\", \"unavailable\", \"none\", \"null\", \"\"] %}\n {{ num_ha_val }}\n{% else %}\n 0\n{% endif %}\n" mdl: Number Helper for Z2M Cube Integration mf: SirGoodenough sa: house sw: "2023-12-09" hw: https://github.com/SirGoodenough/HA_Blueprints/blob/master/Automations/Zigbee2MQTT - Xiaomi Cube Controller.yaml cu: https://community.home-assistant.io/t/zigbee2mqtt-xiaomi-cube-controller/393203 config_topic_2: "{{ 'homeassistant/number/' + ieee_id + '/last_side/config' }}" topic_2: "{{ 'homeassistant/number/' + ieee_id + '/last_side' }}" condition: - condition: template value_template: "{{ trigger.payload_json is defined and\n trigger.payload_json.action is defined and\n trigger.payload_json.action in [\"rotate_right\", \"rotate_left\",\n \ \"flip90\", \"flip180\", \"slide\", \"tap\", \"shake\", \"fall\"] }}\n" - alias: User pick condition: !input additional_conditions action: - alias: Make number helper to store last side action: mqtt.publish data: topic: "{{ config_topic_2 }}" retain: true payload: "{ \"name\": \"{{ num_name }}\",\n \"avty_t\": \"homeassistant/status\",\n \ \"uniq_id\": \"{{ friendly_name + '-' + device_id }}\",\n \"cmd_t\": \"{{ topic_2 }}\",\n \"sta_t\": \"{{ topic_2 }}\",\n \"min\": \"0\",\n \"max\": \"6\",\n \"step\": \"1\",\n \"mode\": \"box\",\n \"ret\": true,\n \"dev\": {\n \"name\": \"{{ friendly_name }}\",\n \"mdl\": \"{{ mdl }}\",\n \"mf\": \"{{ mf }}\",\n \"sa\": \"{{ sa }}\",\n \"sw\": \"{{ sw }}\",\n \"hw\": \"{{ hw }}\",\n \"cu\": \"{{ cu }}\",\n \"ids\": [\n \"{{ ieee_id + '-' + num_name }}\"\n ]\n }\n}\n" - alias: Fire Last Action event. This is for optional troubleshooting data. event: cube_last_action event_data: action: "{{ action }}" side: "{{ side }}" last_side: "{{ last_side }}" friendly_name: "{{ friendly_name }}" device_id: "{{ device_id }}" ieee_id: "{{ ieee_id }}" angle: "{{ angle }}" - alias: Store the current_side as the last_side for the next trigger action: number.set_value target: entity_id: "{{ num_ha_name }}" data: value: "{{ side }}" - alias: "Group 2 \U0001F352 and No Group \U0001F369 These are action events for ANY Side" choose: - conditions: '{{ action == "slide" }}' sequence: !input slide_any - conditions: '{{ action == "tap" }}' sequence: !input doubletap_any - conditions: '{{ action == "rotate_right" }}' sequence: !input rotate_cw_any - conditions: '{{ action == "rotate_left" }}' sequence: !input rotate_ccw_any - conditions: '{{ action == "shake" }}' sequence: !input shake - conditions: '{{ action == "fall" }}' sequence: !input fall - conditions: '{{ action == "flip90" }}' sequence: - parallel: - !input flipped90_any - alias: These are flip to specific side from any side events choose: &id001 - conditions: "{{ side == 0 }}" sequence: !input flip_from_any_to_face_0 - conditions: "{{ side == 1 }}" sequence: !input flip_from_any_to_face_1 - conditions: "{{ side == 2 }}" sequence: !input flip_from_any_to_face_2 - conditions: "{{ side == 3 }}" sequence: !input flip_from_any_to_face_3 - conditions: "{{ side == 4 }}" sequence: !input flip_from_any_to_face_4 - conditions: "{{ side == 5 }}" sequence: !input flip_from_any_to_face_5 - conditions: '{{ action == "flip180" }}' sequence: - parallel: - !input flipped180_any - alias: These are flip to specific side from any side events choose: *id001 - alias: "Group 1 \U0001F34E These are action events based on the action broken down by side" choose: - conditions: '{{ action == "slide" }}' sequence: - alias: These are slide events choose: - conditions: "{{ side == 0 }}" sequence: !input slide_face_0 - conditions: "{{ side == 1 }}" sequence: !input slide_face_1 - conditions: "{{ side == 2 }}" sequence: !input slide_face_2 - conditions: "{{ side == 3 }}" sequence: !input slide_face_3 - conditions: "{{ side == 4 }}" sequence: !input slide_face_4 - conditions: "{{ side == 5 }}" sequence: !input slide_face_5 - conditions: '{{ action == "tap" }}' sequence: - alias: These are doubletap events choose: - conditions: "{{ side == 0 }}" sequence: !input doubletap_face_0 - conditions: "{{ side == 1 }}" sequence: !input doubletap_face_1 - conditions: "{{ side == 2 }}" sequence: !input doubletap_face_2 - conditions: "{{ side == 3 }}" sequence: !input doubletap_face_3 - conditions: "{{ side == 4 }}" sequence: !input doubletap_face_4 - conditions: "{{ side == 5 }}" sequence: !input doubletap_face_5 - conditions: '{{ action == "flip90" }}' sequence: - alias: These are flipped90 events choose: - conditions: "{{ side == 0 }}" sequence: !input flipped90_face_0 - conditions: "{{ side == 1 }}" sequence: !input flipped90_face_1 - conditions: "{{ side == 2 }}" sequence: !input flipped90_face_2 - conditions: "{{ side == 3 }}" sequence: !input flipped90_face_3 - conditions: "{{ side == 4 }}" sequence: !input flipped90_face_4 - conditions: "{{ side == 5 }}" sequence: !input flipped90_face_5 - conditions: '{{ action == "flip180" }}' sequence: - alias: These are flipped180 events choose: - conditions: "{{ side == 0 }}" sequence: !input flipped180_face_0 - conditions: "{{ side == 1 }}" sequence: !input flipped180_face_1 - conditions: "{{ side == 2 }}" sequence: !input flipped180_face_2 - conditions: "{{ side == 3 }}" sequence: !input flipped180_face_3 - conditions: "{{ side == 4 }}" sequence: !input flipped180_face_4 - conditions: "{{ side == 5 }}" sequence: !input flipped180_face_5 - conditions: '{{ action == "rotate_right" }}' sequence: - alias: These are rotate CW events choose: - conditions: "{{ side == 0 }}" sequence: !input rotate_cw_face_0 - conditions: "{{ side == 1 }}" sequence: !input rotate_cw_face_1 - conditions: "{{ side == 2 }}" sequence: !input rotate_cw_face_2 - conditions: "{{ side == 3 }}" sequence: !input rotate_cw_face_3 - conditions: "{{ side == 4 }}" sequence: !input rotate_cw_face_4 - conditions: "{{ side == 5 }}" sequence: !input rotate_cw_face_5 - conditions: '{{ action == "rotate_left" }}' sequence: - alias: These are rotate CCW events choose: - conditions: "{{ side == 0 }}" sequence: !input rotate_ccw_face_0 - conditions: "{{ side == 1 }}" sequence: !input rotate_ccw_face_1 - conditions: "{{ side == 2 }}" sequence: !input rotate_ccw_face_2 - conditions: "{{ side == 3 }}" sequence: !input rotate_ccw_face_3 - conditions: "{{ side == 4 }}" sequence: !input rotate_ccw_face_4 - conditions: "{{ side == 5 }}" sequence: !input rotate_ccw_face_5 - alias: "Group 3 \U0001F350 Side to side jump events" choose: - conditions: "{{ side == 0 }}" sequence: - alias: To side 0 from any events choose: - conditions: "{{ last_side == 1 }}" sequence: !input 0_from_1 - conditions: "{{ last_side == 2 }}" sequence: !input 0_from_2 - conditions: "{{ last_side == 3 }}" sequence: !input 0_from_3 - conditions: "{{ last_side == 4 }}" sequence: !input 0_from_4 - conditions: "{{ last_side == 5 }}" sequence: !input 0_from_5 - conditions: "{{ side == 1 }}" sequence: - alias: To side 1 from any events choose: - conditions: "{{ last_side == 0 }}" sequence: !input 1_from_0 - conditions: "{{ last_side == 2 }}" sequence: !input 1_from_2 - conditions: "{{ last_side == 3 }}" sequence: !input 1_from_3 - conditions: "{{ last_side == 4 }}" sequence: !input 1_from_4 - conditions: "{{ last_side == 5 }}" sequence: !input 1_from_5 - conditions: "{{ side == 2 }}" sequence: - alias: To side 2 from any events choose: - conditions: "{{ last_side == 0 }}" sequence: !input 2_from_0 - conditions: "{{ last_side == 1 }}" sequence: !input 2_from_1 - conditions: "{{ last_side == 3 }}" sequence: !input 2_from_3 - conditions: "{{ last_side == 4 }}" sequence: !input 2_from_4 - conditions: "{{ last_side == 5 }}" sequence: !input 2_from_5 - conditions: "{{ side == 3 }}" sequence: - alias: To side 3 from any events choose: - conditions: "{{ last_side == 0 }}" sequence: !input 3_from_0 - conditions: "{{ last_side == 1 }}" sequence: !input 3_from_1 - conditions: "{{ last_side == 2 }}" sequence: !input 3_from_2 - conditions: "{{ last_side == 4 }}" sequence: !input 3_from_4 - conditions: "{{ last_side == 5 }}" sequence: !input 3_from_5 - conditions: "{{ side == 4 }}" sequence: - alias: To side 4 from any events choose: - conditions: "{{ last_side == 0 }}" sequence: !input 4_from_0 - conditions: "{{ last_side == 1 }}" sequence: !input 4_from_1 - conditions: "{{ last_side == 2 }}" sequence: !input 4_from_2 - conditions: "{{ last_side == 3 }}" sequence: !input 4_from_3 - conditions: "{{ last_side == 5 }}" sequence: !input 4_from_5 - conditions: "{{ side == 5 }}" sequence: - alias: To side 5 from any events choose: - conditions: "{{ last_side == 0 }}" sequence: !input 5_from_0 - conditions: "{{ last_side == 1 }}" sequence: !input 5_from_1 - conditions: "{{ last_side == 2 }}" sequence: !input 5_from_2 - conditions: "{{ last_side == 3 }}" sequence: !input 5_from_3 - conditions: "{{ last_side == 4 }}" sequence: !input 5_from_4 - alias: Delay ⏱ for debounce so toggle functions work. Also blueprint is in single mode. delay: 00:00:01 mode: single max_exceeded: silent