Abfall ist in FHEM ein Hilfsmodul mit dem bestimmte wiederkehrende Termine aus einem Kalender übernimmt.
Die Voraussetzungen
Ein Calendar Objekt muss zuvor definiert sein. Der benutzte Name muss in der Definition des Abfall-Objekts spezifiziert sein. Es können auch mehrere Calendar Objekte übergeben werden. Sonderzeichen werden nicht übernommen.
Die Installation
Mit folgendem Befehl kann das Modul direkt in den Standard FHEM Update Prozess eingeklinkt werden.
update add https://raw.githubusercontent.com/uniqueck/fhem-abfall/master/controls_fhemabfall.txt
Um es nur zu installieren, kann auch einfach nur das Command
update all https://raw.githubusercontent.com/uniqueck/fhem-abfall/master/controls_fhemabfall.txt
eingegeben werden.
Entwicklung auf GITHUB
update add https://raw.githubusercontent.com/uniqueck/fhem-abfall/develop/controls_fhemabfall.txt
bzw. update all https://raw.githubusercontent.com/uniqueck/fhem-abfall/develop/controls_fhemabfall.txt
Beispiele
define <Name> ABFALL <calendarname>,<calendarname2>,...
Erläuterung der Parameter im define: <calendarname> Name des Calendar Kalenders
Beispiel:
define AbfallGoogleCalender Calendar ical url https://......
define myABFALL ABFALL AbfallGoogleCalender
Die Werte aktualisieren sich abhängig vom notify der entsprechenden Calendar Instanz, welche im define angegeben wurde(n).
Attribut | Werteliste | Beschreibung | Default Wert |
---|---|---|---|
calendarname_ praefix | 0 und 1 | soll der Kalendername als praefix dem Reading vorangestellt werden, sollte bei nur einem Kalender auf 0 gesetzt werden | 1 – praefix wird vorangestellt, sofern mehrere Kalender angegeben wurden, ansonsten 0 – praefix wird nicht vorangestellt |
abfall_clear_ reading_regex | regex zum Entfernen von Anteilen aus dem Termin, dieser wird vor dem Entfernen von Sonderzeichen aus den Namen der Termine angewandt. | ||
disable | 0 und 1 | deaktiviert das Modul | 0 |
weekday_mapp ing | Mapping, wie die Readings der Tage angezeigt werden sollen, zum Beispiel So Mo Di Mi Do Fr Sa | Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag | |
delimiter_text_ reading | Wenn zwei Abholungen an ein und demselben Tag existieren, wird dieses Trennzeichen genutzt, um die beiden (oder mehrere) Werte zu einem Text zu verbinden. Nur relevant für die Readings next_text und now_text | und | |
delimiter_read ing | wie attribute delimiter_text_reading, allerdings nur für die readings next und now | ||
filter | regex zum Filtern der Namen der Termine aus den Kalendern, so dass nur solche genutzt werden, welche diesem Filter entsprechen |
Beispiel
Fallen die Leerungen zweier verschiedener Tonnen nicht auf den selben Tag, reicht es normalerweise, nur ein Symbol auf der Oberfläche zu platzieren und dieses dann dynamisch zu befüllen. In folgendem Beispiel werden folgende Anforderungen umgesetzt:
- Anzeige unterschiedlicher Symbole bzw. Farben für Papiertonne, Restmülltonne, Biotonne und gelbe Säcke
- Anzeige der verbleibenden Tage bis zur Leerung als „Warn“-Marker in Rot, aber nur, wenn die Leerung innerhalb der nächsten 2 Tage ist
- Blinken des Symbols, wenn die nächste Leerung morgen ansteht
- Rotation des Symbols, wenn die nächste Leerung noch am selben Tag ansteht. Nach einer bestimmten Uhrzeit (z.B. 9 Uhr morgens) soll dann auf die nächste Tonne geschaltet werden
- Anzeige des Datums bzw. von „heute“ oder „morgen“ unter dem Symbol als Label
Zur Datumsanzeige wird eine kleine Hilfsfunktion in die 99_myUtils eingebaut.
sub datumHeuteMorgen($){
my $compareDate = shift;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900; $mon += 1;
my $heute = sprintf('%02d.%02d.%04d', $mday, $mon, $year);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time+86400);
$year += 1900; $mon += 1;
my $morgen = sprintf('%02d.%02d.%04d', $mday, $mon, $year);
return "heute" if $compareDate eq $heute;
return "morgen" if $compareDate eq $morgen;
return $compareDate;
}
Diese Funktion wird in den userReadings des Abfall-Moduls verwendet. Das Abfallmodul erzeugt eine Gruppe von Readings mit dem Namen now_*, wenn die Leerung am selben Tag ansteht, bzw. genau dann, wenn der Termin im zu Grunde liegenden Kalender gerade aktiv ist. In diesem Beispiel liegt dem Kalender-Modul ein Google-Kalender zu Grunde, bei dem die Termine immer von 0 Uhr bis 9 Uhr morgens eingetragen sind. Dadurch wird erreicht, dass die Anzeige nach 9 Uhr weiterspringt, weil dann die now-Readings verschwinden.
Folgende userReadings werden zum Abfallmodul hinzugefügt, welches in diesem Beispiel „myABFALL“ genannt ist:
attr myABFALL userReadings ftui_datum {ReadingsVal("myABFALL","now_text","") eq "" ? datumHeuteMorgen(ReadingsVal("myABFALL","next_date","")) : "heute";},ftui_next {ReadingsVal("myABFALL","now_text","") eq "" ? ReadingsVal("myABFALL","next","") : ReadingsVal("myABFALL","now","")."_0";;}
Für Jede Tonne werden hier drei Zustände unterschieden und einzeln in „data-get-on“, „data-on-colors“ und „data-icons“ zugeordnet. Daher haben diese Listen jeweils 12 Einträge.
Pushbullet Beispiel
Die morgigen Leerungen per Push um 19:30 mittels Pushbullet:
define dAbfallmorgen doif ([19:30] and [myABFALL:next_days] == 1) ( msg |Morgen wird [myABFALL:next_text] abgeholt)
attr dAbfallmorgen do always
Die heutigen Leerungen per Push um 07:00 mittels Pushbullet:
define dAbfallheute doif ([07:00] and [myABFALL:now_text] ne "") ( msg |Heute wird [myABFALL:now_text] abgeholt)
attr dAbfallheute do always