Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Countdown vorzeitig stoppen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Countdown vorzeitig stoppen

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

      Hallo,

      ich bin gerade etwas am verzweifeln, da ich nicht so recht weiter komme. Mit folgendem Skript starte ich einen Countdown in Abhängigkeit eines CUxD-Timers, der nach dem Runterzählen automatisch endet.

      // Countdown für Alarmaktivierung nach Abwesenheit
      
      var count, working;
      
      createState('AlarmCountdown', 0, {
        read: true,
        write: true,
        desc: 'Countdown für Alarmaktivierung nach Abwesenheit',
        def: ''
      });
      
      function countdown(count, working){
        var counter = setInterval(timer, 1000);
      
        function timer(){
          log(working);
          if((count === 0) || (working === false)){
            clearInterval(counter);
            return;
          }
          setState('AlarmCountdown', count);
          count=count-1;
        }
      }
      
      on({id: "hm-rpc.1.CUX2800001.3.WORKING", change: "ne"}, function(obj){
        countdown(getState('hm-rpc.1.CUX2800001.3.TIMER_SET').val, obj.state.val);
      });
      
      

      Das funktioniert auch soweit problemlos. Nun möchte ich den Countdown aber auch abbrechen können, wenn der Zustand WORKING des Timers auf false gesetzt wird. Doch leider reagiert der Timer darauf nicht. Die Variable "working" geht zwar einmalig auf "false", danach nimmt sie aber wieder den Wert "true" an, obwohl "hm-rpc.1.CUX2800001.3.WORKING" tatsächlich auf false steht, und der Timer zählt weiter fleißig bis 0 zurück. Wo liegt mein Denkfehler?

      Gruß,

      Thorsten

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

        Du hast "working" global deklariert und außerdem als Übergabeparameter verwendet. Ändere mal:

        function countdown(count, work){
          working = work;
          ...
        
        
        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 last edited by paul53

          Ich würde es so machen:

          // Countdown für Alarmaktivierung nach Abwesenheit
          
          var count,timer;
          
          createState('AlarmCountdown', 0, {
            read: true,
            write: true,
            desc: 'Countdown für Alarmaktivierung nach Abwesenheit',
            def: ''
          });
          
          function countdown(){
            if(count > 0) {
              count--;
              setState('AlarmCountdown', count);
            } else clearInterval(timer);
          }
          
          on({id: "hm-rpc.1.CUX2800001.3.WORKING", change: "ne"}, function(obj){
            if(obj.state.val) { 
              count = getState('hm-rpc.1.CUX2800001.3.TIMER_SET').val;
              timer = setInterval(countdown, 1000);
            } else clearInterval(timer);
          });
          
          1 Reply Last reply Reply Quote 0
          • D
            dtp last edited by

            Klasse. Funktioniert genau so, wie gewünscht. Vielen, vielen Dank.

            Gruß,

            Thorsten

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            954
            Online

            31.7k
            Users

            79.7k
            Topics

            1.3m
            Posts

            2
            4
            1735
            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