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
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
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
message: >-
Ostatnio widziano {{ states.sensor.downlight_z_komputer_last_seen }}
{{ states('sensor.downlight_z_komputer_last_seen', 'last_seen') }}
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 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)