Powiadomienie o dostęności w sieci

Witam macie jakiś pomysł jak zrobić powiadomienie w home assistant jeżeli wypadnie mi z sieci jakieś urządzenie na Z2M ?

Atrybut last_seen availability

https://community.home-assistant.io/t/offline-detection-for-z2m-devices-with-last-seen/310138

2 polubienia

Czas po którym urządzenie ma być niesdostępne ustawiasz w Z2M.

Do tego Automatyzacja w Home Assistant

alias: Rozłączenie zigbee
triggers:
  - topic: zigbee2mqtt/+/availability
    trigger: mqtt
conditions:
  - condition: template
    value_template: |
      {{ trigger.payload_json.state == 'offline' }}
actions:
  - data:
      message: >
        "Uwaga! Urządzenie {{ trigger.topic |
        regex_replace('zigbee2mqtt/(.+)/availability', '\\1') }} przeszło w tryb
        offline."
      title: Zigbee2MQTT Offline
    action: notify.mobile_app_gm1913
mode: parallel


2 polubienia

Dziękuję zastosowałem automatyzację oczywiście zmieniłem urządzenie a notify , mam 2 urządzenia offline obecnie czy przy starcie skryptu już nie powinno puścić mi powiadomienia ?

Faktycznie, zmieniłem kod

Działa , bardzo dziękuję !!!

Również dziękuję za posta z którego skorzystałem:-) już nie będę musiał wchodzić w zigbee i sprawdzać czy wszystko jest podłączone

A jak uzupełnić komunikat o informację o czasie, od którego urządzenie jest offline? Pewnie trzeba odwołać jakoś się do wartości stanu atrybutu last_seen. Ale jak? Gdzie szukać opisu syntaktyki takiego odwołania?

Zapytałem mojego psa, zaznaczam że ma naklejkę AI na obroży, szczeknął dwa razy, co oznacza że kod może być prawidłowy :stuck_out_tongue_winking_eye:

message: >-
   Ostatnio widziano {{ states.sensor.downlight_z_komputer_last_seen }}
{{ states('sensor.downlight_z_komputer_last_seen', 'last_seen') }}
1 polubienie

Owszem, syntaktyka jest zgodna z notyfikacją Jinja2, ale nie uwzględnia zmiennej typu device_id bo odwołuje się wprost do stałej nazwy urządzenia. A mi chodzi o odwołanie do atrybutu last_seen urządzenia o identyfikatorze, którego nazwa jest wynikiem filtra regex stworzonego przez @ajakubek 'a. Trochę to zakręcone ale logiczne…

Wydaje się, że na obecnym etapie mojej wiedzy nie uda mi się zbudować takiego kodu, ponieważ trigger.topic nie zawiera żadnej informacji o czasie niedostępności urządzenia.

@ajakubek , mogłbyś wrzucić tu garść podpowiedzi, pliiis wery macz?

Nie widziałem tego, nigdy nie lubiłem regex :frowning: to tak jakby ktoś wyspal mi szklankę fusów na podłogę i kazał mi przeczytać co tam jest napisane.

Wydaje się, że jest tu mały haczyk:
Kod generuje notyfikacje jedynie w chwili wykrycia stanu offline ale nie powiadamia o powrocie do stanu online. Więc nie za bardzo nadaje się do tego, aby:

Ideałem byłoby więc, aby kod usuwał notyfikacje nieaktualne. Szkoda, że w obecnej postaci nie jest to wykonalne.

Urządzenia zigbee rzadko same wracają do trybu online, więc funkcja powiadomień online jest mało funkcjonalna. Z reguły trzeba wymienić baterię, lub odciąć zasilanie jeżeli to urządzenie zasilane z sieci i z jakiegoś powodu przestało działać.

Witam po dłuższej przerwie.

Powiadomienie jest wysyłane po upływie czasu, który samodzielnie ustawiasz dla urządzeń bateryjnych i sieciowych w Zigbee2MQTT. W moim przypadku czas przejścia w stan offline jest stały dla każdego urządzenia, ponieważ zależy od konfiguracji w Z2M.
Gdy dojdzie do resetu Z2M, powiadomienia są wysyłane natychmiast dla wszystkich urządzeń, które są w tym momencie niedostępne. W moim przypadku działa to w ten sposób.
U mnie last_seen jest domyślnie wyłączone. Po włączeniu tej opcji tworzona jest nowa encja dla każdego urządzenia, a nie jest to atrybut istniejącej encji. Dla dużej liczby urządzeń oznacza to dodatkowe dane przechowywane w bazie, które są wykorzystywane wyłącznie do warunku powiadomienia.
Jak wspomniał @artpc , po otrzymaniu takiego powiadomienia i tak musisz wejść do Zigbee2MQTT, włączyć tryb parowania i ponownie sparować urządzenie. Dlatego nie jestem pewien, czy warto komplikować automatyzację dodatkowymi warunkami. Nawet z działającymi powiadomieniami warto od czasu do czasu zajrzeć do Zigbee2MQTT, aby upewnić się, że wszystkie urządzenia działają poprawnie. Powiadomienia mogą zostać przeoczone, a w przypadku resetu Home Assistant automatyzacja nie powiadomi o urządzeniach, które przeszły w tryb offline w trakcie tego resetu.

Ja mam tak:

alias: Rozłączenie z Zigbee z czasem
description: ""
triggers:
  - topic: zigbee2mqtt/+/availability
    trigger: mqtt
conditions:
  - condition: template
    value_template: |
      {{ trigger.payload_json.state == 'offline' }}
  - condition: template
    value_template: |
      {{ (as_timestamp(now()) - as_timestamp(states('sensor.uptime'))) > 120 }}
actions:
  - data:
      message: >
        "Uwaga! Zigbee {{ trigger.topic |
        regex_replace('zigbee2mqtt/(.+)/availability', '\\1') }} przeszło w tryb
        offline o godzinie {{ now().strftime('%H:%M') }}."
      title: Z2M Offline
    action: notify.mobile_app_xxxxx
mode: restart

Warunek - 120 sekund po restarcie
Dodaje znacznik czasu do powiadomienia

(nazwa nie została dodana , automatyzacja była wywołana)

ScreenShot_20250223180824