Crear sensor bateria Android e integrarlo en Home Assistant

Después de regalarle a mi hijo un flamante IPhone 14 me vino con la tonteria de que no se podia cargar a mas del 90% , alucinante , te compras un mega chachi pirulo o seaaaaaaaaaa movil que no se puede cargar al 100%, lo peor de todo es que por tener esa castaña de móvil lo asumen , pero esto ya es divagar , volviendo al tema del sensor me puse en un rato y dije , voy a crear un sistema para cargarlo hasta el 90% y parar , pero para trastear donde este un buen Android que se quite el IPhone.

Lo primero es crear una base de datos en MySQL , accederemos mediante phpMyAdmin

Creamos la tabla bateria , yo le añadí estos cuatro campos

Lo siguiente crearemos una pagina en PHP para recoger los datos que le enviemos , la llamaremos get-data.php

Esta pagina recoge los datos que le pasemos por GET en la URL de llamada y los inserta en la tabla

<?php

// Establecer la zona horaria de Madrid
date_default_timezone_set('Europe/Madrid'); 

$servername = "localhost";
$dbname = "bateria";
$username = "xxxxxxxxx";
$password = "yyyyyyyyyyyyyyyy";

$api_key_value = "zzzzzzzzzz";

// Recibir los parámetros enviados
$api_key = test_input($_GET['api_key']) ?? '';
$movil = test_input($_GET['movil']) ?? '';
$porcentaje = test_input($_GET['porcentaje']) ?? '';
$estado = test_input($_GET['estado']) ?? '';

if($api_key == $api_key_value) {
	$fecha = date("Y-m-d H:i:s");
    		
    // Crear conexión
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Probar conexión
    if ($conn->connect_error) {
        die("Fallo conexión : " . $conn->connect_error);
    } 
    
    $sql = "INSERT INTO bateria (movil, porcentaje, fecha , estado)
    VALUES ('" . $movil . "', '" . $porcentaje . "', '" . $fecha . "', '" . $estado . "')";
    
	
    if ($conn->query($sql) === TRUE) {
        echo "Registro añadido";
    } 
    else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }

    $conn->close();
}
else {
    echo "Error en la API Key.";
}


function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

Haremos la prueba con cualquier herramienta online al uso que encontremos para ello , yo use para ello https://reqbin.com/

La url de llamada quedaria algo similar a esto http://antrivas.duckdns.org:XXXX/YYYYYY/get-data.php?api_key=xxxxxxxx&movil=antonio&porcentaje=91&estado=connect

Si todo es correcto nos devolverá este mensaje en la pagina web

En phpMyAdmin veremos como en cada llamada va insertando registros en la tabla

Ahora crearemos en macrodroid un par de macros , la primera para que nos ponga en una variable global el estado de la carga.

Primero creamos la variable global

Hacemos que cualquier cambio o cada minuto se active la actualización de estado de la carga

Ahora crearemos la segunda automatización que se encargue de enviar los datos cada intervalo de tiempo a la siguiente URL

http://antrivas.duckdns.org:XXXX/YYYYYY/get-data.php?api_key=ZZZZZZZ&movil=antonio&porcentaje={lv=nivel_batería}&estado={v=estado_carga}

La creamos y le damos como ciclo de repetición cada cinco minutos.

Lo primero será fijar el nivel de bateria actual

Enviamos los datos por HTTP GET

Guardamos la respuesta para un messagebox ( mientras depuramos las automatizaciones ) y guardarlo en un fichero de log

Podremos ver en el log de Macrodroid como se van produciendo las acciones

Y en la base de datos ya nos iran apareciendo los registros tras cada una de las llamadas a la URL

Ahora toca liarnos con la parte de Home Assistant

En secrets.yaml pondremos nuestra cadena de conexión a la base de datos baterias

db_url_bateria: mysql://xxxxxxxxxx:yyyyyyyyy@127.0.0.1:9306/bateria?charset=utf8

