Müllabfuhr Termine in Tagen anzeigen – Iobroker VIS

Die Termine der Müllabfuhr in der Visualisierung am Tablet anzuzeigen ist eine gute Sache. Hier im Beitrag beschreibe ich meine Lösung wie ich die Anzeige nach dem Schema „Abfuhr in XX Tagen“ umgesetzt habe. Die Umsetzung erfolgt durch 2 Teilschritten

  • ICal Kalender importieren
  • Script zum Auslesen des Kalenders

Ical Kalender einlesen

Als erstes Brauchen wir Datensätze mit den Müllabfuhr- Terminen. Diese bekommt man in der Regel von der Stadt / Gemeinde Website oder vom lokalen Entsorger. Am besten als Ical (ics) Downloaden und anschließend in einen Webkalender importieren (so hat man die Daten parallel auch am Smartphone). Ich nutze dafür Gmail.

Gmail ICal freigabe einrichten

Um bei Gmail einen Kalender als Ical Freizugeben macht folgendes:

Besucht calendar.google.com. Links seht ihr alle Kalender die ihr habt. Am besten legt euch einen neuen an und importiert dort eure Mülltermine.

Fahrt ihr mit der Mouse über den entsprechenden Kalender, erscheinen 3 Punkte mit einem Submenü. Hier ein Klick auf „Einstellungen zur Freigabe“

Jetzt scrollt nach unten, dort gibt es unter dem Punkt Kalender integrieren eine ICal Url bei Privatadresse im Ical-Format. Diese kopieren.

ICal Adapter konfigurieren

Damit das Script später die Daten auch lesen kann, muss die Ical Url jetzt im Ical Adapter von IObroker eingetragen werden. Dazu müsst ihr diesen ggf. unter Adapter erst installieren. Danach geht über Instanzen in die Einstellungen des Adapters. Als Tagesvorschau habe ich 31 Tage genommen, da die Tonnen bei uns teilweise nur monatlich geleert werden und dieser Wert dann natürlich auch benötigt wird.

meine Grundkonfiguration des Ical Adapters

Danach im Tab Kalender noch den Ical Kalender hinzufügen.

Ab jetzt gibt es unter Objekte beim Datensatz „ical.0.data.html“ einen HTML String, der alle Termine enthält. Im Script zerflücken wir diesen nun und suchen nach dem nächsten Abfuhrtermin für Gelb, Bio, Schwarz und Papier.

Script zum Berechnen der Tage

Jetzt kommt der eigentliche Teil der View, die Berechnung der Tage bis zum nächsten Abfuhrtermin.

Das Script funktioniert folgendermaßen:

  • States zum Befüllen erzeugen
  • Alle Termine loopen
  • im Termin nach dem Vorkommen von Strings für Bio, Gelb, Schwarz und Papier suchen
  • jeweiliges Datum in eine Variable schreiben
  • nächsten Termin speichern als eigenen Datenpunkt
  • ein HTML String speichern für die Verwendung in VIS

createState('javascript.0.vis.muellkalender.html', 0, {
    name: 'Termine als String'
});

createState('javascript.0.vis.muellkalender.gelbe_tonne', 0, {
    name: 'Abfuhrtermin Gelb'
});
createState('javascript.0.vis.muellkalender.schwarze_tonne', 0, {
    name: 'Abfuhrtermin schwarz'
});
createState('javascript.0.vis.muellkalender.papier_tonne', 0, {
    name: 'Abfuhrtermin Papier'
});
createState('javascript.0.vis.muellkalender.bio_tonne', 0, {
    name: 'Abfuhrtermin Bio'
});



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

function updateMuellTermine() {
    console.log("Start update");
    var terminPapier = "";
    var terminGelb = "";
    var terminBio = "";
    var terminRest = "";

    var termine = getState("ical.0.data.table").val;

    for (var i in termine) {
     //   Bio
     //   Restmüll
     //   Papier
     //   Gelbe
        
        var termin = termine[i];


        // suchen nach dem nächsten Termin der "Restmüll" enthält.
        console.log("###");
        // console.log(termin.event); // Debugging für Inhalt im Event Text
        // console.log(termin.date); // Debugging Inhalt Date

        if (termin.event.includes("Restmüll") && terminRest == "") {
            terminRest = convertToEngDate(termin.date);
            console.log("Rest: "+ terminRest);
        }

        if (termin.event.includes("Bio") && terminBio == "") {
            terminBio = convertToEngDate(termin.date);
            console.log(termin.date);
            console.log("Bio: "+terminBio);
        }

        if (termin.event.includes("Papier") && terminPapier == "") {
            terminPapier = convertToEngDate(termin.date);
            console.log("Papier: "+ terminPapier);
        }

        if (termin.event.includes("Gelbe") && terminGelb == "") {
            terminGelb = convertToEngDate(termin.date);
            console.log("Gelb: "+ terminGelb);
        }
    }


var visstring = '<div class="muell schwarz"><span>Schwarz</span><h1>'+ dateDiff(terminRest) + '</h1><i>'+convertToGermanDate(terminRest)+'</i></div>'+ 
    '<div class="muell papier"><span>Papier</span><h1>'+ dateDiff(terminPapier) + '</h1><i>'+convertToGermanDate(terminPapier)+'</i></div>'+ 
    '<div class="muell gelb"><span>Gelb</span><h1>'+ dateDiff(terminGelb) + '</h1><i>'+convertToGermanDate(terminGelb)+'</i></div>'+ 
    '<div class="muell bio"><span>Bio</span><h1>'+ dateDiff(terminBio) + '</h1><i>'+convertToGermanDate(terminBio)+'</i></div>';
    
    // einzelne States setzen
    setState('javascript.0.vis.muellkalender.html', visstring);
    setState('javascript.0.vis.muellkalender.gelbe_tonne', terminGelb);
    setState('javascript.0.vis.muellkalender.bio_tonne', terminBio);
    setState('javascript.0.vis.muellkalender.schwarze_tonne', terminRest);
    setState('javascript.0.vis.muellkalender.papier_tonne', terminPapier);
    
}

// Datum aus dem Kalender zu einem englischen Date formatieren
function convertToEngDate(str) {
   str = str.replace("→", "");
   var tempdate = str.trim().split(" ");
   var date = tempdate[0].split(".");
   return date[2]+"-"+date[1]+"-"+date[0];
}
// Deutsches Datum ausgeben. 
function convertToGermanDate(str) {
   var date = str.split("-");
   return date[2]+"."+date[1]+".";
}

// Differenz in Tagen zwischen heute und dem Abfuhrtag berechnen
function dateDiff(datestring) {
    var today = new Date();
    var date = new Date(datestring);
    date.setHours(0,0,0,0);
    today.setHours(0,0,0,0);

    var seconds = (date.getTime() / 1000) - (today.getTime() / 
                   1000) ;
    var days =  seconds / 86400 | 0;

    return days;
}

updateMuellTermine();

Das Script muss je nach Kalenderformat ggf. angepasst werden. Tauchen Fragen auf, lasst gerne ein Kommentar da.

View erstellen

Die View ist eigentlich der schnellste Teil, da im Script ein fertiger HTML String erzeugt wird, den wir nur noch über das Widget „String (unescaped)“ laden müssen.

Damit das ganze noch schön aussieht, legen wir über den Tab „CSS“ noch den Style fest. Den CSS Code den ich verwendet hab findet ihr unten.

CSS Style für die Müll Abfuhranzeige

.muell {
    float: left;
    width: 80px;
    text-align: center;

}

.muell.papier {
    background-color: blue;
    color: white;
}
.muell.gelb{
    background-color: #e4d519;
    color: white;
}
.muell.schwarz {
    background-color: black;
    color: white;
}
.muell.bio {
    background-color: #8B4513;
    color: white;
}

.muell span {
    padding-top: 10px;
    font-weight: bold;
    display: block;
    color: white;
}

.muell h1 {
    margin: 0px;
    padding: 0px; 
}

Fragen? Anregungen?

Irgendwas unklar oder noch Ideen für den Ausbau? Dann hinterlasst mir gern ein Kommentar.

NICHTS VERPASSEN
Neue Beiträge direkt per Mail!

