Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Anwesenheit, Präsenz über NodeRed und Ping
#10
Hallo Strabbit,

danke für dein Log, aber das sieht ja sehr ernüchternd aus.
Da hätte ich mir mehr erwartet :-( schade

Aber so ist es nun mal, das geht aber mit Sicherheit noch besser.
Hab den Flow nun etwas erweitert.

Beim Versenden des UDP-Pakets werden nun 2 Pakete gesendet.
1x sofort
1x nach der Hälfte der eingestellten Verzögerung

Ich erhoffe mir dadurch, die Wachzeiten des WLAN-Interfaces besser zu erwischen, könnte mir vorstellen, dass bei 300ms das Interface bereits wieder im PowerSaveMode ist.

Wäre jetzt mal mein nächster Versuch, die Lösung mit TCP/IP kann ich ja auch noch mal bauen und erstmal antesten, mein Favorit wäre aber diese Lösung mit UDP.

Ausserdem habe ich eine Art Threshold mit eingebaut, d.h. das globale "presence"-Objekt hat jetzt 2 Status-Angaben:

state: das Ergebnis des letzten Tests
lastChanged: der Zeitstempel der letzten Statusänderung in state
lastStored: der Zeitstempel des letzten Speicherns bzw. Prüfens
presence: die bereinigte Anwesenheit (nach eingestellter Threshold-Zeit)

Der neue Wert "presence" wird folgendermaßen ermittelt:

War der Test erfolgreich => dann presence = true (es kann keinen versehentlichen Erfolg geben, also muss das Gerät anwesend sein)
War der Test nicht erfolgreich und das schon seit eingestellter Threshold, dann presence = false

Für meinen Anwendungszweck reicht das aus, da ich ja nicht sofort bei Abwesenheit eine Aktion starten möchte, sondern erst nach ca. 30 Minuten.
Könnte ja nur unterwegs zum Briefkasten sein, kurz einen Ping verloren haben, gerade für ein paar Minuten Frühstück holen sein oder was auch immer...

Nun zum Flow:

Im Function-Node "Config - alle Geraete" sind die zu pingenden Geräte hinterlegt. Ich habe hier auch noch mein TV-Gerät mit aufgenommen, da die LG-Geräte nur eine WLAN-Verbindung haben, wenn Sie an sind.

Folgende Konfigurationskeys:

name = Der Klartextname des Geräts
type = die Kategorie des Geräts
host = der zu pingende Host als DNS-Name oder IP
udp_packet = true|false (soll ein UDP-Paket verschickt werden?)
udp_port = zu welchem Zielport soll das UDP-Paket geschickt werden? ich verwende einfach 1234 -> die Daten werden eh nicht verarbeitet
ping_delay = Zeit in Millisekunden bis zum Ping nach dem UDP-Paket
threshold = Zeit in Minuten für das Festlegen des presence-Wertes => also nach wie vielen Minuten wird in presence = abwesend gesetzt


Das ganze Ergebnis wird dann im globalen Kontext abgespeichert, in einem Objekt "presence" und gegliedert nach den Typen und Namen der Geräte.
Mit dem aktuellen Status (state), wobei true=anwesend, false=abwesend
dem Zeitstempel des letzten Tests (lastStored)
dem Zeitstempel des letzten Statuswechsels (lastChanged)
und der bereinigten Anwesenheit (presence) nach eingestellter Threshold-Zeit.


Angehängte Dateien Thumbnail(s)
       

.jpg   NR7.JPG (Größe: 28,28 KB / Downloads: 97)
.txt   Flow.txt (Größe: 15,72 KB / Downloads: 5)


Nachrichten in diesem Thema
RE: Anwesenheit, Präsenz über NodeRed und Ping - von Bluescreen - 18.10.2021, 10:51

Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Zisternenfüllstand über Nodered an MyGekko Matthias 12 12.267 01.05.2023, 19:55
Letzter Beitrag: Matthias

Gehe zu:


Benutzer, die gerade dieses Thema anschauen:
1 Gast/Gäste