Files
fresh-home/blueprints/automation/SirGoodenough/Zigbee2MQTT-Xiaomi_Cube_Controller_MQTT_Triggered.yaml
T
2025-08-09 23:34:29 -04:00

1041 lines
46 KiB
YAML

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
service: 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
service: 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