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. Blockly mit Verzoegerung/timeout funktioniert nicht wie gewuenscht

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.0k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Blockly mit Verzoegerung/timeout funktioniert nicht wie gewuenscht

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
19 Beiträge 3 Kommentatoren 3.8k 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.
  • N Offline
    N Offline
    nibblerrick
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • rantanplanR Offline
      rantanplanR Offline
      rantanplan
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • rantanplanR Offline
        rantanplanR Offline
        rantanplan
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • N Offline
          N Offline
          nibblerrick
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • rantanplanR Offline
            rantanplanR Offline
            rantanplan
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • N Offline
              N Offline
              nibblerrick
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • rantanplanR Offline
                rantanplanR Offline
                rantanplan
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • N Offline
                  N Offline
                  nibblerrick
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • rantanplanR Offline
                    rantanplanR Offline
                    rantanplan
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • AlCalzoneA Offline
                      AlCalzoneA Offline
                      AlCalzone
                      Developer
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      • rantanplanR Offline
                        rantanplanR Offline
                        rantanplan
                        schrieb am zuletzt editiert von
                        #16

                        @AlCalzone:

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

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

                        Grüße

                        Rantanplan

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

                        1 Antwort Letzte Antwort
                        0
                        • AlCalzoneA Offline
                          AlCalzoneA Offline
                          AlCalzone
                          Developer
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          0
                          • N Offline
                            N Offline
                            nibblerrick
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            0
                            • N Offline
                              N Offline
                              nibblerrick
                              schrieb am zuletzt editiert von
                              #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 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

                              402

                              Online

                              32.5k

                              Benutzer

                              81.6k

                              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