39 Meinungen zu “Müllabfuhr Termine in Tagen anzeigen – Iobroker VIS

  1. Michael sagt:

    Hallo Frickler!

    Super Dokumentation. Mit kleinen Änderungen konnte ich hiermit meine ersten Schritte im ioBroker machen …….und es funktioniert, DANKE.
    Jetzt noch einen Tag vor der Abholung den Text in rot darstellen das wäre wirklich super aber soweit bin ich noch lange nicht 🙂

    VG
    Michael

  2. Sergej sagt:

    Vielen Dank für die tolle Anleitung. Habe da leider ein Problem. Das Datum für die gelbe und schwarze Tonne nicht ausgelesen. Statt dem Datum steht In.undefined… im Vis
    Unter Objekte steht undefined-undefined-In

    Das Suchmuster „Wertstofftone stimmt mit dem Begriff aus der .ics Datei überein.

    Hast du vielleicht eine Idee was das Problem sein könnte?

    • David sagt:

      Sehr schön!
      Kannst du mir evtl die Ical Datei zukommen lassen, bzw sagen wo ich sie beziehen kann?
      Dann kann ich das nochmal prüfen in welchen Situationen das notwendig ist

  3. DasBö sagt:

    Hallo
    Super Anleitung, habe es auch soweit hinbekommen. Allerdings zeigt er mir in der Vis keine Daten an, obwohl ich in den Objekten die Daten sehe. In der Vis steht undefined.
    Ersetze Datum mit Worten Haken im ical ist raus.
    Hier mal mein Script

    createState(‚javascript.0.vis.muellkalender.html‘, 0, {
    name: ‚Termine als String‘
    });

    createState(‚javascript.0.vis.muellkalender.gelbe_tonne‘, 0, {
    name: ‚Abfuhrtermin Gelb‘
    });
    createState(‚javascript.0.vis.muellkalender.schwarze_tonne‘, 0, {
    name: ‚Abfuhrtermin schwarz‘
    });

    on({ id: „ical.0.data.table“, change: „ne“ }, function (obj) { updateMuellTermine(); });

    function updateMuellTermine() {
    console.log(„Start update“);
    var terminGelb = „“;
    var terminRest = „“;

    var termine = getState(„ical.0.data.table“).val;

    for (var i in termine) {
    // Hausmüll
    // Wertstofftonne

    var termin = termine[i];

    // suchen nach dem nächsten Termin der „Hausmüll“ enthält.
    console.log(„###“);
    // console.log(termin.event); // Debugging für Inhalt im Event Text
    // console.log(termin.date); // Debugging Inhalt Date

    if (termin.event.includes(„Hausmüll“) && terminRest == „“) {
    terminRest = convertToEngDate(termin.date);
    console.log(„Haus: „+ terminRest);
    }

    if (termin.event.includes(„Wertstofftonne“) && terminGelb == „“) {
    terminGelb = convertToEngDate(termin.date);
    console.log(„Wertstoff: „+ terminGelb);
    }
    }

    var visstring = ‚Schwarz’+ dateDiff(terminRest) + ‚‚+convertToGermanDate(terminRest)+‘‚+
    ‚Gelb’+ dateDiff(terminGelb) + ‚‚+convertToGermanDate(terminGelb)+‘‚+

    // einzelne States setzen
    setState(‚javascript.0.vis.muellkalender.html‘, visstring);
    setState(‚javascript.0.vis.muellkalender.gelbe_tonne‘, terminGelb);
    setState(‚javascript.0.vis.muellkalender.schwarze_tonne‘, terminRest);

    }

    // Datum aus dem Kalender zu einem englischen Date formatieren
    function convertToEngDate(str) {
    str = str.replace(„→“, „“);
    var tempdate = str.trim().split(“ „);
    var date = tempdate[0].split(„.“);
    return date[2]+“-„+date[1]+“-„+date[0];
    }
    // Deutsches Datum ausgeben.
    function convertToGermanDate(str) {
    var date = str.split(„-„);
    return date[2]+“.“+date[1]+“.“;
    }

    // Differenz in Tagen zwischen heute und dem Abfuhrtag berechnen
    function dateDiff(datestring) {
    var today = new Date();
    var date = new Date(datestring);
    date.setHours(0,0,0,0);
    today.setHours(0,0,0,0);

    var seconds = (date.getTime() / 1000) – (today.getTime() /
    1000) ;
    var days = seconds / 86400 | 0;

    return days;
    }

    updateMuellTermine();

    Bekomme im Script keine Fehlermeldung angezeigt

    Danke schonmal für die Hilfe

    • David sagt:

      Hi DasBö,

      Hast du für die View das Widget String unescaped! verwendet? Normaler Stirng wird nicht funktionieren.

      die Objekte sind also korrekt mit Daten befüllt? Was genau steht in „javascript.0.vis.muellkalender.html“?

      Gruß
      David

  4. DasBö sagt:

    Widget ist das richtige.
    Die Termine werden für die jeweiligen Tonnen in javascript.0.vis.muellkalender angezeigt.

    Das steht im html
    Schwarz0undefined.undefined.Gelb0undefined.undefined.

    Danke für die schnelle Antwort

  5. Frank sagt:

    Erstmal vorweg: Super Script! Danke

    Habe aber leider ein kleines Problem…. Die Anzeige der Zeit bis zur nächsten Leerung wird bei mir als negative Zahl angezeigt
    Da ich von Java leider so gut wie keine Ahnung habe kann ich mir da leider nicht selber helfen – ich denke mal das es irgenwie an der Berechnug des heutigen Datums liegt. Der Rest wird nämlich korrekt angezeigt.
    Wäre schön wenn mir da jemand helfen könnte.
    Danke

  6. Ralf sagt:

    Also dieses Script mit der zugehörigen CSS Datei ist einfach Klasse.
    Vielen Dank.
    Mit der Anleitung und ein paar Anpassungen bekommt man es auch recht fix zum Laufen.

    • David sagt:

      Danke Ralf – Was hast du für Anpassungen machen müssen ? Vielleicht kann ich da noch etwas optimieren am Script

  7. Markus sagt:

    hi,
    wo muss das skipt hin?
    wo muss die css hin?
    wo muss ich meinen kalender auswählen?

    Danke für die Mühe, aber für Amateure ist dies dennoch nichts.

    • David sagt:

      Für „Amateuere“ ist IoBroker generell leider nicht die beste Wahl. Es erfordert schon ein
      Grundverständnis von Webtechniken

  8. Artur sagt:

    Hallo David,
    ich war auf der Suche nach einem Müllkalender und da ist mir Deine Idee direkt ins Auge gefallen. Super schönes „Widget“. Als ich das in unserem Hausbildschirm einbaute war sogar meine Frau begeistert 😉 …. hatte natürlich direkt ein paar Verbesserungswünsche:
    + Die Anzeige soll nach den Abholtagen sortiert werden.
    + Die als nächstes anstehenden Tonnen sollen gesondert markiert werden.

    Ich habe das mal in deinem Code eingebaut. Bin jetzt nicht unbedingt ein javascript Programmierer, bei mir funktioniert es aber so. Könnte ggf. auch einfacher gemacht werden.

    createState(‚javascript.0.vis.muellkalender.html‘, 0, {
    name: ‚Termine als String‘
    });

    createState(‚javascript.0.vis.muellkalender.gelbe_tonne‘, 0, {
    name: ‚Abfuhrtermin Gelb‘
    });
    createState(‚javascript.0.vis.muellkalender.schwarze_tonne‘, 0, {
    name: ‚Abfuhrtermin schwarz‘
    });
    createState(‚javascript.0.vis.muellkalender.papier_tonne‘, 0, {
    name: ‚Abfuhrtermin Papier‘
    });

    createState(‚javascript.0.vis.muellkalender.bio_tonne‘, 0, {
    name: ‚Abfuhrtermin Bio‘
    });

    on({ id: „ical.0.data.table“, change: „ne“ }, function (obj) { updateMuellTermine(); });

    function updateMuellTermine() {
    console.log(„Start update“);
    var terminPapier = „“; // Abholtermin: Datum
    var PapierAllert = „“; // CSS „add-on“ wenn 1 Tag vorher
    var terminGelb = „“; // Abholtermin: Datum
    var GelbAllert = „“; // CSS „add-on“ wenn 1 Tag vorher
    var terminBio = „“; // Abholtermin: Datum
    var BioAllert = „“; // CSS „add-on“ wenn 1 Tag vorher
    var terminRest = „“; // Abholtermin: Datum
    var RestAllert = „“; // CSS „add-on“ wenn 1 Tag vorher

    var DDRest=-1; // Die restlichen Tage bis die Tonne abgeholt wird
    var DDGelb=-1; // Die restlichen Tage bis die Tonne abgeholt wird
    var DDPapier=-1; // Die restlichen Tage bis die Tonne abgeholt wird
    var DDBio=-1; // Die restlichen Tage bis die Tonne abgeholt wird

    var termine = getState(„ical.0.data.table“).val;

    for (var i in termine) {
    // Bio
    // Restmüll
    // Papier
    // Gelbe

    var termin = termine[i];

    // suchen nach dem nächsten Termin der „Restmüll“ enthält.
    console.log(„###“);
    // console.log(termin.event); // Debugging für Inhalt im Event Text
    // console.log(termin.date); // Debugging Inhalt Date

    if (termin.event.includes(„Restmüll“) && terminRest == „“) {
    terminRest = convertToEngDate(termin.date);
    DDRest = dateDiff(terminRest);
    if(DDRest<=1)
    RestAllert = " alert";
    else
    RestAllert = "";
    console.log("Rest: "+ terminRest);
    }

    if (termin.event.includes("Bio") && terminBio == "") {
    terminBio = convertToEngDate(termin.date);
    DDBio = dateDiff(terminBio);
    if(DDBio<=1)
    BioAllert = " alert";
    else
    BioAllert = "";
    console.log("Bio: "+terminBio);
    }

    if (termin.event.includes("Altpapier") && terminPapier == "") {
    terminPapier = convertToEngDate(termin.date);
    DDPapier = dateDiff(terminPapier);
    if(DDPapier<=1)
    PapierAllert = " alert";
    else
    PapierAllert = "";
    console.log("Papier: "+ terminPapier);
    }

    if (termin.event.includes("Leichtverpackung") && terminGelb == "") {
    terminGelb = convertToEngDate(termin.date);
    DDGelb = dateDiff(terminGelb);
    if(DDGelb<=1)
    GelbAllert = " alert";
    else
    GelbAllert = "";
    console.log("Gelb: "+ terminGelb);
    }
    }

    // Erst mal die html-Scripte erstellen
    var htmlBio = 'Bio’+ DDBio + ‚‚+convertToGermanDate(terminBio)+‘‚;
    var htmlGelb = ‚Gelb’+ DDGelb + ‚‚+convertToGermanDate(terminGelb)+‘‚;
    var htmlRest = ‚Schwarz’+ DDRest + ‚‚+convertToGermanDate(terminRest)+‘‚;
    var htmlPapier = ‚Papier’+ DDPapier + ‚‚+convertToGermanDate(terminPapier)+‘‚;

    // Dann ein Array mit allen Tonnen (Objekten) erstellen das man sortieren kann
    var arr = [/*{DD: DDBio, html: htmlBio},*/ {DD: DDGelb, html: htmlGelb}, {DD: DDPapier, html: htmlPapier}, {DD: DDRest, html: htmlRest}];

    // Das Arry jetzt nach dem Abholdatum sortieren: Der nächste Termin nach vorne
    arr = bubble_Sort(arr);

    // Jetzt noch den VIS-HTML-String zusammen bauen
    var visstring = arr[0].html + ‚ ‚ + arr[1].html + ‚ ‚ +arr[2].html /*+ ‚ ‚ + arr[3].html*/ ;

    // einzelne States setzen
    setState(‚javascript.0.vis.muellkalender.html‘, visstring);
    setState(‚javascript.0.vis.muellkalender.gelbe_tonne‘, terminGelb);
    setState(‚javascript.0.vis.muellkalender.bio_tonne‘, terminBio);
    setState(‚javascript.0.vis.muellkalender.schwarze_tonne‘, terminRest);
    setState(‚javascript.0.vis.muellkalender.papier_tonne‘, terminPapier);
    }

    // Datum aus dem Kalender zu einem englischen Date formatieren
    function convertToEngDate(str) {
    str = str.replace(„→“, „“);
    var tempdate = str.trim().split(“ „);
    var date = tempdate[0].split(„.“);
    return date[2]+“-„+date[1]+“-„+date[0];
    }
    // Deutsches Datum ausgeben.
    function convertToGermanDate(str) {
    var date = str.split(„-„);
    return date[2]+“.“+date[1]+“.“;
    }

    // Differenz in Tagen zwischen heute und dem Abfuhrtag berechnen
    function dateDiff(datestring) {
    var today = new Date();
    var date = new Date(datestring);
    date.setHours(0,0,0,0);
    today.setHours(0,0,0,0);

    var seconds = (date.getTime() / 1000) – (today.getTime() /
    1000) ;
    var days = seconds / 86400 | 0;

    return days;
    }

    // Die Tonnen des Abholtermins nach sortieren: Der nächste Termin nach vorne, die weit entfernteste nach hinten.
    function bubble_Sort(a)
    { var swapp;
    var n = a.length-1;
    var x=a;
    do {
    swapp = false;
    for (var i=0; i x[i+1].DD)
    { var temp = x[i];
    x[i] = x[i+1];
    x[i+1] = temp;
    swapp = true;
    }
    }
    n–;
    } while (swapp);
    return x;
    }

    updateMuellTermine();

    ****** ENDE javascript Code *********

    Zugehöriges CSS für die VIS-Darstellung
    ACHTUNG dies ist ein CSS Code, kein Javascript
    Dieser Code muss im VIS in den CSS Bereich kopiert werden:

    .muell {
    float: left;
    width: 80px;
    text-align: center;
    }

    .muell.alert{
    border-color: red;
    border-width: 3px;
    border-style: solid;
    }

    .muell.papier {
    background-color: blue;
    color: white;
    }
    .muell.gelb{
    background-color: #e4d519;
    color: white;
    }
    .muell.schwarz {
    background-color: black;
    color: white;
    }
    .muell.bio {
    background-color: #8B4513;
    color: white;
    }

    .muell span {
    padding-top: 10px;
    font-weight: bold;
    display: block;
    color: white;
    }

    .muell h1 {
    margin: 0px;
    padding: 0px;
    }

    • David sagt:

      Hi Artur, schöne Erweiterung.
      Die Anfrage der Sortierung kam von meiner Frau auch schon – der bin ich bisher aber nicht nachgegangen 😉

  9. Walter56 sagt:

    Hallo Artur
    in der Routine bubble_Sort stimmen die Klammern nicht und auch mit for (var i=0; i x[i+1].DD) kann ich nichts anfangen. Könntest du noch mal nachschauen und die Routine bubble_Sort nochmal posten!
    Danke

    • Artur Pundsack sagt:

      Hi,

      habe Deinen Post erst jetzt gesehen. Vielleicht ist beim kopieren was schief gelaufen. Meine Bubble-Sort Funktion sieht so aus:

      // Die Tonnen des Abholtermins nach sortieren: Der nächste Termin nach vorne, die weit entfernteste nach hinten.
      function bubble_Sort(a)
      { var swapp;
      var n = a.length-1;
      var x=a;
      do {
      swapp = false;
      for (var i=0; i x[i+1].DD)
      { var temp = x[i];
      x[i] = x[i+1];
      x[i+1] = temp;
      swapp = true;
      }
      }
      n–;
      } while (swapp);
      return x;
      }

  10. Frank Volle sagt:

    Hallo
    Danke für den Müllplan mit Skript.
    Leider habe ich ein Problem. Nach dem Skript sehe ich die dass die Datum Anzeige der Leerungen um einen Tag zurück versetzt wurde. Das ist bei allen Daten. z.B. Restmül aus Google 7.10 im Müllplan wird dieser mit 6.10 angezeigt.
    Was könnte das sein?
    Danke Fränki

        • Frank Volle sagt:

          Hallo David
          Ich habe festgestellt dass der Html String in
          ical.o /Data schon das Datum vom Restmüll auf den 6.10.2019 geändert hat.
          Kann es sein dass es an der Uhrzeit in meinem Kalender liegt?
          Danke Fraenki

          • Frank Volle sagt:

            Habs getestet.
            Wenn ich die LIste vom Entsorger einlese in Google wird der Termin für Restmüll mit der Uhrzeit 00:00 Uhr Und dann Der Termin mit Keltern: Restmüll im Kalender angezeigt.
            Ical.0 macht aus dem Termin den 6.10 statt den 7.10
            Wenn ich aber den Termin in Ganztägigen Termin ändere wird er korrekt mit dem Datum 7.10 angezeigt.
            Nun müsste ich noch wissen wie ich all Termine in ganztages Termine ändern kann.
            Gruß Fränki

          • David sagt:

            Hab ich auch so reproduzieren können. Dein Kalender enthält folgenden Eintrag für Keltern.
            dtstart – 2019-10-06T22:00:00Z
            dtend – 2019-10-06T23:00:00Z

            Kann es sein, dass dein Abholunternehmen den Kalender Termin am Vorabend des Abholens einträgt?

            Ein einfacher fix wäre es, dein Termin mit einem Offset zu versehen. Ersetze doch mal die folgende Methode…
            Dort wird jeder Tag um 1 addiert, also sollten die eigentlichen Termine wieder stimmen.

            function convertToEngDate(str) {
            str = str.replace("→", ""); // pfeil durch → ; ersetzen. Kein Lerrzeichen zwischen 94 und Semikolon
            var tempdate = str.trim().split(" ");
            var date = tempdate[0].split(".");
            var dateobj = new Date(date[2] + "-" + date[1] + "-" + date[0]);
            dateobj.setDate(dateobj.getDate() + 1); // offset von einem Tag hinzufügen

            return dateobj.getFullYear() + "-" + (dateobj.getMonth() + 1) + "-" + dateobj.getDate();
            // return date[2]+"-"+date[1]+"-"+date[0];
            }

  11. Marcus sagt:

    Hallo,

    wäre es auch möglich die Tage bis zur Entleerung für jede Abfallsorte in einem separatem Objekt (Datenpunkt) anstatt in dem html darzustellen?

    Gruß Marcus

  12. Kalle sagt:

    Hallo, super Anleitung. Habe einige Varinaten schon erfolgreich ausprobiert – nur auf dem Tablet werden keine Bilder angezeigt. Deine Anleitung arbeitet ja nur mit Text – habe damit teilweise Erfolg, mache aber irgend etwas falsch. Habe mit meine leihenhaften Kenntnissen das Skript auf meinen icalc anzupassen – aber nicht wirklich. Habe in der icalc Papier
    Bio
    Restabfall
    Leichtverpackung
    gefunden.
    Leider mache ich beim Einbau dieser Variablen Fehler. Wie müsste ich dein Skript ändern?

    Vielen Dank
    MfG
    KH

    • David sagt:

      Hi Kalle!

      Die Begriffe müsstet du ändern in den Abfragen relativ weit oben:

      if (termin.event.includes(„Gelbe“) && terminGelb == „“) {
      terminGelb = convertToEngDate(termin.date);
      console.log(„Gelb: „+ terminGelb);
      }

      Wobei GELBE bei dir dann Leichtverpackung heißen müsste.

      Schau dir mal den Adatper „Trashshedule“ an. Damit kannst du das auch ohne Script auslesen lassen.
      https://github.com/klein0r/ioBroker.trashschedule

      Gruß
      david

  13. Rafael Kaczmarek sagt:

    Hallo,

    vorab… das Script ist echt super.

    Ich habe nur ein kleines Problem mit der Ausgabe der „Schwarzen“ Tonne.

    Wenn ich das Script laufen lasse werden im Protokoll folgende Zeilen generiert.
    ________________________

    15:00:05.535 info javascript.0 (1167) script.js.java.Abfalltermine: Papier: 2020-01-16
    15:00:05.536 info javascript.0 (1167) script.js.java.Abfalltermine: ###
    15:00:05.537 info javascript.0 (1167) script.js.java.Abfalltermine: ###
    15:00:05.537 info javascript.0 (1167) script.js.java.Abfalltermine: 22.01.2020 06:00-16:00
    15:00:05.538 info javascript.0 (1167) script.js.java.Abfalltermine: Bio: 2020-01-22
    15:00:05.538 info javascript.0 (1167) script.js.java.Abfalltermine: ###
    15:00:05.539 info javascript.0 (1167) script.js.java.Abfalltermine: Gelb: 2020-01-24

    __________

    Offensichtlich findet das Script den Restabfall… es wird nicht als Schwarz ausgewiesen sondern als „22.01.2020 06:00-16:00“ dargestellt. Die Termine sind im Google Kalendar alle gleich generiert… auch wenn ich den Restabfall als ganztätiges Ereignis deklariere erscheint diese Meldung. Kann es daran liegen, dass der Termin für die schwarze Tonne am gleichen Tag wie für die Biotonne ist? Beides… Biotonne und Schwarz wird am 22.01. abgeholt.

    In VIS werden auch alle Tonnen sauber dargestellt nur bei Schwarz steht 0 und undefined.undefined.

    Kann mir ggf. jemand weiterhelfen?

    Vielen Dank vorab…

    Gruß,
    Rafael

  14. Burkhard sagt:

    Hallo ,
    erst mal Danke für deine tolle Anleitung..
    Ich bin jetzt auch neu in Iobroker eingestiegen und will meine Termine über Ical Visualisieren.
    Due Daten bekomme ich von Google per
    https:// und habe die Einstellungen nach deiner Anleitung vorgenommen,bekomme jedoch in den Objekten keine Daten im html Format
    Der Adapter läuft und die Datenpunkte sind für die voreingestellten 14 Tage vorhanden!
    Ich habe die neuste Adapterversion installiert.
    Was mache ich falsch.

  15. Marc sagt:

    Ich finde es sehr schön was hier auf die Beine gestellt wurde.
    Leider habe ich seit Heute ein Problem.
    Seit ich es eingebunden habe, ist heute das erste mal der Tag der Abholung. Der Biomüll wird abgeholt.
    Und seit Heute steht bei Bio die Zahl 2400980 statt der Tage wie lange es bis zur nächsten Abholung dauert. Und beim Datum steht undefined.
    Hat jemand eine Idee, was das sein könnt?

    • David sagt:

      Hi,
      wann wird denn das nächste mal abgeholt? ist der Zeitraum so groß, dass der Ical Adapter keine Daten vorliegen hat?

  16. exmerci sagt:

    Sorry, hatte ich aus den Augen verloren. Ich hatte letzte Woche den abgelaufenen Termin gelöscht. Danach war es in Ordnung. Aber jetzt taucht es Heute wieder auf. Diesmal der Gelbe Sack. Wird Heute abgeholt. Heute Nacht nach 0 Uhr wurden 0 Tage angezeigt, was ja richtig ist. Heute Morgen dann wieder diese ominöse Zahl 2400980.
    Um die Frage zu beantworten. Nein, der Zeitraum ist nicht groß. Die nächste Abholung ist in 14 Tagen.
    Und gerade wo ich das schreibe, steht das jetzt plötlich da. 14 Tage.
    Es hatte also nichts damit zu tun, das ich letztes mal den Termin gelöscht habe.
    Es sieht so aus, als ob diese Zahl dort steht, solange der eigentliche Termin ist.
    Der Termin wird durch den ICal Kalender von 9 bis 10 Uhr eingetragen. Und genau für diese eine Stunde steht dort diese Zahl 2400980.
    Hat jemand eine Idee?

  17. Krischan sagt:

    Hi zusammen,
    toller Adapter bzw. tolles Script – danke dafür! 🙂

    Wie liesse sich ein „kurzer“ Wochentag integrieren? Aktuell bekomme ich den Abfalltyp und das Datum angezeigt leider aber auch ohne die führende null. also statt 03.11. bekomme ich nur 3.11. angezeigt.
    Die verbleibenden Tage lasse ich mir nicht bzw. anderswo anzeigen.
    Mein Wunsch wäre z.B.:
    PAPIER
    Mo, 03.11.

    Dank vorab & Gruß
    Christian

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert