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. Doppelte Ausführung von Skriptcode.

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    18
    1
    621

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

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

Doppelte Ausführung von Skriptcode.

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
4 Beiträge 3 Kommentatoren 1.1k 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
    MistyReblaus
    schrieb am zuletzt editiert von
    #1

    Hi,

    ich habe den folgenden Skriptcode. Im Allgemeinen habe ich einen Schalter, mit dem ich durch Drücken der EIN Taste eine Lampe für xx Sekunden leuchten lassen möchte. Wenn man die Taste öfter drückt, werden wieder XX Sekunden auf den Zähler addiert. Der Zahler wird dann wieder heruntergezählt, bis das Licht ausgeschaltet wird. Im Endeffekt ähnlich wie bei einem Treppenlicht nur mit dieser additiven Funktion.

    Was ich jetzt in der Log Ausgabe sehe, ist, dass die Log Ausgabe pro abgelaufenen Timer (hier alle 5 Sekunden) zweimal ausgeführt wird.

    Hat jemand eine Idee?

    
    createState('Aussenbeleuchtung_Eingang_CountDown', 0); 
    createState('Aussenbeleuchtung_Eingang_CountDown_State', false); 
    
    // Auslösung mit Homematic Hardware-Taster
    on({
        id: "hm-rpc.1.XXXXXX.1.STATE"/*Taster XXXXX.PRESS_SHORT*/,
        val: true
        }, function(obj) 
            {
    
                log("Hier");
                var current_countdown = getState('Aussenbeleuchtung_Eingang_CountDown').val || 30;
    
                if( current_countdown != 30)
                 {   current_countdown += 30;}
    
                setState('Aussenbeleuchtung_Eingang_CountDown', current_countdown); 
    
                if(!getState("Aussenbeleuchtung_Eingang_CountDown_State").val)
                {    count();}
            }
    );
    
    function count() {
        setTimeout(function () {
            var countdown = getState('Aussenbeleuchtung_Eingang_CountDown').val;
            setState("Aussenbeleuchtung_Eingang_CountDown_State",true);
    
            log("Countdown ist: "+ countdown);
    
            if (countdown >= 1) {
                setState('Aussenbeleuchtung_Eingang_CountDown', countdown - 1);
                count();
            }
            else
              setState("hm-rpc.1.XXXXXX.1.STATE",false);
              setState("Aussenbeleuchtung_Eingang_CountDown_State",false);
        }, 5000);
    }
    
    
    1 Antwort Letzte Antwort
    0
    • apollon77A Offline
      apollon77A Offline
      apollon77
      schrieb am zuletzt editiert von
      #2

      Du prüfst in "on" nicht auf den "ack" Flag … also damit hast Du theoretisch einmal nen call mit "ack=false" und sobald vom Gerät bestätigt mit "ack=true" ... Kann das der Grund sein?

      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #3

        Will man retriggern, sollte der Timer vorher gelöscht werden:

        ...
        var timer = null;
        
        function count() {
            if(timer) clearTimeout(timer);
            timer = setTimeout(function () {
                ...
        

        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
          MistyReblaus
          schrieb am zuletzt editiert von
          #4

          Hallo ihr beiden,

          ja, es war beides korrekt. Sowohl den TImer muss ich zurücksetzten damit es sauber ist, als auch auf das ack flag schauen. Da ich erst mit der Programmierung anfange, bin ich froh über jedes Beispiel und Frage, die ich hier beitragen kann, auch wenn Sie noch so einfach erscheint ;-)

          Grüße, Jens

          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

          752

          Online

          32.5k

          Benutzer

          81.6k

          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