Powiadomienie gdy urządzenie Zigbee/Tasmota wyleci z sieci

Ktoś na tym Forum ( ale głowy nie dam sobie uciąć ) mnie naprowadził na wątek a ja go sobie rozwinąłem.

Stworzyłem sobie przy pomocy GPT automatyzacje które mnie informują jak któreś z urządzeń Zigbee wyleci z sieci ( głównie mi chodzi o urządzenia zasilane bateryjnie).
Ja wysyłam powiadomienia na Telegram wiec trzeba sobie dostosować.

Testy przeprowadziłem i u mnie bynajmniej działa za równo na urządzeniach bateryjnych jak i zasilanych z sieci.

Wklejam , może komuś się przydadzą.

alias: Zigbee - Powiadomienie gdy urządzenie jest offline
description: Wysyła powiadomienie, gdy urządzenie Zigbee przejdzie w stan offline
triggers:
  - topic: zigbee2mqtt/+/availability
    trigger: mqtt
conditions:
  - condition: template
    value_template: "{{ trigger.payload_json.state == 'offline' }}"
actions:
  - variables:
      device_name: "{{ trigger.topic.split('/')[1] }}"
  - data:
      message: 🚫 Urządzenie *{{ device_name }}* przeszło w stan *offline*.
      parse_mode: markdown
    action: telegram_bot.send_message
mode: queued
max: 10

Druga automatyzacja to powiadomienie że urządzenie wróciło do sieci.
Zamysł był taki iż zamiast biegać do konsoli/smartfon etc dostajemy info że wcześniej urządzenia w stanie offline wróciło do sieci.

alias: Zigbee - Powiadomienie gdy urządzenie wraca online
description: Wysyła powiadomienie, gdy urządzenie Zigbee wróci do sieci
triggers:
  - topic: zigbee2mqtt/+/availability
    trigger: mqtt
conditions:
  - condition: template
    value_template: "{{ trigger.payload_json.state == 'online' }}"
actions:
  - variables:
      device_name: "{{ trigger.topic.split('/')[1] }}"
  - data:
      message: ✅ Urządzenie *{{ device_name }}* wróciło do sieci (online).
      parse_mode: markdown
    action: telegram_bot.send_message
mode: queued
max: 10

Wynik działania :

6 polubień

Dzięki za kod! Przerobiłem na powiadomienia signal i działa elegancko.

Podzielisz się konfiguracją Signal?

Jasne, Signal skonfigurowany poprzez:

alias: Zigbee - Powiadomienie gdy urządzenie wraca online
description: Wysyła powiadomienie, gdy urządzenie Zigbee wróci do sieci
triggers:
  - topic: zigbee2mqtt/+/availability
    trigger: mqtt
conditions:
  - condition: template
    value_template: "{{ trigger.payload_json.state == 'online' }}"
actions:
  - variables:
      device_name: "{{ trigger.topic.split('/')[1] }}"
  - action: notify.signal_mulat
    data:
      data:
        text_mode: styled
      message: |
        ✅ Urządzenie *{{ device_name }}* wróciło do sieci jest *online*.
mode: queued
max: 10
alias: Zigbee - Powiadomienie gdy urządzenie jest offline
description: Wysyła powiadomienie, gdy urządzenie Zigbee przejdzie w stan offline
triggers:
  - topic: zigbee2mqtt/+/availability
    trigger: mqtt
conditions:
  - condition: template
    value_template: "{{ trigger.payload_json.state == 'offline' }}"
actions:
  - variables:
      device_name: "{{ trigger.topic.split('/')[1] }}"
  - action: notify.signal_mulat
    data:
      data:
        text_mode: styled
      message: |
        🚫 Urządzenie *{{ device_name }}* przeszło w stan *offline*.
mode: queued
max: 10
1 polubienie

Hej
Czy ta automatyzacja sprawdza się także jeśli powiadomienie idzie na aplikacje w telefonie, zmieniłem notify na smartfon i mam taki błąd

Error executing script. Invalid data for call_service at pos 2: extra keys not allowed @ data[‘parse_mode’]

