Integrar en Home Assistant IKEA TRADFRI remote control

Ikea tiene una serie de elementos zigbee bastante originales y practicos , uno de los que mas me gusta de la serie TRÅDFRI es su remote control ( https://www.ikea.com/us/en/p/tradfri-remote-control-00443130/ ) que nos permite tener cinco teclas diferentes en un solo dispositivo con su base magnética

Viene con la batería , una base magnética y un adhesivo de doble cara 3M

Para alimentarlo retiramos la tapa trasera e introducimos la batería en su alojamiento

Emparejamiento : Teniendo zigbee2mqtt en modo “permitir emparejamiento” pulsaremos el botón al lado de la batería cuatro veces , si es correcto el led frontal se encenderá varias veces y ya estaría emparejado apareciendo en la pagina de zigbee2mqtt

Cuando se dispara una acción se puede ver el estado de la propiedad action , los valores posibles son : arrow_left_click, arrow_left_hold, arrow_left_release, arrow_right_click, arrow_right_hold, arrow_right_release, brightness_down_click, brightness_down_hold, brightness_down_release, brightness_up_click, brightness_up_hold, brightness_up_release y toggle

El botón central al ser pulsado envía este mensaje {“click”: “toggle”}, y al ser soltado siempre envia {“click”: “toggle_hold”}

Existe un problema de emparejamiento en función del firmware que lleva , de las versiones 2.3.014 a 2.3.74 solo permite el bind a grupos , por lo que o se actualiza el firmware vía OTA o se debe hacer bind a un grupo que creemos y vincular el dispositivo a ese grupo

Una vez emparejado ya podemos empezar a crear los sensores y las automatizaciones oportunas :

Sensor mqtt de disponiblidad

  # MANDO IKEA 4
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/ikea_mando_4"
    availability_topic: "zigbee2mqtt/bridge/state"
    payload_on: true
    payload_off: false
    value_template: "{{ value_json.update_available}}"    
    name: ikea_mando_4_disponibilidad

Sensores mqtt de acción , batería y calidad de la señal

### IKEA MANDO 4

  - platform: "mqtt"
    state_topic: "zigbee2mqtt/ikea_mando_4"
    availability_topic: "zigbee2mqtt/bridge/state"
    icon: "mdi:gesture-double-tap"
    value_template: "{{ value_json.action }}"
    name: "ikea_mando_4_evento"
    
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/ikea_mando_4"
    availability_topic: "zigbee2mqtt/bridge/state"
    unit_of_measurement: "%"
    device_class: "battery"
    value_template: "{{ value_json.battery }}"
    expire_after: 86400
    force_update: true
    name: "ikea_mando_4_bateria"  

  - platform: "mqtt"
    state_topic: "zigbee2mqtt/ikea_mando_4"
    availability_topic: "zigbee2mqtt/bridge/state"
    icon: "mdi:signal"
    unit_of_measurement: "lqi"
    value_template: "{{ value_json.linkquality }}"
    name: "ikea_mando_4_estado"  

Le daremos nombre a nuestro gusto en customize.yaml

binary_sensor.ikea_mando_4_evento:
  friendly_name: Mando luz ikea estudio 
sensor.ikea_mando_4_bateria:
  friendly_name: Mando luz ikea estudio
sensor.ikea_mando_4_estado:
  friendly_name: Mando luz ikea estudio  
sensor.ikea_mando_4_evento:
  friendly_name: Mando luz ikea estudio  

Yo uno ello lo utilizo para apagar y encender un plafón xiaomi y dos tiras de led de forma independiente con cada tecla , y con las dos teclas restantes subo o bajo el brillo del plafón , los delay de un segundo están puestos de forma intencionada porque a los plafones xiaomi les sienta muy mal el envió de varios comandos consecutivos y entra en un estado de protección que hace caso omiso de los comandos recibidos durante algo mas de un minuto

- id: ikea_controller_toggle_oriol
  alias: Ikea Controller - Toggle _oriol
  trigger:
    - platform: state
      entity_id: sensor.ikea_mando_4_evento
      to: "toggle"
  condition:
  action:
    - service: light.toggle
      data:
        entity_id: light.luz_oriol
    - delay: 00:00:01  
    
###########################################
## Dim up/down and warm up/down with clicks
###########################################

- id: ikea_controller_dim_up_oriol
  alias: Ikea controller dim up _oriol
  trigger:
    platform: state
    entity_id: sensor.ikea_mando_4_evento
    to: brightness_up_click
  action:
    - data_template:
        entity_id: light.luz_oriol
        brightness: "{{ state_attr('light.luz_oriol', 'brightness') + 15 | int(0) | round(0,default=0) }}"
      service: light.turn_on
    - delay: 00:00:01

- id: ikea_controller_dim_down_oriol
  alias: Ikea controller dim down _oriol
  trigger:
    platform: state
    entity_id: sensor.ikea_mando_4_evento
    to: brightness_down_click
  action:
    - data_template:
        entity_id: light.luz_oriol
        brightness: "{{ [state_attr('light.luz_oriol', 'brightness') - 15, 1] | max }}"
      service: light.turn_on
    - delay: 00:00:01

- id: ikea_controller_warm_up_oriol
  alias: Ikea controller warm up _oriol
  trigger:
    platform: state
    entity_id: sensor.ikea_mando_4_evento
    to: arrow_right_click
  action:
    - service: light.toggle
      data:
        entity_id: light.tira_led_mesa_oriol

- id: ikea_controller_warm_down_oriol
  alias: Ikea controller warm down _oriol
  trigger:
    platform: state
    entity_id: sensor.ikea_mando_4_evento
    to: arrow_left_click
  action:
    - service: light.toggle
      data:
        entity_id: light.tira_led_cama_oriol    

Crearemos un sensor de batería para que nos de una alerta cuando la batería este baja

      mando_ikea_2_battery_level:
        friendly_name: Mando Ikea Oriol
        value_template: "{{ states.sensor.ikea_mando_2_bateria.state |default(-1)| int(0)  if states.sensor.ikea_mando_2_bateria is not none }}"
        unit_of_measurement: '%'
        icon_template: '{% if states.sensor.ikea_mando_2_bateria.state| int(0)   == 100 %}
                          mdi:battery
                       {% elif states.sensor.ikea_mando_2_bateria.state| int(0)   >= 90 %}
                          mdi:battery-90
                       {% elif states.sensor.ikea_mando_2_bateria.state| int(0)   >= 80 %}
                          mdi:battery-80
                       {% elif states.sensor.ikea_mando_2_bateria.state| int(0)   >= 70 %}
                          mdi:battery-70
                       {% elif states.sensor.ikea_mando_2_bateria.state| int(0)   >= 60 %}
                          mdi:battery-60
                       {% elif states.sensor.ikea_mando_2_bateria.state| int(0)   >= 50 %}
                          mdi:battery-50
                       {% elif states.sensor.ikea_mando_2_bateria.state| int(0)   >= 40 %}
                          mdi:battery-40
                       {% elif states.sensor.ikea_mando_2_bateria.state| int(0)   >= 30 %}
                          mdi:battery-30
                       {% elif states.sensor.ikea_mando_2_bateria.state| int(0)   >= 20 %}
                          mdi:battery-20
                       {% elif states.sensor.ikea_mando_2_bateria.state| int(0)   >= 10 %}
                          mdi:battery-10
                       {% else %}
                          mdi:battery-outline
                       {% endif %}'

Y colorin colorado …………

https://www.zigbee2mqtt.io/devices/E1524_E1810.html