Z2M - Xiaomi Cube Controller

I don’t know how to do that, but first thing I’m thinking about is to listen to the zigbee2mqtt topic so your script doesn’t depends on HA.

Yes, this blueprint is recently updated and I’m running this version. You can import by url or copy/paste the template.

I have subscribed to the zigbee2mqtt topic and I can get the actions of the cube when I slide it or rotate it etc. However I dont get the extra information like which side is facing up? I only get the original basic actions of the cube.

I’ve subscribed (node-red) on the same topic and below is an example from a received message including side-information.

"{"level":"info","message":"MQTT publish: topic 'zigbee2mqtt/0x00XXXX000XXXXX', payload '{\"action\":\"flip90\",\"action_from_side\":4,\"action_side\":0,\"action_to_side\":0,\"angle\":77.56,\"battery\":86,\"from_side\":4,\"linkquality\":84,\"side\":0,\"to_side\":0,\"voltage\":2975}'"}"
1 Like

Thanks @luckypoppy I tried and get the same payload as you.

Do you know how to extract the action and side as a simple str in python?

So I had a question about using this blueprint. What should the entity be that I look at? I see multiple sensor.magic_cube_action, sensor.magic_cube_action_angle, sensor.magic_cube_action_from_side, sensor.magic_cube_action_side, sensor.magic_cube_action_to_side, sensor.magic_cube_linkquality. I thought, it would one entity like sensor.magic_cube…

1 Like

I am using the “sensor.magic_cube_action_side” and that is working fine.

Ok, I’ll give that a try.

I had some issues with this blueprint and used it as inspiration to make a better version: Home-Assistant-Blueprints/zigbee2mqtt_aqara_magic_cube.yaml at 9a63ee03f1d0cf10448fb89a28528ac4105461ac · golles/Home-Assistant-Blueprints · GitHub

4 Likes

Thank you so much for this updated blueprint! I had it working with my cubes a week or two ago with zigbee2mqtt in a separate docker container. But they stopped working and I can’t tell why. The cubes talk to z2m, z2m sends mqtt to hass’s mosquitto, mosquitto shows that the mqtt events are received, the entities in hass show their states, but the automation won’t fire. I don’t get where the disconnect is.

I’m not quite sure how to troubleshoot it since the automation won’t fire at all, so a trace doesn’t exist to debug.

Didn’t work for me.
Checked the automation trace and it stops on the condition.

I have the same issue :frowning:. Things where working for quite a wile. But now the automation stopped working.
I might be related to some recent updates of either homeassistant core, homeassistant host or Zigbee2mqtt .

Home assistant is running on a raspberrypi4 and a CC2531 USB stick is used for Zigbee.
MQTT server runs externally.

The MQTT integration in homeassistant does not show any entities in the Aqara device MQTT info.
It seems like the MQTT addresses exposed by Zigbee2MQTT did change and therefore the auto MQTT discovery in homeassistant no longer works.
Looking at the published MQTT messages (using MQTT Explorer), the only aqara related (retained) topic I see in /homeassistant is: /homeassistant/device_automation/<my_aqara_id>/action_shake/config. Containing the following message:

{
  "automation_type": "trigger",
  "device": {
    "identifiers": [
      "zigbee2mqtt_<my_aqara_id>"
    ],
    "manufacturer": "Xiaomi",
    "model": "Mi/Aqara smart home cube (MFKZQ01LM)",
    "name": "Aqara",
    "sw_version": "Zigbee2MQTT 1.21.2"
  },
  "payload": "shake",
  "subtype": "shake",
  "topic": "zigbee2mqtt/Aqara/action",
  "type": "action"
}

Solved my problem. Not sure how :frowning:
After adding some new zigbee lights, I was not able to add more lights. Google gave me the tip to unplug the zigbee USB stick and plug it in again.
After this action, I was able to add the remaining lights.
The next day I found out that my aqara was working again :slight_smile:
Inspcting the /homeassistant/device_automation/<my_aqara_id> topic now also shows the topics action_wakeup, action_slide, action_flip180 and some others.