En la sección sensors añadiremos cuatro sensores , dos de porcentaje , y dos de estado

  - platform: sql
    db_url: !secret db_url_bateria
    scan_interval: 60
    queries:
      - name: 'bateria_movil_antonio_porcentaje'
        query: "SELECT * FROM `bateria` WHERE movil = 'antonio' ORDER BY fecha DESC LIMIT 1;"
        column: 'porcentaje'
        unit_of_measurement: "%"
 
  - platform: sql
    db_url: !secret db_url_bateria
    scan_interval: 60
    queries:
      - name: 'bateria_movil_oriol_porcentaje'
        query: "SELECT * FROM `bateria` WHERE movil = 'oriol' ORDER BY fecha DESC LIMIT 1;"
        column: 'porcentaje'
        unit_of_measurement: "%"

  - platform: sql
    db_url: !secret db_url_bateria
    scan_interval: 60
    queries:
      - name: 'bateria_movil_antonio_cargando'
        query: "SELECT * FROM `bateria` WHERE movil = 'antonio' ORDER BY fecha DESC LIMIT 1;"
        column: 'estado'
 
  - platform: sql
    db_url: !secret db_url_bateria
    scan_interval: 60
    queries:
      - name: 'bateria_movil_oriol_cargando'
        query: "SELECT * FROM `bateria` WHERE movil = 'oriol' ORDER BY fecha DESC LIMIT 1;"
        column: 'estado'

En configuration.yaml haremos que nos guarde los valores añadiéndolos en la sección recorder.

      - sensor.bateria_movil_antonio_porcentaje
      - sensor.bateria_movil_oriol_porcentaje      
      - sensor.bateria_movil_antonio_cargando
      - sensor.bateria_movil_oriol_cargando

Lo pondremos a nuestro gust en el fichero customize.yaml

sensor.bateria_movil_antonio_porcentaje:
  friendly_name: Bateria movil Antonio
  icon: mdi:battery-90

sensor.bateria_movil_oriol_porcentaje:
  friendly_name: Bateria movil Oriol
  icon: mdi:battery-90

sensor.bateria_movil_antonio_cargando:
  friendly_name: Estado carga movil Antonio
  icon: mdi:battery-charging-90

sensor.bateria_movil_oriol_cargando:  
  friendly_name: Estado carga movil Oriol
  icon: mdi:battery-charging-90

Y ya lo podemos poner en nuestro panel lovelace

      - type: entities
        title: Baterias moviles
        show_name: true
        show_state: false
        show_header_toggle: false
        columns: 3     
        entities:     
          - sensor.bateria_movil_antonio_porcentaje
          - sensor.bateria_movil_antonio_cargando
          - type: divider            
          - sensor.bateria_movil_oriol_porcentaje      
          - sensor.bateria_movil_oriol_cargando

Ya nos aparece en el panel

Y podemos ver la grafica de la bateria

Y los diferentes estados de carga del dispositivo

Y ahora pasaremos a crear las automatizaciones para controlar el máximo de carga de bateria al 90% y volver a cargar cuando baje a 80% , también desconectaremos el cargador cuando no estemos en casa.

####################################
##### Enchufe cargador Antonio #####
####################################  


- alias: Enchufe cargador antonio carga inferior a 80
  id: Enchufe cargador antonio carga inferior a 80
  initial_state: 'on'
  trigger:
    - platform: numeric_state
      entity_id: 
        - sensor.bateria_movil_antonio_porcentaje       
      below: 80
  condition:
    - condition: state
      entity_id: input_boolean.int_presencia_antonio
      state: 'on'     
  action:
    #Enchufe cargador Antonio
    - service: switch.turn_on
      entity_id: switch.enchufe_27_cargador_movil_antonio
  


- alias: Enchufe cargador antonio carga superior a 90
  id: Enchufe cargador antonio carga superior a 90
  initial_state: 'on'
  trigger:
    - platform: numeric_state
      entity_id: 
        - sensor.bateria_movil_antonio_porcentaje       
      above: 90
  condition:
    - condition: state
      entity_id: input_boolean.int_presencia_antonio
      state: 'on'     
  action:
    #Enchufe cargador Antonio
    - service: switch.turn_off
      entity_id: switch.enchufe_27_cargador_movil_antonio


- alias: Enchufe cargador antonio apagar si no se esta en casa
  id: Enchufe cargador antonio apagar si no se esta en casa
  initial_state: 'on'
  trigger:
    - platform: numeric_state
      entity_id: 
        - sensor.bateria_movil_antonio_porcentaje       
  condition:
    - condition: state
      entity_id: input_boolean.int_presencia_antonio
      state: 'off'     
  action:
    #Enchufe cargador Antonio
    - service: switch.turn_off
      entity_id: switch.enchufe_27_cargador_movil_antonio

Y con esto y un bizcocho ….

Integrar en Home Assistant mando Zigbee EGLO 99099

