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
  5. [gelöst] Problem mit einer "while"-Schleife

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    11
    1
    86

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    555

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

[gelöst] Problem mit einer "while"-Schleife

Geplant Angeheftet Gesperrt Verschoben Blockly
14 Beiträge 4 Kommentatoren 1.7k Aufrufe 1 Watching
  • Ä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.
  • M Offline
    M Offline
    mumurik
    schrieb am zuletzt editiert von mumurik
    #1

    Ich habe ein Problem mit einer while-Scheife, die wie folgt aussieht:

    db2693ca-4e1d-4890-8b5a-028d037ae27c-image.png

    Starte ich das Skript und triggere "resetBaraban" auf true, wird die function "reset" ausgelöst, doch das Javascript-Adapter bleibt sofort hängen, Javascript-Adapter springt auf rot als ob das Script in eine Endlosschleife verfallen würde.

    Was mache ich falsch? Hat jemand einen Tipp für mich?

    paul53P 1 Antwort Letzte Antwort
    0
    • M mumurik

      Ich habe ein Problem mit einer while-Scheife, die wie folgt aussieht:

      db2693ca-4e1d-4890-8b5a-028d037ae27c-image.png

      Starte ich das Skript und triggere "resetBaraban" auf true, wird die function "reset" ausgelöst, doch das Javascript-Adapter bleibt sofort hängen, Javascript-Adapter springt auf rot als ob das Script in eine Endlosschleife verfallen würde.

      Was mache ich falsch? Hat jemand einen Tipp für mich?

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @mumurik sagte:

      Was mache ich falsch?

      Der Block "wiederhole solange" erzeugt eine Endlosschleife !
      Was möchtest Du erreichen ?

      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

      M 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @mumurik sagte:

        Was mache ich falsch?

        Der Block "wiederhole solange" erzeugt eine Endlosschleife !
        Was möchtest Du erreichen ?

        M Offline
        M Offline
        mumurik
        schrieb am zuletzt editiert von mumurik
        #3

        @paul53

        die Funktion schaut in ein Datenpunkt "is opened". Solange dieser true ist, wird ein Sonoff Basic mit einer Verzögerung von 20 sek. eingeschaltet und nach 3 sek. wieder ausgeschaltet. Das ist die Schleife und diese ist nicht endlos, sondern läuft solange "is opened"=true

        Schreibe ich die Funktion in Javascript, funktioniert das Script wie gewollt und ohne jegliche Probleme bzw. Abstürze:

        async function reset() {
          while (getState("mihome.0.devices.state").val != false) {
            switchOn();
            await sleep(3000);
            switchOff();
            await sleep(20000);
          }
        }
        
        
        on({id: 'javascript.0.Bewaesserung.resetBaraban'/*resetBaraban*/, change: "ne"}, function (obj) {
            var value = obj.state.val;
          if (value == true) {
            resetBaraban();
          }
        });
        
        async function switchOn() {
            setState("sonoff.0.Gartenbewaesserung.POWER", true);
        }
        
        async function switchOff() {
            setState("sonoff.0.Gartenbewaesserung.POWER", false);
        }
        
        function sleep(ms) {
          return new Promise(resolve => setTimeout(resolve, ms));
        }
        

        Wie bilde ich dies 1-zu-1 im Blockly ab? Das ist eigentlich meine Frage...

        paul53P 1 Antwort Letzte Antwort
        0
        • M mumurik

          @paul53

          die Funktion schaut in ein Datenpunkt "is opened". Solange dieser true ist, wird ein Sonoff Basic mit einer Verzögerung von 20 sek. eingeschaltet und nach 3 sek. wieder ausgeschaltet. Das ist die Schleife und diese ist nicht endlos, sondern läuft solange "is opened"=true

          Schreibe ich die Funktion in Javascript, funktioniert das Script wie gewollt und ohne jegliche Probleme bzw. Abstürze:

          async function reset() {
            while (getState("mihome.0.devices.state").val != false) {
              switchOn();
              await sleep(3000);
              switchOff();
              await sleep(20000);
            }
          }
          
          
          on({id: 'javascript.0.Bewaesserung.resetBaraban'/*resetBaraban*/, change: "ne"}, function (obj) {
              var value = obj.state.val;
            if (value == true) {
              resetBaraban();
            }
          });
          
          async function switchOn() {
              setState("sonoff.0.Gartenbewaesserung.POWER", true);
          }
          
          async function switchOff() {
              setState("sonoff.0.Gartenbewaesserung.POWER", false);
          }
          
          function sleep(ms) {
            return new Promise(resolve => setTimeout(resolve, ms));
          }
          

          Wie bilde ich dies 1-zu-1 im Blockly ab? Das ist eigentlich meine Frage...

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @mumurik sagte:

          Schreibe ich die Funktion in Javascript, funktioniert das Script wie gewollt

          ... aber nur mit await und async. Das kennt Blockly nicht. Das, was Du möchtest, macht man mit einem Intervall von 23 s.

          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

          M 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @mumurik sagte:

            Schreibe ich die Funktion in Javascript, funktioniert das Script wie gewollt

            ... aber nur mit await und async. Das kennt Blockly nicht. Das, was Du möchtest, macht man mit einem Intervall von 23 s.

            M Offline
            M Offline
            mumurik
            schrieb am zuletzt editiert von mumurik
            #5

            @paul53

            wo finde ich in Blockly den Intervall?

            Bin nicht so fit in Blockly, könntest du eventuell die gewünschte Funktion in Blockly für mich nachbauen? Dafür wäre ich dir sehr dankbar!

            lobomauL BBTownB 2 Antworten Letzte Antwort
            0
            • M mumurik

              @paul53

              wo finde ich in Blockly den Intervall?

              Bin nicht so fit in Blockly, könntest du eventuell die gewünschte Funktion in Blockly für mich nachbauen? Dafür wäre ich dir sehr dankbar!

              lobomauL Offline
              lobomauL Offline
              lobomau
              schrieb am zuletzt editiert von
              #6

              @mumurik ich glaube ganz einfach die 3s auf 23s erhöhen. Die beiden Zeiten laufen ja nicht nacheinander los, sondern gleichzeitig/parallel. Also schon nach 3s ist false und nach 20s true.

              Host: NUC8i3 mit Proxmox:

              • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
              • Slave: Pi4
              1 Antwort Letzte Antwort
              0
              • M mumurik

                @paul53

                wo finde ich in Blockly den Intervall?

                Bin nicht so fit in Blockly, könntest du eventuell die gewünschte Funktion in Blockly für mich nachbauen? Dafür wäre ich dir sehr dankbar!

                BBTownB Offline
                BBTownB Offline
                BBTown
                schrieb am zuletzt editiert von
                #7

                @mumurik sagte in Problem mit einer "while"-Schleife:

                wo finde ich in Blockly den Intervall?

                schau mal ...
                379ad597-6ca9-4e8c-adba-33350581d3ca-grafik.png

                ioBroker auf NUC (VM debian v13 (Trixie ), node v22.21.0 npm v10.9.4, js-controller v7.1.0 jsonl/jsonl / HomeMatic CCU-2 (Wired und Funk) / Philips HUE / echo.DOT / Broadlink RM pro / SONOS

                1 Antwort Letzte Antwort
                0
                • M Offline
                  M Offline
                  mumurik
                  schrieb am zuletzt editiert von mumurik
                  #8

                  Nein, kriege das nicht hin :(

                  Kann mir jemand dieses JavaScript in Blockly nachbauen?

                  async function reset() {
                    while (getState("mihome.0.devices.state").val != false) {
                      switchOn();
                      await sleep(3000);
                      switchOff();
                      await sleep(20000);
                    }
                  }
                  
                  
                  on({id: 'javascript.0.Bewaesserung.resetBaraban'/*resetBaraban*/, change: "ne"}, function (obj) {
                      var value = obj.state.val;
                    if (value == true) {
                      resetBaraban();
                    }
                  });
                  
                  async function switchOn() {
                      setState("sonoff.0.Gartenbewaesserung.POWER", true);
                  }
                  
                  async function switchOff() {
                      setState("sonoff.0.Gartenbewaesserung.POWER", false);
                  }
                  
                  function sleep(ms) {
                    return new Promise(resolve => setTimeout(resolve, ms));
                  }
                  

                  Danke im Voraus!

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • M mumurik

                    Nein, kriege das nicht hin :(

                    Kann mir jemand dieses JavaScript in Blockly nachbauen?

                    async function reset() {
                      while (getState("mihome.0.devices.state").val != false) {
                        switchOn();
                        await sleep(3000);
                        switchOff();
                        await sleep(20000);
                      }
                    }
                    
                    
                    on({id: 'javascript.0.Bewaesserung.resetBaraban'/*resetBaraban*/, change: "ne"}, function (obj) {
                        var value = obj.state.val;
                      if (value == true) {
                        resetBaraban();
                      }
                    });
                    
                    async function switchOn() {
                        setState("sonoff.0.Gartenbewaesserung.POWER", true);
                    }
                    
                    async function switchOff() {
                        setState("sonoff.0.Gartenbewaesserung.POWER", false);
                    }
                    
                    function sleep(ms) {
                      return new Promise(resolve => setTimeout(resolve, ms));
                    }
                    

                    Danke im Voraus!

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #9

                    @mumurik sagte:

                    kriege das nicht hin

                    Dann versuche es mal so:

                    Blockly_temp.JPG

                    Trigger "ist größer als letztes" bedeutet Wertänderung von false auf true.

                    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

                    M 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @mumurik sagte:

                      kriege das nicht hin

                      Dann versuche es mal so:

                      Blockly_temp.JPG

                      Trigger "ist größer als letztes" bedeutet Wertänderung von false auf true.

                      M Offline
                      M Offline
                      mumurik
                      schrieb am zuletzt editiert von mumurik
                      #10

                      @paul53 sagte in Problem mit einer "while"-Schleife:

                      @paul53 sagte:
                      Dann versuche es mal so:

                      Super, so läuft's, vielen Dank!!!

                      Und wie mache ich das mit einer "for"-Schleife? So wird es ja nicht klappen:

                      e4df4302-e0c5-4ce1-b3d0-72964b947625-image.png

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • M mumurik

                        @paul53 sagte in Problem mit einer "while"-Schleife:

                        @paul53 sagte:
                        Dann versuche es mal so:

                        Super, so läuft's, vielen Dank!!!

                        Und wie mache ich das mit einer "for"-Schleife? So wird es ja nicht klappen:

                        e4df4302-e0c5-4ce1-b3d0-72964b947625-image.png

                        paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von paul53
                        #11

                        @mumurik sagte:

                        Und wie mache ich das mit einer "for"-Schleife?

                        Gar nicht. Die for-Schleife dient zum Abarbeiten einer bestimmten Anzahl - i.d.R. alle Elemente eines Arrays. Verzögerungen innerhalb der Schleifen-Funktion führen nicht zur Verzögerung des Schleifen-Durchlaufs, sondern es werden N Timer quasi gleichzeitig gestartet.
                        Was soll die Funktion goTo(x) machen ?

                        EDIT: Im Prinzip muss man es so machen wie oben, nur dass die Abbruch-Bedingung anders ist.

                        Blockly_temp.JPG

                        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

                        M 1 Antwort Letzte Antwort
                        0
                        • paul53P paul53

                          @mumurik sagte:

                          Und wie mache ich das mit einer "for"-Schleife?

                          Gar nicht. Die for-Schleife dient zum Abarbeiten einer bestimmten Anzahl - i.d.R. alle Elemente eines Arrays. Verzögerungen innerhalb der Schleifen-Funktion führen nicht zur Verzögerung des Schleifen-Durchlaufs, sondern es werden N Timer quasi gleichzeitig gestartet.
                          Was soll die Funktion goTo(x) machen ?

                          EDIT: Im Prinzip muss man es so machen wie oben, nur dass die Abbruch-Bedingung anders ist.

                          Blockly_temp.JPG

                          M Offline
                          M Offline
                          mumurik
                          schrieb am zuletzt editiert von mumurik
                          #12

                          @paul53 sagte in Problem mit einer "while"-Schleife:

                          Was soll die Funktion goTo(x) machen ?

                          Ich habe eine hydraulische Wassertrommel mit 6 Ausgängen. Sobald die Wasserzufuhr unterbrochen wird (in meinem Fall gesteuert über einen Sonoff Basic) und der Wasserdruck in der Trommel nachlässt, dreht sich die Trommel weiter zum nächsten Ausgang (also z.B. von Ausgang 1 zum Ausgang 2) usw.

                          Jetzt habe ich am Ausgang 1 einen Tür/Fenstersensor angebracht, so dass ich immer weiß, wann die Trommel am Ausgang 1 sich befindet. Nun würde ich gerne die Trommel soweit ansteuern, dass ich über die VIS+Datenpunkt einen bestimmten Ausgang manuell ansteuern kann, z.B. GoTo Ausgang 3, deswegen dachte ich, ich könnte mit einer var-Schleife das gewünschte Ergebnis erreichen...

                          Deswegen denke ich, dein Vorschlag müsste etwas anders aussehen, oder?

                          paul53P 1 Antwort Letzte Antwort
                          0
                          • M mumurik

                            @paul53 sagte in Problem mit einer "while"-Schleife:

                            Was soll die Funktion goTo(x) machen ?

                            Ich habe eine hydraulische Wassertrommel mit 6 Ausgängen. Sobald die Wasserzufuhr unterbrochen wird (in meinem Fall gesteuert über einen Sonoff Basic) und der Wasserdruck in der Trommel nachlässt, dreht sich die Trommel weiter zum nächsten Ausgang (also z.B. von Ausgang 1 zum Ausgang 2) usw.

                            Jetzt habe ich am Ausgang 1 einen Tür/Fenstersensor angebracht, so dass ich immer weiß, wann die Trommel am Ausgang 1 sich befindet. Nun würde ich gerne die Trommel soweit ansteuern, dass ich über die VIS+Datenpunkt einen bestimmten Ausgang manuell ansteuern kann, z.B. GoTo Ausgang 3, deswegen dachte ich, ich könnte mit einer var-Schleife das gewünschte Ergebnis erreichen...

                            Deswegen denke ich, dein Vorschlag müsste etwas anders aussehen, oder?

                            paul53P Offline
                            paul53P Offline
                            paul53
                            schrieb am zuletzt editiert von paul53
                            #13

                            @mumurik sagte:

                            dein Vorschlag müsste etwas anders aussehen, oder?

                            Weshalb ? Die Funktion goTo(x) kann mit der gewünschten Anzahl von 3-s-Impulsen aufgerufen werden.

                            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

                            M 1 Antwort Letzte Antwort
                            0
                            • paul53P paul53

                              @mumurik sagte:

                              dein Vorschlag müsste etwas anders aussehen, oder?

                              Weshalb ? Die Funktion goTo(x) kann mit der gewünschten Anzahl von 3-s-Impulsen aufgerufen werden.

                              M Offline
                              M Offline
                              mumurik
                              schrieb am zuletzt editiert von
                              #14

                              @paul53

                              achso, stimmt natürlich, vielen Dank!!!

                              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

                              349

                              Online

                              32.5k

                              Benutzer

                              81.8k

                              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