Zigbee2MQTT (niet) beschikbare apparaten detectie

Oftewel: ‘Z2M available devices‘ hetgeen in een standaard Z2M (Zigbee2MQTT) configuratie niet aan staat. Het doel ervan is een detectie-mechanisme te maken die aangeeft welk Zigbee apparaat niet meer beschikbaar is. Dat kan zijn door een batterij die leeg is of een defect aan een apparaat. Vaak kom je daar pas achter als je bijvoorbeeld een ruimte betreedt waarin een bewegings-sensor is geplaatst maar het licht gaat niet aan terwijl dat wel de bedoeling is. Je moet dan als een soort Neanderthaler het licht met een fysieke schakelaar aan doen…niet meer van deze tijd!

Availability

Als eerste dient de ‘availability’ optie in Z2M aangezet te worden. Ga daarvoor in Z2M naar Settings -> Availability en kies voor ‘Availability (Advanced)’

Active devices zijn dus de apparaten die op het lichtnet zijn aangesloten zoals lampen, slimme stekkers e.d. Deze mogen een timeout krijgen van 20 minuten. Langer dan dat en het device zal de status ‘offline‘ krijgen.

Passive devices zijn de apparaten die gevoed worden met een batterij, zoals sensors en deze zullen 1 keer per dag een status update doorgeven dus mag op 1500 minuten (25 uur). Ook hier geldt: langer dan dat en het device zal de status ‘offline‘ krijgen.

Last Seen

Ook wanneer een device voor de laatste keer is gezien door Z2M is nu een noodzakelijke optie om deze sensors te genereren en de optie wordt aangezet in de Settings -> Advanced waar gekozen wordt voor ISO_8601_local in ‘Last seen’:

Hierna zal het device-overzicht van Z2M ‘Last seen‘ en ‘Availability‘ tonen:

Enable de ‘last_seen’ sensors voor de Zigbee devices in Home Assistant.

Dit kan in de MQTT integratie gedaan worden voor elk Zigbee device maar het kan ook door Z2M ge-pushed worden door een optie aan te zetten in de configuration.yaml van Z2M. Log in met SSH op Home Assistant (bv. via de SSH Add-on) en plaats de volgende vet-gedrukte code in /homeassistant/zigbee2mqtt/configuration.yaml onder device_options:

device_options:
  legacy: false
  homeassistant:
    last_seen:
      enabled_by_default: true

Hierna Z2M opnieuw starten en de last_seen sensors worden via MQTT toegevoegd aan Home Assistant.

Alternatieve methode om de last_seen sensors allemaal tegelijk in te schakelen via Home Assistant.

Dit kan in de Instellingen -> Apparaten & Diensten, kies daar bovenaan voor ‘entiteiten‘ en zoek op ‘last_seen‘. Gebruik nu aan de linkerkant de optie Filters en filter op de statusUitgeschakeld‘. Gebruik dan het icon dat voor het zoekveld staat om hiermee alle getoonde entiteiten te selecteren (aanvinken).

Tenslotte rechtsboven met de drie puntjes kan gekozen worden voor ‘Geselecteerde inschakelen‘. Bevestig dit en de sensors zullen na 30 seconden ingeschakeld zijn.

Notificaties via Node-RED

Een inject-node zorgt ervoor dat deze flow elke dag uitgevoerd wordt om 12:00 uur.

Met een get-entities-node wordt een selectie gemaakt voor:

  • entity_id is van het domein sensor
  • het attribuut device_class is timestamp
  • het attribuut friendly_name moet ingevuld zijn
  • de status van de entiteit is unavailable

De get-entities-node splitst het resultaat dat in de msg.payload uitgestuurd wordt.

Een switch-node wordt gebruikt om de entity_id verder te filteren op de tekst ‘last_seen‘ zodat alleen deze sensors gebruikt worden in de rest van de flow.

De payload blijft intact dus daar haalt een function-node de naam van de sensor uit het ‘friendly_name‘ attribuut.

Tenslotte wordt met een service-node een bericht met het resultaat als notificatie naar HA gestuurd.

Dagelijks wordt dus gecontroleerd doordat de inject-node ingesteld staat op 12:00 uur en de melding(en) komen dan in Home Assistant als er sensors niet meer beschikbaar zijn.