Integrar controlador zigbee led TS0504B en Home Assistent

En el proceso de cambiar de dispositivos wifi a zigbee en esta ocasión le toca a las tiras led que tengo instaladas en casa , pedi una para hacer pruebas , pedi la versión con alimentación a 12Vdc ya que las tiras instaladas son RGBW a 12Vdc , hay una versión de este controlador con alimentación directa por USB , pero solo serviria para tiras led a 5Vdc.

Este seria el controlador en concreto.

Nada mas conectarlo zigbee2mqtt nos lo detecta como un controlador tuya TS0504B

Le cambiaremos la etiqueta en el fichero de configuración de zigbee2mqtt

  '0xa4c1383595478432':
    friendly_name: 'led_zb2_pruebas'

AL momento ya empezaremos a recibir información via MQTT

{
  "brightness": 254,
  "color": {
    "x": 0.1355,
    "y": 0.0399
  },
  "color_mode": "xy",
  "device": {
    "applicationVersion": 65,
    "dateCode": "",
    "friendlyName": "led_zb2_pruebas",
    "hardwareVersion": 1,
    "ieeeAddr": "0xa4c1383595478432",
    "manufacturerID": 4417,
    "manufacturerName": "_TZ3210_onejz0gt",
    "model": "TS0504B",
    "networkAddress": 48475,
    "powerSource": "Mains (single phase)",
    "stackVersion": 0,
    "type": "Router",
    "zclVersion": 3
  },
  "last_seen": "2024-05-01T21:38:10+02:00",
  "linkquality": 105,
  "state": "ON"
}

zigbee2mqtt/led_zb2_pruebas

Este seria el json del autodiscovery de HA , pero yo prefiero integrarlos manualmente en mi Home Assistant

{
  "availability": [
    {
      "topic": "zigbee2mqtt/bridge/state"
    },
    {
      "topic": "zigbee2mqtt/led_zb2_pruebas/availability"
    }
  ],
  "availability_mode": "all",
  "brightness": true,
  "brightness_scale": 254,
  "color_mode": true,
  "command_topic": "zigbee2mqtt/led_zb2_pruebas/set",
  "device": {
    "configuration_url": "https://zigbee2mqtt.antrivas.duckdns.org/#/device/0xa4c1383595478432/info",
    "identifiers": [
      "zigbee2mqtt_0xa4c1383595478432"
    ],
    "manufacturer": "TuYa",
    "model": "Zigbee RGBW light (TS0504B)",
    "name": "led_zb2_pruebas",
    "via_device": "zigbee2mqtt_bridge_0x00124b001ca16260"
  },
  "json_attributes_topic": "zigbee2mqtt/led_zb2_pruebas",
  "name": null,
  "object_id": "led_zb2_pruebas",
  "origin": {
    "name": "Zigbee2MQTT",
    "sw": "1.35.3",
    "url": "https://www.zigbee2mqtt.io"
  },
  "schema": "json",
  "state_topic": "zigbee2mqtt/led_zb2_pruebas",
  "supported_color_modes": [
    "xy"
  ],
  "unique_id": "0xa4c1383595478432_light_zigbee2mqtt"
}

Esta era la configuración para los controladores wifi con el firmware espurna

    - name: tira_led_estudio
      state_topic: led-despacho/relay/0
      command_topic: led-despacho/relay/0/set
      payload_on: 1
      payload_off: 0
      availability_topic: led-despacho/status
      payload_available: 1
      payload_not_available: 0
      brightness_state_topic: led-despacho/brightness
      brightness_command_topic: led-despacho/brightness/set
      rgb_state_topic: led-despacho/rgb
      rgb_command_topic: led-despacho/rgb/set
      white_value_command_topic: led-despacho/channel/3/se

Y con este controlador quedaria así :

    - name: tira_led_estudio
      schema: json
      state_topic: "zigbee2mqtt/led_despacho_zb"
      command_topic: "zigbee2mqtt/led_despacho_zb/set"
      availability_topic: "zigbee2mqtt/led_despacho_zb/availability"
      payload_available: online
      payload_not_available: offline      
      brightness: true
      rgb: true
      # white_value: true
      effect: true
      effect_list: [blink, breathe, okay, channel_change, finish_effect, stop_effect]
      optimistic: false
      qos: 0   