Zwróć uwagę bo my tu wklejamy gotowy kod a graficznie to wygląda tak :

I dlatego dostajesz błąd bo widocznie wysyłanie takiej wiadomości nie na Telegrama czy Signał a na aplikację powoduje błąd.

Ponieważ mnie to nie zadowalało ( ze względu na ograniczenia samego HA ) postanowiłem to zmodyfikować do takiej wersji :

:bar_chart: Zigbee statusy urządzeń

:chart_with_upwards_trend: Podsumowanie:
:green_circle: Online:
• Zasilane: 20
• Bateryjne: 13
• Nieznane: 4
:red_circle: Offline:
• Zasilane: 0
• Bateryjne: 0
• Nieznane: 0

:white_check_mark: Online ( Koordynator, Grupy Urządzeń ):

  1. Coordinator
  2. Lampy Beedrom
  3. Lampy Pokój
  4. Wtyczki i Oświetlenie

:warning: Nie zasilają Urządzeń:

  1. Kocia Kamera
  2. Podświetlenie Łóżko
  3. VECTRA
  4. Pralka

:radio_button: Zasilają Urządzenia:

  1. Licznik Energii Gniazdka
  2. Lodówka
  3. Licznik Energii Oświetlenie
  4. Ekspres Do Kawy
  5. Poidełko
  6. Łazienka Lewe
  7. DIETPI
  8. Roborock
  9. Mikrotik

:x: Offline:

Przełączyłem Urządzenie :

:bar_chart: Zigbee statusy urządzeń

:chart_with_upwards_trend: Podsumowanie:
:green_circle: Online:
• Zasilane: 20
• Bateryjne: 13
• Nieznane: 4
:red_circle: Offline:
• Zasilane: 0
• Bateryjne: 0
• Nieznane: 0

:white_check_mark: Online ( Koordynator, Grupy Urządzeń ):

  1. Coordinator
  2. Lampy Beedrom
  3. Lampy Pokój
  4. Wtyczki i Oświetlenie

:warning: Nie zasilają Urządzeń:

  1. Kocia Kamera
  2. Podświetlenie Łóżko
  3. VECTRA
  4. Pralka
    5. Łazienka Lewe
    6. Poidełko
    7. Ekspres Do Kawy

:radio_button: Zasilają Urządzenia:

  1. Licznik Energii Gniazdka
  2. Lodówka
  3. Licznik Energii Oświetlenie
  4. DIETPI
  5. Roborock
  6. Mikrotik

:x: Offline:

oraz stan gdy Urządzenie wyleci z Sieci:

:bar_chart: Zigbee statusy urządzeń

:chart_with_upwards_trend: Podsumowanie:
:green_circle: Online:
• Zasilane: 18
• Bateryjne: 13
• Nieznane: 4
:red_circle: Offline:
• Zasilane: 2
• Bateryjne: 0
• Nieznane: 0

:white_check_mark: Online ( Koordynator, Grupy Urządzeń ):

  1. Coordinator
  2. Lampy Beedrom
  3. Lampy Pokój
  4. Wtyczki i Oświetlenie

:warning: Nie zasilają Urządzeń:

  1. Kocia Kamera
  2. Podświetlenie Łóżko
  3. VECTRA
  4. Pralka
  5. Łazienka Lewe
  6. Poidełko

:radio_button: Zasilają Urządzenia:

  1. Licznik Energii Gniazdka
  2. Lodówka
  3. Licznik Energii Oświetlenie
  4. DIETPI
  5. Roborock
  6. Mikrotik

:x: Offline:

  1. Czujnik Powietrza (08.07.2025, 11:57:23)
  2. Ekspres Do Kawy (08.07.2025, 11:57:42)

2 dni pracy z GPT niestety bo wybrałem na początku złą metodę dojścia do celu.

Całość zrobiona w NODE-RED. Nie dorabiałem wyjścia czyli telegram/Signal etc.

flows.json (2,9 KB)

Dorobiłem dodatkowo monitoring urządzeń Tasmota.
:bar_chart: Zbiorczy status urządzeń

:electric_plug: Zigbee Routery: 20
:battery: Zigbee Bateryjne: 13

