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

                        571
                        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