Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Ich hänge fest, while Schleife [gelöst]

NEWS

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

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

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

Ich hänge fest, while Schleife [gelöst]

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 3 Kommentatoren 494 Aufrufe 3 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.
  • F Offline
    F Offline
    flyer99
    schrieb am zuletzt editiert von flyer99
    #1

    Abend Community,

    Nach 8 Stunden Probieren und immer noch keine Idee an was es hackt wende ich mich an Euch.

    Hintergrund zu dem Script:
    Da ich PV auf dem Dach habe steuer ich meine Hauptverbraucher, funzt auch alles jedoch wollte ich ein BlocklyScript opimieren welches mir den Status z.B. der Spülmaschine ausliest. Da die Spülmaschine noch nicht Smart ist und somit nur über einen Shelly gesteuert wird kann ich bei Stromaufnahme ein Einschalten feststellen, jedoch das ENDE der Spülmaschine gestaltet sich ein wenig schwierig da sie zwischendurch mal Phasen hat in denen sie kein Strom braucht, das Programm ist aber noch nicht beendet. Um meine Visualisierung richtig zu Versorgen bzgl. "Spülmaschine läuft" oder eben fertig hab ich über Blockly ein Script gebaut das auch funktioniert, wenn der Strom weniger 1 Watt ist dann warte 3 Minuten, wenn imer noch nochmals 3 Minuten ....... bis nach 30 Minuten das Bit Spülmaschine abgelöscht wird. Fängt sie zwischen den 30 Minuten nochmals an was zu machen fängt das Skript von vorne an, wie gesagt das funktioniert.
    Jetzt dachte ich ich probiere das mal über Java direkt mit einer Funktion. Solange der Strom ("2power") bei null ist funktioniert die Schleife, also beendet sich nach 10 mS. Wenn ich aber "2power" auf 3 setze und anschließend wieder zurück hängt die Schleife, Raspberry geht auf 100% ........ Warum hängt die ????? Wenn der "2power" wieder auf 0 ist sollte doch "StartZeit" auf aktuelles Datum gesetzt werden und nach 10 mS sich die Schleife beenden ??
    Ich bin mir auch nicht Sicher ob das der richtige Ansatz ist für meine "Optimierung" des Blocklys, trotzdem würde mich interessieren warum das nicht läuft ??

    Vielen Dank im voraus ......

    function verstrZeit(t0,t1) {
        var differenz = (t1.getTime() - t0.getTime());
        return differenz;
    }
    
    var StartZeit = new Date();
    console.error("1");
    while (verstrZeit(StartZeit,new Date()) < 10) {
        console.error("2");
        if (getState("javascript.0.Solar.2power").val > 1) {
            console.error("3");
            StartZeit = new Date();
        }
        Ansonsten setze Variable XY zurück ......
    }
    
    setState("javascript.0.scriptEnabled.Solar.y01_Status-Spuelm", false);

    Raspberry 4, Bullseye, mit dem Raspi 7" Touchdisplay was ioBroker betrifft ...

    liv-in-skyL ArmilarA 3 Antworten Letzte Antwort
    0
    • F flyer99

      Abend Community,

      Nach 8 Stunden Probieren und immer noch keine Idee an was es hackt wende ich mich an Euch.

      Hintergrund zu dem Script:
      Da ich PV auf dem Dach habe steuer ich meine Hauptverbraucher, funzt auch alles jedoch wollte ich ein BlocklyScript opimieren welches mir den Status z.B. der Spülmaschine ausliest. Da die Spülmaschine noch nicht Smart ist und somit nur über einen Shelly gesteuert wird kann ich bei Stromaufnahme ein Einschalten feststellen, jedoch das ENDE der Spülmaschine gestaltet sich ein wenig schwierig da sie zwischendurch mal Phasen hat in denen sie kein Strom braucht, das Programm ist aber noch nicht beendet. Um meine Visualisierung richtig zu Versorgen bzgl. "Spülmaschine läuft" oder eben fertig hab ich über Blockly ein Script gebaut das auch funktioniert, wenn der Strom weniger 1 Watt ist dann warte 3 Minuten, wenn imer noch nochmals 3 Minuten ....... bis nach 30 Minuten das Bit Spülmaschine abgelöscht wird. Fängt sie zwischen den 30 Minuten nochmals an was zu machen fängt das Skript von vorne an, wie gesagt das funktioniert.
      Jetzt dachte ich ich probiere das mal über Java direkt mit einer Funktion. Solange der Strom ("2power") bei null ist funktioniert die Schleife, also beendet sich nach 10 mS. Wenn ich aber "2power" auf 3 setze und anschließend wieder zurück hängt die Schleife, Raspberry geht auf 100% ........ Warum hängt die ????? Wenn der "2power" wieder auf 0 ist sollte doch "StartZeit" auf aktuelles Datum gesetzt werden und nach 10 mS sich die Schleife beenden ??
      Ich bin mir auch nicht Sicher ob das der richtige Ansatz ist für meine "Optimierung" des Blocklys, trotzdem würde mich interessieren warum das nicht läuft ??

      Vielen Dank im voraus ......

      function verstrZeit(t0,t1) {
          var differenz = (t1.getTime() - t0.getTime());
          return differenz;
      }
      
      var StartZeit = new Date();
      console.error("1");
      while (verstrZeit(StartZeit,new Date()) < 10) {
          console.error("2");
          if (getState("javascript.0.Solar.2power").val > 1) {
              console.error("3");
              StartZeit = new Date();
          }
          Ansonsten setze Variable XY zurück ......
      }
      
      setState("javascript.0.scriptEnabled.Solar.y01_Status-Spuelm", false);
      liv-in-skyL Offline
      liv-in-skyL Offline
      liv-in-sky
      schrieb am zuletzt editiert von
      #2

      @flyer99 anstatt while eher setInterval nutzen und mit stopInterval beenden

      die while schleife macht richtig stress, weil sie dauernd arbeitet - habe ich noch nie in meiner skripte gebraucht

      bei setinterval kannst du definieren, wie oft es pro zeiteinheit durchläuft und innen im setinterval alles checken und steuern

      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

      1 Antwort Letzte Antwort
      1
      • F flyer99

        Abend Community,

        Nach 8 Stunden Probieren und immer noch keine Idee an was es hackt wende ich mich an Euch.

        Hintergrund zu dem Script:
        Da ich PV auf dem Dach habe steuer ich meine Hauptverbraucher, funzt auch alles jedoch wollte ich ein BlocklyScript opimieren welches mir den Status z.B. der Spülmaschine ausliest. Da die Spülmaschine noch nicht Smart ist und somit nur über einen Shelly gesteuert wird kann ich bei Stromaufnahme ein Einschalten feststellen, jedoch das ENDE der Spülmaschine gestaltet sich ein wenig schwierig da sie zwischendurch mal Phasen hat in denen sie kein Strom braucht, das Programm ist aber noch nicht beendet. Um meine Visualisierung richtig zu Versorgen bzgl. "Spülmaschine läuft" oder eben fertig hab ich über Blockly ein Script gebaut das auch funktioniert, wenn der Strom weniger 1 Watt ist dann warte 3 Minuten, wenn imer noch nochmals 3 Minuten ....... bis nach 30 Minuten das Bit Spülmaschine abgelöscht wird. Fängt sie zwischen den 30 Minuten nochmals an was zu machen fängt das Skript von vorne an, wie gesagt das funktioniert.
        Jetzt dachte ich ich probiere das mal über Java direkt mit einer Funktion. Solange der Strom ("2power") bei null ist funktioniert die Schleife, also beendet sich nach 10 mS. Wenn ich aber "2power" auf 3 setze und anschließend wieder zurück hängt die Schleife, Raspberry geht auf 100% ........ Warum hängt die ????? Wenn der "2power" wieder auf 0 ist sollte doch "StartZeit" auf aktuelles Datum gesetzt werden und nach 10 mS sich die Schleife beenden ??
        Ich bin mir auch nicht Sicher ob das der richtige Ansatz ist für meine "Optimierung" des Blocklys, trotzdem würde mich interessieren warum das nicht läuft ??

        Vielen Dank im voraus ......

        function verstrZeit(t0,t1) {
            var differenz = (t1.getTime() - t0.getTime());
            return differenz;
        }
        
        var StartZeit = new Date();
        console.error("1");
        while (verstrZeit(StartZeit,new Date()) < 10) {
            console.error("2");
            if (getState("javascript.0.Solar.2power").val > 1) {
                console.error("3");
                StartZeit = new Date();
            }
            Ansonsten setze Variable XY zurück ......
        }
        
        setState("javascript.0.scriptEnabled.Solar.y01_Status-Spuelm", false);
        liv-in-skyL Offline
        liv-in-skyL Offline
        liv-in-sky
        schrieb am zuletzt editiert von
        #3

        ps das ist javascript und nicht java 🙂

        @flyer99 sagte in Ich hänge fest, while Schleife:

        dachte ich ich probiere das mal über Java direkt mit einer Funktion.

        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

        1 Antwort Letzte Antwort
        1
        • F flyer99

          Abend Community,

          Nach 8 Stunden Probieren und immer noch keine Idee an was es hackt wende ich mich an Euch.

          Hintergrund zu dem Script:
          Da ich PV auf dem Dach habe steuer ich meine Hauptverbraucher, funzt auch alles jedoch wollte ich ein BlocklyScript opimieren welches mir den Status z.B. der Spülmaschine ausliest. Da die Spülmaschine noch nicht Smart ist und somit nur über einen Shelly gesteuert wird kann ich bei Stromaufnahme ein Einschalten feststellen, jedoch das ENDE der Spülmaschine gestaltet sich ein wenig schwierig da sie zwischendurch mal Phasen hat in denen sie kein Strom braucht, das Programm ist aber noch nicht beendet. Um meine Visualisierung richtig zu Versorgen bzgl. "Spülmaschine läuft" oder eben fertig hab ich über Blockly ein Script gebaut das auch funktioniert, wenn der Strom weniger 1 Watt ist dann warte 3 Minuten, wenn imer noch nochmals 3 Minuten ....... bis nach 30 Minuten das Bit Spülmaschine abgelöscht wird. Fängt sie zwischen den 30 Minuten nochmals an was zu machen fängt das Skript von vorne an, wie gesagt das funktioniert.
          Jetzt dachte ich ich probiere das mal über Java direkt mit einer Funktion. Solange der Strom ("2power") bei null ist funktioniert die Schleife, also beendet sich nach 10 mS. Wenn ich aber "2power" auf 3 setze und anschließend wieder zurück hängt die Schleife, Raspberry geht auf 100% ........ Warum hängt die ????? Wenn der "2power" wieder auf 0 ist sollte doch "StartZeit" auf aktuelles Datum gesetzt werden und nach 10 mS sich die Schleife beenden ??
          Ich bin mir auch nicht Sicher ob das der richtige Ansatz ist für meine "Optimierung" des Blocklys, trotzdem würde mich interessieren warum das nicht läuft ??

          Vielen Dank im voraus ......

          function verstrZeit(t0,t1) {
              var differenz = (t1.getTime() - t0.getTime());
              return differenz;
          }
          
          var StartZeit = new Date();
          console.error("1");
          while (verstrZeit(StartZeit,new Date()) < 10) {
              console.error("2");
              if (getState("javascript.0.Solar.2power").val > 1) {
                  console.error("3");
                  StartZeit = new Date();
              }
              Ansonsten setze Variable XY zurück ......
          }
          
          setState("javascript.0.scriptEnabled.Solar.y01_Status-Spuelm", false);
          ArmilarA Offline
          ArmilarA Offline
          Armilar
          Most Active Forum Testing
          schrieb am zuletzt editiert von Armilar
          #4

          @flyer99

          var timeoutSpuelmaschine;
          
          // Trigger auf Objekt ID für Leistungsmessung
          on({id: 'javascript.0.Solar.2power', change: "ne"}, async function (obj) {
            if (obj.state.val > 1) {
              // Wenn weiteres Event von Trigger, erneut 3 Min
              (function () {if (timeoutSpuelmaschine) {clearTimeout(timeoutSpuelmaschine); timeoutSpuelmaschine = null;}})();
              timeoutSpuelmaschine = setTimeout(async function () {
                // Wenn 3 Min. kein (>1)-Event mehr vom Trigger , abschalten
                setState("javascript.0.scriptEnabled.Solar.y01_Status-Spuelm", false);
              }, 180000);
            }
          });
          

          würde ich ebenfalls wie @liv-in-sky lösen.

          Eine While-Schleife läuft sich einen Wolf, wenn keine Abbruchbedingung existiert oder entsprechende Pausen eingebaut werden. Ist völlig normal, dass dann bei einer Endlosschleife der Prozessor auf 100% geht. Besser mit Trigger und setTimeout

          Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
          https://github.com/joBr99/nspanel-lovelace-ui/wiki

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          1 Antwort Letzte Antwort
          0
          • F Offline
            F Offline
            flyer99
            schrieb am zuletzt editiert von
            #5

            Vielen Dank für die Antworten, dann werde ich mal diesen Weg probieren .....

            Raspberry 4, Bullseye, mit dem Raspi 7" Touchdisplay was ioBroker betrifft ...

            1 Antwort Letzte Antwort
            0
            • F Offline
              F Offline
              flyer99
              schrieb am zuletzt editiert von
              #6

              Abend, habs nun so für mich am laufen und funzt.
              Vielleicht hilft es ja jemandem, Logik: Innerhalb von 15 Minuten darf kein Stromverbrauch auftauchen ....

              setState("javascript.0.Solar.Script_Spuelmaschine_Status_laeuft", true);
              let vergangenezeit_spuelm = 1;
              let sekundenzaehler_spuelm = setInterval(Zeit, 1000);  //1000 für Interval 1 Sekunde
              function Zeit() {
              	vergangenezeit_spuelm++;
                      if (getState("shelly.0.SHPLG2-1#283A90#1.Relay0.Power").val > 1) {
                      vergangenezeit_spuelm = 0;
                      }
                      if (vergangenezeit_spuelm > 900 ) {   //900 gleich 15 Minuten da Intervall = 1 Sekunde
                      clearInterval(sekundenzaehler_spuelm);
                      setState("javascript.0.Solar.Spuelm_gestartet",false);
                      setState("javascript.0.Solar.Script_Spuelmaschine_Status_laeuft", false);
                      setState("javascript.0.scriptEnabled.Solar.Spuelmaschine_Status", false);
              	}
              }
              

              Raspberry 4, Bullseye, mit dem Raspi 7" Touchdisplay was ioBroker betrifft ...

              1 Antwort Letzte Antwort
              1
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              767

              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
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe