Fingerbot Plus e integración en Home Assistant

Hace tiempo quería comprar un juguete de estos para encender a distancia uno de los ordenadores y para poder “domotizar” o mas bien interactuar con algunos dispositivos que no permiten automatizarlos.

Al final compre uno en Aliexpres bastante bien de precio , el manual lo encontramos de forma digital en Digital User Manual

Esta seria la referencia del elemento en cuestión

La verdad es que viene pelado , un par de bases adhesivas para fijarlo y nada mas

Otra vista mas del chisme

Una vez que tenemos Zigbee2mqtt en modo permitir emparejamiento pulsaremos el boton interno durante cinco segundos para empezar el emparejamiento

Al momento lo detecta

Ya nos aparece en Zigbee2mqtt

Lo reconoce como este elemento https://www.zigbee2mqtt.io/devices/TS0001_fingerbot.html#tuya-ts0001_fingerbot

Y nos mostrara la información extendida

Definiremos el modo de funcionamiento , en este momento lo necesito en moto Click , es decir que cuando lo ponga a ON baje y vuelva a subir , pero podemos programar otros modos.

También podemos ajustar un desplazamiento tanto en la parte inferior como en la superior

Pasaremos a la configuración del dispositivo

Definimos un sensor para saber la ultima conexión del dispositivo

    - state_topic: "zigbee2mqtt/fingerbot"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: "mdi:calendar-clock"
      value_template: "{{ value_json.last_seen }}"
      name: "fingerbot_ultima_conexion"   

Creamos un sensor binario para saber si el dispositivo esta activo o no

    - state_topic: "zigbee2mqtt/fingerbot/availability"       
      availability_topic:  "zigbee2mqtt/fingerbot/availability"     
      name: fingerbot_disponibilidad      
      device_class: "connectivity"      
      payload_on: "online"
      payload_off: "offline"  

Definimos la parte de puesta y lectura del estado del fingerbot

    - name: fingerbot
      command_topic: "zigbee2mqtt/fingerbot/set"
      state_topic: "zigbee2mqtt/fingerbot"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: mdi:power-socket
      payload_on: "ON"
      payload_off: "OFF"
      value_template: "{{ value_json.state }}"

Le damos algun retoque en customize.yaml

binary_sensor.fingerbot_disponibilidad: 
  friendly_name: "Fingerbot"
switch.fingerbot: 
  friendly_name: "Fingerbot"     
  icon: mdi:gesture-tap-hold  

Y ya podemos ponerlo por el lovelace

- entity: binary_sensor.fingerbot_disponibilidad
- entity: sensor.fingerbot_ultima_conexion_minutos
- entity: switch.fingerbot
- type: divider     

