Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Countdown Script umbauen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Countdown Script umbauen

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

      @coyote:

      Das funktioniert schon mal, danke dir Pix.

      Nun geht es weiter…

      Wie kann ich denn jetzt in Vis anstatt die 9000 Sekunden mir z.B 150min oder eben 2h30min anzeigen lassen.

      Dazu muss doch das Script geändert werden oder?

      Und wenn die Statusmeldung der Variable "Waschmaschine" = false ist würde ich gerne den Counter zurücksetzen.

      Sorry für die ganzen Fragen, aber das ist das erste Mal dass ich mit Javascript zu tun hab. Wird noch etwas dauern bis ich da durchblicke. `

      var interval = null;
      var countdown = 9000;
      
      createState('countdown', seconds2text(countdown));
      createState('afterCount', false);
      createState('countTrigger', false);
      
      function seconds2text(seconds) {
      	var sec_num = parseInt(seconds, 10); // don't forget the second param
          var hours   = Math.floor(sec_num / 3600);
          var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
          var seconds = sec_num - (hours * 3600) - (minutes * 60);
      
      	var time;
      	if (hours > 0)
      		if (hours   < 10) {hours   = "0" + hours;}
      		if (minutes < 10) {minutes = "0" + minutes;}
      		if (seconds < 10) {seconds = "0" + seconds;}
      		time = hours + ' Stunden, ' + minutes + ' Minuten und ' + seconds + ' Sekunden';
      	} else 	if (minutes > 0)
      		if (minutes < 10) {minutes = "0" + minutes;}
      		if (seconds < 10) {seconds = "0" + seconds;}
      		time = minutes + ' Minuten und ' + seconds + ' Sekunden';
      	} else 
      		if (seconds < 10) {seconds = "0" + seconds;}
      		time = seconds + ' Sekunden';
      	}
      
          return time;
      }
      
      function count() {
      	// remove trigger
      	if (getState('countTrigger').val) {
      		setState('countTrigger', false);
      	}
      
      	if (countdown > 1) {
      		setState('countdown', seconds2text(--countdown));
      	} else {
      		clearInterval(interval);
      		interval = null;
      		setState('countdown', seconds2text(0));
      		setState('afterCount', true);
      	}
      }
      
      on('countTrigger', function (obj) {
          if (obj.newState.val === true || obj.newState.val === 'true' || obj.newState.val == 1) {
      		countdown = 9000;
              setState('countdown', seconds2text(countdown)); // 2h30min = 150min = 9000s
              setState('afterCount', false);
      		if (!interval) {		
      			count();
      			interval = setInterval(count, 1000);
      		}
          }    
      });
      
      // Wenn Wama an, Counter starten
      on('hm-rega.0.Waschmaschine', function (obj) { // Homematic Variable
          if (obj.newState.val === true || obj.newState.val === 'true' || obj.newState.val === 'läuft' || obj.newState.val == 1) {
              setState('countTrigger', true);
          }    
      });
      

      Ohne Gewähr. 🙂

      1 Reply Last reply Reply Quote 0
      • coyote
        coyote Most Active last edited by

        Danke dir Bluefox, werde dein Script nachher mal testen.

        Was muss ich hier in VIs dann eintragen?

        536_unbenannt.png

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

          Was für ein Widget ist das?

          1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators last edited by

            Das hast du mal in einem thread gebastelt um einen Countdown darzustellen.

            http://forum.iobroker.org/viewtopic.php … 5503#p5406

            Ich hab es jedoch nicht ans laufen bekommen 😞

            Gruß

            Rainer

            1 Reply Last reply Reply Quote 0
            • coyote
              coyote Most Active last edited by

              Genau, das aus dem Thread.

              @Homoran: Echt nicht? Bei mir läuft das Ding. Ich weiß eben jetzt nur nicht was ich dort eintragen muss um nicht die Sekunden, sondern die 2,5h zu sehen.

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

                Nimm einfach basic-string-val.

                1 Reply Last reply Reply Quote 0
                • coyote
                  coyote Most Active last edited by

                  Läuft so leider nicht.

                  script.js.testscript compile failed: Syntax error: unexpected token else

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

                    @coyote:

                    Läuft so leider nicht.

                    script.js.testscript compile failed: Syntax error: unexpected token else `
                    Da fehlten ein paar "{"

                    var interval = null;
                    var countdown = 9000;
                    
                    createState('countdown', seconds2text(countdown));
                    createState('afterCount', false);
                    createState('countTrigger', false);
                    
                    function seconds2text(_seconds) {
                        var sec_num = parseInt(_seconds, 10); // don't forget the second param
                        var hours   = Math.floor(sec_num / 3600);
                        var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
                        var seconds = sec_num - (hours * 3600) - (minutes * 60);
                    
                        var time;
                        if (hours > 0) {
                            if (hours   < 10) {hours   = "0" + hours;}
                            if (minutes < 10) {minutes = "0" + minutes;}
                            if (seconds < 10) {seconds = "0" + seconds;}
                            time = hours + ' Stunden, ' + minutes + ' Minuten und ' + seconds + ' Sekunden';
                        } else    if (minutes > 0) {
                            if (minutes < 10) {minutes = "0" + minutes;}
                            if (seconds < 10) {seconds = "0" + seconds;}
                            time = minutes + ' Minuten und ' + seconds + ' Sekunden';
                        } else {
                            if (seconds < 10) {seconds = "0" + seconds;}
                            time = seconds + ' Sekunden';
                        }
                    
                        return time;
                    }
                    
                    function count() {
                        // remove trigger
                        if (getState('countTrigger').val) {
                            setState('countTrigger', false);
                        }
                    
                        if (countdown > 1) {
                            setState('countdown', seconds2text(--countdown));
                        } else {
                            clearInterval(interval);
                            interval = null;
                            setState('countdown', seconds2text(0));
                            setState('afterCount', true);
                        }
                    }
                    
                    on('countTrigger', function (obj) {
                        if (obj.newState.val === true || obj.newState.val === 'true' || obj.newState.val == 1) {
                            countdown = 9000;
                            setState('countdown', seconds2text(countdown)); // 2h30min = 150min = 9000s
                            setState('afterCount', false);
                            if (!interval) {
                                count();
                                interval = setInterval(count, 1000);
                            }
                        }
                    });
                    
                    // Wenn Wama an, Counter starten
                    on('hm-rega.0.Waschmaschine', function (obj) { // Homematic Variable
                        if (obj.newState.val === true || obj.newState.val === 'true' || obj.newState.val === 'läuft' || obj.newState.val == 1) {
                            setState('countTrigger', true);
                        }
                    });
                    
                    1 Reply Last reply Reply Quote 0
                    • coyote
                      coyote Most Active last edited by

                      Ah ja, jetzt läuft es perfekt. Vielen Dank, Bluefox :mrgreen:

                      1 Reply Last reply Reply Quote 0
                      • K
                        klmf2 last edited by

                        ist ja irgendwie schon älter, habe aber noch mal eine Frage.

                        Ich habe das Skript von Bluefox übernommen. Würde aber anstelle der 9000s gerne einen Wert aus einen Datenpunkt nehmen.

                        Den Datenpunkt habe ich bereits erstellt (Zahl), komme aber nicht weiter. Versucht habe ich schon:

                        on(idSchalter + 'countTrigger', function (obj) {
                            if (obj.newState.val === true || obj.newState.val === 'true' || obj.newState.val == 1) {
                                countdown = "javascript.0.Timer.TimerLena.Timerwert";
                                setState(idSchalter + 'countdown', seconds2text(countdown)); // 2h30min = 150min = 9000s
                                setState(idSchalter + 'afterCount', false);
                                if (!interval) {
                                    count();
                                    interval = setInterval(count, 1000);
                        

                        oder

                                countdown = 'javascript.0.Timer.TimerLena.Timerwert';
                        
                        

                        aber wenn ich den Counter dann beginne, wird der Countdown immer als 00s übernommen.

                        Mein Datenpunkt sieht aktuell wie folgt aus und hat den Wert 1800:

                        {
                          "from": "system.adapter.admin.0",
                          "ts": 1543496749271,
                          "common": {
                            "name": "Timerwert",
                            "role": "",
                            "type": "number",
                            "desc": "Manuell erzeugt",
                            "unit": "",
                            "min": 0,
                            "def": 0,
                            "read": true,
                            "write": true
                          },
                          "native": {},
                          "acl": {
                            "object": 1636,
                            "owner": "system.user.admin",
                            "ownerGroup": "system.group.administrator",
                            "state": 1636
                          },
                          "_id": "javascript.0.Timer.TimerLena.Timerwert",
                          "type": "state"
                        }
                        

                        Wahrscheinlich liegt es am Syntax?!

                        Grüße, Sebastian

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

                          @klmf2:

                          countdown = 'javascript.0.Timer.TimerLena.Timerwert';
                             
                          ```` `  
                          

                          Versuche mal:

                          countdown = (getState('javascript.0.Timer.TimerLena.Timerwert').val);
                          
                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          1.1k
                          Online

                          31.7k
                          Users

                          79.7k
                          Topics

                          1.3m
                          Posts

                          6
                          15
                          3840
                          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