Skip to content
  • Home
  • 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
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Gelöst] Schleife langsamer ausführen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

[Gelöst] Schleife langsamer ausführen

Scheduled Pinned Locked Moved Skripten / Logik
5 Posts 2 Posters 1.9k 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.
  • T Offline
    T Offline
    toto
    wrote on last edited by
    #1

    Hallo,

    ich versuche vergebens eine Schleife langsamer ablaufen zu lassen. In der Schleife wird ein IR Signal gesendet, aber leider so schnell hintereinander dass das Gerät es nicht regestriert.

    Schön wäre das einmal pro Sekunde gedrückt wird. Habe schon geguckt wegen Timeout, aber das bezieht sich wohl eher auf knopf gedrückt x sekunden später ausführen oder?

    Wenn ich versuche die Schleife mit einer Schleife auszubremsen so:

    while (k <= i){

    setState("broadlink.0.learnedSignals.Ventiplus",true);

    for(z = 1;z <= 50000; z++) {}

    k++;

    }

    Dann wird einmal gedrückt, für eine zeit gewartet und dann wieder schnell gedrückt…. also würde die zweite Schleife nur 1 mal ausgeführt.

    Gibt es da eine einfache Lösung?

    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      @toto:

      In der Schleife wird ein IR Signal gesendet, aber leider so schnell hintereinander dass das Gerät es nicht regestriert. `
      Sollen mehrere Kommandos/Werte gesendet werden ? Oder soll ein Kommando mehrmals wiederholt werden ?

      Beschreibe bitte erst einmal, was in der Schleife unter welchen Bedingungen (Zeitabstand ?) passieren soll.

      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 Reply Last reply
      0
      • T Offline
        T Offline
        toto
        wrote on last edited by
        #3

        Es soll das gleiche Kommando mehrmals ausgeführt werden. Im Abstand von einer Sekunde. Zeile mit broadlink. Die sendet ein IR Signal zum Ventilator, um die Luftstärke zu erhöhen bzw. niedriger. Habe dazu Variablen die die aktuelle Stufe speichern, so das der Wert ausgerechnet wird für x mal hoch oder runter schalten. Da die while Schleife aber z. B. 5 mal sofort hintereinander sendet, kommt höchstens 3 mal an. Da der Ventilator 10 Stufen hat und ich das mit Alexa steuer, wäre es super die Signale im richtigen Abstand zu senden.

        1 Reply Last reply
        0
        • paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          @toto:

          Es soll das gleiche Kommando mehrmals ausgeführt werden. Im Abstand von einer Sekunde. `
          Dafür gibt es die JS-Funktion timer = setInterval(callback, 1000) (Abstand 1 s). Wenn das Senden der gewünschten Anzahl Kommandos erfolgt ist, wird mit clearInterval(timer) beendet. Etwa so:

          var timer = null;
          var anzahl;  // wird irgendwo im Skript berechnet
          
          function CountDown(s) {
             setState("broadlink.0.learnedSignals.Ventiplus",true);
             s--;
             timer = setInterval(function () {
                   if (s > 0) {
                      setState("broadlink.0.learnedSignals.Ventiplus",true);
                      s--;
                   } else {
                      if(timer) clearInterval(timer);
                   }
                }, 1000);
          }
          
          CountDown(anzahl);
          

          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 Reply Last reply
          0
          • T Offline
            T Offline
            toto
            wrote on last edited by
            #5

            VIELEN DANK ^^ Funktioniert bestens.

            Noch eine Frage nebenbei. Ich habe einen Datenpunkt als Zahl, die Unit habe ich leer gelassen, da nicht nötig. Min 0 Max 100. So kann ich sagen Alexa Stelle Stufe auf 7. Das komische ist, dass dann als Wert 7.0000001 übergeben wird. Aber warum??? Bei 3 ist es genau 3. Habe das im Code mit Math.round gelöst. Kann man einem Objekt im vorraus Nachkommastellen streichen lassen? Ist das mit der 1 am Ende ein Fehler von Alexa oder dem Cloud Adapter?

            Falls noch jemand Infrarot Geräte hat und so ein Code benötigt:

            ! ````
            var Stufe;
            var interval;
            var timer = null;
            var anzahl;
            function CountDownPlus(s) { //Funktion Taste Plus im Abstand 1 Sekunde drücken.
            setState("broadlink.0.learnedSignals.Ventiplus",true);
            s--;
            timer = setInterval(function () {
            if (s > 0) {
            setState("broadlink.0.learnedSignals.Ventiplus",true);
            s--;
            } else {
            if(timer) clearInterval(timer);
            }
            }, 1000);
            }
            ! function CountDownMinus(s) { //Funktion Taste Minus im Abstand 1 Sekunde drücken.
            setState("broadlink.0.learnedSignals.Ventiminus",true);
            s--;
            timer = setInterval(function () {
            if (s > 0) {
            setState("broadlink.0.learnedSignals.Ventiminus",true);
            s--;
            } else {
            if(timer) clearInterval(timer);
            }
            }, 1000);
            }
            ! on({id: "javascript.0.Wind"/javascript.0.Wind/, change: "any"},
            ! function (obj) {
            var x = obj.state.val; //Übergebener Wert von der .Wind ID
            x = Math.round(x); //Nachkommastellen wegkürzen
            Stufe = (getState("javascript.0.Stufe").val); //Aktuelle Stufe
            Stufe = Math.round(Stufe);
            ! if (Stufe < x) {
            anzahl = x - Stufe;
            ! CountDownPlus(anzahl);
            ! Stufe = x;
            setState("javascript.0.Stufe", Stufe); //Neue aktuelle Stufe
            ! } else if (Stufe > x) {
            anzahl = Stufe - x;

            CountDownMinus(anzahl);

            Stufe = x;
            setState("javascript.0.Stufe", Stufe);
            

            }});

            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

            395

            Online

            32.7k

            Users

            82.4k

            Topics

            1.3m

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

            • Don't have an account? Register

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