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. Frage zu Timern in javascript

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Frage zu Timern in javascript

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
7 Beiträge 2 Kommentatoren 510 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.
  • M Offline
    M Offline
    mguenther
    schrieb am zuletzt editiert von
    #1

    Hallo Zusammen,

    ich habe hier schon im Forum gesucht und ein paar Threads gelesen, dennoch kapiere ich den Einsatz einer Timer-Funktion noch nicht so ganz.

    Folgendes Szenario:

    Ich habe 4 Taster bzw. Ereignisse (Taster1, Taster2, Taster3, Taster4) und 2 Variablen. Variable1 ist eine Zahl im Bereich 0-100, Variable2 ist eine boolean mit true/false.

    folgende Umsetzung:

    Wenn ich Taster1 oder 2 drücke und halte, ändert sich im selben Moment der Wert Variable1

    Nachdem Taster1 oder 2 losgelassen wurde und der Wert von Variable1 nicht genau 0 oder genau 100 ist, sondern ein Wert dazwischen liegt, dann soll Variable2 auf "true" gesetzt werden, andernfalls auf "false".

    Wenn aber jetzt Taster3 betätigt wird, soll für einen Zeitraum x, z.B. 24h, der Wert von Variable2 auf true bleiben, unabhängig, ob ich Taster1 oder 2 betätige. Dabei soll sich aber weiterhin der Wert für Variable1 ändern.

    Immer wenn ich Taster3 betätige, fängt der Zeitraum wieder von vorne an zu laufen.

    Wenn ich Taster4 betätige, wird der Zeitraum gestoppt und Variable2 wird auf false gesetzt.

    von der Idee her:

    const idTaster1='...';
    const idTaster2='...';
    const idTaster3='...';
    const idTaster4='...';
    const idVariable1='....':
    
    var variable1 = getState(idVariable1).val;
    var variable2 = false;
    
    function ausloesen(){
       if(variable1=0 || variable1=100) variable2= false
       else variable2 =true;
    
    wenn Taster3, dann TIMER????
    wenn Taster4, dann TIMER canceln?
    }
    
    on(idVariable1, function(obj) {
       variable1 = obj.state.val;
       ausloesen();
    });
    
    on(idTaster3, function(obj) {
       ausloesen(); //aber mit Timer setzen
    });
    
    on(idTaster4, function(obj) {
       ausloesen(); //aber mit Timer abbrechen
    });
    
    

    Habt ihr das Problem verstanden?

    Wie setz ich das um?

    Ich verstehe momentan noch nicht, wie ein Timer umgesetzt werden kann.

    danke

    Marcus

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @mguenther:

      Wenn aber jetzt Taster3 betätigt wird, soll für einen Zeitraum x, z.B. 24h, der Wert von Variable2 auf true bleiben, `
      Nur auf true bleiben, wenn bereits auf true, oder auf true gesetzt werden ?
      @mguenther:

      Dabei soll sich aber weiterhin der Wert für Variable1 ändern. `
      Wodurch wird der Datenpunkt idVariable1 verändert ?
      @mguenther:

      Immer wenn ich Taster3 betätige, fängt der Zeitraum wieder von vorne an zu laufen. `
      Das löst man etwa so:

      var timer = null;
      
      on(idTaster3, function() {
         if(timer) clearTimeout(timer);
         timer = setTimeout(function() {
             timer = null;
             ausloesen(); // Aufruf nach Ablauf der Verzögerungszeit
         }, 60 * 60000); // 60 Minuten    
      });
      
      

      timer mus eine globale Variable sein. Die Variable timer kann innerhalb der Funktion ausloesen() ausgewertet werden.
      @mguenther:

      Wenn ich Taster4 betätige, wird der Zeitraum gestoppt und Variable2 wird auf false gesetzt. `

      on(idTaster4, function() {
         if(timer) clearTimeout(timer); // Stopp Timer
         timer = null;
         variable2 = false;
         ausloesen();
      });
      
      

      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
      • M Offline
        M Offline
        mguenther
        schrieb am zuletzt editiert von
        #3

        @paul53:

        @mguenther:

        Wenn aber jetzt Taster3 betätigt wird, soll für einen Zeitraum x, z.B. 24h, der Wert von Variable2 auf true bleiben, Nur auf __true__ bleiben, wenn bereits auf __true__, oder auf __true__ gesetzt werden ?
        hmmmm… wenn er auf true steht, dann soll der timer wieder für den zeitraum starten. Ich brauche da keinen neuen Trigger als Auslöser, wenn du das meinst.

        @paul53:

        @mguenther:

        Dabei soll sich aber weiterhin der Wert für Variable1 ändern. Wodurch wird der Datenpunkt __idVariable1__ verändert ?
        immer nur durch Taster1 und Taster2

        Rest probiere ich aus….

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @mguenther:

          Ich brauche da keinen neuen Trigger als Auslöser, wenn du das meinst. `
          Nein, das meine ich nicht, sondern: Soll variable2 durch Taster3 auf true gesetzt werden oder auf false bleiben, falls sie zu dem Zeitpunkt auf false steht ?
          @mguenther:

          immer nur durch Taster1 und Taster2 `
          Das ist bisher aus dem Programm nicht ersichtlich, da (noch) kein setState() vorhanden. Sollte dann die Funktion ausloesen() nicht ausschließlich durch Taster1 und Taster2 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

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            mguenther
            schrieb am zuletzt editiert von
            #5

            @paul53:

            @mguenther:

            Ich brauche da keinen neuen Trigger als Auslöser, wenn du das meinst. Nein, das meine ich nicht, sondern: Soll __variable2__ durch Taster3 auf __true__ gesetzt werden oder auf __false__ bleiben, falls sie zu dem Zeitpunkt auf __false__ steht ?
            ah, nein, sobald Taster3 betätigt wird, soll Variable2 auf true gesetzt werden.
            @paul53:

            @mguenther:

            immer nur durch Taster1 und Taster2 Das ist bisher aus dem Programm nicht ersichtlich, da (noch) kein __setState()__ vorhanden. Sollte dann die Funktion __ausloesen()__ nicht ausschließlich durch Taster1 und Taster2 aufgerufen werden ?
            mir ging es eher darum, dass die Variable2 auf true/false für den Zeitraum bzw. für den Wertebereich gesetzt wird. Dass durch Betätigung von Taster1 und 2 der Wert für Variable1 geändert wird, habe ich mit einer Direktverbindung gelöst. Das geht somit davon unabhängig.

            1 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              @mguenther:

              sobald Taster3 betätigt wird, soll Variable2 auf true gesetzt werden. `
              Also hat variable2 lediglich eine Sperrfunktion. Dann besser so:

              on(idTaster3, function() {
                 variable2 = true;
                 if(timer) clearTimeout(timer);
                 timer = setTimeout(function() {
                     timer = null;
                     variable2 = false;
                 }, 60 * 60000); // 60 Minuten    
              });
              
              on(idTaster4, function() {
                 variable2 = false;
                 if(timer) clearTimeout(timer); // Stopp Timer
                 timer = null;
              });
              

              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
              • M Offline
                M Offline
                mguenther
                schrieb am zuletzt editiert von
                #7

                danke - hat funktioniert.

                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

                731

                Online

                32.6k

                Benutzer

                82.1k

                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