Use Tradfri Shortcut Button with Home Assistant Credits: Artem Bryzgalov on Unsplash

Use Tradfri Shortcut Button with Home Assistant

Sometimes it can be helpful if single actions or entire automation in your Home Automation can be triggered with a physical button and not only from the Web UI. I’m using Zigbee2MQTT as a generic Zigbee to MQTT bridge as it supports a lot of different Zigbee devices and integrates flawlessly into Home Assistant. As I have a lot of different Tradfri Lamps in use already, I have bought a few of the Tradfri Shortcut Button (E1812).

Pairing the Buttons with the Zigbee2MQTT coordinator was simple as usual, but I had some trouble to figure out how to use it in Home Assistant. Zigbee2MQTT recommends to use the MQTT device triggers but the documentation wasn’t that clear on this part.

The first thing to do is to figure out the available triggers of the device. Triggers are published to the MQTT topic <discovery_prefix>/device_automation/ and you can subscribe to is to discover the messages. To subscribe to an MQTT topic mosquitto_sub CLI command can be used e.g. mosquitto_sub -h 192.168.0.1 -p 8883 -u user -P secure-password -t homeassistant/device_automation/# or the Home Assistant UI at Settings / Devices & Services / Integrations / MQTT / Configure / Listen to a topic.

After subscribing to the topic, remember that device triggers are not published until the event has been triggered at least once on the device. Afterwards the following triggers should be listed for the Tradfri Button:

{
    "automation_type": "trigger",
    "device": {
        "identifiers": [
            "zigbee2mqtt_0x84b112233445566"
        ],
        "manufacturer": "IKEA",
        "model": "TRADFRI shortcut button (E1812)",
        "name": "livingroom/switch_test",
        "sw_version": "2.3.080"
    },
    "payload": "off",
    "subtype": "off",
    "topic": "zigbee2mqtt/livingroom/switch_test/action",
    "type": "action"
}
{
    "automation_type": "trigger",
    "device": {
        "identifiers": [
            "zigbee2mqtt_0x84b112233445566"
        ],
        "manufacturer": "IKEA",
        "model": "TRADFRI shortcut button (E1812)",
        "name": "livingroom/switch_test",
        "sw_version": "2.3.080"
    },
    "payload": "brightness_stop",
    "subtype": "brightness_stop",
    "topic": "zigbee2mqtt/livingroom/switch_test/action",
    "type": "action"
}
{
    "automation_type": "trigger",
    "device": {
        "identifiers": [
            "zigbee2mqtt_0x84b112233445566"
        ],
        "manufacturer": "IKEA",
        "model": "TRADFRI shortcut button (E1812)",
        "name": "livingroom/switch_test",
        "sw_version": "2.3.080"
    },
    "payload": "brightness_move_up",
    "subtype": "brightness_move_up",
    "topic": "zigbee2mqtt/livingroom/switch_test/action",
    "type": "action"
}
{
    "automation_type": "trigger",
    "device": {
        "identifiers": [
            "zigbee2mqtt_0x84b112233445566"
        ],
        "manufacturer": "IKEA",
        "model": "TRADFRI shortcut button (E1812)",
        "name": "livingroom/switch_test",
        "sw_version": "2.3.080"
    },
    "payload": "on",
    "subtype": "on",
    "topic": "zigbee2mqtt/livingroom/switch_test/action",
    "type": "action"
}

Great, with this data determined, it’s almost done. The only missing information is the device_id. I have not found a nice way to get this ID yet, but it is part of the URL after navigating to Settings / Devices & Services / Devices / <device>.

Finally an action can be assigned to a button. The example below is starting the Vacuum cleaner on a single_click (on) trigger:

- alias: Start Vaccum
  trigger:
    - platform: device
      domain: mqtt
      device_id: 61b011e2e7d5e111111d8d804a029f61
      type: action
      subtype: "on"
      discovery_id: 0x84b112233445566 action_on
  action:
    - service: vacuum.start
      target:
        entity_id: vacuum.valetudo_rockrobo