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. [Gelöst] Schleife langsamer ausführen

NEWS

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

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

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

[Gelöst] Schleife langsamer ausführen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 2 Kommentatoren 1.9k 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.
  • T Offline
    T Offline
    toto
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • T Offline
        T Offline
        toto
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • T Offline
            T Offline
            toto
            schrieb am zuletzt editiert von
            #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 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

            825

            Online

            32.4k

            Benutzer

            81.5k

            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