Donnerstag, 5. Januar 2017

Kalender auswerten

Am Abend vor einem Termin eine Ansage bekommen? Wie das mit FHEM geht will ich hier kurz zeigen.

Beispiel: Abholungen der Abfalltonnen

Ich habe den Abfallkalender einfach in einem neuen Googlekalender angelegt. Das ist schnell gemacht, man braucht nur drei Terminserien und muss ein paar Tage im Jahr modifizieren. Der von der Abfallwirtschaft angebotene ICAL zum download geht nur hart bis zum Jahresende, hat eine falsche Zeitzone und besteht nicht aus Serien- sondern Einzelterminen.

Anlegen eines Kalenders in FHEM

Für die weitere Arbeit brauchen wir die URL vom Kalender. Diese erhalten wir beim Googlekalender unter Einstellungen/Kalender/<Kalendername>/Privatadresse (der grüne Ical Button) oder Kalenderadresse wenn der Kalender öffentlich ist.

Ein define Befehl in FHEM reicht:
define AbfallKalender Calendar ical url <URL>

Diese Gerät liest jetzt erstmal mal nur den Kalender. Man "sieht" nicht viel, maximal das diese Modul irgendetwas tut. Mit get Befehlen können wir Termine aus dem Kalender abfragen.

Auswertung des Kalenders in FHEM

Für die Ermittlung der Termine für die Abfallentsorgung benutzen wir ein weiteres Modul -> Abfall. Da es sich um ein "Entwicklungsmodul" handelt müssen wir es zuerst in FHEM verfügbar machen. Man kann es gleich installieren, ohne komplettes Update:

update all https://raw.githubusercontent.com/uniqueck/fhem-abfall/master/controls_fhemabfall.txt
Damit es in Zukunft per Update kommt:
update add https://raw.githubusercontent.com/uniqueck/fhem-abfall/master/controls_fhemabfall.txt
Jetzt läuft das einzelne Update und wir müssen es abschließen:
save 
shutdown restart

Mit der folgenden Definiton in FHEM bekommen die heutigen, morgigen und nächsten Termine in entsprechenden Readings.
define Abfall ABFALL AbfallKalender

Hinweis Stand August 2017 
Sollte es mit der aktuelle Version des Moduls Probleme geben, diese hier verwenden.

Erinnerung per Ansage

Eine freundliche Ansage am Abend vor dem Termin und am Morgen des Termins weist uns auf den Abholtermin hin.
define di_AbholungAnsage1 DOIF ([?17:00 - 20:00] and [PIR1:"motion: on"] and [Abfall:next_tage] == 1) ( set MyTTS volume 30, set MyTTS tts Morgen wird [Abfall:next_text] abgeholt)
define di_AbholungAnsage2 DOIF ([?06:00 - 10:00] and [PIR1:"motion: on"] and [Abfall:now_text] ne "" and [Abfall:now_text] ne "0") ( set MyTTS volume 30, set MyTTS tts Heute wird [Abfall:now_text] abgeholt)
attr di_AbholungAnsage.* cmdpause 1800
Hinweis: Derzeit gibt es noch einen temporären Zustand wo nur now_text mit einer 0 gefüllt wird. Deswegen habe ich diesen Zustand extra abgefragt.

Feintuning

Das Standard Intervall zur Abfrage des Kalenders beträgt 1 h (3600 sec). Für diese Anwendung reicht eigentlich ein größeres Intervall (z.B. 4 h=14400). Mit einem zusätzlichen Parameter hinter der URL kann man dies verändern. Einfach die DEF editieren.
Die Ansage wird alle halbe Stunde in dem Zeitraum wiederholt. Das kann man beliebig anpassen.

Keine Kommentare:

Kommentar veröffentlichen