:bulb: Tasmota - online (16)

:bulb: Tasmota - offline (1):

  1. KUCHNIA

:x: Offline Zigbee (1):

  1. Ekspres Do Kawy

flows (2).json (25,0 KB)

Niestety ale tego nie umiem ( albo GPT raczej ) zwalczyć:

📊 Zbiorczy status urządzeń

🔌 Zigbee Routery: 0
🔋 Zigbee Bateryjne: 0

💡 Tasmota - online (13)

💡 Tasmota - offline (4):
1. 49FFE8
2. 4A0564
3. 4A7744
4. 4B0BBC

❌ Offline Zigbee (0):

Na razie jedny BUG jaki ma ta automatyzacja to to iż jeżeli odpalimy ją gdy już są wyłączone urządzenia Tasmota ( ilość x ) to ona je zlicza ale nie reaguje.

Witam, zaimportowałem flow do node-red, mqtt jest połączone i aktywne ale wynik to wszędzie 0 ?

W przypadku tasmoty trzeba ciut poczekać aż on sobie nazbiera nazewnictwo.
ale nie że to 15 minut.
Zigbee testowałem i zawsze działało.
Nie wiem jak Ci pomóc bo tworzyłem to na podstawie wskazówek GPT tzn ja pisałem co on ma robić a on tworzył.

Używam EMQX a nie zwykłego Brokera ( efekt uboczny pracy na tym tematem. )

Ten flow do tasmoty szuka nazwy zdefiniowanej w "MqttClientMask","MqttClient"czyli tego:
image

W konsoli Tasmoty zobacz czy masz STATUS6 generowany:

16:07:33.681 MQT: stat/tasmota_F4F2B1/STATUS6 = {"StatusMQT":{"MqttHost":"192.168.100.6","MqttPort":1883,"MqttClientMask":"MONITOR","MqttClient":"MONITOR","MqttUser":"tasmotamqtt","MqttCount":4,"MqttTLS":0,"MAX_PACKET_SIZE":1200,"KEEPALIVE":30,"SOCKET_TIMEOUT":4}}

Sprawdź jeszcze ustawienie MQTT bo Ja zdefiniowałem jako lokalny.
Zrestartuj HA ( nie przeładowanie a restart ) aby sobie odświeżył.

W Funkcji ZapiszMqttClient na samym dole masz :

//node.warn(`Zapisano mqttNames[${deviceKey.toUpperCase()}] = ${mqttClientName}`);
//node.warn("Aktualny mqttNames: " + JSON.stringify(mqttNames));

Odkomentuj je sobie i wtedy w okienku Debug zobczysz coś takiego :

"Aktualny mqttNames: {"EBFEA0":"ZERO10X 3A","F4F2B1":"MONITOR","4B0BBC":"ACER_LAPTOP","4A7744":"MONITOR_SAMSUNG","4A0564":"MCDODO","49FFE8":"LAMPKA_SOLNA","EBFE17":"LOUDSPEAKER","EB7B57":"SNAKE","EB77A4":"DESK_LAMP","EBE30D":"SERWER_HA","EB81B7":"KUCHNIA","SYPIALNIA_LISTWA":"SYPIALNIA_LISTWA","EBE62F":"ZERO10X_6A","EB7F73":"BROTHER","4A5CC8":"QNAP","09D06D":"KOMPUTER","ZERO10X 3A":"ZERO10X 3A","MONITOR":"MONITOR","ACER_LAPTOP":"ACER_LAPTOP","MONITOR_SAMSUNG":"MONITOR_SAMSUNG","MCDODO":"MCDODO","LAMPKA_SOLNA":"LAMPKA_SOLNA","DESK_LAMP":"DESK_LAMP","LOUDSPEAKER":"LOUDSPEAKER","KUCHNIA":"KUCHNIA","SNAKE":"SNAKE","SERWER_HA":"SERWER_HA","BROTHER":"BROTHER","ZERO10X_6A":"ZERO10X_6A","KOMPUTER":"KOMPUTER","QNAP":"QNAP","F491CD":"KLIMATYZACJA","KLIMATYZACJA":"KLIMATYZACJA"}"

Jak tego nie ma to znaczy że Flow nie czyta Ci komunikatów z Tasmoty.

Teraz przetestowałem i masz podgląd z DEBUG:

10.07.2025, 17:29:43node: Porównanie offlineCount
function : (warn)
"Offline count bez zmian: 4"
10.07.2025, 17:29:49node: 📄 Raport wynik
msg.payload : string[212]
string[212]
📊 Zbiorczy status urządzeń

🔌 Zigbee Routery: 20
🔋 Zigbee Bateryjne: 13

💡 Tasmota - online (13)

💡 Tasmota - offline (4):
1. LAMPKA_SOLNA
2. MCDODO
3. MONITOR_SAMSUNG
4. ACER_LAPTOP

❌ Offline Zigbee (0):

10.07.2025, 17:29:54node: Aktualizator statusów (LWT)
function : (warn)
"Zaktualizowano status EB81B7 = Offline"
10.07.2025, 17:29:54node: Porównanie offlineCount
function : (warn)
"Offline count zmienił się: 4 -> 5"
10.07.2025, 17:30:03node: 📄 Raport wynik
msg.payload : string[241]
string[241]
📊 Zbiorczy status urządzeń

🔌 Zigbee Routery: 20
🔋 Zigbee Bateryjne: 13

💡 Tasmota - online (12)

💡 Tasmota - offline (5):
1. LAMPKA_SOLNA
2. MCDODO
3. MONITOR_SAMSUNG
4. ACER_LAPTOP
5. KUCHNIA

❌ Offline Zigbee (1):
1. Ekspres Do Kawy

Włączyłem ponownie urządzenia i w Debug masz :

0.07.2025, 17:34:44node: Aktualizator statusów (LWT)
function : (warn)
"Zaktualizowano status EB81B7 = Online"
10.07.2025, 17:34:45node: Porównanie offlineCount
function : (warn)
"Offline count zmienił się: 5 -> 4"
10.07.2025, 17:34:46node: 📄 Raport wynik
msg.payload : string[212]
string[212]
📊 Zbiorczy status urządzeń

🔌 Zigbee Routery: 20
🔋 Zigbee Bateryjne: 13

💡 Tasmota - online (13)

💡 Tasmota - offline (4):
1. LAMPKA_SOLNA
2. MCDODO
3. MONITOR_SAMSUNG
4. ACER_LAPTOP

❌ Offline Zigbee (0):

10.07.2025, 17:34:51node: Aktualizator statusów (LWT)
function : (warn)
"Zaktualizowano status 4B0BBC = Online"
10.07.2025, 17:34:51node: Porównanie offlineCount
function : (warn)
"Offline count zmienił się: 4 -> 3"
10.07.2025, 17:34:51node: Aktualizator statusów (LWT)
function : (warn)
"Zaktualizowano status 49FFE8 = Online"
10.07.2025, 17:34:51node: Porównanie offlineCount
function : (warn)
"Offline count zmienił się: 3 -> 2"
10.07.2025, 17:34:52node: Aktualizator statusów (LWT)
function : (warn)
"Zaktualizowano status 4A0564 = Online"
10.07.2025, 17:34:52node: Porównanie offlineCount
function : (warn)
"Offline count zmienił się: 2 -> 1"
10.07.2025, 17:34:52node: Aktualizator statusów (LWT)
function : (warn)
"Zaktualizowano status 4A7744 = Online"
10.07.2025, 17:34:52node: Porównanie offlineCount
function : (warn)
"Offline count zmienił się: 1 -> 0"
10.07.2025, 17:34:55node: 📄 Raport wynik
msg.payload : string[157]
string[157]
📊 Zbiorczy status urządzeń

🔌 Zigbee Routery: 20
🔋 Zigbee Bateryjne: 13

💡 Tasmota - online (17)

💡 Tasmota - offline (0):
Brak

❌ Offline Zigbee (0):

Co ma piernik do wiatraka ? przecież setoptions65 ustawia sposób, przywracania urządzenia do ustawień fabrycznych poprzez szybkie włączanie i wyłączanie zasilania (np. 5 razy w krótkim czasie)…
:thinking:

