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] Verzögert ausschalten "Timeout" dauert zu lange

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    120

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

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

[gelöst] Verzögert ausschalten "Timeout" dauert zu lange

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
20 Beiträge 5 Kommentatoren 2.8k 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.
  • Mr. BurnsM Offline
    Mr. BurnsM Offline
    Mr. Burns
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    versuche noch einmal etwas zeit in meine Haussteuerung zu investieren und meine Programme von der CCU2 zu ioBroker zu portieren.

    Einfaches Einschalten der Beleuchtung und zeitverzögert aus:

    // Datenpunkt-ID
    var idSensor = "s7.0.DBs.DB20.Lichtschranke_Haustuere"/*Lichtschranke Eingangstür wurde unterbrochen*/;
    
    // Variablendeklaration und Initialisierung bei Scriptstart
    var idAktor = ("hm-rpc.1.JEQ04XXXXX.13.STATE"/*Aussenstrahler Haustuere.STATE*/);
    
    var timer = null;
    
    // Aufruf der Funktion bei Änderung
    on(idSensor, function(dp) {
        if (timer) {                       // wenn Timer läuft, wird er auf null gesetzt
          clearTimeout(timer);
          timer = null;
       }
    
       if (dp.newState.val) {              // Trigger
          setState(idAktor, true);       // Schalte Licht sofort ein, wenn getriggert wurde
       } else {                            // wenn nicht getriggert wird, starte Timer
          timer = setTimeout(function() {
             timer = null;
             setState(idAktor, false);    // Schalte Licht verzögert aus
            }, 0 * 15 * 1000);              // nach 5 * 60s * 1000ms, also 5 Minuten
       }
    });
    
    

    Das Problem:

    Die Zeit ist in etwa doppelt so lange…also anstelle 15s sind es 30s.

    Gibt es dafür einen Grund?

    Der ioBroker läuft auf einem raspberry Pi3.

    P.S. Das Script hab ich hier aus dem Forum geklaut und angepasst... :-D

    Gruß

    Thomas

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #2

      Hallo,

      beim Skript sind mir zwei Dinge aufgefallen.

      schlecht:

      var idAktor = ("hm-rpc.1.JEQ04XXXXX.13.STATE"/*Aussenstrahler Haustuere.STATE*/);
      
      

      besser:

      var idAktor = "hm-rpc.1.JEQ04XXXXX.13.STATE"/*Aussenstrahler Haustuere.STATE*/;
      
      

      schlecht:

      }, 0 * 15 * 1000);              // nach 5 * 60s * 1000ms, also 5 Minuten
      

      besser:

      Produkt 0 vermeiden, also lieber

      }, 1 * 15 * 1000);              // nach 5 * 60s * 1000ms, also 5 Minuten
      

      Gruß

      Pix

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Antwort Letzte Antwort
      0
      • arteckA Offline
        arteckA Offline
        arteck
        Developer Most Active
        schrieb am zuletzt editiert von
        #3
        }, 0 * 15 * 1000);              // nach 5 * 60s * 1000ms, also 5 Minuten
        

        das ergibt doch ehh ne 0

        zigbee hab ich, zwave auch, nuc's genauso und HA auch

        1 Antwort Letzte Antwort
        0
        • Mr. BurnsM Offline
          Mr. BurnsM Offline
          Mr. Burns
          schrieb am zuletzt editiert von
          #4

          Danke für die Hinweise ich teste es heute Nachmittag mal.

          Aber wenn der Zähler 0 ist sollte das Licht doch eigentlich direkt wieder ausschalten oder?

          Mit den Klammern am Ausgang hatte mich auch irretiert aber stand so im Original..und es hat ja funktioniert.

          Gruß

          Thomas

          1 Antwort Letzte Antwort
          0
          • apollon77A Offline
            apollon77A Offline
            apollon77
            schrieb am zuletzt editiert von
            #5

            Wie lang ist denn die "Haltezeit" der Lichtschranke?

            Du startest den Timer erst wenn der Sensor ein "false" meldet. Jetzt ist also die Frage wie genau der Sensor Signale meldet. Wenn der Sensor erst nach 30 Sekunden ein "false" meldet starte erst dann Dein Timer - der aktuell mit dem Null-produkt sofort aus schaltet.

            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
            • Mr. BurnsM Offline
              Mr. BurnsM Offline
              Mr. Burns
              schrieb am zuletzt editiert von
              #6

              Ihr hattet alle Recht. 0*15 ist natürlich 0. Und ich hatte nen Timer in meiner SPS…hatte ich nicht mehr auf dem Schirm.

              Danke für eure Hinweise.

              Da hab ich gleich die nächste Frage. Wenn ich das Script für einen Bewegungsmelder einsetzen möchte.

              Der Bewegungsmelder soll das Licht einschalten. Wenn das Licht aber schon über den Taster eingeschaltet wurde, soll es aber nicht über den Timer ausgeschaltet werden. Das Script funktioniert auch, ABER: Wenn das Script ein weiteres mal ausgeführt wird, schaltet der Timer das Licht nicht mehr aus...der erste Timer läuft nicht durch.

              Wie habt ihr das gelöst?

              ` > var idSensor = "hm-rpc.0.FEQ00XXXXX.1.PRESS_SHORT";

              var idAktor = "hm-rpc.1.JEQ04XXXXX.16.STATE"/Licht Deckenbeleuchtung Wohnzimmer.STATE/;

              //var stateSensor = getState(idSensor).val;

              var stateAktor = getState(idAktor).val;

              var timer = null;

              // Aufruf der Funktion bei Änderung

              on({id: idSensor, val: true, ack: true}, function(dp) {

              stateSensor = dp.newState.val;

              stateAktor = getState(idAktor).val;

              if (timer) { // wenn Timer läuft, wird er auf null gesetzt

              clearTimeout(timer);

              timer = null;

              }

              if (stateSensor === true && stateAktor === false) { // Trigger

              setState(idAktor, true); // Schalte Licht sofort ein, wenn getriggert wurde

              timer = setTimeout(function() {

              timer = null;

              setState(idAktor, false); // Schalte Licht verzögert aus

              }, 1 * 15 * 1000); // nach 5 * 60s * 1000ms, also 5 Minuten

              }

              }); `

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

                @Mr. Burns:

                Der Bewegungsmelder soll das Licht einschalten. Wenn das Licht aber schon über den Taster eingeschaltet wurde, soll es aber nicht über den Timer ausgeschaltet werden. `
                In dem Skript kann ich keinen Bewegungsmelder finden, sondern nur einen Taster und einen Aktor :?

                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
                • Mr. BurnsM Offline
                  Mr. BurnsM Offline
                  Mr. Burns
                  schrieb am zuletzt editiert von
                  #8

                  Meine Bewegungsmelder sind alle Kabelgebunden über 12/7 Module. Aber in diesem Script ist es zum testen ein Taster auf einer Funkfernbedienung.

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

                    @Mr. Burns:

                    Aber in diesem Script ist es zum testen ein Taster `
                    O.k. Dann vermisse ich aber den Datenpunkt zu dem Taster @Mr. Burns:

                    Wenn das Licht aber schon über den Taster eingeschaltet wurde, `

                    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
                    • Mr. BurnsM Offline
                      Mr. BurnsM Offline
                      Mr. Burns
                      schrieb am zuletzt editiert von
                      #10

                      Dachte das wäre mein Datenpunkt des Tasters:
                      > var idSensor = "hm-rpc.0.FEQ00XXXXX.1.PRESS_SHORT";

                      > on({id: idSensor, val: true, ack: true}, function(dp) {

                      zumindest geht das Licht an wenn ich die Taste drücke…und nach 15s wieder aus, insofern ich innerhalb der 15s nicht noch mal drücke.

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

                        @Mr. Burns:

                        Der Bewegungsmelder soll das Licht einschalten. Wenn das Licht aber schon über den Taster eingeschaltet wurde, `
                        Nach dieser Aussage erwarte ich einen Bewegungsmelder (zum Testen die Taste einer FB) und einen Taster zu Schalten des Lichts.

                        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
                        • Mr. BurnsM Offline
                          Mr. BurnsM Offline
                          Mr. Burns
                          schrieb am zuletzt editiert von
                          #12

                          sollte der Lichtschalter (bzw. die Lichtschalter) in das Script?

                          Hab das Licht zum testen über die CCU direkt geschaltet (bzw. über die app).

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

                            @Mr. Burns:

                            Hab das Licht zum testen über die CCU direkt geschaltet (bzw. über die app). `
                            Dann muss man den Aktor auswerten.
                            @Mr. Burns:

                            sollte der Lichtschalter (bzw. die Lichtschalter) in das Script? `
                            Nicht unbedingt. Handelt es sich um eine (mehrere) Direktverknüpfung(en) ?

                            Vielleicht geht es so:

                            var idSensor = "hm-rpc.0.FEQ00XXXXX.1.PRESS_SHORT";
                            var idAktor = "hm-rpc.1.JEQ04XXXXX.16.STATE"/*Licht Deckenbeleuchtung Wohnzimmer.STATE*/;
                            
                            var stateSensor = false;
                            var stateAktor = getState(idAktor).val;
                            var timer = null;
                            
                            // Aufruf der Funktion bei Bewegung
                            on({id: idSensor, val: true, ack: true}, function() {
                                if (!stateAktor || stateSensor) {   // Licht ist aus oder wurde durch BWM eingeschaltet
                                    stateSensor = true;
                                    if(!stateAktor) setState(idAktor, true); // Schalte Licht sofort ein, wenn getriggert wurde
                                    if(timer) clearTimeout(timer);
                                    timer = setTimeout(function() {
                                        timer = null;
                                        setState(idAktor, false); // Schalte Licht verzögert aus
                                    }, 1 * 15 * 1000); // nach 5 * 60s * 1000ms, also 5 Minuten
                                }
                            });
                            
                            on({id: idAktor, ack: true}, function(dp) {
                                stateAktor = dp.state.val;
                                if(!stateAktor) {  // Licht aus
                                    stateSensor = false;
                                    if(timer) clearTimeout(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
                            • Mr. BurnsM Offline
                              Mr. BurnsM Offline
                              Mr. Burns
                              schrieb am zuletzt editiert von
                              #14

                              Es funktioniert genauso wie es mir vorgestellt habe!

                              Super! Vielen Dank.

                              Ich bin noch dabei die Logik zu verstehen…:-D

                              Gruß

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

                                @Mr. Burns:

                                Es funktioniert genauso wie es mir vorgestellt habe! `
                                Das freut mich. Dann markiere bitte noch das Thema als gelöst (im ersten Beitrag).

                                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
                                • Mr. BurnsM Offline
                                  Mr. BurnsM Offline
                                  Mr. Burns
                                  schrieb am zuletzt editiert von
                                  #16

                                  Klar. Für alle die sowas oder so ähnlich nachbauen:

                                  Das Licht (in der Küche) soll Abend (wenn es dämmert) einschalten wenn jemand den Raum betritt. Wurde das Licht bereits manuell eingeschaltet, soll es nicht über die Zeitverzögerung wieder ausgeschaltet werden:

                                  // Datenpunkt-ID
                                  var idSensor = "hm-rpc.0.FEQ00XXXXX.1.PRESS_SHORT";
                                  var idAktor = "hm-rpc.1.JEQ04XXXXX.16.STATE"/*Licht Deckenbeleuchtung Wohnzimmer.STATE*/;
                                  var idLux = "hm-rega.0.8681"/*homeduino_a_lux*/;
                                  
                                  var stateSensor = false;
                                  var stateAktor = getState(idAktor).val;
                                  var stateLux = getState(idLux).val;
                                  var timer = null;
                                  
                                  // Aufruf der Funktion bei Bewegung
                                  on({id: idSensor, val: true, ack: true}, function() {                    // Trigger 
                                      if ((stateLux <= 500) && (!stateAktor || stateSensor)) {       // Licht aus oder Merker BWM
                                          stateSensor = true;                                                        // Merker BWM
                                          if(!stateAktor) setState(idAktor, true);                             // Schalte Licht sofort ein, wenn getriggert wurde
                                          if(timer) clearTimeout(timer);
                                          timer = setTimeout(function() {
                                              timer = null;
                                              setState(idAktor, false);                                                // Schalte Licht verzögert aus
                                          }, 1 * 15 * 1000);                                                             // nach 5 * 60s * 1000ms, also 5 Minuten
                                      }
                                  });
                                  
                                  on({id: idAktor, ack: true}, function(dp) {                                   // Trigger
                                      stateAktor = dp.state.val;                                                    // Merker Aktor
                                      if(!stateAktor) {                                                                    // Wenn Merker Aktor aus
                                          stateSensor = false;                                                        // Setze Merker BWM aus
                                          if(timer) clearTimeout(timer);                                          // ???
                                          timer = null;                                                                   // ???
                                      }        
                                  });
                                  
                                  1 Antwort Letzte Antwort
                                  0
                                  • paul53P Offline
                                    paul53P Offline
                                    paul53
                                    schrieb am zuletzt editiert von
                                    #17
                                            if(timer) clearTimeout(timer);        // Abbruch Timeout (Licht war per BWM ein und ist manuell aus)
                                            timer = null;                         // für if(timer)
                                    
                                    

                                    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
                                    • paul53P Offline
                                      paul53P Offline
                                      paul53
                                      schrieb am zuletzt editiert von
                                      #18

                                      @Mr. Burns:

                                      Das Licht (in der Küche) soll Abend (wenn es dämmert) einschalten `
                                      Es fehlt noch die Aktualisierung der Skriptvariable stateLux (wird jetzt nur bei Skriptstart gesetzt).

                                      on(idLux, function(dp) {
                                          stateLux = dp.state.val;
                                      });
                                      

                                      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
                                      • Mr. BurnsM Offline
                                        Mr. BurnsM Offline
                                        Mr. Burns
                                        schrieb am zuletzt editiert von
                                        #19

                                        Du hast natürlich vollkommen recht. Zu meiner Verteidigung: Ich kann in Wirklichkeit gar nicht scripten…ich mach mehr in FUP Programmierung (S7/TIA)...Ich versteh auch nicht wie sich da "Normalos" zurecht finden. Den unteren Teil deines Scripts hab ich noch nicht richtig verstanden. Du setzt den Merker zurück wenn das Licht ausgeht
                                        ` > if(!stateAktor) { // Wenn Merker Aktor aus

                                        stateSensor = false; // Setze Merker BWM aus , aber eigentlich geht er ja nur in das Script bei einer positiven Flanke > on({id: idAktor, ack: true}, function(dp) { // Trigger `

                                        Ich will nur Prüfen ob es schon Dunkel genug ist wenn der Bewegungsmelder ausgelöst wird…

                                        Könnte doch so funktionieren:

                                        // Datenpunkt-ID
                                        var idSensor = "hm-rpc.0.FEQ00XXXXX.1.PRESS_SHORT";
                                        var idAktor = "hm-rpc.1.JEQ04XXXXX.16.STATE"/*Licht Deckenbeleuchtung Wohnzimmer.STATE*/;
                                        var idLux = "hm-rega.0.8681"/*homeduino_a_lux*/;
                                        
                                        var stateSensor = false;
                                        var stateAktor = getState(idAktor).val;
                                        var stateLux = getState(idLux).val;
                                        var timer = null;
                                        
                                        // Aufruf der Funktion bei Bewegung
                                        on({id: idSensor, val: true, ack: true}, function() {       // Trigger 
                                        stateLux = getState(idLux).val;
                                            if ((stateLux <= 500) && (!stateAktor || stateSensor)) { // Licht aus oder Merker BWM
                                           // log (stateLux);
                                                stateSensor = true;                                 // Merker BWM
                                                if(!stateAktor) setState(idAktor, true);            // Schalte Licht sofort ein, wenn getriggert wurde
                                                if(timer) clearTimeout(timer);
                                                timer = setTimeout(function() {
                                                    timer = null;
                                                    setState(idAktor, false);                       // Schalte Licht verzögert aus
                                                }, 1 * 15 * 1000);                                  // nach 5 * 60s * 1000ms, also 5 Minuten
                                            }
                                        });
                                        
                                        on({id: idAktor, ack: true}, function(dp) {                 // Trigger
                                            stateAktor = dp.state.val;                              // Merker Aktor
                                            if(!stateAktor) {                                       // Wenn Merker Aktor aus
                                                stateSensor = false;                                // Setze Merker BWM aus
                                                if(timer) clearTimeout(timer);                      // ???
                                                timer = null;                                       // ???
                                            }        
                                        });
                                        

                                        Edit:

                                        Hab gerade noch was rumprobiert. Bedeutet dies
                                        > ack: true
                                        gar nicht bei Aktualisierung Wert "True" also Positive Flanke? Er triggert die Funktion bei jedem Flankenwechsel. :o

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

                                          @Mr. Burns:

                                          Bedeutet dies

                                          ack: true

                                          gar nicht bei Aktualisierung Wert "True" also Positive Flanke? Er triggert die Funktion bei jedem Flankenwechsel. `
                                          Er triggert sogar bei jeder Änderung des Zeitstempels, unter der Bedingung, dass eine Bestätigung (Rückmeldung des Aktors über die Ausführung) erfolgt ist. Sollte nur bei Wert "true" getriggert werden, muss man schreiben val: true. Will man ganz sicher gehen, dass nur bei einer postiven Flanke getriggert wird, dann val: true, oldVal: false oder val: true, change: 'ne'.

                                          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
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          466

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          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