NEWS
[gelöst] Countdown Script umbauen
-
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.
-
Danke dir Bluefox, werde dein Script nachher mal testen.
Was muss ich hier in VIs dann eintragen?
-
Was für ein Widget ist das?
-
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
-
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.
-
Nimm einfach basic-string-val.
-
Läuft so leider nicht.
script.js.testscript compile failed: Syntax error: unexpected token else
-
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); } });
-
Ah ja, jetzt läuft es perfekt. Vielen Dank, Bluefox :mrgreen:
-
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
-
countdown = 'javascript.0.Timer.TimerLena.Timerwert'; ```` `
Versuche mal:
countdown = (getState('javascript.0.Timer.TimerLena.Timerwert').val);