Hace unos días mirando por internet vi un mando a distancia zigbee bastante chulo y decidí comprarlo e integrarlo, el mando en cuestión es este

https://www.eglo.com/es/control-remoto-connect-z-99099.html

El mando viene con un soporte para la pared.

Y es alimentado por dos pilas AAA

Las especificaciones para integrarlo estan en https://www.zigbee2mqtt.io/devices/99099.html

El manual de instrucciones del equipo es este.

Según el manual para emparejarlo bastaba con pulsar el botón ON y el botón azul y se debía emparejar

Pero así no hay forma de emparejarlo , después de buscar un rato vi que hay una forma de previamente hacerle un reset de fabrica , pero antes baje la aplicación para Android y le actualice el firmware a la ultima versión.

Después de actualizar tampoco emparejaba , buscando en la web del fabricante encontre como hacer un reset de fabrica pulsando estos dos botones tres segundos .

Ahora al pulsar el botón ON y el botón azul y se emparejo correctamente con zigbee2mqtt

Al momento ya empezó a aparecer la información en MqttExplorer

Este el json que envia al pulsar el botón ON

{
  "action": "on",
  "action_group": 32780,
  "device": {
    "applicationVersion": 2,
    "friendlyName": "0xa4c13836ff794744",
    "hardwareVersion": 60,
    "ieeeAddr": "0xa4c13836ff794744",
    "manufacturerID": 4417,
    "manufacturerName": "AwoX",
    "model": "99099",
    "networkAddress": 32859,
    "powerSource": "Battery",
    "softwareBuildID": "2.7.3_1387",
    "stackVersion": 1,
    "type": "EndDevice",
    "zclVersion": 3
  },
  "last_seen": "2024-02-27T16:21:36+01:00",
  "linkquality": 25
}

Cambiaremos en el configuration.yaml de zigbee2mqtt el nombre del mando

  '0xa4c13836ff794744':
    friendly_name: '0xa4c13836ff794744'

y le añadiremos que simule el control de brillo

  '0xa4c13836ff794744':
    friendly_name: mando_zigbee
    simulated_brightness:
      delta: 20     # delta per interval, default = 20
      interval: 200 # interval in milliseconds, default = 200

Añadiremos los sensores del manto en el fichero configuration.yaml de nuestro home assistant

  ### MANDO ZIGBEE
  
    - state_topic: "zigbee2mqtt/mando_zigbee"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: "mdi:gesture-double-tap"
      value_template: "{{ value_json.action }}"
      name: "mando_zigbee_evento"
      
    - state_topic: "zigbee2mqtt/mando_zigbee"
      availability_topic: "zigbee2mqtt/bridge/state"
      unit_of_measurement: "%"
      device_class: "battery"
      value_template: "{{ value_json.battery }}"
      expire_after: 86400
      force_update: true
      name: "mando_zigbee_bateria"  
  
    - state_topic: "zigbee2mqtt/mando_zigbee"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: "mdi:signal"
      unit_of_measurement: "lqi"
      value_template: "{{ value_json.linkquality }}"
      name: "mando_zigbee_estado"  
      
    - state_topic: "zigbee2mqtt/mando_zigbee"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: "mdi:calendar-clock"
      value_template: "{{ value_json.last_seen }}"
      name: "mando_zigbee_ultima_conexion"   

Crearemos el sensor de disponibilidad

    - state_topic: "zigbee2mqtt/mando_zigbee/availability"       
      availability_topic:  "zigbee2mqtt/mando_zigbee/availability"     
      name: mando_zigbee_disponibilidad     
      device_class: "connectivity"      
      payload_on: "online"
      payload_off: "offline"  

Pondremos las etiquetas en el customize.yaml

binary_sensor.mando_zigbee_evento:
  friendly_name: Mando zigbee
sensor.mando_zigbee_bateria:
  friendly_name: Mando zigbee
sensor.mando_zigbeeestado:
  friendly_name: Mando zigbee
sensor.mando_zigbee_evento:
  friendly_name: Mando zigbee
binary_sensor.mando_zigbee_disponibilidad: 
  friendly_name: Mando zigbee