Creamos un sensor para saber el tiempo transcurrido desde la ultima conexión

  - platform: template
    sensors:
      fingerbot_ultima_conexion_minutos:
        value_template: >-
          {% set x1 = as_timestamp(states('sensor.fingerbot_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 Fingerbot
        icon_template: "mdi:calendar-clock"

Creamos un sensor de bateria

    - state_topic: "zigbee2mqtt/fingerbot"
      availability_topic: "zigbee2mqtt/bridge/state"
      unit_of_measurement: "%"
      icon: "mdi:battery"
      device_class: "battery"
      value_template: "{{ value_json.battery }}"
      expire_after: 86400
      force_update: true
      name: "fingerbot_bateria"  

Y a ese sensor de bateria le asignamos un icono según el estado de carga

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

Ya podemos verlo y trastear con el

Y con fingerbot_battery_level podremos ver visualmente el estado de carga de la bateria.

Ahora ya tengo el encendido remoto del NUC que por WOL no podia hacer desde fuera de la red interna

Y con esto y un bizcocho ………….

Relé contacto seco ( dry contact ) zigbee e integración en Home Assistant

Tengo desde hace cuatro años o mas como relé de termostato en la caldera un SonOff Mini que va como un tiro , pero en el proceso de cambio de wifi a Zigbee le ha tocado al Mini , lo tenia modificado para hacerlo de contacto seco ( dry contact ) o sin tensión de la siguiente manera , cortando esas dos pistas y uniendo los otros dos puntos

Quedando de la siguiente manera

Para empezar el proceso de cambio lo primero es elegir uno que sea zigbee y directamente sea de contacto seco para no tener que cambiar nada a nivel de placa

En Aliexpres encontre este que cumple ambos requisitos (  AC DC7-32V 85-250V )

Este es el manual que trae , podemos ver que solo tiene un par de pulsadores , el de cambio de estado y el de emparejamiento

Pulsaremos el botón superior de emparejamiento durante al menos ocho segundos

Nos aparecerá en Zigbee2MQTT si lo tenemos en permitir emparejamiento

Nos aparecerá como un interruptor Tuya

Definiremos el estado inicial al darle tensión , en mi caso seria OFF al estar conectado a la caldera

Y al momento ya tenemos movimiento en MQTT Explorer

Este seria el JSON que nos enviara ante cada cambio producido

{
  "action": "on",
  "device": {
    "applicationVersion": 72,
    "dateCode": "",
    "friendlyName": "rele_zigbee",
    "hardwareVersion": 1,
    "ieeeAddr": "0xa4c1387ebe0cd9f3",
    "manufacturerID": 4417,
    "manufacturerName": "_TZ3000_g8n1n7lg",
    "model": "TS0001",
    "networkAddress": 29706,
    "powerSource": "Mains (single phase)",
    "stackVersion": 0,
    "type": "Router",
    "zclVersion": 3
  },
  "last_seen": "2025-01-26T19:38:14+01:00",
  "linkquality": 47,
  "power_on_behavior": "off",
  "state": "ON"
}

Definimos un sensor para saber la ultima conexión del dispositivo

    - state_topic: "zigbee2mqtt/rele_zigbee"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: "mdi:calendar-clock"
      value_template: "{{ value_json.last_seen }}"
      name: "rele_zigbee_ultima_conexion"        

Creamos un sensor binario para saber si el dispositivo esta activo o no

    - state_topic: "zigbee2mqtt/rele_zigbee/availability"       
      availability_topic:  "zigbee2mqtt/rele_zigbee/availability"     
      name: rele_zigbee_disponibilidad      
      device_class: "connectivity"      
      payload_on: "online"
      payload_off: "offline"  

Definimos la parte de puesta y lectura del estado del relé

    - name: rele_zigbee
      command_topic: "zigbee2mqtt/rele_zigbee/set"
      state_topic: "zigbee2mqtt/rele_zigbee"
      availability_topic: "zigbee2mqtt/bridge/state"
      icon: mdi:power-socket
      payload_on: "ON"
      payload_off: "OFF"
      value_template: "{{ value_json.state }}"

Le damos algun retoque en customize.yaml

binary_sensor.rele_zigbee_disponibilidad: 
  friendly_name: "Rele Zigbee"
switch.rele_zigbee: 
  friendly_name: "Rele Zigbee"    

Creamos un sensor para saber el tiempo transcurrido desde la ultima conexión

  - platform: template
    sensors:
      rele_zigbee_ultima_conexion_minutos:
        value_template: >-
          {% set x1 = as_timestamp(states('sensor.rele_zigbee_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 Rele Zigbee
        icon_template: "mdi:calendar-clock"

Y ya podemos ponerlo por el lovelace

- entity: binary_sensor.rele_zigbee_disponibilidad
- entity: sensor.rele_zigbee_ultima_conexion_minutos
- type: divider  

Ya podemos crear nuestras automatización , en este caso para hacer pruebas cree una que si el OpenMQTTGateway no tenia comunicación durante 30 minutos lo reiniciase.

- id: reinicio de OpenMQTTGateway si esta mas de quince minutos sin conectar 
  alias: reinicio de OpenMQTTGateway si esta mas de quince minutos sin conectar 
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: binary_sensor.ping_openmqttgateway
      # from: 'on'
      to: 'off'
      for:
        minutes: 30
  action:
    - service: notify.notif_telegram_bot
      data_template:
        message: "\U0001f648\U0001f648 Atención! el dispositivo *OpenMQTTGateway* se ha desconectado de la red interna , lo reiniciamos\U0001f648\U0001f648"            
    - service: switch.turn_off  
      entity_id: switch.rele_zigbee        
    - delay: 00:00:15
    - service: switch.turn_on
      entity_id: switch.rele_zigbee         

Y con esto y un bizcocho ………….