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] Countdown Script umbauen

NEWS

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

[gelöst] Countdown Script umbauen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
15 Beiträge 6 Kommentatoren 4.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.
  • BluefoxB Offline
    BluefoxB Offline
    Bluefox
    schrieb am zuletzt editiert von
    #4

    @coyote:

    Hi Leute,

    bin bei Homematic noch Anfänger, hatte vorher RWE.

    Hier im Forum habe ich schon viele Threads gefunden, die mir weitergeholfen haben. Nun zu meiner Frage:

    Ich habe einen Mess-Zwischenstecker an der Waschmaschine. Ich möchte gerne, wenn die Waschmaschine anfängt zu laufen einen Countdown in Vis haben, der sagen wir mal 2h30min runterzählt, damit ich zwischendurch sehen kann wie lange es noch dauert.

    Ich habe das Conutdown Script hier aus dem Forum mal getestet und funktioniert auch prima. Jetzt müsste ich das Script nur so umbauen, dass der Countdown anfängt zu laufen, wenn meine angelegte Systemvariable "Waschmaschine" auf "läuft" umschaltet.

    Leider kann ich kein Javascript, könnte mir vllt jemand helfen?

    Hier ist das Testscript von Bluefox:

    createState('countdown', 10);
    createState('afterCount', false);
    createState('countTrigger', false);
    function count() {
        setTimeout(function () {
            var timer = getState('countdown').val || 10;
            if (timer > 1) {
                setState('countTrigger', false);
                setState('countdown', timer - 1);
                count();
            } else {
                setState('countdown', 0);
                setState('afterCount', true);
            }
        }, 1000);
    }
    
    on('countTrigger', function (obj) {
        if (obj.newState.val === true || obj.newState.val === 'true' || obj.newState.val == 1) {
            setState('countdown', 10);
            setState('afterCount', false);
            count();
        }    
    });
    

    Hier sind ja auch noch 2 Button Widgets angelegt, die bräuchte ich dann natürlich nicht mehr. `
    Komisch dass du mit 50 Sekunden Probleme gehabt hast. Eigentlich setTimeout unterbricht Call-Stack und fängt von vorne an.

    Man konnte das auch so lösen:

    createState('countdown', 9000);
    createState('afterCount', false);
    createState('countTrigger', false);
    var interval = null;
    
    function count() {
    	var timer = getState('countdown').val || 9000;
    	if (timer > 1) {
    		setState('countTrigger', false);
    		setState('countdown', timer - 1);
    	} else {
    		clearInterval(interval);
    		interval = null;
    		setState('countdown', 0);
    		setState('afterCount', true);
    	}
    }
    
    on('countTrigger', function (obj) {
        if (obj.newState.val === true || obj.newState.val === 'true' || obj.newState.val == 1) {
            setState('countdown', 9000); // 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 Antwort Letzte Antwort
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #5

      @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 Antwort Letzte Antwort
      0
      • coyoteC Offline
        coyoteC Offline
        coyote
        Most Active
        schrieb am zuletzt editiert von
        #6

        Danke dir Bluefox, werde dein Script nachher mal testen.

        Was muss ich hier in VIs dann eintragen?

        536_unbenannt.png

        1 Antwort Letzte Antwort
        0
        • BluefoxB Offline
          BluefoxB Offline
          Bluefox
          schrieb am zuletzt editiert von
          #7

          Was für ein Widget ist das?

          1 Antwort Letzte Antwort
          0
          • HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von
            #8

            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

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            1 Antwort Letzte Antwort
            0
            • coyoteC Offline
              coyoteC Offline
              coyote
              Most Active
              schrieb am zuletzt editiert von
              #9

              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 Antwort Letzte Antwort
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                schrieb am zuletzt editiert von
                #10

                Nimm einfach basic-string-val.

                1 Antwort Letzte Antwort
                0
                • coyoteC Offline
                  coyoteC Offline
                  coyote
                  Most Active
                  schrieb am zuletzt editiert von
                  #11

                  Läuft so leider nicht.

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

                  1 Antwort Letzte Antwort
                  0
                  • BluefoxB Offline
                    BluefoxB Offline
                    Bluefox
                    schrieb am zuletzt editiert von
                    #12

                    @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 Antwort Letzte Antwort
                    0
                    • coyoteC Offline
                      coyoteC Offline
                      coyote
                      Most Active
                      schrieb am zuletzt editiert von
                      #13

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

                      1 Antwort Letzte Antwort
                      0
                      • K Offline
                        K Offline
                        klmf2
                        schrieb am zuletzt editiert von
                        #14

                        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 Antwort Letzte Antwort
                        0
                        • jedoJ Offline
                          jedoJ Offline
                          jedo
                          schrieb am zuletzt editiert von
                          #15

                          @klmf2:

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

                          Versuche mal:

                          countdown = (getState('javascript.0.Timer.TimerLena.Timerwert').val);
                          

                          Viele 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

                          766

                          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