NodeRED: zyklische Fenster-Offen-Meldung

NodeRED: Titelbild - Fenster-offen-Meldung

Ein offenes Fenster kann Dich über einen Messenger daran erinnern, dass es wieder geschlossen werden möchte. Eine mögliche Lösung mit NodeRED und dem Messenger Telegram möchte ich Dir in dieser Anleitung zeigen. Folgende Hauptpunkte werden dabei umgesetzt:

  • Der Eingangsparameter „Fensterstatus“ (offen/geschlossen) dient als Auslöser.
  • Nach 10 Minuten erfolgt die erste Meldung „Fenster X ist noch offen.„.
  • Nach jeweils weiteren 10 Minuten wird die Meldung „Fenster X ist immer noch offen.“ ausgegeben.
  • Wird das Fenster geschlossen, so erhältst Du die Meldung „Fenster X wurde geschlossen.„.
  • Jede Meldung löscht dabei die zuvor ausgebene Meldung, so dass der Chatverlauf nur die letzte Meldung für das Fenster enthält.

Eine erweiterte Version findest du im Beitrag „alternative zyklische Fenster-Offen-Meldung„.

Voraussetzungen

Komponenten

Bis Du eine Meldung in Deinem Messenger siehst, sind grob folgende Schritte notwendig:

  1. Konfiguration der Daten der Nachrichtenerstellung und des Telegram-Bots: hier teiltst Du mit, wie die Unterschiede der Meldungstypen aussehen und an wen die Nachricht gehen soll.
  2. Erstellung der Nachricht: diese Komponente erzeugt den Nachrichteninhalt, welcher in Deinem Messenger sichtbar ist.
  3. Versand der Nachricht: der Teil ist dafür zuständig, die Telegram-Nodes anzusprechen.
  4. Speichern der NachrichtenID: optional kann die NachrichtenID gespeichert werden. Das wird bei der zykl. Meldung dazu benutzt, die vorhergehende Nachricht zu löschen, damit der Chatverlauf nicht „zugespammt“ wird.

Konfiguration der Daten

Die Konfiguration kannst Du bequem in einem Change-Node erledigen. Der Flow benötigt folgende Parameter:

  • msg.topic: Das ist eine eindeutige Raumbezeichnung, welche zum Speichern der Anzahl der erfolgten Meldungen und der letzten NachrichtenID sowie zur Ausgabe der Meldung benutzt wird.
  • msg.type: Zur Unterscheidung zwischen Türen und Fenstern kannst Du hier eine Zeichenkette vorgeben, die in der Meldung erscheint.
  • msg.chatId: das ist die ID, an die die Nachricht geschickt wird. Gruppen enthalten ein vorangestelltes Minus-Zeichen.
NodeRED: Change-Node anpassen
NodeRED: Change-Node anpassen

Erstellen des Nachrichtentexts

Der Text, die im Messenger erscheinen soll, wird abhängig von den Eingangsparameter erstellt. Dabei wird die Markdown-Syntax für die Formatierungen Fett und Kursiv benutzt.

  1. Im ersten Function-Node wird ein Eintrag im globalen Kontext angelegt. Dieser enthält mindestens den Zähler (count), den Type (Fenster/Tür) und den Status (offen/geschlossen). Der Zähler wird beim Fensteröffnen zurück gesetzt.
  2. Der Trigger-Node hält die NodeRED-Nachricht für 10min zurück. Hier kannst Du auch einstellen, in welchem Zeitabstand du die Meldung im Messenger erhalten möchtest.
  3. Nach Ablauf der Zeit im Trigger-Node wird im angeschlossenen Function-Node der Text erstellt. Hier wird auch die Zählvariable erhöht.
  4. Im Anschluß wird noch die NachrichtenID der letzten Messenger-Nachricht in das NodeRED-Nachrichten-Objekt geschrieben, damit diese gelöscht werden kann.
  5. Wird das Fenster geschlossen, so wird der Trigger-Node gestoppt und der Text „Fenster X wurde geschlossen.“ erstellt. Gibt es jedoch keine vorhergehende Offen-Meldung, so wird die Text-Erstellung abgebrochen und auch nichts versendet.
  6. Der letzte Function-Node holt und setzt noch die die letzte NachrichtenID zum Löschen der vorhergehenden Nachricht.
NodeRED: Erstellen des Nachrichtentextes
Erstellen des Nachrichtentextes

Versand

Der Subflow für den Versand löscht zuerst die letzte Nachricht und versendet die neue. Es gibt zwar auch die Möglichkeit, die letzte Nachricht zu modifizieren, jedoch hat das mehrere Nachteile:

  • die neue Nachricht muss unterschiedlich zur alten Nachricht sein
  • der Zeitstempel der Nachricht ändert sich nicht
  • die Historie, also die Abfolge der Nachrichten ändert sich nicht, so dass gegebenenfalls neuere Ereignisse weiter hinten stehen
NodeRED: Versenden der Push-Nachricht
Versenden der Telegram-Pushnachricht

NodeRED-Flow

Im nachfolgenden Flow musst Du nach dem Einfügen noch folgende Einstellungen durchführen:

  1. Deine ChatId im Switch-Node „Chatdaten festlegen“ eintragen.


  2. Deinen ChatBot in den beiden Telegram-Nodes konfigurieren.

Erweiterungen

Diese Meldung habe ich bei mir noch mit der Ausgabe des Counters, also wie oft wurde sie schon ausgegeben, und der aktuellen Außentemperatur ergänzt. Weiterhin wird ab einer Außentemperatur X nur noch zur vollen Stunde eine Sammel-Meldung über alle geöffneten Fenster ausgegeben, damit man bei warmem Wetter länger lüften kann.

Fazit

Ich hoffe, diese Anleitung inspiriert Dich, Deine Fenster-Offen-Meldung zu erstellen. Falls Du Verbesserungsvorschläge hast, teile sie mir bitte gern in den Kommentaren oder per PN mit.

Updates

  • 10.05.2021: Hinweis auf die erweiterte Version
  • 09.03.2021: Anpassung des Subflows für die Nachrichtenerstellung – mehrere Fenster im selben Raum nutzten fälschlicherweise das selbe Kontextobjekt
  • 19.03.2021: Ersetzung des Flows mit dem github-Link
5/5 - (1 vote) // Hilf durch deine Bewertung mit, diesen Blog zu verbessern!
Abonnieren
Benachrichtige mich bei
6 Kommentare
Älteste
Neueste Beliebteste
Inline Feedbacks
Alle Kommentare