Mit einem geeigneten Kalender, der die Abfall-Abholtermine enthält, kann Dich NodeRED über bevorstehende Abholungen informieren. So kannst du deine Behälter rechtzeitig bereitstellen. In diesem Artikel zeige ich Dir, wie ein Flow aussehen kann, der dir dafür eine Telegram-Nachricht sendet.
Inhalt
Voraussetzungen
- Du benötigst einen eingerichteten Telegram-Bot in NodeRED, wie beispielsweise im Artikel “Einrichten eines Telegram-Bots” beschrieben.
- Weiterhin muss deine Abfall-Entsorgungsgesellschaft einen Kalender im iCal-Format (Dateiendung ics) zur Verfügung stellen. Alternativ geht auch caldav oder ein Kalender in iCloud secure.
Kalender der Entsorgungsgesellschaft
Der von der Abfall-Entsorgungsgesellschaft zur Verfügung gestellte Kalender sollte mindestens die nächsten Termine für die Abholung enthalten. Manche Anbieter verwenden unglücklicherweise in der URL auch eine Jahreszahl, so dass man die URL jedes Jahr anpassen muss.
Umsetzung in NodeRED
Die Beschreibung benutzt den Node „node-red-contrib-ical-events“ benutzen, den Du wie gewohnt über „Palette verwalten“ installierst. Die Implementierung ist „straightforward“:
- Um die nächsten Termine zu erhalten, wird der Entsorgungskalender zyklisch abgefragt. Im Beispiel ist es täglich 04:00 Uhr. Du erhältst dann eine Liste mit Objekten, die vom angeschlossenen Functionnode ausgewertet und in den globalen Kontext geschrieben werden. Wir benutzen für unsere Zwecke nur das Summary und aus dem Countdown-Objekt die Anzahl der Tage bis zur Abholung.
- Über einen weiteren Trigger am späten Nachmittag, im Beispiel 16:00 Uhr, werden die zuvor in den globalen Kontext gespeicherten Werte untersucht. Steht ein Termin am nächsten Tag an, so wird eine Telegram-Nachricht mit dem Inhalt „Morgen wird X abgeholt.“ erstellt und versendet.
- Am Tag der Abholung wird früh um 06:00 Uhr noch eine Erinnerung abgesetzt: „Heute wird Y abgeholt.„.
Konfiguration
Die Konfiguration des Kalenders nimmst Du im Node „upcoming events“ vor. Es muss lediglich die URL, unter welcher der ics-Kalender abgerufen werden kann, und wieviele Tage im Voraus (Preview) abgefragt werden sollen, hinterlegt werden. Als Preview-Wert habe ich 14 Tage eingetragen. So erhalte ich alle nächsten Termine für meinen Standort. Für diesen Flow sind jedoch nur die Termine bis zum nächsten Tag relevant.
Die Parameter für die Benachrichtigung konfigurierst Du per Change-Node. Ein Beispiel dafür findest Du auch im Artikel „Zyklische Fenster-Offen-Meldung„. Dabei ermittelt der verwendete SubFlow „sendMessage“ die ChatId aus dem Property notificationReceiver.disposals
aus dem globalen Kontext.
NodeRED-Flow
Das komplette Beispiel kannst Du als Flow von meiner github-Seite importieren. Du musst dann nur noch die Konfiguration des Kalenders und des Messengers anpassen.
Aussicht
Der Flow kann so erweitert werden, dass eine Liste aller verfügbaren Termine erstellt wird. Damit benötigt man weniger Kalender-Abfragen und somit Traffic. Statt einmal täglich wäre bspw. wöchentlich oder monatlich denkbar. Wird für längere Zeiträume abgefragt, so könntest Du Änderungen an den Terminen nicht mitbekommen.
Update
- 22.11.2021: Anpassung der Verarbeitung: das Property
topic
existiert oft nicht mehr - 25.05.2021: Reparatur Flow auf github, Verlagerung der ChatId in den globalen Kontext
- 24.03.2021: Verlagerung des Node-RED-Flows zu github
- 10.03.2021: ist die vorherige Nachricht nicht mehr vorhanden, erschien keine neue Nachricht