Lo añadiremos al sensor general de fallo de cualquier dispositivo zigbee

  - platform: template
    sensors:
      sensor_fallo_dispositivos_zigbee:
        #ON cuando cualquiera falla en la comunicacion
        friendly_name: 'Sensor fallo algun dispositivo zigbee'
        value_template: >
            {% if 
            is_state('binary_sensor.temperatura_balcon_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_agua_lavabo_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_puerta_entrada_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_movimiento_recibidor_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_proximidad_timbre_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_comedor_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_movimiento_comedor_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_balcon_comedor_derecho_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_balcon_comedor_izquierdo_disponibilidad', 'off') or 
            is_state('binary_sensor.movimiento_3_disponibilidad', 'off') or 
            is_state('binary_sensor.pulsador_luz_sofa_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_balcon_matrimonio_izquierdo_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_balcon_matrimonio_derecho_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_conmut_entrada_matrimonio_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_conmut_tere_matrimonio_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_conmut_antonio_matrimonio_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_matrimonio_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_congelador_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_nevera_disponibilidad', 'off') or  
            is_state('binary_sensor.mando_zigbee_disponibilidad', 'off') or  
            is_state('binary_sensor.ikea_mando_1_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_trastero_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_trastero_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_oriol_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_leds_oriol_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_oriol_izquierdo_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_oriol_derecho_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_puerta_armario_oriol_disponibilidad', 'off') or 
            is_state('binary_sensor.ikea_mando_2_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_conmut_1_oriol_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_conmut_2_oriol_disponibilidad', 'off') or  
            is_state('binary_sensor.enchufe_zb_1_disponibilidad', 'off') or 
            is_state('binary_sensor.enchufe_zb_2_tv_matrimonio_disponibilidad', 'off') or 
            is_state('binary_sensor.enchufe_zb_3_balcon_disponibilidad', 'off') or 
            is_state('binary_sensor.ikea_mando_4_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_movimiento_cocina_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_agua_cocina_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_agua_lavadero_disponibilidad', 'off')         
            %}
            on
            {% else %}
            off
            {% endif %}   
        icon_template: >            
            {% if 
            is_state('binary_sensor.temperatura_balcon_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_agua_lavabo_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_puerta_entrada_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_movimiento_recibidor_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_proximidad_timbre_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_comedor_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_movimiento_comedor_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_balcon_comedor_derecho_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_balcon_comedor_izquierdo_disponibilidad', 'off') or 
            is_state('binary_sensor.movimiento_3_disponibilidad', 'off') or 
            is_state('binary_sensor.pulsador_luz_sofa_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_balcon_matrimonio_izquierdo_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_balcon_matrimonio_derecho_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_conmut_entrada_matrimonio_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_conmut_tere_matrimonio_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_conmut_antonio_matrimonio_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_matrimonio_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_congelador_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_nevera_disponibilidad', 'off') or  
            is_state('binary_sensor.mando_zigbee_disponibilidad', 'off') or  
            is_state('binary_sensor.ikea_mando_1_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_trastero_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_trastero_disponibilidad', 'off') or 
            is_state('binary_sensor.temperatura_oriol_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_leds_oriol_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_oriol_izquierdo_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_oriol_derecho_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_puerta_armario_oriol_disponibilidad', 'off') or 
            is_state('binary_sensor.ikea_mando_2_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_conmut_1_oriol_disponibilidad', 'off') or 
            is_state('binary_sensor.puls_conmut_2_oriol_disponibilidad', 'off') or  
            is_state('binary_sensor.enchufe_zb_1_disponibilidad', 'off') or 
            is_state('binary_sensor.enchufe_zb_2_tv_matrimonio_disponibilidad', 'off') or 
            is_state('binary_sensor.enchufe_zb_3_balcon_disponibilidad', 'off') or 
            is_state('binary_sensor.ikea_mando_4_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_movimiento_cocina_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_agua_cocina_disponibilidad', 'off') or 
            is_state('binary_sensor.sensor_agua_lavadero_disponibilidad', 'off')              %}
            mdi:signal-off
            {% else %}
            mdi:signal
            {% endif %}            

Los valores en action que nos devolverá son : onoffredrefreshrefresh_coloredblue,  yellowgreen brightness_step_up brightness_step_downbrightness_move_up brightness_move_downbrightness_stop recall_1color_temperature_step_upcolor_temperature_step_down

Los botones 1, 2 ,3 y recall_2 no funcionan ya que son para emparejar directamente a dispositivos , mas información aquí : https://github.com/Koenkk/zigbee2mqtt/issues/14786#issuecomment-1304827843

Empezaremos a crear automatizaciones según nuestras necesidades

####################################################################################################################
# MANDO ZIGBEE
####################################################################################################################  