Crearemos un par de sensores , uno de calidad del enlace y otro de disponibilidad

  ### TIRA LED ESTUDIO

    - state_topic: "zigbee2mqtt/led_despacho_zb"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: "mdi:signal"
      unit_of_measurement: "lqi"
      value_template: "{{ value_json.linkquality }}"    
      name: "led_despacho_zb_estado"  
  
    - state_topic: "zigbee2mqtt/led_despacho_zb"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: "mdi:calendar-clock"
      value_template: "{{ value_json.last_seen }}"
      name: "led_despacho_zb_ultima_conexion"   

Crearemos un sensor binario de conexión

    - state_topic: "zigbee2mqtt/led_despacho_zb/availability"       
      availability_topic:  "zigbee2mqtt/led_despacho_zb/availability"     
      name: led_despacho_zb_disponibilidad      
      device_class: "connectivity"      
      payload_on: "online"
      payload_off: "offline"  

Y crearemos un sensor que nos indicara cuando ocurrió la ultima conexión del controlador

  - platform: template
    sensors:
      led_despacho_zb_ultima_conexion_minutos:
        value_template: >-
          {% set x1 = as_timestamp(states('sensor.led_despacho_zb_ultima_conexion')) %}
          {% set x2 = as_timestamp(now()) %}
          {% set time = x2 - x1 | int(0) %}
          {% set days = (time/86400) | int %}
          {% set hours = (time / 3600 % 24) | int %}
          {% set minutes = (((time / 3600) % 1) * 60) | int %}
          {{ days ~ 'd ' ~ hours ~ 'h ' ~ minutes ~ 'm' }}        
        friendly_name: Ultima conexión tira led estudio
        icon_template: "mdi:calendar-clock"

Una de las cosas que son diferentes es que antes tenia control tanto de la parte led de color como la parte de blanco a la vez , con este controlador si se envia el valor RGB 255,255,255 desactiva la parte de color y activa la parte de blanco.

Por ejemplo así desactiva la parte de color y activa la parte de blanco

    - service: light.turn_on
      data:
        entity_id: light.tira_led_estudio
        brightness: 255
        rgb_color: [255,255,255]  

Lo vestiremos un poco en nuestro lovelace , yo suelo usar el custom component rgb-light-card

Esta seria la configuración para este caso en concreto

      - type: entities
        title: Estudio
        show_name: true
        show_state: false
        show_header_toggle: false
        columns: 3     
        entities:  
          - light.luz_estudio 
          - light.tira_led_estudio 
          - type: 'custom:rgb-light-card'
            entity: light.tira_led_estudio
            justify: left
            hide_when_off: true
            colors:
              - rgb_color:
                  - 255
                  - 255
                  - 255
                icon_color: '#FFFFFF'
                brightness: 255
                transition: 1
              - rgb_color:
                  - 255
                  - 0
                  - 0
                icon_color: '#ff0000'
                brightness: 255
                transition: 1
              - rgb_color:
                  - 0
                  - 0
                  - 255
                icon_color: '#3366CC'
                brightness: 255
                transition: 1
              - rgb_color:
                  - 63
                  - 255
                  - 0
                icon_color: '#33CC33'
                brightness: 255
                transition: 1
              - rgb_color:
                  - 0
                  - 255
                  - 255
                icon_color: '#00ffff'             
                brightness: 255
                transition: 1
              - rgb_color:
                  - 255
                  - 255
                  - 0
                icon_color: '#F1C40F'             
                brightness: 255
                transition: 1
              - rgb_color:
                  - 109
                  - 0
                  - 219
                icon_color: '#7D3C98'             
                brightness: 255
                transition: 1
              - rgb_color:
                  - 255
                  - 127
                  - 0
                icon_color: '#D35400'             
                brightness: 255
                transition: 1

Uno de los problemas que me he encontrado es que la tira led venia cambiada, en lugar de GND R G B W era GND G R B W , en espurna lo solvente por software

Esta seria la configuración para cada tipo de tira led

Y esta era la que tenia yo , aparentemente esta bien , pero no , interiormente la tira led estaba cambiada

Un par de soldaduras y colores cambiados

Y con esto y un bizcocho …..