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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst]Astro abhängig schedule verändern

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.3k

[gelöst]Astro abhängig schedule verändern

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
18 Beiträge 6 Kommentatoren 3.5k 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.
  • F Offline
    F Offline
    Fitti
    schrieb am zuletzt editiert von
    #1

    Hi zusammen,

    ich möchte gerne für ein Script Tagsüber ein cron von jede zwei Minuten und Nachts soll das Skript nicht laufen.

    Jetzt steht IMHO in der Javascript Anleitung, das clearSchedule NICHT mit Astro geht.

    Wie kann ich das trotzdem bewerkstelligen?

    Würde es mir so denken…

    schedule("*/2 * * * *", function () {
    	if (isAstroDay ()) {
    		Mein eigentliches Programm
    	}
    }
    
    

    Ist das so richtig? Ist etwas blöd mit dem Testen, da gerade Nachts = false…

    Aber ist das nicht Ressourcenverschwendung? Denn in der "NotAstroDay" Situation startet das Skript ja alle zwei Minuten.

    Viele Grüße,

    Fitti

    "Es wird die Zeit kommen, da ihr euch entscheiden müsst zwischen dem, was richtig ist, und dem, was bequem ist."
    Plural von Status ist auch Status!

    1 Antwort Letzte Antwort
    0
    • DutchmanD Offline
      DutchmanD Offline
      Dutchman
      Developer Most Active Administrators
      schrieb am zuletzt editiert von
      #2

      @Fitti:

      Hi zusammen,

      ich möchte gerne für ein Script Tagsüber ein cron von jede zwei Minuten und Nachts soll das Skript nicht laufen.

      Jetzt steht IMHO in der Javascript Anleitung, das clearSchedule NICHT mit Astro geht.

      Wie kann ich das trotzdem bewerkstelligen?

      Würde es mir so denken…

      schedule("*/2 * * * *", function () {
      	if (isAstroDay ()) {
      		    // Mein eigentliches Programm
      	}
      }
      
      

      Ist das so richtig? Ist etwas blöd mit dem Testen, da gerade Nachts = false…

      Aber ist das nicht Ressourcenverschwendung? Denn in der "NotAstroDay" Situation startet das Skript ja alle zwei Minuten.

      Viele Grüße,

      Fitti `

      kenne mich da nicht so aus mit der astro function, aber du moechtest am tag alle 2 minuten etwas abrufen aber nachts nicht ?

      Geht doch auch mit CRON und festen zeiten (z.. 7-19 Uhr)

      '*/2 7-19 * * *'
      

      Ansonsten wuerde cich mit astro function eine variable setzen und dan mit IF function die variable abfragen.

      Das passiert dan immer alle 2 minuten aber setzt nur aus wen die variable TRUE ist:

      
      var Daytime;
      
      schedule({astro: "sunrise", shift: 0}, function () {
        Daytime = true;
      });
      schedule({astro: "sunset", shift: 0}, function () {
        Daytime = false;
      });
      schedule("*/2 * * * *", function () {
        if (Daytime == true) {
      		    // Mein eigentliches Programm
        }
      });
      
      
      1 Antwort Letzte Antwort
      0
      • F Offline
        F Offline
        Fitti
        schrieb am zuletzt editiert von
        #3

        Danke erst mal. Das kann man sogar etwas kürzer machen, so habe ich es ja auch gemacht:

        schedule("*/2 6-23 * * *", function () {
            if (isAstroDay()) {
            mein Code...
        
        

        isAstroDay() hilft hier ja sehr.

        Ich benötige aber eine Funktion indem ich abhängig ob

        => "isAstroDay() dann schedule alle 2 Minuten",

        => wenn !isAstroDay() , dann schedule jede 30 Minuten.

        Klar, nun könnte ich mit setTimeout arbeiten, dachte mir aber, das es bestimmt wieder eine kluge Lösung bereits gibt.

        "Es wird die Zeit kommen, da ihr euch entscheiden müsst zwischen dem, was richtig ist, und dem, was bequem ist."
        Plural von Status ist auch Status!

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @Fitti:

          ich möchte gerne für ein Script Tagsüber ein cron von jede zwei Minuten und Nachts soll das Skript nicht laufen. `
          Versuche es mal so:

          var timer = null;
          
          schedule({astro: "sunrise", shift: 0}, function () {
            timer = schedule("*/2 * * * *", function () {
                    // Mein eigentliches Programm
            }
          });
          
          schedule({astro: "sunset", shift: 0}, function () {
            if(timer) clearSchedule(timer);
          });
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #5

            @Fitti:

            Ich benötige aber eine Funktion indem ich abhängig ob

            => "isAstroDay() dann schedule alle 2 Minuten",

            => wenn !isAstroDay() , dann schedule jede 30 Minuten. `
            Das sollte so funktionieren:

            var timer = null;
            
            function myFunction() {
                      // Mein eigentliches Programm
            }
            
            schedule({astro: "sunrise", shift: 0}, function () {
              if(timer) clearSchedule(timer);
              timer = schedule("*/2 * * * *", myFunction);
            });
            
            schedule({astro: "sunset", shift: 0}, function () {
              if(timer) clearSchedule(timer);
              timer = schedule("*/30 * * * *", myFunction);
            });
            

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              pix
              schrieb am zuletzt editiert von
              #6

              Hallo,

              abhängig von der Wichtigkeit des Skriptes würde ich zu Dutchman's Methode tendieren und den Schedule alle zwei Minuten starten und auf isAstroDay prüfen.

              Denn sollte der Zeitpunkt Sunset oder Sunrise verpasst werden, wird die Änderung nicht vorgenommen. Und das kann leicht passieren, wenn ioBroker oder zumindest die JavaScript Instanz gerade aus ist (IoBroker Backup, Fehler in einem anderen Skript und deshalb Neustart-Schleife).

              Gruß

              Pix

              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

              1 Antwort Letzte Antwort
              0
              • DutchmanD Offline
                DutchmanD Offline
                Dutchman
                Developer Most Active Administrators
                schrieb am zuletzt editiert von
                #7

                @pix:

                Hallo,

                abhängig von der Wichtigkeit des Skriptes würde ich zu Dutchman's Methode tendieren und den Schedule alle zwei Minuten starten und auf isAstroDay prüfen.

                Denn sollte der Zeitpunkt Sunset oder Sunrise verpasst werden, wird die Änderung nicht vorgenommen. Und das kann leicht passieren, wenn ioBroker oder zumindest die JavaScript Instanz gerade aus ist (IoBroker Backup, Fehler in einem anderen Skript und deshalb Neustart-Schleife).

                Gruß

                Pix `

                War auch genau de grund warum ich as s gemacht habe, mal zur erklaehrung:

                • Ich benutzte astro um eine variable zu setzten

                • Der 2 minuten interval triggerd immer und ist unabhaenging van astro getriggerd wurde (da gebe ich pix recht die chance ist zu gross dem moment zu verpassen

                Um dan 2 min und 30 min zu unterscheiden wuerde ich 2 mal einen cron machen aber dan de IF anders einfuellen:

                var Daytime;
                
                schedule({astro: "sunrise", shift: 0}, function () {
                  Daytime = true;
                });
                schedule({astro: "sunset", shift: 0}, function () {
                  Daytime = false;
                });
                //Shedule alle 2 minuten, trigger nur wenn Daytime = True
                schedule("*/2 * * * *", function () {
                  if (Daytime == true) {
                          // Mein eigentliches Programm
                  }
                
                //Shedule alle 30 minuten, trigger nur wenn Daytime = False
                schedule("*/30 * * * *", function () {
                  if (Daytime !== true) {
                          // Mein eigentliches Programm
                  }
                });
                
                

                Alternatief ginge auch den trigger auf astro zu legen und mit einer while schleife + time-out zu arbeiten finde ich aber weniger schoene loesung.

                1 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #8

                  @pix:

                  Denn sollte der Zeitpunkt Sunset oder Sunrise verpasst werden, wird die Änderung nicht vorgenommen. `
                  Das lässt sich durch Auswertung von isAstroDay() bei Skriptstart umgehen:

                  var timer = null;
                  
                  function myFunction() {
                            // Mein eigentliches Programm
                  }
                  
                  schedule({astro: "sunrise", shift: 0}, function () {
                    if(timer) clearSchedule(timer);
                    timer = schedule("*/2 * * * *", myFunction);
                  });
                  
                  schedule({astro: "sunset", shift: 0}, function () {
                    if(timer) clearSchedule(timer);
                    timer = schedule("*/30 * * * *", myFunction);
                  });
                  
                  // Script start
                  if(isAstroDay()) timer = schedule("*/2 * * * *", myFunction);
                  else timer = schedule("*/30 * * * *", myFunction);
                  
                  

                  @Dutchman: Die Variable Daytime wird bei einem Skriptstart gelöscht (undefined), d.h. ein Skriptstart führt zu einem Schedule von 30 Minuten bis zum nächsten Sonnenaufgang.

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #9

                    Man kann das Setzen unterschiedlicher Schedule-Perioden auch in einer Funktion zusammenfassen:

                    var timer = null;
                    
                    function setSchedule() {
                      var t = "*/30 * * * *";
                      if(isAstroDay()) t = "*/2 * * * *";
                      if(timer) clearSchedule(timer);
                      timer = schedule(t, function() {
                              // Mein eigentliches Programm
                      }
                    }
                    
                    schedule({astro: "sunrise", shift: 0}, setSchedule);
                    schedule({astro: "sunset", shift: 0}, setSchedule);
                    setSchedule();  // Script start
                    
                    

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Antwort Letzte Antwort
                    0
                    • F Offline
                      F Offline
                      Fitti
                      schrieb am zuletzt editiert von
                      #10

                      Wow - so viele Antworten, Möglichkeiten und geballtes Wissen. Vielen Dank!!

                      Ich denke die letzten Vorschläge passen genau auf meine Situation. Sprich pauls letzte + vorletzte zusammen. Ich würde dann noch ein Systemstart isAstroDay dazupacken.

                      Ich habe ja gelesen, das gerade auch node das Triggermanagment sehr gut handelt. Da ich andauernd auf dem Arduino in Grenzen gestoßen bin, mache ich mir hier auch immer viele Sorgen, wieviel ONs so ein System gut verträgt. Frage mich wirklich, wie das genau gehandelt wird.

                      Z. B. Vis kommt ja auch ins schleudern, wenn zu viele Variablen und Bindings vorhanden sind.

                      Aber vermutlich mache ich mir da zu iele Gedanken, oder?

                      Ich nehme also an, dass Systemoptimiert betrachtet alle Lösungen gleich wenig das System belasten, richtig?

                      "Es wird die Zeit kommen, da ihr euch entscheiden müsst zwischen dem, was richtig ist, und dem, was bequem ist."
                      Plural von Status ist auch Status!

                      1 Antwort Letzte Antwort
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #11

                        @Fitti:

                        Ich denke die letzten Vorschläge passen genau auf meine Situation. Sprich pauls letzte + vorletzte zusammen. `
                        Entweder den letzten oder den vorletzten Vorschlag. Das Ergebnis ist bei beiden gleich.
                        @Fitti:

                        Ich würde dann noch ein Systemstart isAstroDay dazupacken. `
                        Nach einem Systemstart wird auch ein Skriptstart ausgeführt und somit isAstroday() ausgewertet. Zusätzlich ist nichts erforderlich.

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Antwort Letzte Antwort
                        0
                        • F Offline
                          F Offline
                          Fitti
                          schrieb am zuletzt editiert von
                          #12

                          Ahh- die letzte Zeile war nicht zu sehen im letzten Beitrag. Für mich sah es so aus, als ob die Funktion erst einmal nicht gestartet wird.

                          So ist aber alles noch einfacher. genial!

                          ABER auch noch einmal Danke an all die Anderen Helfer! Topp!

                          "Es wird die Zeit kommen, da ihr euch entscheiden müsst zwischen dem, was richtig ist, und dem, was bequem ist."
                          Plural von Status ist auch Status!

                          1 Antwort Letzte Antwort
                          0
                          • smartboartS Offline
                            smartboartS Offline
                            smartboart
                            schrieb am zuletzt editiert von
                            #13

                            Kurze Frage zu dem Script…Auch wenn schon paar Tage her, würde ich diesen Beitrag gerne wieder beleben...

                            Wenn ich nur morgens und abends ein shedule laufen lassen möchte, z.B für ein Rolladen Programm kann man das dann so machen? siehe Script unten...Wenn es Käse ist, lösche ich es wieder, damit kein Müll hier verbleibt...

                            Oder gibt es noch die Möglichkeit anstatt TimeInRange auch ein Zeitfenster anhand von astro zu definieren?

                            Z.B

                            1h vor sunrise - 1h nach sunriseEnd

                            1h vor sunsetStart - 1h nach sunset

                            würde damit gerne meine Rolladensteuerung abspulen...

                            Danke für die Hilfe schonmal...

                            var timer = null;
                            
                            function myFunction() {
                                      // Mein eigentliches Programm
                            }
                            
                            schedule({isTimeInRange('18:30:00', '23:00:00'))}, function () {
                              if(timer) clearSchedule(timer);
                              timer = schedule("*/1 * * * *", myFunction);
                            });
                            
                            schedule({isTimeInRange('06:30:00', '10:00:00'))}, function () {
                              if(timer) clearSchedule(timer);
                              timer = schedule("*/1 * * * *", myFunction);
                            });
                            
                            // Script start
                            if(isTimeInRange('10:00:00', '18:30:00')) timer = null
                            else timer = schedule("*/1 * * * *", myFunction);
                            
                            1 Antwort Letzte Antwort
                            0
                            • DutchmanD Offline
                              DutchmanD Offline
                              Dutchman
                              Developer Most Active Administrators
                              schrieb am zuletzt editiert von
                              #14

                              eine timerange nicht, astro is ein trigger also zum beisspiel : Sonnenuntergang = 21.15, 21.15 wird im speicher fest gehalten und wen dieser zeitpunkt erreicht wird werden alle scripte mit dem trigger "sonnenuntergang" ausgefuehrt.

                              Man kan jetzt wohl sagen 1ne stunde vor bzw eine stunde nach sonnenuntertang.

                              Man koennte auch ein shedule laufen lassen (alle x minuten) und dan sagen zeit zwischen start sonnenuntergang und sonnenuntergang.

                              Im enddefeckt ist astro eine dynamische weise eine Urzeit zu ermitteln und diese dan spaeter als abfrage oder trigger fuer ein script zu benutzen.

                              1 Antwort Letzte Antwort
                              0
                              • smartboartS Offline
                                smartboartS Offline
                                smartboart
                                schrieb am zuletzt editiert von
                                #15

                                Hi, ja nach Astro möchte ich auch nicht triggeren, da ich den Zeitpunkt verpassen könnte, zuviele if Bedingungen im Script…Deshalb ja das Zeitfenster... Würde den das angepasste Script von mir oben funktionieren?

                                Aus der antwort bin ich auch nicht ganz schlau geworden. Wäre diese von bis Astro Abfrage nun Möglich als Zeitfenster zu definieren? Damit könnte ich das Zeitfenster verkleinern, da es ja dynamisch wäre... Ansonsten mit Time in Range müsste ich ja ein größeres Zeitfenster abbilden...

                                1 Antwort Letzte Antwort
                                0
                                • DutchmanD Offline
                                  DutchmanD Offline
                                  Dutchman
                                  Developer Most Active Administrators
                                  schrieb am zuletzt editiert von
                                  #16

                                  ehm, mal lose von der themologie time-range usw. was moechtest du genau erreichten wofuer ein zeitfenster benoetigt wird ?

                                  (und ist das zum ueberpruefen, abfragen oder triggeren noetig ?)

                                  1 Antwort Letzte Antwort
                                  0
                                  • L Online
                                    L Online
                                    Linedancer
                                    schrieb am zuletzt editiert von
                                    #17

                                    Ich verwende seit Monaten das hier.

                                    viewtopic.php?f=21&t=4891&hilit=minuten+vor+SU

                                    Funktioniert absolut zufriedenstellend und ist universell verwendbar.

                                    –

                                    Ciao, Gerhard

                                    1 Antwort Letzte Antwort
                                    0
                                    • smartboartS Offline
                                      smartboartS Offline
                                      smartboart
                                      schrieb am zuletzt editiert von
                                      #18

                                      Ich möchte damit sämtliche ( var ) abfragen durchführen, welche ich als if Bedingung für mein Rollandenscript verwende..Im Idealfall auch damit triggern…

                                      im Moment triggere ich auf Helligkeit.... siehe Script...

                                      Da ich für jeden Rolladen einen eigen Block habe und unzählige Variablen, möchte ich dies nur im Zeitfenster abfragen...

                                      Eventuell auch alle variablen gesammelt abrufen, so dass es nicht in jedem Block erneut erfolgt...

                                      @Linedancer, ich möchte eigentlich vermeiden mit Blockly zu arbeiten. Deshalb auch ein eigenes Rolladen Script.....Danke trotzdem..

                                      on({id: 'hm-rpc.0.PEQXXXXXX.1.BRIGHTNESS', change: "ne"}, function (obj) {
                                        	var Helligkeit = obj.state.val;
                                      //	var Helligkeit = getState ('hm-rpc.0.PEQXXXXX.1.BRIGHTNESS').val;
                                      	var BehanghoeheGaesteWC = getState('hm-rpc.0.OEQ13XXXXX.1.LEVEL').val;
                                      	var AutomatikGesamt = getState('javascript.0.Rolladen.Gesamt.Automatik').val;
                                      	var AutomatikGaesteWC = getState('javascript.0.Rolladen.GaesteWC.Automatik').val;
                                      	var Brand = getState ('javascript.0.Status.Brandmelder.Anzahl_melden_Brand').val;
                                      	var Alarm = getState('javascript.0.alarm.out.alarm_intern').val;
                                      		if (Helligkeit <=40 && BehanghoeheGaesteWC >= 1 && AutomatikGesamt === true && AutomatikGaesteWC === true && Brand === 0 && Alarm === false && isTimeInRange('18:30:00', '23:00:00')) {
                                                  setStateDelayed('hm-rpc.0.OEQXXXXXX.1.LEVEL', 0, 1000);
                                                  if('hm-rpc.0.OEQ1XXXXX.1.LEVEL', 0);
                                                  console.log('Rolladen Gaeste WC geschlossen'); 
                                      	}
                                      });
                                      
                                      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

                                      591

                                      Online

                                      32.4k

                                      Benutzer

                                      81.4k

                                      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