####################################################################################################################
# on, off, red, refresh, refresh_colored, blue, yellow, green, brightness_step_up, brightness_step_down, 
# brightness_move_up, brightness_move_down, brightness_stop, recall_1, color_temperature_step_up, 
# color_temperature_step_down
####################################################################################################################

- id: mando zigbee comando off
  alias: mando zigbee comando off
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "off"
  condition:
  action:
    - service: light.turn_off
      data:
        entity_id: light.luz_matrimonio 
    - service: light.turn_off
      data:
        entity_id: light.luz_matrimonio_ambilight 
  mode: single  
        
- id: mando zigbee comando refresh
  alias: mando zigbee comando refresh
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "refresh"
  condition:
  action:
    - service: light.toggle
      data:
        entity_id: light.luz_matrimonio 
    - service: light.toggle
      data:
        entity_id: light.luz_matrimonio_ambilight   
  mode: single  

- id: mando zigbee comando brightness_step_up
  alias: mando zigbee comando brightness_step_up
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "brightness_step_up"
  condition:
  action:
    - data_template:
        entity_id: light.luz_matrimonio
        brightness: 255
      service: light.turn_on
  mode: single  

- id: mando zigbee comando brightness_step_down
  alias: mando zigbee comando brightness_step_down
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "brightness_step_down"
  condition:
  action:
    - data_template:
        entity_id: light.luz_matrimonio
        brightness: 1
      service: light.turn_on
  mode: single  
      
- id: mando zigbee comando color_temperature_step_up
  alias: mando zigbee comando color_temperature_step_up
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "color_temperature_step_up"
  condition:
  action:
    - data_template:
        entity_id: light.luz_matrimonio_ambilight
        brightness: 255
      service: light.turn_on
  mode: single  

- id: mando zigbee comando color_temperature_step_down
  alias: mando zigbee comando color_temperature_step_down
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "color_temperature_step_down"
  condition:
  action:
    - data_template:
        entity_id: light.luz_matrimonio_ambilight
        brightness: 1
      service: light.turn_on
  mode: single        
      
- id: mando zigbee comando recall_1
  alias: mando zigbee comando recall_1
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "recall_1"
  condition:
  action:
    - service: light.toggle
      data:
        entity_id: light.luz_matrimonio 
  mode: single  
       
- id: mando zigbee comando recall_2
  alias: mando zigbee comando recall_2
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "recall_2"
  condition:
  action:
    - service: light.toggle
      data:
        entity_id: light.luz_matrimonio_ambilight 
  mode: single       
           
- id: mando zigbee comando refresh_colored
  alias: mando zigbee comando refresh_colored
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "refresh_colored"
  condition:
  action:
    - service: light.toggle
      data:
        entity_id: light.luz_matrimonio_ambilight 
    - service: light.turn_off
      data:
        entity_id: light.luz_matrimonio 
  mode: single         
          
- id: mando zigbee comando refresh_colored
  alias: mando zigbee comando refresh_colored
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "refresh_colored"
  condition:
  action:
    - service: light.toggle
      data:
        entity_id: light.luz_matrimonio_ambilight 
    - service: light.turn_off
      data:
        entity_id: light.luz_matrimonio 
  mode: single         
      
- id: mando zigbee comando red
  alias: mando zigbee comando red
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "red"
  condition:
  action:
    - service: light.turn_on
      entity_id: light.luz_matrimonio_ambilight     
      data:
        brightness: 255
        rgb_color: [255,0,0]      
    - service: light.turn_off
      data:
        entity_id: light.luz_matrimonio 
  mode: single          
      
- id: mando zigbee comando blue
  alias: mando zigbee comando blue
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "blue"
  condition:
  action:
    - service: light.turn_on
      entity_id: light.luz_matrimonio_ambilight     
      data:
        brightness: 255
        rgb_color: [0,0,255]      
    - service: light.turn_off
      data:
        entity_id: light.luz_matrimonio 
  mode: single          

- id: mando zigbee comando green
  alias: mando zigbee comando green
  trigger:
    - platform: state
      entity_id: sensor.mando_zigbee_evento
      to: "green"
  condition:
  action:
    - service: light.turn_on
      entity_id: light.luz_matrimonio_ambilight     
      data:
        brightness: 255
        rgb_color: [63,255,0]      
    - service: light.turn_off
      data:
        entity_id: light.luz_matrimonio 
  mode: single    

Y con esto y un bizcocho ……