Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Terminskript; Was läuft falsch

    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

    [gelöst] Terminskript; Was läuft falsch

    This topic has been deleted. Only users with topic management privileges can see it.
    • Meister Mopper
      Meister Mopper last edited by Meister Mopper

      Ich habe ein Skript, mit welchem ich zu einem bestimmten Zeitpunkt aus einem Google-Kalender die Termine von heute und Morgen auslesen und diese an Telegram senden möchte.

      Das Skript habe ich natürlich aus dem Forum übernommen, kann aber kein Javaskript.

      Egal was ich an Tagen (let AnzTage) definiere, es werden mit heute immer 21 Tage ausgeworfen.

          let arr = getState('ical.1.data.table').val;
          let vUser = "Thomas";
          let AnzTage = 1;    // wie viele Tage sollen ausgelesen werden
          let vText = "";
      
      //aktuelles Datum
          aktJahr = new Date().getFullYear(); aktMon = new Date().getMonth()+1; aktTag = new Date().getDate();
          d3 = getDateObject(aktJahr+"-"+aktMon+"-"+aktTag+" 02:00:00");
      
      // Datum aus ical
          arr.forEach(myFunction);
          function myFunction(item, i) { 
      
              // date aus Array ermitteln
                  aMon = (arr[i].date).substring(3, 5); aTag = (arr[i].date).substring(0, 2);
                  d2 = getDateObject(aktJahr+"-"+aMon+"-"+aTag);
      
              // Tage ermitteln
                  var t = Date.parse(d2) - Date.parse(d3);
                  var days = Math.floor( t/(1000*60*60*24) );
      
              // wenn kleiner x Tage dann dazu fügen
                  if (days <= AnzTage) {
                      log (aTag + "." + aMon + "." + " " + arr[i].event +"\n");
                      vText += (aTag + "." + aMon + "." + " " + arr[i].event +"\n");
                  }
          }
      
      // telegram senden
          vText = "<pre>📅 anstehende Termine:\n" + vText + "</pre>";
          log (vText);
          sendTo('telegram', { user: vUser, text: vText, parse_mode: 'HTML' });
      
      

      Ich bin mir sicher, dass hier jemand sofort den Fehler sieht.

      F T 2 Replies Last reply Reply Quote 0
      • F
        fastfoot @Meister Mopper last edited by

        @meister-mopper sofort wäre übertrieben. Das Skript liest das Datum und setzt dann das Jahr von Heute, wobei aus dem Termin für Morgen dann der 1.1.20**22** wird. Die anschliessende Subtraktion der Daten ist negativ und somit immer kleiner als die Anzahl deiner Tage. Sollte ab morgen erledigt sein 🙂

        Meister Mopper 1 Reply Last reply Reply Quote 0
        • Meister Mopper
          Meister Mopper @fastfoot last edited by

          @fastfoot
          Das leuchtet ein. Was muss ich jedoch tun, wenn das immer richtig angezeigt werden soll?

          F 2 Replies Last reply Reply Quote 0
          • F
            fastfoot @Meister Mopper last edited by

            @meister-mopper sagte in Terminskript; Was läuft falsch:

            Das leuchtet ein. Was muss ich jedoch tun, wenn das immer richtig angezeigt werden soll?

            ab morgen ist's ja richtig 🙂 Ansonsten warten bis jd. den Quark verbessert. Habe gerade wenig Zeit, sorry

            1 Reply Last reply Reply Quote 0
            • T
              TT-Tom @Meister Mopper last edited by

              @meister-mopper
              du könntest auch eine weitere Instanz von iCal anlegen und dort 2 Tage für die Zukunft einstellen. Damit liefert ical auch nur die nächsten zwei Tage.

              1 Reply Last reply Reply Quote 0
              • F
                fastfoot @Meister Mopper last edited by

                @meister-mopper mal auf die Schnelle

                /**
                 * Name:			Send iCal
                 * Zweck:			Termine aus iCal senden
                 * Datum:			31.12.2022
                 * Autor:			unbekannt, @fastfoot
                 * Forum:			https://forum.iobroker.net/post/919318
                 */
                const AnzTage = 10;
                const vUser = 'Thomas';
                const datumText = ['Heute ', 'Morgen', ''];
                const termine = getState('ical.1.data.table').val;
                let heute = new Date();
                heute.setHours(0, 0, 0, 0);
                let msg = '';
                
                termine.forEach(erstelleNachricht);
                
                msg = "<pre>📅 anstehende Termine:\n" + msg + "</pre>";
                sendTo('telegram', { user: vUser, text: msg, parse_mode: 'HTML' });
                
                function erstelleNachricht(termin, i) {
                    let terminText = '';
                    let eventTag = new Date(termin._date);
                    eventTag.setHours(0, 0, 0, 0);
                    const eventZeiten = termin.date.split(' ');
                    datumText[2] = eventZeiten[0];
                    const diffTage = Math.floor((eventTag.getTime() - heute.getTime()) / 86400000);
                
                    if (diffTage <= AnzTage) {
                        // mit Uhrzeit
                        // terminText = event._allDay ? datumText[Math.min(diffTage, 2)] : datumText[Math.min(diffTage, 2)] +' '+ evtTimes[1].substring(0,5);
                
                        // Heute und Morgen als Text
                        terminText = datumText[Math.min(diffTage, 2)];
                
                        // Alternativ nur das Datum 01.01.
                        // terminText = eventZeiten[0];
                
                        msg += terminText + ' ' + termin.event + '\n';
                    }
                }
                
                

                Meister Mopper 1 Reply Last reply Reply Quote 1
                • Meister Mopper
                  Meister Mopper @fastfoot last edited by

                  @fastfoot sagte in Terminskript; Was läuft falsch:

                  mal auf die Schnelle

                  👏 Für "auf die Schnelle" läuft das aber super gut.

                  Recht herzlichen Dank!

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  388
                  Online

                  31.8k
                  Users

                  80.0k
                  Topics

                  1.3m
                  Posts

                  javascript
                  3
                  7
                  257
                  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