Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Müllabfuhr Skript funktioniert nicht mit allen Terminen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Müllabfuhr Skript funktioniert nicht mit allen Terminen

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      M-A-X last edited by 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();
      
      crunchip 1 Reply Last reply Reply Quote 0
      • crunchip
        crunchip Forum Testing Most Active @M-A-X last edited by

        @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 1 Reply Last reply Reply Quote 0
        • M
          M-A-X @crunchip last edited by 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 crunchip 2 Replies Last reply Reply Quote 0
          • M
            M-A-X @M-A-X last edited by

            @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 Reply Last reply Reply Quote 0
            • crunchip
              crunchip Forum Testing Most Active @M-A-X last edited by

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

              Homoran 1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators @crunchip last edited by

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

                crunchip M 2 Replies Last reply Reply Quote 0
                • crunchip
                  crunchip Forum Testing Most Active @Homoran last edited by crunchip

                  @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

                  1 Reply Last reply Reply Quote 0
                  • M
                    M-A-X @Homoran last edited by

                    @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.

                    crunchip Homoran 2 Replies Last reply Reply Quote 0
                    • crunchip
                      crunchip Forum Testing Most Active @M-A-X last edited by

                      @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

                      1 Reply Last reply Reply Quote 1
                      • Homoran
                        Homoran Global Moderator Administrators @M-A-X last edited by

                        @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 1 Reply Last reply Reply Quote 1
                        • M
                          M-A-X @Homoran last edited by M-A-X

                          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 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          896
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          3
                          11
                          494
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo