Z-Wave JS - Dead Nodes - Erkenen und automatisch Ping absetzen

Alles über Z-Wave. Und die unterschiedlichen Z-Wave Integrationen.


Antworten
Benutzeravatar
Osorkon
Administrator
Beiträge: 1994
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 62 times
Been thanked: 549 times
Kontaktdaten:

Z-Wave JS - Dead Nodes - Erkenen und automatisch Ping absetzen

Beitrag von Osorkon »

Seit der Z-Wave Firmware v7.21.0 für den Aeotec Z-Stick 7, habe ich leider immer wieder mit Dead Nodes zu kämpfen.
Repeater Geräte werden wirklich ohne System vereinzelt als Dead Node geführt. Mit der Folge, dass die Geräte als nicht verfügbar geführt werden und somit auch nicht bedienbar sind.
In der Regel reicht es aus, das betroffene Gerät einfach nur anzupingen und es wird wiederbelebt.

Hier mal ein paar Templates um die Dead Nodes zu erkennen, also Anzahl der Dead Nodes, einen Liste er Dead Nodes Geräte sowie einen einfache Automatisierung, die die Dead Nodes automatisch anpingt.

Template Zur Ermittlung der Anzahl (Dead Z-Wave Nodes)

Code: Alles auswählen

{{ integration_entities('zwave_js') | select('match', 'sensor\..*node_status')| select('is_state', 'dead') | list | count }}

Einfach als Helfer (Template Sensor) anlegen. :D

Liste der betroffenen Geräte:

Code: Alles auswählen

{% set list = expand(integration_entities('Z-Wave JS') )
| selectattr("entity_id", "search", "node_status")
| selectattr('state', 'in', 'dead')
| map(attribute='name')
| list %}
{% for item in list %}
{{ "- " + item | replace("Node status", "") }}
{%- endfor %}

Ermittelt wird der Name des Sensors Node Status, mit dem Status dead . Der Name Sensor ist standardmäßig folgendermaßen aufgebaut "Geräte Name Node Status"
Die Liste der ermittelten Dead Nodes wird je Listeneintrag durchgegangen und "Node Staus" wird durch "" ersetzt. und einzeln pro Zeile ausgegeben.

Dieses Template verwende ich in einer Markdown Karte in Verbindung mit der conditional Karte. D.h diese wird nur angezeigt, wenn Anzahl Dead Nodes > 0 ist.

Für die Automatisierung wird der Template Sensor "Dead Z-Wave Nodes" benötigt. dieser dient nämlich als Auslöser.

Wenn die Anzahl Dead Z-Wave Nodes für 30 s über 0 steigt.
Wird eine Benachrichtigung versendet mit der Liste der Dead Nodes
Im Anschluss wird der Service button.press ausgeführt. Mit der Liste der betroffenen Button Entitäten als Ziel.
Nach 30 s wird geprüft ob Anzahl Dead Z-Wave Nodes immer noch über 0 ist.
Und somit nicht alle Dead Nodes mit einem Ping wiederbelebt werden konnten.
Ansonsten geht die Benachrichtigung ras, dass Alle Nodes wieder Alive sind.

Code: Alles auswählen

alias: System - Z-Wave Ping Dead Nodes
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.dead_z_wave_nodes
    above: 0
    for:
      hours: 0
      minutes: 0
      seconds: 30
condition: []
action:
  - service: notify.xyz
    metadata: {}
    data:
      message: |
        Dead Node endekt:
        {% set list = expand(integration_entities('Z-Wave JS') )
        | selectattr("entity_id", "search", "node_status")
        | selectattr('state', 'in', 'dead')
        | map(attribute='name')
        | list %}
        {%- for item in list -%}
        {{ "- " + item | replace("Node status", "") }}
        {%- endfor -%}
      title: Z-WAVE
  - service: button.press
    metadata: {}
    data: {}
    target:
      entity_id: |
        {% set exclude_filter = ['sensor.z_stick_7_status'] %} {% set dead_node
        = expand(integration_entities('Z-Wave JS') ) | rejectattr("entity_id",
        "in", exclude_filter) | selectattr("entity_id", "search", "node_status")
        | selectattr('state', 'in', 'dead')  | map(attribute="object_id") |
        map('regex_replace', find='(.*)_node_status', replace='button.\\1_ping',
        ignorecase=False) | list %} 
        {{ dead_node }}
  - delay:
      hours: 0
      minutes: 0
      seconds: 30
      milliseconds: 0
  - if:
      - condition: numeric_state
        entity_id: sensor.dead_z_wave_nodes
        above: 0
    then:
      - service: notify.xyz
        metadata: {}
        data:
          message: |
            Leider gibt es immer noch diese Dead Nodes:
            {% set list = expand(integration_entities('Z-Wave JS') )
            | selectattr("entity_id", "search", "node_status")
            | selectattr('state', 'in', 'dead')
            | map(attribute='name')
            | list %}
            {%- for item in list -%}
            {{ "- " + item | replace("Node status", "") }}
            {%- endfor %}
            Ein Ping war leider nicht erfolgreich!
          title: Z-WAVE
    else:
      - service: notify.xyz
        metadata: {}
        data:
          title: Z-WAVE
          message: "Alle Nodes sind wieder Alive. "
mode: single

EDIT:

Damit die Automatisierung auch richtig funktioniert.
Bedarf es einer bestimmten Namenskonvention.
Das ist normalerweise out of the box gegeben, außer natürlich mann ändert diese manuell.

BSP:
sensor.alarm_gartenhaus_node_status
button.alarm_gartenhaus_ping
Es wird nach Sensoren gesucht mit dem String “node_status” im Namen und dem Status Dead
Dann wird “node_status” gegen “ping” ersetzt.

