Mostrar dispositivos no disponibles en Home Assistant

Mostrar dispositivos no disponibles en Home Assistant

De vez en cuando, hay dispositivos Zigbee que dejan de estar disponibles para Home Assistant y hay que volver a configurarlos, con esta sencilla tarjeta podremos ver cuales son y así no tener duda de que es lo que falla.

Una vez más hago uso de plantillas en Jinja2 para llevar a cabo una automatización en Home Assistant. Esta vez introducimos la plantilla dentro de una tarjeta del tipo “Markdown” que incluiremos en nuestro “Dashboard”.

image-01

Para conectar todos los dispositivos Zigbee que tengo en casa uso la integración zha por lo que el objetivo de este artículo es que buscar los dispositivos de esta integración que no están disponibles.

Después de unas horas de investigación he conseguido crear esta plantilla:

{% set zigbee = namespace(unavailable=[]) %}
{% for entity in integration_entities('zha') %}
  {% if states(entity) == 'unavailable' %}
    {% set nombre = device_attr(device_id(entity), 'name_by_user') %}
    {% if nombre not in zigbee.unavailable %}
      {% set zigbee.unavailable = zigbee.unavailable + [nombre] %}
    {% endif %}
  {% endif %}
{% endfor %}
{{ zigbee.unavailable }}

Son apenas diez líneas pero con mucha “miga” detrás y su funcionamiento es el siguiente:

  • Genera una matriz “zigbee.unavailable” donde almacenar una lista de deshabilitados
  • Recorre mediante un bucle “for” todos los dispositivos de la integración “zha”
  • Si el estado del dispositivo es “unavailable” sigue adelante
  • Extrae la id del dispositivo mediante “device_id(entity)”
  • Extrae el atributo del nombre asignado por el usuario a partir de la id
  • Si el nombre no está dentro de la matriz “zigbee.unavailable” sigue adelante
  • Añade el nombre como un nuevo elemento de la matriz “zigbee.unavailable”
  • Muestra los resultados

El siguiente paso lógico es obvio, Crear un sensor virtual o un ayudante a partir de la plantilla anterior y crear una automatización de forma que cuando se modifique el valor de esta enviar un mensaje como que esto ha ocurrido.

Va a resultar más práctico un ayudante o sensor virtual que, en lugar de una lista con los dispositivos que hay no disponibles, muestre el simplemente el número de ellos. Para esto he creado un ayudante a partir de la plantilla anterior en el que sólo cambia la última línea por la siguiente:

{{ zigbee.unavailable | length }}

A partir de este ayudante que he llamado “zigbee_devices_ko” no hay ninguna complicación en crear una automatización que, cuando cambie el valor de este y sea mayor que cero, nos envíe una notificación a la aplicación de Home Assistant del teléfono.

alias: Zigbee no disponibles
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.zigbee_devices_ko
condition:
  - condition: numeric_state
    entity_id: sensor.zigbee_devices_ko
    above: "0"
action:
  - service: notify.notify
    data:
      title: Dispositivos zigbee no disponibles
      message: Algo ha cambiado, revisa la lista de dispositivos no disponibles.
mode: single

Enlaces de interés