Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Täglich den Kalender auf einen bestimmten Eintrag durchsuchen

    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

    Täglich den Kalender auf einen bestimmten Eintrag durchsuchen

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

      Ich möchte gerne meinen Kalender täglich um 2 Uhr morgens nach einem bestimmten Eintrag durchsuchen.

      Dazu habe ich mir folgendes Script gemacht.

      var tagdienst = false;
      var kalendereintrag;
      
      /** Aktuelle Stunde auslesen **/
      var heute = new Date();
      var stunde = heute.getHours();
      
      /** Kalendereintrag auslesen **/
      if (stunde > 1) kalendereintrag = ({id: "ical.0.data.html"});
      log ("Kalendereintrag. " + kalendereintrag);
      

      Ich bekomme aber als Kalendereitrag aber immer nur [objekt Objekt] zurück.

      Kann mir wer weiterhelfen und mir sagen was da falsch ist.

      Danke

      1 Reply Last reply Reply Quote 0
      • T
        tempestas last edited by

        Mehrere Dinge:

        1. du durchsuchst gar nichts sondern setzt die Variable kalendereintrag gleich dem state des icals

        2. es fehlt der Trigger. Den würde ich über einen schedule regeln: schedule("0 2 * * *", function(){ xyz()});

        3. suchen kannst du mit "indexOf". Sofern nichts gefunden wird, wird dir indexOf -1 ausgeben. Sofern was gefunden wird, erhälst du die Fundstelle (z.B. 89).

        Wenn dir das reicht, wüsstest du:

        sofern indexOf -1 dann nichts im Kalender, sonst vorhanden

        Die Frage, die sich anschließt ist: wie weit reicht denn dien Kalender? Wenn du z.B. (so entnehme ich es) Tagdienst suchst und dein Kalender sagen wir 4 Wochen nach vorne schaut weißt du nur, dass innerhalb dieses Zeitraums Tagdienst auftritt. Brauchst du denn auch das wann?

        1 Reply Last reply Reply Quote 0
        • P
          PapaChriLo last edited by

          Hallo!

          Ich habe im Kalender die Einträge TD für Tagdienst und ND für Nachtdienst.

          So, jetzt möchte ich täglich in der Nacht, irgendwann zwischen 0 und 4 Uhr Früh, den Kalender auslesen ob für heute der Eintrag TD (also Tagdienst) eingetragen ist, damit ich dann um 5 Uhr in der Früh bestimmte Scenarien ausführen kann.

          Daher hab ich mir das ical.0 Objekt angesehen und da steht im "ical.0.data.html" dieser Eintrag drinnen.

          Die Farge ist nur, wie krieg ich den da raus.

          Das mit schedule sagt mir jetzt momentan gar nichts.

          Kannst mir das erklären, oder gibt's da wo was zum nachlesen.

          1 Reply Last reply Reply Quote 0
          • T
            tempestas last edited by

            Javascript funktioniert über Trigger/Auslöser.

            Diese können entweder über Aktionen (z.B. Statuswechsel eines Objekts) getriggered werden, auf die du subscribst (````
            on(XYZ)

            
            Das letztere willst du und dafür dient der Schedule. Dieser gibt im Cron Format an, wann etwas getan werden soll
            

            schedule("0 2 * * *", function(){ xyz()

            	{hier der Function Code
            }
            

            });

            
            führt täglich um 2.00h nachts den gewünschten Code aus
            
            [https://www.npmjs.com/package/iobroker. … t#schedule](https://www.npmjs.com/package/iobroker.javascript#schedule)
            1 Reply Last reply Reply Quote 0
            • P
              PapaChriLo last edited by

              OK Danke das hab ich verstanden.

              Jetzt fragt sich nur wie ich den Kalendereintrag wirklich auslesen kann denn,

              kalendereintrag = {ip: "ical.0.data.html"};
              

              gibt nicht den html String zurück so wie er im Objekt angezeigt wird. :?:

              1 Reply Last reply Reply Quote 0
              • T
                tempestas last edited by

                Dafür gibts eine recht einfache Lösung:

                Du kannst im ical Events definieren. Direkt in der Adapter Instanz. Ließ dir mal die Beschreibung des Adapters durch.

                Wenn du also z.B. TD und ND jeweils einzeln definierst, sucht der iCal dir das ganz von selbst raus und schreibt es in den entsprechend "event" state rein.

                Den könntest du dann jeden Tag auswerten. Sofern event state > 0 für TD –> Tagdienst, sonst Nachtdienst.

                Wochenenden oder sonstige freie Tage hättest du auf die Art auch gleich mit erschlagen

                Als Beispiel mein Ferienkalender, mit dem ich auch einiges steuere. Als Event ist in der ical Instanz Ferien eingetragen und mit diesem Skript prüfe ich dann auf Ferien

                function fFerien(){
                    if( getState("ical.3.events.ferien"/*ferien*/).val === true) {       // Ferienkalender wird nach Stichwort "ferien" durchsucht
                        setState(idFerien, 1) ;
                            }
                        else { setState(idFerien, 0) ;
                        }
                        if(debug) log("Ferien ist "+getState(idFerien).val);
                }
                
                1 Reply Last reply Reply Quote 0
                • P
                  PapaChriLo last edited by

                  Ja das mit dem Event hab ich bereits herausgefunden.

                  Hab den Code jetzt so umgeschrieben.

                  Zum Testen frage ich jetzt alle Minute ab.

                  var tagdienst;
                  var debug = true;          // zum debuggen)
                  
                  /** Täglich um 2 Uhr früh den Kalendereintrag auslesen **/
                  schedule("*/1 * * * *", function() {
                  
                          if( getState("ical.0.events.TD").val === true) {    
                              setState(tagdienst, 1) ;
                                  }
                              else { setState(tagdienst, 0) ;
                              }
                  
                  });
                  
                  if(debug) log("Tagdienst: "+ getState(tagdienst).val); 
                  

                  funktioniert nur leider nicht.

                  Und ich hab keine Ahnung warum.

                  Fehlermeldung gibts keine.

                  Diese JS Syntax die bringt mich noch um den Verstand. :oops:

                  1 Reply Last reply Reply Quote 0
                  • T
                    tempestas last edited by

                    Was geht denn nicht?

                    Die States sind noch nicht definiert.

                    Du müsstest z.B. davor schreiben

                    createState("NAME DES STATES", 0);
                    
                    

                    und dann

                    
                    var tagdienst = [hier auf den oben kreierten state zeigen] 
                    

                    wenn du erstmal nur mit der Variable spielen willst dann brauchst du setState nicht sondern es reicht wenn du

                    var tagdienst;
                    var debug = true;          // zum debuggen)
                    
                    /** Täglich um 2 Uhr früh den Kalendereintrag auslesen **/
                    schedule("*/1 * * * *", function() {
                    
                            if( getState("ical.0.events.TD").val === true) {    
                                	tagdienst = 1 ;
                                else tagdienst = 0;
                              } 
                    
                    });
                    
                    if(debug) log("Tagdienst: "+ tagdienst); 
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • P
                      PapaChriLo last edited by

                      @tempestas:

                      wenn du erstmal nur mit der Variable spielen willst dann brauchst du setState nicht sondern es reicht wenn du

                      var tagdienst;
                      var debug = true;          // zum debuggen)
                      
                      /** Täglich um 2 Uhr früh den Kalendereintrag auslesen **/
                      schedule("*/1 * * * *", function() {
                      
                              if( getState("ical.0.events.TD").val === true) {    
                                  	tagdienst = 1 ;
                                  else tagdienst = 0;
                                } 
                      
                      });
                      
                      if(debug) log("Tagdienst: "+ tagdienst); 
                      
                      ```` `  
                      

                      So hab ichs ganz am Anfang gehabt.

                      Weils nicht funktioniert hat hab ich das dann mit dem Status gemacht.

                      1 Reply Last reply Reply Quote 0
                      • T
                        tempestas last edited by

                        Was sagt denn das log, was steht in den Objekten (Reiter, Screenshot?)

                        1 Reply Last reply Reply Quote 0
                        • P
                          PapaChriLo last edited by

                          OK Habs jetzt hinbekommen.

                          Der fehler war

                          Falscher Code

                          var tagdienst;
                          var debug = true;          // zum debuggen)
                          
                          /** Täglich um 2 Uhr früh den Kalendereintrag auslesen **/
                          schedule("*/1 * * * *", function() {
                          
                                  if( getState("ical.0.events.TD").val === true) {    
                                         tagdienst = 1 ;
                                      else tagdienst = 0;
                                    } 
                          
                          });
                          
                          if(debug) log("Tagdienst: "+ tagdienst);
                          

                          Richtiger Code

                          var tagdienst;
                          var debug = true;          // zum debuggen)
                          
                          /** Täglich um 2 Uhr früh den Kalendereintrag auslesen **/
                          schedule("*/1 * * * *", function() {
                          
                                  if( getState("ical.0.events.TD").val === true) {    
                                      tagdienst = 1 ;
                                  }
                                      else { 
                                          tagdienst = 0;
                                      }
                          
                                  if(debug) log("Tagdienst: "+ tagdienst);
                          
                          });
                          

                          Ich hab die Variable ausserhalb der funktion debuggt und dann war sie immer leer.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          550
                          Online

                          31.9k
                          Users

                          80.2k
                          Topics

                          1.3m
                          Posts

                          2
                          11
                          778
                          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