Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly mit Verzoegerung/timeout funktioniert nicht wie gewuenscht

NEWS

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

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

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

Blockly mit Verzoegerung/timeout funktioniert nicht wie gewuenscht

Scheduled Pinned Locked Moved Skripten / Logik
19 Posts 3 Posters 3.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N Offline
    N Offline
    nibblerrick
    wrote on last edited by
    #1

    Was will ich bezwecken?

    Eine Lampengruppe soll 30 Minunten nach Sonnenuntergang eingeschaltet werden.

    Nach der Haelfte der Zeit bis 0 Uhr soll eine zweite Lampengruppe eingeschaltet werden. 10 Minunten spaeter soll die erste Lampengruppe ausgeschaltet werden.

    Nach den Logeintraegen zu urteilen hat das erste Schalten funktioniert.

    Der timeout allerdings nicht. Was ich schon festegestellt habe ich, dass die Sachen innerhalb des Timeouts alle direkt ausgefuehrt werden, so dass mein Debug mit Lampengruppe_1_aus an der Stelle sinnfrei ist. Dadurch, dass der (Test-)Schaltvorgang aber auch im Log landet, habe ich gesehen, die 10 Minuten Verzoegerung haben funktioniert.

    Das meiste geht also anscheinend, nur der timeout nicht. Wahrscheinlich setze ich hier irgendwas falsch ein mit der Variablen o.ae. oder ich habe den timeout-Block nicht verstanden.

    Irgendwelche Tipps oder eine von Grund auf bessere Herangehensweise an die Umsetzung?
    3803_chrome_2017-10-17_19-29-54.png

    1 Reply Last reply
    0
    • rantanplanR Offline
      rantanplanR Offline
      rantanplan
      wrote on last edited by
      #2

      Hallo nibblerrick

      Ich will jetzt nicht nachrechnen. Welchen Wert bekommt denn Dein "halfway".

      Setz doch mal ein "Debug-Output Wert von halfway".

      Alternativ kannst Du Dir auch mal das anschauen.

      http://forum.iobroker.net/viewtopic.php … tro#p48209

      Da kannst Du beliebig viele Schaltpunkte vor und nach Sonnenaufgang/-untergang setzen.

      Grüße

      Rantanplan

      CCU3 / MS Server 2019(VM) / Scripten mit Blockly

      1 Reply Last reply
      0
      • N Offline
        N Offline
        nibblerrick
        wrote on last edited by
        #3

        Ok, ich habe das auf eben gerade gesetzt. Da hat er "90" ins Log geschrieben. Das haut wohl nicht ganz hin. Ich bin mir aber nicht sicher warum.

        Bei deinem angegebenen Script liegt der Vorteil doch nur, wenn ich Minuten bis Sonnen(auf|untergang) brauche, denn fuer danach kann ich doch direkt in dem Blocklyblock eine angeben, oder uebersehe ich da was?

        1 Reply Last reply
        0
        • N Offline
          N Offline
          nibblerrick
          wrote on last edited by
          #4

          Ich habe die Konvertierung entfernt und jetzt spuckt halfway einen sinnvolleren Wert aus. Trotzdessen scheint der Timeout nicht abgewartet zu werden sondern direkt ausgefuehrt zu werden (s. Logausgabe unten drunter).
          3803_chrome_2017-10-17_21-24-05.png

          1 Reply Last reply
          0
          • rantanplanR Offline
            rantanplanR Offline
            rantanplan
            wrote on last edited by
            #5

            @nibblerrick:

            Ok, ich habe das auf eben gerade gesetzt. Da hat er "90" ins Log geschrieben. Das haut wohl nicht ganz hin. Ich bin mir aber nicht sicher warum. `
            Na, dann stimmt Deine Berechnung nicht.

            @nibblerrick:

            Bei deinem angegebenen Script liegt der Vorteil doch nur, wenn ich Minuten bis Sonnen(auf|untergang) brauche, denn fuer danach kann ich doch direkt in dem Blocklyblock eine angeben, oder uebersehe ich da was? `

            Hauptsächlich das "dynamische".

            Wenn Du Deine Zeiten ändern willst muss das im Blockly tun.

            Mit dem Beispiel kannst Du Variablen/Datenpunkte benutzen, die Du z.B. VIS ändern kannst.

            Und die Berechnung funktioniert 😉

            Grüße

            Rantanplan

            CCU3 / MS Server 2019(VM) / Scripten mit Blockly

            1 Reply Last reply
            0
            • N Offline
              N Offline
              nibblerrick
              wrote on last edited by
              #6

              Ah, OK, an vis hatte ich noch nicht gedacht, dann ergibt das ganze natuerlich viel mehr Sinn.

              wegen der 90: Meine andere Antwort ansehen, umgestellt, tut anscheinend dennoch nicht, selbst mit sinnvollerem Wert.

              Noch was, wenn ich den Code anzeigen lasse dann ist bei der timeoutfunktion "NaN" zu sehen. Muss das so?

              var halfway, timeout;
              
              schedule({astro: "sunset", shift: 172}, function () {
                halfway = (86400 - (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds())) / 2;
                console.log(halfway);
                console.log((new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()));
                setState("artnet.0.switch.1.switch"/*test switch*/, 0);
                console.log('Lampengruppe_1_an');
                timeout = setTimeout(function () {
                  setState("artnet.0.switch.1.switch"/*test switch*/, 0);
                  console.log('Lampengruppe_2_an');
                  setStateDelayed("artnet.0.switch.1.switch"/*test switch*/, 0, 600000, false);
                  console.log('Lampengruppe_1_aus');
                }, NaN);
              });
              
              
              1 Reply Last reply
              0
              • rantanplanR Offline
                rantanplanR Offline
                rantanplan
                wrote on last edited by
                #7

                @nibblerrick:

                Ich habe die Konvertierung entfernt und jetzt spuckt halfway einen sinnvolleren Wert aus. Trotzdessen scheint der Timeout nicht abgewartet zu werden sondern direkt ausgefuehrt zu werden (s. Logausgabe unten drunter). `

                Lass mal "halfway" runden. Du dividierst auch ungerade Zahlen durch 2.

                Mit 4717,5 Sekunden kann der Timer wohl nichts anfangen.

                Grüße

                Rantanplan

                CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                1 Reply Last reply
                0
                • rantanplanR Offline
                  rantanplanR Offline
                  rantanplan
                  wrote on last edited by
                  #8

                  Ha.

                  Das Einsetzen einer Variablen in den Timer funktioniert nicht mehr!!!

                  Habe ich gerade ausprobiert.

                  War auch noch nie offiziell dokumentiert.

                  Grüße

                  Rantanplan

                  CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                  1 Reply Last reply
                  0
                  • N Offline
                    N Offline
                    nibblerrick
                    wrote on last edited by
                    #9

                    Ok, mein Test gerade auch mit ner ganzen Zahl hat auch nicht funktioniert.

                    Wie setze ich denn dann am besten das um? Ich glaube das mit der Variablen da drin habe ich auch irgendwo im Forum gefunden gehabt.

                    1 Reply Last reply
                    0
                    • rantanplanR Offline
                      rantanplanR Offline
                      rantanplan
                      wrote on last edited by
                      #10

                      @nibblerrick:

                      Ok, mein Test gerade auch mit ner ganzen Zahl hat auch nicht funktioniert. `
                      ???? Kann ich gar nicht glauben.

                      Stell doch mal einen Export von der aktuellen Version rein.

                      @nibblerrick:

                      Wie setze ich denn dann am besten das um? `
                      Ich hatte Dir nen Link gezeigt 😉

                      @nibblerrick:

                      Ich glaube das mit der Variablen da drin habe ich auch irgendwo im Forum gefunden gehabt. `
                      Den Beitrag suche ich verzeifelt.

                      Rantanplan

                      CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                      1 Reply Last reply
                      0
                      • N Offline
                        N Offline
                        nibblerrick
                        wrote on last edited by
                        #11

                        Also mit ner Variablen mit ner ganzen Zahl drin. Nicht nur ne Zahl. Da es mit Variablen ja nicht mehr geht ist es ja logisch, dass es nicht funktioniert.

                        Den Beitrag finde ich auch gerade nicht wieder, ich hatte da gestern 30 Tabs offen wo ich gewuehlt habe, weil ich mir alles moegliche zu Blockly angeguckt habe.

                        Meinst du deinen Link? Wie kann ich denn da die halbe Zeit zwischen Sunset und 0 Uhr triggern?

                        1 Reply Last reply
                        0
                        • rantanplanR Offline
                          rantanplanR Offline
                          rantanplan
                          wrote on last edited by
                          #12

                          @nibblerrick:

                          Meinst du deinen Link? Wie kann ich denn da die halbe Zeit zwischen Sunset und 0 Uhr triggern? `
                          Du rechnest mit Sekunden, ich mit Minuten.

                          1440 Min. (86400 Sek.)

                          Aber stell die Frage doch bitte in dem Beitrag.

                          Dann werden die Zusammenhänge auch für andere deutlicher.

                          Grüße

                          Rantanplan

                          CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                          1 Reply Last reply
                          0
                          • N Offline
                            N Offline
                            nibblerrick
                            wrote on last edited by
                            #13

                            Ob mit Minuten oder Sekunden ist ja vom Prinzip her egal.

                            Ich will deinen Thread ja nicht zumuellen, wenn die Frage da sinnlos ist, ich sehe nur im Moment nicht, ob dein Blockly da weiterhilft, da ich ja zwar X Minuten/Sekunden nach Sonnenuntergang was steuern will, ich dieses X ja aber nicht kenne und berechnen muss und daher doch irgendwo eine Verzoegerung oder einen Trigger mit Variable haben muss.

                            Also geht das irgendwie? Wenn du sagst ja oder ja wahrscheinlich stelle ich die Frage da gerne.

                            1 Reply Last reply
                            0
                            • rantanplanR Offline
                              rantanplanR Offline
                              rantanplan
                              wrote on last edited by
                              #14

                              @nibblerrick:

                              Ob mit Minuten oder Sekunden ist ja vom Prinzip her egal.

                              Ich will deinen Thread ja nicht zumuellen, wenn die Frage da sinnlos ist, ich sehe nur im Moment nicht, ob dein Blockly da weiterhilft, da ich ja zwar X Minuten/Sekunden nach Sonnenuntergang was steuern will, ich dieses X ja aber nicht kenne und berechnen muss und daher doch irgendwo eine Verzoegerung oder einen Trigger mit Variable haben muss.

                              Also geht das irgendwie? Wenn du sagst ja oder ja wahrscheinlich stelle ich die Frage da gerne. `
                              Nun, eine Variable im Timeout hat sich ja erledigt.

                              Also wird Deine geplante Lösung nicht funktionieren.

                              Das bedeutet altes Konzept vergessen und einen neuen Weg suchen.

                              Dazu müssen wir definieren was Du genau möchtest.

                              Ich habe das so verstanden.

                              1. 30 Minuten nach Sonnenuntergang –-> Lampe-A an

                              2. in der Hälfte der Zeit von Sonnenuntergang zu 0 Uhr ---> Lampe-B an.

                              3. in der Hälfte der Zeit von Sonnenuntergang zu 0 Uhr + 10 Min ---> Lampe-A aus

                              Wenn ich da richtig liege können wir im anderen Thread weitermachen.

                              Grüße

                              Rantanplan

                              CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                              1 Reply Last reply
                              0
                              • AlCalzoneA Offline
                                AlCalzoneA Offline
                                AlCalzone
                                Developer
                                wrote on last edited by
                                #15

                                @rantanplan:

                                Nun, eine Variable im Timeout hat sich ja erledigt.

                                Also wird Deine geplante Lösung nicht funktionieren.

                                Das bedeutet altes Konzept vergessen und einen neuen Weg suchen. `
                                Auf die Gefahr hin mich unbeliebt zu machen:

                                Mit "richtigem" JavaScript geht das. Mit dem konvertierten Blockly-Code gibts ja auch schon ne gute Grundlage, jetzt müsste man nur das fehlerhafte NaN durch die tatsächliche Variable ersetzen (umgerechnet in ms und gerundet)

                                Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                1 Reply Last reply
                                0
                                • rantanplanR Offline
                                  rantanplanR Offline
                                  rantanplan
                                  wrote on last edited by
                                  #16

                                  @AlCalzone:

                                  Auf die Gefahr hin mich unbeliebt zu machen: `
                                  Da musst Du Dich aber mehr anstrengen. 😄

                                  @AlCalzone:

                                  Mit "richtigem" JavaScript geht das. Mit dem konvertierten Blockly-Code gibts ja auch schon ne gute Grundlage, jetzt müsste man nur das fehlerhafte NaN durch die tatsächliche Variable ersetzen (umgerechnet in ms und gerundet) `
                                  Das wäre auch sehr schlecht wenn es mit dem "richtigen" JavaSript nicht gehen würde. 😉

                                  Aber bei jeder Änderung immer die Konvertierung vornehmen finde ich nicht erstrebenswert.

                                  Oder nibblerrick lernt JavaScript.

                                  Oder er bleibt auf der dunklen Seite der Macht. 😄

                                  Grüße

                                  Rantanplan

                                  CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                                  1 Reply Last reply
                                  0
                                  • AlCalzoneA Offline
                                    AlCalzoneA Offline
                                    AlCalzone
                                    Developer
                                    wrote on last edited by
                                    #17

                                    @rantanplan:

                                    Aber bei jeder Änderung immer die Konvertierung vornehmen finde ich nicht erstrebenswert. `
                                    Ja das wäre doof, besser wäre ein Fix für Blockly. Oder…
                                    @rantanplan:

                                    nibblerrick lernt JavaScript. `

                                    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                    1 Reply Last reply
                                    0
                                    • N Offline
                                      N Offline
                                      nibblerrick
                                      wrote on last edited by
                                      #18

                                      @AlCalzone:

                                      @rantanplan:

                                      Aber bei jeder Änderung immer die Konvertierung vornehmen finde ich nicht erstrebenswert. `
                                      Ja das wäre doof, besser wäre ein Fix für Blockly. Oder…
                                      @rantanplan:

                                      nibblerrick lernt JavaScript.

                                      Ich habe mich schon gefragt, ob es klappt, wenn man die Variable da einsetzt. Ich bin programmieren nicht abgeneigt, aber ich setze es einfach zu selten ein, als dass ich, wenn ich es brauche, etwas in sinnvoller Zeit schaffe. Daher finde ich blockly ganz sexy. Ich probiere das nachher mal.

                                      Und nein, mit so etwas macht man sich (zumindest bei mir) nicht unbeliebt. Also das ist Variante A zum ausprobieren.

                                      Variante B ist in im anderen Thread weitermachen, da bin ich auch neugierig drauf, da schreibe ich gleich auch. Ich berichte dann hier, wenn ich mit Javascript gefailed habe oder nicht.

                                      1 Reply Last reply
                                      0
                                      • N Offline
                                        N Offline
                                        nibblerrick
                                        wrote on last edited by
                                        #19

                                        Also ich konnte endlich mal wieder einen Moment etwas ausprobieren. Bei "meiner" Version bin ich schon weitergekommen, und es laeuft auch soweit. Sogar mit Blockly.

                                        Bei Blockly ist erstmal die Falle, dass, wenn man beim Timeout was anderes als ms nimmt es wohl umgerechnet wird. halfway sekunden ist dann halfway*1000 und das ergibt natuerlich nichts sinnvolles.

                                        Ich habe das Ganze jetzt mal etwas eingekuerzt und mit Sekunden gerechnet, die dann in Millisekunden umgerechnet werden. Dafuer habe ich die Sekunden geteilt 0,002 genommen um die Haelfte der Zeit zu haben und dann mal 1000. Das ganze spuckt Blockly als Code so aus:

                                        var halfway, timeout;
                                        
                                        schedule({astro: "sunset", shift: 30}, function () {
                                          // Durch 0.002 ist durch 2 und mal 1.000 (um von sec auf ms) zusammen. Da mal 1.000 sollte runden nicht noetig sein.
                                          halfway = (86400 - (new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds())) / 0.002;
                                          sendTo("telegram", "send", {
                                              text: (String('Sunset +30min, halfway: ') + String(halfway))
                                          });
                                          timeout = setTimeout(function () {
                                            sendTo("telegram", "send", {
                                                text: (String('timeout halfway, halfway: ') + String(halfway))
                                            });
                                          }, halfway);
                                        });
                                        
                                        

                                        Da fehlt jetzt natuerlich das Schalten der Lampen usw. drin, ist einfach mit Telegramnachricht zum ausprobieren.

                                        Falls es wer brauchen kann, hier noch der Blocklyexport:

                                        ! <xml 1999/xmlns="<URL url=" http:/www.w3.org/xhtml"="">http://www.w3.org/1999/xhtml">
                                        ! <block type="astro" id="BDVm]m*]u8-9oS)YUzG}" x="-537" y="-337"><field name="TYPE">sunset</field>
                                        ! <field name="OFFSET">30</field>
                                        ! <statement name="STATEMENT"><block type="comment" id="P5Uk#qMCyE;AdRJGj|*"><field name="COMMENT">Durch 0.002 ist durch 2 und mal 1.000 (um von sec auf ms) zusammen. Da mal 1.000 sollte runden nicht noetig sein.</field> ! <next><block type="variables_set" id="6OoB{/SD;)^:PY]nnA_F"><field name="VAR">halfway</field> ! <value name="VALUE"><block type="math_arithmetic" id="V0@[w^.eJVrK?TF1f=qv"><field name="OP">DIVIDE</field> ! <value name="A"><shadow type="math_number" id="+S^QA7_Uj3?K[!1!9DPG"><field name="NUM">1</field></shadow> ! <block type="math_arithmetic" id=")QFb}^[cv.j3Ke=m+cV-"><field name="OP">MINUS</field> ! <value name="A"><shadow type="math_number" id=")vzB58fidSav(D[NfhsD"><field name="NUM">86400</field></shadow></value> ! <value name="B"><shadow type="math_number" id="_^6ua_]lB)_LXm9u6r=w"><field name="NUM">1</field></shadow> ! <block type="time_get" id="_tAL4t8RK5I_r(f,uX^!"><mutation format="false" language="false"></mutation> ! <field name="OPTION">sid</field></block></value></block></value> ! <value name="B"><shadow type="math_number" id="W~c@m930b}~f;rMZGT!"><field name="NUM">0.002</field></shadow></value></block></value>
                                        ! <next><block type="telegram" id=";iOWfxo*jmH{A528@mV"><value name="MESSAGE"><shadow type="text" id="|yr}sZ_S1{NX*e^jX{fY"><field name="TEXT">Sonnenuntergang +30 Minuten</field></shadow> ! <block type="text_join" id="59}{V3Vo@HSYUk+oBm9"><mutation items="2"></mutation>
                                        ! <value name="ADD0"><block type="text" id="SlQZrOB*A(?G;|lx1Nx"><field name="TEXT">Sunset +30min, halfway:</field></block></value> ! <value name="ADD1"><block type="variables_get" id="oNTXhHkdRffL5EjB}z=p"><field name="VAR">halfway</field></block></value></block></value> ! <next><block type="timeouts_settimeout" id="UI{;!tz0.iwt;|6=i{^"><field name="NAME">timeout</field>
                                        ! <field name="DELAY">halfway</field>
                                        ! <field name="UNIT">ms</field>
                                        ! <statement name="STATEMENT"><block type="telegram" id="5DsYk[f%Y.z3P^uiSNfJ"><value name="MESSAGE"><shadow type="text" id="M=8ooc_#wpms1QR_*2NT"><field name="TEXT">Timeout halfway</field></shadow>
                                        ! <block type="text_join" id="%ybFeSdb_!Ul(j-~qJX7"><mutation items="2"></mutation>
                                        ! <value name="ADD0"><block type="text" id="eSu[Oj=d|2Z.zRYM|MDY"><field name="TEXT">timeout halfway, halfway:</field></block></value>
                                        ! <value name="ADD1"><block type="variables_get" id="Q?TJ/grVnlAiIlB3Y]aa"><field name="VAR">halfway</field></block></value></block></value></block></statement></block></next></block></next></block></next></block></statement></block>
                                        ! <block type="schedule" id="ZP7LZ,z0gDB-@[8zj+Z" x="-537" y="213"><field name="SCHEDULE">0 0 * * *</field> ! <statement name="STATEMENT"><block type="telegram" id="7r{9y2;T!f={^ZWjhRW0"><value name="MESSAGE"><shadow type="text" id="B-Jg1Lzf/-Y~iu-LE/,"><field name="TEXT">Mitternacht Lampen aus</field></shadow></value></block></statement></block></xml>

                                        Jetzt muss ich noch mit der Variante im anderen Thread beschaeftigen, damit laeuft es noch nicht, aber ich bin mir noch nicht sicher ob es einfach ein PEBKAC ist.
                                        3803_firefox_2017-11-08_14-58-17.png

                                        1 Reply Last reply
                                        0
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        396

                                        Online

                                        32.4k

                                        Users

                                        81.4k

                                        Topics

                                        1.3m

                                        Posts
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                        ioBroker Community 2014-2025
                                        logo
                                        • Login

                                        • Don't have an account? Register

                                        • Login or register to search.
                                        • First post
                                          Last post
                                        0
                                        • Recent
                                        • Tags
                                        • Unread 0
                                        • Categories
                                        • Unreplied
                                        • Popular
                                        • GitHub
                                        • Docu
                                        • Hilfe