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. Täglich den Kalender auf einen bestimmten Eintrag durchsuchen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Täglich den Kalender auf einen bestimmten Eintrag durchsuchen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 2 Kommentatoren 1.1k Aufrufe
  • Ä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.
  • P Offline
    P Offline
    PapaChriLo
    schrieb am zuletzt editiert von
    #1

    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

    LG

    Christian

    1 Antwort Letzte Antwort
    0
    • T Offline
      T Offline
      tempestas
      schrieb am zuletzt editiert von
      #2

      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?

      <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

      1 Antwort Letzte Antwort
      0
      • P Offline
        P Offline
        PapaChriLo
        schrieb am zuletzt editiert von
        #3

        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.

        LG

        Christian

        1 Antwort Letzte Antwort
        0
        • T Offline
          T Offline
          tempestas
          schrieb am zuletzt editiert von
          #4

          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)

          <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

          1 Antwort Letzte Antwort
          0
          • P Offline
            P Offline
            PapaChriLo
            schrieb am zuletzt editiert von
            #5

            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. :?:

            LG

            Christian

            1 Antwort Letzte Antwort
            0
            • T Offline
              T Offline
              tempestas
              schrieb am zuletzt editiert von
              #6

              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);
              }
              

              <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

              1 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                PapaChriLo
                schrieb am zuletzt editiert von
                #7

                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:

                LG

                Christian

                1 Antwort Letzte Antwort
                0
                • T Offline
                  T Offline
                  tempestas
                  schrieb am zuletzt editiert von
                  #8

                  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); 
                  
                  

                  <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                  1 Antwort Letzte Antwort
                  0
                  • P Offline
                    P Offline
                    PapaChriLo
                    schrieb am zuletzt editiert von
                    #9

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

                    LG

                    Christian

                    1 Antwort Letzte Antwort
                    0
                    • T Offline
                      T Offline
                      tempestas
                      schrieb am zuletzt editiert von
                      #10

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

                      <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                      1 Antwort Letzte Antwort
                      0
                      • P Offline
                        P Offline
                        PapaChriLo
                        schrieb am zuletzt editiert von
                        #11

                        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.

                        LG

                        Christian

                        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

                        305

                        Online

                        32.6k

                        Benutzer

                        82.3k

                        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