smarthome-tricks.de

Abfallkalender in ioBroker integrieren

In diesem Artikel zeige ich Dir, wie Du den Abfallkalender in ioBroker integrieren kannst.

Für meine neue Visualisierung benötige ich die Termine der Abfallabholung getrennt nach Art der Abholung (Restmüll, Biomüll, Flach und Rund). In einem anderen Artikel habe ich bereits gezeigt, wie Du ein Kalender über den Adapter „ical“ integrieren kannst. Ich werde in diesem Artikel nicht mehr auf die Installation des Adapters eingehen, da ich die Installation und Konfiguration bereits im anderen Artikel beschrieben habe.

Die Termine der Abfallabholung erhält man in der Regel von den entsprechenden Entsorgungsbetrieben. Bei uns stehen die Termine als ics-Datei zur Verfügung, welche ich einfach und schnell in einen Kalender importieren kann. Im ersten Schritt habe ich also die Termine als ics-Datei heruntergeladen und in einen neuen Google Kalender importiert.

Bevor wir mit der eigentlichen Verarbeitung des Kalenders beginnen können, legen wir uns im ersten Schritt nun eigene Datenpunkte für die Termine der Abholungen an.

Den Google Kalender habe ich dann im nächsten Schritt in den Adapter „ical“ eingefügt.

Wenn wir nach dem Speichern des Adapters nun in die Objekte wechseln, sehen wir unter dem Adapter „ical.0“ die entsprechenden Termine im HTML-Format sowie als JavaScript Objekte (table). Wir können jetzt also die einzelnen Objekte genauer untersuchen und die gewünschten Informationen (Datum und Art der Abholung) ermitteln.

Im nächsten Schritt können wir nun ein Skript erstellen, mit dem wir den Datenpunkt ical.0.data.table via Skript analysieren. Dazu habe ich die Funktion UpdateAbfallTermine erstellt, welche den Inhalt des Datenpunktes liest und dann mit einer Schleife durchläuft. Die Termin sind absteigend vom heutigen Tag an sortiert. Daher können wir einfach immer das Auffinden eines Termins (z.B. Restmüll) erkennen und uns dann das Datum auslesen und im Datenpunkt speichern. Die Funktion wird über die on(…)-Subscription automatisch bei einer Änderung des Datenpunktes aufgerufen. Da der Kalender Jede 0 und 30 Minute jede Stunde aktualisiert wird, haben wir so immer die aktuellen Termine im Kalender.

Script 1
Mit diesem Script werden die Daten für die nächsten Leerungen im Format „DD.MM.YYYY“ angezeigt.

on({id: "ical.0.data.table", change: "ne"}, function (obj) { UpdateAbfallTermine(); });

function formatTwoDigits(n) {
return n < 10 ? '0' + n : n;
}

function UpdateAbfallTermine() {
    var TerminFlach = "";
    var TerminRund = "";
    var TerminBio = "";
    var TerminRest = "";
    var Termine = getState("ical.0.data.table").val;

    try { 
        var jsonObject = JSON.parse(Termine);
        
        for(var i = 0; i < jsonObject.length; i++) {
            var Termin = jsonObject[i];
            var TerminObject = new Date(Termin._date);

            var yyyy = TerminObject.getFullYear();
            var dd = TerminObject.getDate();
            var mm = TerminObject.getMonth()+1;
            dd = formatTwoDigits(dd);
            mm = formatTwoDigits(mm);
            var TimeStampString = dd+"."+mm+"."+yyyy;

            if ( Termin.event == "Restmüll" && TerminRest == "" ) {
                TerminRest = TimeStampString;
                }

                if ( Termin.event == "Biomüll" && TerminBio == "" ) {
                TerminBio = TimeStampString;
                }

                if ( Termin.event == "Flach" && TerminFlach == "" ) {
                TerminFlach = TimeStampString;
                }

                if ( Termin.event == "Rund" && TerminRund == "" ) {
                TerminRund = TimeStampString;
                }
        }
    } catch (e) {
        return;
    }

    setState('0_userdata.0.Visualisierung.Abfalltermine.Rest', TerminRest);
    setState('0_userdata.0.Visualisierung.Abfalltermine.Bio', TerminBio);
    setState('0_userdata.0.Visualisierung.Abfalltermine.Flach', TerminFlach);
    setState('0_userdata.0.Visualisierung.Abfalltermine.Rund', TerminRund);
}

UpdateAbfallTermine();

Script 2
Mit diesem Script werden die Daten für die nächsten Leerungen im Format „Heute, Morgen, In 5 Tagen“ angezeigt.

on({id: "ical.0.data.table", change: "ne"}, function (obj) { UpdateAbfallTermine(); });

function formatTwoDigits(n) {
return n < 10 ? '0' + n : n;
}

function UpdateAbfallTermine() {
    var TerminFlach = "";
    var TerminRund = "";
    var TerminBio = "";
    var TerminRest = "";
    var Termine = getState("ical.0.data.table").val;

    try { 
        var jsonObject = JSON.parse(Termine);
        
        for(var i = 0; i < jsonObject.length; i++) {
            var Termin = jsonObject[i];
            var TimeStampString = Termin.date;

            if ( Termin.event == "Restmüll" && TerminRest == "" ) {
                TerminRest = TimeStampString;
                }

                if ( Termin.event == "Biomüll" && TerminBio == "" ) {
                TerminBio = TimeStampString;
                }

                if ( Termin.event == "Flach" && TerminFlach == "" ) {
                TerminFlach = TimeStampString;
                }

                if ( Termin.event == "Rund" && TerminRund == "" ) {
                TerminRund = TimeStampString;
                }
        }
    } catch (e) {
        return;
    }

    setState('0_userdata.0.Visualisierung.Abfalltermine.Rest', TerminRest);
    setState('0_userdata.0.Visualisierung.Abfalltermine.Bio', TerminBio);
    setState('0_userdata.0.Visualisierung.Abfalltermine.Flach', TerminFlach);
    setState('0_userdata.0.Visualisierung.Abfalltermine.Rund', TerminRund);
}

UpdateAbfallTermine();

Im nächsten Speichern wir das Skript und aktivieren wir es. Dadurch werden jetzt die Datenpunkte entsprechend gefüllt. Die Abfalltermine können wir nun einfach auf unserer Visualisierung darstellen.

Ich hoffe euch gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder per E-Mail freue ich mich wie immer 🙂

Die mobile Version verlassen