So wird aus sensor.alarm_gartenhaus_node_status
button.alarm_gartenhaus_ping als Entität für den Dienst button.press

Und die beiden Entitäten Node Status Sensor und der Ping Button dürfen nicht als versteckte Entitäten geführt werden.
Sondern müssen natürlich aktiviert sein.

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
homesmarthome
Beiträge: 57
Registriert: Sa 17. Jun 2023, 09:15
1
Has thanked: 12 times
Been thanked: 3 times

Re: Z-Wave JS - Dead Nodes - Erkenen und automatisch Ping absetzen

Beitrag von homesmarthome »

Vielen Dank für den Workaround!

Die Benachrichtigungen an "notify.xyz" kann ich deaktivieren, wenn ich das nicht möchte?

Kann man die Anzahl der Wiederholungen begrenzen?
Z.B.
Wenn Automatisierung am Tag bereits x Mal ausgeführt wurde, dann Automation bis nächsten Tag pausieren.
Noch schöner wäre natürlich Gerätespezifisch.
Wenn ein Gerät an einem Tag öfter als x Mal dead ist, dann Automation bis nächsten Tag pausieren.

Zur Z-Wave Firmware:
Habe aktuell noch die 7.18.1 auf dem 700-Serie-Dongle von Aeotec.
Aktuell gibt es die V7.20.2.
Laut Hinweis Aeotec müsste ich zunächst auf 7.18.8 aktualisieren, bevor 7.19.X oder neuer installiert werden.

Da mit V7.20.0 Probleme auftraten, die ich mir nicht unbedingt antun muss meine Frage:
Welche Version würdest Du aus Deiner Erfahrung installieren?

  • Es bei der 18.1 belassen?
  • Die 18.8 (müsste ich ja eh installieren, wenn ich updaten will)
  • Die letze der 19.X?
Benutzeravatar
Osorkon
Administrator
Beiträge: 1994
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 62 times
Been thanked: 549 times
Kontaktdaten:

Re: Z-Wave JS - Dead Nodes - Erkenen und automatisch Ping absetzen

Beitrag von Osorkon »

homesmarthome hat geschrieben: Di 4. Jun 2024, 10:04

Die Benachrichtigungen an "notify.xyz" kann ich deaktivieren, wenn ich das nicht möchte?

Selbstverständlich.

homesmarthome hat geschrieben: Di 4. Jun 2024, 10:04

Kann man die Anzahl der Wiederholungen begrenzen?

In meinem Bsp. oben sind keinerlei Wiederholungen beinhaltet.
Es werden die jeweilige Gerät angepingt mit dem Status Dead. 30s abgewartet. Und je nachdem oben die Anzahl der Dead Nodes = = ist, einen positive Benachrichtigung raus geschickt. Und wenn >0 dann werden die Nodes benannt die noch den Status Dead tragen.

homesmarthome hat geschrieben: Di 4. Jun 2024, 10:04

Wenn Automatisierung am Tag bereits x Mal ausgeführt wurde, dann Automation bis nächsten Tag pausieren.
Noch schöner wäre natürlich Gerätespezifisch.
Wenn ein Gerät an einem Tag öfter als x Mal dead ist, dann Automation bis nächsten Tag pausieren.

Wenn sich das Gerät nicht über einen Ping wiederbeleben lässt, dann liegt meistens ein anderes Problem vor.
Gerät defekt, ausgesteckt, et.c

Aber wie gesagt, der Ping wird nur einmal raus geschickt. Und die Automatisierung nur Ausgelöst, wen der Wert 0 überschritten wird.
Das kannst Du natürlich auch anpassen und als zusätzlichen Auslöser, Wert steigt über 1. Also wenn es einen Dauer Gast gibt und ein zweiter Node den Status dead bekommt.

homesmarthome hat geschrieben: Di 4. Jun 2024, 10:04

Da mit V7.20.0 Probleme auftraten, die ich mir nicht unbedingt antun muss meine Frage:
Welche Version würdest Du aus Deiner Erfahrung installieren?

Von welchen Problemen sprichst Du? Die Geschichte mit den Dead Nodes?

Die V7.20.2 lief bei mir am besten. Keinen Probleme mit Dead Nodes.
Angefangen hat es dann mit der 7.21.0 siehe auch hier

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
homesmarthome
Beiträge: 57
Registriert: Sa 17. Jun 2023, 09:15
1
Has thanked: 12 times
Been thanked: 3 times

Re: Z-Wave JS - Dead Nodes - Erkenen und automatisch Ping absetzen

Beitrag von homesmarthome »

Wiederholungen:

Ich habe es schon erlebt, daß Geräte erst beim zweiten Ping aufwachen und würde dann gerne nochmal einen nachsetzen.
Erreiche ich das, wenn ich in dieselbe Automatisierung auch einen zweiten Auslöser dazu setze?
Den ersten Auslöser mit 30 Sekunden und den zweiten mit 1 Minute?

Code: Alles auswählen

trigger:
  - platform: numeric_state
    entity_id:
      - sensor.dead_z_wave_nodes
    above: 0
    for:
      hours: 0
      minutes: 0
      seconds: 30
  - platform: numeric_state
    entity_id:
      - sensor.dead_z_wave_nodes
    for:
      hours: 0
      minutes: 1
      seconds: 0
    above: 0

Firmware:
Vielen Dank! Ok, dann kann ich bis V7.20.x aktualisieren, ohne mir den richtigen Ärger mit den Dead Nodes einzufangen.

Antworten