I’ve just received my cube but can’t get either of the blueprints in this post to work. The trace gives an error of

Error: UndefinedError: ‘dict object’ has no attribute ‘to_state’

The entities which have been created in HomeAssistant are:

sensor.cube_action
sensor.cube_action_angle
sensor.cube_action_from_side
sensor.cube_action_side
sensor.cube_action_to_side
sensor.cube_battery

If I look at the mqtt package it looks something like this:

{“action”:“rotate_right”,“action_angle”:68.02,“action_from_side”:null,“action_side”:null,“action_to_side”:null,“battery”:74,“linkquality”:108,“side”:2,“voltage”:2955}

I can successfully create a simple automation doing something like watching for a shake or a drop but I’d prefer to use a blueprint which might increase the options.

I’m guessing things have changed in HomeAssistant and maybe zigbee2mqtt recently which has upset the formatting of things. Any help would be much appreciated.

OK - more information - the following entities aren’t updating at all:

sensor.cube_action_angle
sensor.cube_action_from_side
sensor.cube_action_side
sensor.cube_action_to_side

although the MQTT messages are updating. Looks like something is up with how Homeassistant is interpreting the MQTT messages.

I tried to use this blueprint but it fails to work. I’m using Homey as my zigbee hub, this send the data through via mqtt, have mqtt broker & hub running on homey and added mqtt on HA.
The cube from Homey is visible in HA as mqtt device, I see the changes in the cube device but the blueprint does not work.
Do I need to change anything in the blueprint code to get it to work with this setup? is this only for zigbe2mqtt and Conbee II stick or should this also work with my Homey as MQTT broker?

I could not get this to work either. The “action” sensor doesn’t have an action attribute, nor a side attribute. I eventually just switched to using an MQTT trigger, rather than an entity trigger.

trigger:
- platform: mqtt
  topic: !input 'remote_mqtt_topic'
condition:
  - condition: template
    value_template: >-
      {{ trigger.payload_json.action in ('rotate_right', 'rotate_left', 'flip90', 'flip180', 'slide', 'tap', 'shake', 'fall') }}
action:
- variables:
    event: '{{  trigger.payload_json.action }}'
    sub_event: '{{  trigger.payload_json.side }}'
    event_angle: '{{  trigger.payload_json.action_angle }}'

Hello,
The blueprint works well. I spent some time on an automation where the brightness will increase by action angle.

here is the automation action:

service: light.turn_on
target:
  entity_id: light.led_stripe
data_template:
  brightness_step_pct: "{{ trigger.to_state.attributes.action_angle * 0.4 }}"

I hope it helps someone.

2 Likes

I’m seeing the following trigger, which doesn’t match what this blueprint expects:

trigger:
  id: '0'
  idx: '0'
  platform: state
  entity_id: sensor.0x00158d0005d9d322_action
  from_state:
    entity_id: sensor.0x00158d0005d9d322_action
    state: None
    attributes:
      icon: mdi:gesture-double-tap
      friendly_name: cube-k action
    last_changed: '2022-01-07T04:40:57.421837+00:00'
    last_updated: '2022-01-07T04:40:57.421837+00:00'
    context:
      id: ba971f749101817d6781218323d7c368
      parent_id: null
      user_id: null
  to_state:
    entity_id: sensor.0x00158d0005d9d322_action
    state: slide
    attributes:
      icon: mdi:gesture-double-tap
      friendly_name: cube-k action
    last_changed: '2022-01-07T04:40:57.422376+00:00'
    last_updated: '2022-01-07T04:40:57.422376+00:00'
    context:
      id: cd2c98be8ca4a3f9b43d36ac0e28bad9
      parent_id: null
      user_id: null
  for: null
  attribute: null
  description: state of sensor.0x00158d0005d9d322_action

In particular, this blueprint is looking at trigger.from_state.attributes.action, but the data is showing up as just trigger.from_state.state. Did something change at some point? I tried with both legacy=true and legacy=false in zigbee2mqtt.

One quick question. How can I identify which face of de cube is up? Is not possible to use the last face which is up as 0 face? Like the original cube does with Xiaomi app.

Thanks!