Nie jestem specem od Tasmoty, ale wydaje mnie się, że Tasmota sama z siebie tego nie publikuje. Trzeba ustawić regułę aby otrzymać cykliczą publikację tego statusu, coś w ten deseń , np co 10 minut …

Rule1 ON Time#Minute|10 DO Status 6 ENDON
Rule1 1

Tak to jest jak pisze z głowy - Status 6 ale z opisu wynika że Tasmota to wysyła domyślnie

Nie jest ono wysyłane automatycznie. Tasmota domyślnie nie publikuje STATUS6 w ramach tele/, tylko po ręcznym wywołaniu.
edit. przynajmniej moja wersja Tasmota 14.2.0 (release-tasmota) by Theo Arends , teraz sprawdziłem.

Publikuje bo nie wywołuje tego Statusu - w konsoli widać po kolei Od Status 1 do 10 jak wszystko przelatuje.Ja sobie z tego z powietrza nie wziąłem a mam w domu jaka widać na screenach 17 Tasmot.

Nie neguję tego, że masz 17 tasmot jak piszesz ani, że wyssałeś sobie to z powietrza czy AI tylko napisałem, że nie do tego służy opcja 65. Koniec dyskusji z mojej strony, nie zamierzałem Ciebie obrażać, raczej podziękować bo podzieliłeś się kodem, który u Ciebie działa a który byc może ktoś chciałby u siebie wykorzystać.

Ale Ja sie wcale to a wcale nie obrażam. Po to tu jesteśmy.
Niestety nie znam NR jak niektórzy na tym forum i musze “pracować” z GPT a nie jest to przyjemne bo mam model darmowy który nie jest wolny od wad.
Chce to skończyć aby inni którym się to przyda mogli wykorzystać, w tym i Ja.

Spróbuj na Tasmocie 15.0.1

1 polubienie

Istotnie na tej wersji wysyłane są z automatu.

Nie wiem dlaczego ale powiadomienia przychodza mi tylko wtedy jak zrestartuje HA. Natomiast przy odlaczeniu badz podlaczeniu urzadzenia Zigbee w Telegramie cisza. Dodatkowo w automatyzacjach mam taki komunikat Tej automatyzacji nie można edytować z poziomu interfejsu użytkownika, ponieważ nie jest ona zapisana w pliku automations.yaml lub nie ma identyfikatora.

Późniejsza wersja jest w NODE-RED stworzona - tylko ta pierwsza od której rozpocząłem wątek jest automatyzacja zrobioną w HA.

Wkleję Ci tu te pierwszą od której zacząłem a przerobiłem tak abyś na ekranie komputera widział że działa:


alias: Zigbee - Powiadomienie gdy urządzenie jest offline
description: >-
  Wysyła powiadomienie, gdy urządzenie Zigbee jest offline przez co najmniej 5
  minut
triggers:
  - topic: zigbee2mqtt/+/availability
    trigger: mqtt
conditions:
  - condition: template
    value_template: |
      {% set payload = trigger.payload %} {% if payload == 'offline' %}
        true
      {% else %}
        {% set data = (payload | from_json(default='{}')) %}
        {{ data.state == 'offline' }}
      {% endif %}
actions:
  - variables:
      device_name: "{{ trigger.topic.split('/')[1] }}"
      topic: "{{ trigger.topic }}"
  - delay: "00:05:00"
  - wait_for_trigger:
      - topic: "{{ topic }}"
        value_template: |
          {% set val = value %} {% if val == 'online' %}
            true
          {% else %}
            {% set data = (val | from_json(default='{}')) %}
            {{ data.state == 'online' }}
          {% endif %}
        trigger: mqtt
    timeout: 0
    continue_on_timeout: true
  - condition: template
    value_template: "{{ wait.trigger is none }}"
  - action: notify.persistent_notification
    metadata: {}
    data:
      message: >-
        🚫 Urządzenie *{{ device_name }}* przeszło w stan *offline* (od co
        najmniej 5 minut).
mode: queued
max: 10

Efekt :