Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. timeout setzen, timeout verlängern..

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    timeout setzen, timeout verlängern..

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mguenther last edited by mguenther

      Hallo,
      irgendwie mein Lieblingsthema - ich will es einfach nicht kapieren. Immer wenn ich glaube, ich habe es kapiert, dann sitze ich 2 Wochen später an dem identischen Problem und ich kapiere schon wieder nix mehr...

      Folgende Situation:
      Ich habe mir meine alte Türklingel mit Hilfe von Aqara Fenstersensoren "smart" gemacht. Nun soll ein Datenpunkt für z.B. 30sek. auf true gesetzt werden, sobald jemand klingelt. Das klappt auch. Nun hätte ich gerne, wenn der Klingler nach 5sek die Nerven verliert und nochmal klingelt, die 30sek ab diesem Zeitraum (sozusagen ab dem letzten Klingeln) laufen.
      Mit Hilfe des Datenpunktes (=true - es hat geklingelt) lasse ich mir in meiner VIS ein bestimmtes widget anzeigen.

      let idTuerklingel = 'zigbee.0.00158d00070b39a2.opened'/*Is open*/; //open = keine Klingel, close = es klingelt
      let idAnzeigeBild = '0_userdata.0.EG.Anzeige_Klingel_Tablet'/*EG Anzeige Klingel Tablet*/;
      
      let timer = null;
      let anzeigezeit=30 // 30 Sekunden
      setState(idAnzeigeBild, false);
      
      on(idTuerklingel, function() {
          let klingel=getState(idTuerklingel).val;
          if (!klingel) {
              console.log("Klingel");
              setState(idAnzeigeBild, true);
          };
      })
      
      on(idAnzeigeBild, function(dp) {
          if (dp.state.val) {
          if (timer) clearTimeout(timer);
              timer = setTimeout(function() {
                      timer = null;
                      setState(idAnzeigeBild, false);
              }, 1000 * anzeigezeit);  
          };
      })
      

      Was muss ich an dem obigen Skript ändern, damit die 30sek immer wieder neu gestartet werden, sobald jemand klingelt.

      Danke
      Marcus

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @mguenther last edited by paul53

        @mguenther sagte: damit die 30sek immer wieder neu gestartet werden, sobald jemand klingelt.

        on(idTuerklingel, function() {
            if (dp.state.val) {
                console.log("Klingel");
                setState(idAnzeigeBild, true, true);
                clearTimeout(timer);
                timer = setTimeout(function() {
                    setState(idAnzeigeBild, false, true);
                }, 1000 * anzeigezeit);  
            }
        });
        

        Es genügt der Trigger für die Klingel. Durch Stoppen des Timers vor dessen Neustart wird die Dauer verlängert (retriggerbares Monoflop).

        M 1 Reply Last reply Reply Quote 1
        • M
          mguenther @paul53 last edited by mguenther

          @paul53

          Danke Paul - wie immer...

          let idTuerklingel = 'zigbee.0.00158d00070b39a2.opened'/*Is open*/; //open = keine Klingel, close = es klingelt
          let idTabletSeiteOG = 'fully-tablet-control.0.device.samsung_a7_og.device_info.currentPage';
          let idTabletSeiteEG = 'fully-tablet-control.0.device.samsung_a7_eg.device_info.currentPage';
          let idAnzeigeBild = '0_userdata.0.EG.Anzeige_Klingel_Tablet'/*EG Anzeige Klingel Tablet*/;
          
          let timer = null;
          let anzeigezeit=30 // 30 Sekunden
          setState(idAnzeigeBild, false);
          
          
          on(idTuerklingel, function(dp) {
              if (!dp.state.val) {
                  console.log("Klingel");
                  setState(idAnzeigeBild, true, true);
                  clearTimeout(timer);
                  timer = setTimeout(function() {
                      setState(idAnzeigeBild, false, true);
                  }, 1000 * anzeigezeit);  
              }
          });
          
          
          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          796
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          2
          3
          168
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo