Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Müllabfuhr Skript funktioniert nicht mit allen Terminen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    917

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Müllabfuhr Skript funktioniert nicht mit allen Terminen

Geplant Angeheftet Gesperrt Verschoben JavaScript
11 Beiträge 3 Kommentatoren 593 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M M-A-X

    Hi,
    ich habe seit über einem Jahr ein "Müllskript" (aus dem Internet), das jetzt plötzlich nicht mehr richtig funktioniert.
    Die Abfuhrtermine von Altpapier und Gelber Sack habe ich vor 2 Wochen in meinen Müllkalender importiert (ics Datei). Diese werden korrekt berechnet durch das Skript.
    Die Termine von Restmüll (und Biotonne) kommen von einem 2 wöchentlichen manuellen Termin. Diese Termine haben zum Jahreswechsel aufgehört zu funktionieren. Ich bekomme einen leeren Wert bei den Objekten angezeigt.
    Was mich wundert, ist, dass die 2 wöchentlichen Termine sich ja nie geändert haben. Ich habe diese Termine vor über einem Jahr erstellt. Selbst ein Löschen dieses Termins mit anschließendem neuen Anlegen bringt nichts. Auch einen Einzeltermin mit dem Namen "Rest" oder "Restmüll" bringt nichts...
    Wenn ich in Zeile 45 das Wort "Rest" durch "Tanne" ersetze, berechnet er korrekt den Termin, wann die Tannenbäume geholt werden (dieser Termin kommt auch von der ICS Datei). Es scheint also Probleme mit manuellen Terminen zu geben...
    Hat einer noch ne Idee?

    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("Rest") && 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("Altpapier") && 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>Grau</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();
    
    crunchipC Abwesend
    crunchipC Abwesend
    crunchip
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #2

    @M-A-X im Forum(leider grad nicht den link zur Hand) hatte ich die Tage was gelesen, das es Probleme mit Serien-Termine im ical gibt, bei manueller Änderung, vllt hängt es damit zusammen.

    umgestiegen von Proxmox auf Unraid

    M 1 Antwort Letzte Antwort
    0
    • crunchipC crunchip

      @M-A-X im Forum(leider grad nicht den link zur Hand) hatte ich die Tage was gelesen, das es Probleme mit Serien-Termine im ical gibt, bei manueller Änderung, vllt hängt es damit zusammen.

      M Offline
      M Offline
      M-A-X
      schrieb am zuletzt editiert von M-A-X
      #3

      @crunchip mist. Das scheint (seit kurzem) mein Problem zu sein. Ich finde den Post aber auch nicht :)
      Edit: meinst du den Beitrag?
      Seit ical 1.7.5 funktioniert Kalender nicht mehr

      M crunchipC 2 Antworten Letzte Antwort
      0
      • M M-A-X

        @crunchip mist. Das scheint (seit kurzem) mein Problem zu sein. Ich finde den Post aber auch nicht :)
        Edit: meinst du den Beitrag?
        Seit ical 1.7.5 funktioniert Kalender nicht mehr

        M Offline
        M Offline
        M-A-X
        schrieb am zuletzt editiert von
        #4

        @crunchip Danke für den Tipp.
        Und an alle mit dem selben Problem:

        Im anderen Beitrag (Link im Post hierdrüber) wird darauf hingewiesen, dass man beim Ical Adapter (soweit ich es verstehe) "TEST" durch 'TEST' ersetzen muss. Dies brachte auch bei mir den Erfolg.
        Mein Skript ist jetzt folgendes und funktioniert soweit:

        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('Rest') && 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('Altpapier') && 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>Grau</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();
        
        1 Antwort Letzte Antwort
        0
        • M M-A-X

          @crunchip mist. Das scheint (seit kurzem) mein Problem zu sein. Ich finde den Post aber auch nicht :)
          Edit: meinst du den Beitrag?
          Seit ical 1.7.5 funktioniert Kalender nicht mehr

          crunchipC Abwesend
          crunchipC Abwesend
          crunchip
          Forum Testing Most Active
          schrieb am zuletzt editiert von
          #5

          @M-A-X nein, meinte einen anderen, aber passt ja, wenn es nun wieder funktioniert

          umgestiegen von Proxmox auf Unraid

          HomoranH 1 Antwort Letzte Antwort
          0
          • crunchipC crunchip

            @M-A-X nein, meinte einen anderen, aber passt ja, wenn es nun wieder funktioniert

            HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von
            #6

            @crunchip in dem anderen Thread ging es um manuell geänderte Serien.
            Das klappt mit ical nicht

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            crunchipC M 2 Antworten Letzte Antwort
            0
            • HomoranH Homoran

              @crunchip in dem anderen Thread ging es um manuell geänderte Serien.
              Das klappt mit ical nicht

              crunchipC Abwesend
              crunchipC Abwesend
              crunchip
              Forum Testing Most Active
              schrieb am zuletzt editiert von crunchip
              #7

              @Homoran ja genau das/den Thread meinte ich.
              ich bezog mich ja auf die Aussage

              @M-A-X sagte in Müllabfuhr Skript funktioniert nicht mit allen Terminen:

              Die Termine von Restmüll (und Biotonne) kommen von einem 2 wöchentlichen manuellen Termin. Diese Termine haben zum Jahreswechsel aufgehört zu funktionieren. Ich bekomme einen leeren Wert bei den Objekten angezeigt.
              Was mich wundert, ist, dass die 2 wöchentlichen Termine sich ja nie geändert haben. Ich habe diese Termine vor über einem Jahr erstellt. Selbst ein Löschen dieses Termins mit anschließendem neuen Anlegen bringt nichts

              umgestiegen von Proxmox auf Unraid

              1 Antwort Letzte Antwort
              0
              • HomoranH Homoran

                @crunchip in dem anderen Thread ging es um manuell geänderte Serien.
                Das klappt mit ical nicht

                M Offline
                M Offline
                M-A-X
                schrieb am zuletzt editiert von
                #8

                @Homoran hmm. Aber genau das hab ich doch gemacht? Manuell einen Serientermin im Google Kalender angelegt. Und das scheint (jetzt) zu klappen. Zumindest zeigt er mir den richtigen Termin an.

                crunchipC HomoranH 2 Antworten Letzte Antwort
                0
                • M M-A-X

                  @Homoran hmm. Aber genau das hab ich doch gemacht? Manuell einen Serientermin im Google Kalender angelegt. Und das scheint (jetzt) zu klappen. Zumindest zeigt er mir den richtigen Termin an.

                  crunchipC Abwesend
                  crunchipC Abwesend
                  crunchip
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von
                  #9

                  @M-A-X geht darum, einen bereits hinterlegten Serientermin "nachträglich" zu ändern, geht nicht, wenn ich mich recht erinnere, hatte das aber auch nur überflogen

                  umgestiegen von Proxmox auf Unraid

                  1 Antwort Letzte Antwort
                  1
                  • M M-A-X

                    @Homoran hmm. Aber genau das hab ich doch gemacht? Manuell einen Serientermin im Google Kalender angelegt. Und das scheint (jetzt) zu klappen. Zumindest zeigt er mir den richtigen Termin an.

                    HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    Global Moderator Administrators
                    schrieb am zuletzt editiert von
                    #10

                    @M-A-X sagte in Müllabfuhr Skript funktioniert nicht mit allen Terminen:

                    Manuell einen Serientermin im Google Kalender angelegt

                    das klappt ja auch.
                    Wie soll der denn sonst angelegt werden.

                    Aber du kannst bei google auch einzelne Termine in der Serie löschen!
                    Das bekommt dann ical nicht mit

                    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    M 1 Antwort Letzte Antwort
                    1
                    • HomoranH Homoran

                      @M-A-X sagte in Müllabfuhr Skript funktioniert nicht mit allen Terminen:

                      Manuell einen Serientermin im Google Kalender angelegt

                      das klappt ja auch.
                      Wie soll der denn sonst angelegt werden.

                      Aber du kannst bei google auch einzelne Termine in der Serie löschen!
                      Das bekommt dann ical nicht mit

                      M Offline
                      M Offline
                      M-A-X
                      schrieb am zuletzt editiert von M-A-X
                      #11

                      Hey,
                      es hat leider immer noch nicht richtig funktioniert.
                      Nachdem ich versucht habe, das skript selber zu verstehen (ich habe es ja aus dem Netz kopiert), habe ich den "Fehler" gefunden. Weiß allerdings nicht, warum das nicht so klappt.
                      Folgender Absatz im Skript wandelt scheinbar das Datum aus ical in ein Datum a la
                      "JAHR-MONAT-TAG" um. hierbei hat mein skript Probleme, wenn ich in Google einen Termin als "ganztägig" hinterlege.

                      // 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]+'.';
                      }
                      

                      Ich habe im Googlekalender den Termin Restmüll jetzt einfach statt ganztags auf 8:00 Uhr morgens gelegt und es klappt. Vorher hat mir dieser Teil des Skripts statt "JAHR-MONAT-TAG" folgendes ausgegeben "undefined-undefined-→"
                      hierbei steht das letzte für einen Pfeil nach rechts (Unicode), der aber eigentlich durch Zeile 3 verschwinden sollte?
                      Jemand eine Idee, wie ich den Absatz oben ändern kann, damit es auch mit ganztägigen Terminen klappt :)?

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      451

                      Online

                      32.6k

                      Benutzer

                      82.2k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe