NEWS
Statusüberwachung
-
Hallo, ich bin neu hier im Forum und brauche mal Hilfe bei einem Node Red Flow.
Ich habe verschiedene Türüberwachungssensoren/Bewegungsmelder/Temperatursensoren zu einer Alarmanlage via Lorawan zusammen gestellt. Die läuft wunderbar.
Jetzt möchte ich, das die Statusmeldungen der einzelnen Sensoren(mehrmals täglich sollen der Status und der Batteriezustand gesendet werden), nicht als "Alarm" ans Handy geschickt werden, sondern nur wenn sich ein Sensor sich nicht meldet. Sozusagen alle Statusmeldungen werden "verschluckt" wenn der Status sich nicht ändert.
Wie kann ich das realisieren, das Node Red ein Statusbericht erwartet, wenn keiner kommt "Alarm Sensorausfall".
Hat da wer eine Idee? -
@hans857 überhaupt kein Problem. Mach ich auch so. Nimm die Trigger-Node da hast alles was Du brauchst. Schick bei Start nichts, lass die Node warten solange Du meinst, dass es noch normal ist. Dann wird bei Eingang einer Nachricht diese Periode verlängert und wenn überschritten, triggers sie einen Alarm. Alles in einer Node.
Beispiel - Einfach Sensor vor die Trigger Node klemmen, wenn der sich länger als 2 Stunden nicht meldet - wird Alarm getriggert.
Kannst natürlich auch "True"schicken oder "Sensortyp xy meldete sich nicht innerhalb von 2 Stunden". Der Fantasie sind keine Grenzen gesetzt. Hier ist es auch unwichtig, was der Sensor schickt, es ist ja nur wichtig, dass er was schickt und somit zeigt, dass er noch lebt.
Ich schick meist auch am Anfang was, damit man weiß, dass Überwachung gestartet ist.
Im Übrigen kann man die NOde auch so konfigurieren, dass sie den msg topic mit berücksichtigt, dann kann man gleich mehrere Sensoren damit überwachen. Wenn Du die msg.topic ggf. nachbearbeitest kannst dann ein Überwachungsobjekt machen.
-
@mickym
Kann mir vielleicht jemand von euch helfen?
Ich möchte mit eurem Ansatz mehrere Sensordaten überwachen. Wenn die Überwachungszeit abläuft, ohne das neue Daten kommen, möchte ich per Mail eine Fehlermeldung senden. Ich habe das Senden der Mail eingebaut. In der "Funktion" stehen die zu sendenden Texte.
Mein Problem ist nun, dass nach Ablauf der Zeit (hier im Beispiel 10 Sekunden) bei "Mail" eine Fehlermeldung "Senden fehlgeschlagen" erscheint und keine Mail gesendet wird. Wenn ich die Auslösung des Triggers über den "Injekt" mache, funktioniert das Senden der Mail nach Ablauf der Triggerzeit ohne Probleme. Das ist unabhängig davon, ob ich mit z.B. "timestamp" oder "bool = true" auslöse. Was mache ich falsch? -
@tontechniker ich melde mich mal gerade vom n unterwegs, deswegen kann ich im Moment Deinen Fehler schlecht nachvollziehen. Wir sind uns aber hoffentlich einig, dass es wohl einen Unterschied geben muss Ich kann zwar nicht hellsehen, was in der Function Node steht, aber habe spontan mal die Idee, dass die msg.topic noch unterschiedlich ist. Die wird meines Wissens als Betreff verwendet. Ansonsten mach hinter die Funktionnode eine Debug Node und schau Dir die Unterschiede im gesamten Nachrichtenobjekt wenn es geht und wenn es nicht geht an. Dann könntest Du auch mal das gesamte Objekt aus der In node in der Inject node abbilden. Fehlersuche ist nie einfach.
Ich kann auch schlecht sehen ob deine Trigger Node vorhandene Objekte weiterreicht oder selbst was schickt. Wenn beispielsweise einach die triggernode einen Text oder Boolean verschickt sollte es eigentlich keine Unterschiede geben.
-
@mickym
Vielen Dank für Deine schnelle Antwort!
Ich bin Anfänger und sehe in den geloggten Daten einen Unterschied. Kannst Du etwas damit anfangen?Der erste Block kommt bei Auslösung durch "inject" der zweite bei Auslösung durch die Temperatur.
-
@tontechniker Also ich seh da schon einige Unterschiede. Das 2. enthält ja einige Eigenschaften mehr. Wie gesagt - ich sehe zwar Deine Trigger Node nicht - aber ich würde mal keine Nachrichten durchreichen, sondern nur true weiter schicken.
Ansonsten zeig mal die Konfig Deiner trigger Node. -
@mickym
Hier die Trigger-Node:Hab wieder auf 2 Minuten umgestellt.
-
@tontechniker Also - das schaut alles gut - aus. Um das Nachrichtenobjekt neu zu erstellen.
Mach mal in Deiner function node:
msg ={}; msg.topic="Überwachung sensoren"; msg.payload="Fehler Temperatur_2"; return msg;
-
@mickym
Vielen Dank!
Es funktioniert wie gewünscht. Im Netz hatte ich in einem Erklär-Video diese Einstellung gefunden:Kannst Du mir erklären, warum diese nicht funktioniert?
-
@tontechniker
Hier kommt meine Anwendung:Nochmal vielen Dank für Deine Hilfe!
-
@tontechniker sagte in Statusüberwachung:
Kannst Du mir erklären, warum diese nicht funktioniert?
Ich kann es Dir nicht genau - sagen. Man müsste untersuchen, welche Eigenschaft der Nachrichten von Deinen ioBroker in-Nodes die mail Node gestört hat.
Ich war nur einfach zu faul das zu untersuchen.
mit msg={};
erstellst Du halt ein komplett neues Nachrichtenobjekt und somit wird alles weggeschmissen, was sonst noch von Deinen ioBroker in-nodes kam. Eigentlich müsste man das halt untersuchen, welche Parameter das war. Aber ich denke Du wolltest eine schnelle Hilfe.
-
@mickym
Danke für Deine Antwort.
Ich habe noch eine Frage: Gibt es die Möglichkeit, im Funktionsblock noch die Uhrzeit mitzugeben (wäre in der Mail bei Fehlern sehr hilfreich).
LG Hans -
@tontechniker sagte in Statusüberwachung:
@mickym
Danke für Deine Antwort.
Ich habe noch eine Frage: Gibt es die Möglichkeit, im Funktionsblock noch die Uhrzeit mitzugeben (wäre in der Mail bei Fehlern sehr hilfreich).
LG HansNatürlich ist das möglich - aber ich bin kein Freund davon, wie Du alles über eine function-Node machst. Da kannst Du gleich in JAVA Programmieren. Für Deine quick & dirty Lösung:
.... msg.topic = "Überwachung ...."; var date = new Date(); msg.topic = msg.topic + ' ' + date; ....
Ich werde Dir aber sicher nicht mehr bei Formatieren des Datums helfen. Dann machen wir wirklich einen richtigen Flow daraus und nicht so was quick & dirty. Schließlich will man so was mit schönen Mitteln eines Flows machen und nicht mit JS. Leider findet man im Netz dauernd solche Beispiele weil man sich nicht mit Node Red beschäftigen will und dann schnell ein paar Javazeilen schreibt.
Wenn Du aber wirklich wissen willst, den Datumstring gescheit formatieren willst usw. und auch Node Red lernen und beherrschen willst , dann zeige ich Dir wie man ein schönes Mail und ein vernünftigen Flow daraus macht da helfe ich Dir gerne. Dann nehmen wir auch den orginalen Timestamp von dem Datenpunkt - einverstanden?
So sträuben sich mir eigentlich alle Nackenhaare.
So geht das alles eigentlich am Sinn von NodeRed vorbei.EDIT: Ich habe das auch gerade mit meinen Datenpunkten getestet und deren Inhalte lassen sich auch direkt verschicken - also ich kann Deinen Fehler von gestern nicht nachvollziehen. Was er davor nicht mag - das gilt es halt herauszufinden und auch ob es sich bei jedem Datenpunkt so verhält.
-
@mickym
Danke für Deine Antwort!
Da ich Node Red nicht so gut kenne wie Du, war für mich die "quick and dirty" - Lösung das naheliegende.
Ich gehe aber gern mit Dir konform und bin deiner Lösung nicht abgeneigt.
Zu Edit: Kann das Problem mit dem Datenpunkt daher kommen, dass die Daten von KNX kommen? -
@tontechniker Ich kann Dir Deine Frage nicht beantworten - das würde es halt gelten herauszufinden und erfordert natürlich, dass wir etwas Zeit hier im Thread verbringen.
Ich habe mal das direkt getestet mit einer ioBroker InNode als Quelle - den Trigger nur true senden lassen - und das ging einwandfrei.
Mein Mail sah dann ganz schlicht so aus - das boolean wurde konvertiert.
Damit NodeRed einigermaßen vergleichbar ist, solltest Du in der Adapterkonfiguration diese leider standardgesetzte Funktion, dass alles in Strings konvertiert wird ausschalten. Je nachdem wieviele Flows Du hast, bedeutet es aber unter Umständen etwas Umstellungsaufwand - der aber je früher Du das machst - umso geringer ist.
EDIT:
Du kannst ja parallel einen Flow entwickeln - neben dem bestehenden - die Uhrzeit übrigens wann Du das Mail bekommen hast, hast Du ja eigentlich sowieso.
Im Prinzip müsstest Du halt nochmal die Situation von gestern wieder in dem Flow nachbilden.
-
@mickym
Wie und wo schalte ich denn die Adapterkonfiguration aus?
Zeitangabe in der Mail: Je nach Provider kommen die Mails nicht sofort durch. -
@tontechniker sagte in Statusüberwachung:
@mickym
Wie und wo schalte ich denn die Adapterkonfiguration aus?
Zeitangabe in der Mail: Je nach Provider kommen die Mails nicht sofort durch.Nun in Deiner NodeRed Instanz - diesen Haken für die Stringkonvertierung wegmachen!
Die Zeitangabe sollte eigentlich das Erstellungsdatum der Mail sein und nicht das Empfangsdatum - aber egal wir setzen das Datum.
-
@mickym
Habe Node Red Instanz umgestellt.
Ich greife jetzt die Daten nach dem Trigger und nach der Funktion ab.Das funktioniert so, die Mail wird gesendet.
Wenn ich die zwischengeschaltete Funktion herausnehme, bekomme ich wieder die Fehlermeldung "Senden fehlgeschlagen". -
@tontechniker Bitte wieder das gesamte msg.Objekt posten und auch alle Felder bitte aufklappen.
Ein grafischer Schnappschuss des Flows zur Orientierung finde ich auch immer gut.
-
@mickym
Keine Ahnung, was ich jetzt posten soll (msg.Objekt?, Felder aufklappen?)? Hier erstmal der screenshot.