NEWS
Hilfe bei Script Timer
-
Hallo zusammen,
ich bin zur Zeit mal wieder ein wenig mit meine Anfänger Wissen am Programmieren.
Benötige jetzt noch mal eure Hilfe.Ich lege in einem Script folgende Datenpunkte an:
createState(pfad + '_beginn', "",{read: true, write: true, name: Info Start, type: "string", unit: "hh:mm"})
Innerhalb des Scriptes möchte ich diese Uhrzeit dann nutzen um einen Timer zu setzen.
let timerstunde = parseInt(getState(pfad + '_beginn').val.slice(0,2), 10) let timerminute = parseInt(getState(pfad + '_beginn').val.slice(3,5), 10) if (timer) clearSchedule(timer) timer = on({ time: { hour: timerstunde, minute: timerminute } }, function () { log (Testeintrag) });
Irgendwie fühlt es sich nicht so gut an hier den Weg um einen String zu gehen und diesen zu zerlegen.
Gibt es eine bessere Methode dafür ?Gruß
Michael -
@mctom sagte: Gibt es eine bessere Methode dafür ?
In ein Array splitten:
let arr = getState(pfad + '_beginn').val.split(':'); if (timer) clearSchedule(timer); timer = schedule(arr[1] + ' ' + arr[0] + ' * * *', function() { log('Testeintrag'); });
-
@paul53 vielen Dank für deine Hilfe.
Da sind dann schon wieder ein paar Codezeilen weniger.
-
@mctom sagte: ein paar Codezeilen weniger.
... und man kann in der Uhrzeit die führende 0 weglassen.
-
@paul53 stimmt.
vielleicht hast du noch eine Idee wie ich etwas umsetzen kann.
Ich habe in diesem Script verschiedene Timer.Beispiel:
Timer 1: 06:00
Timer 2: 12:00
Timer 3: 20:00
Timer 4: 22:00Ich würde gerne prüfen welcher Timer der aktuell relevante ist.
Heute mache ich das dann so:let Stundeaktuell = new Date().getHours() let Minutenaktuell = new Date().getMinutes() if (timerstunde <= Stundeaktuell){ if (timerminute <= Minutenaktuell){ log ("Test") } }
Das Problem ist hier aber, dass der mehrere Logeinträge erscheinen.
Ich würde aber nur den einen gültigen haben.Ich hoffe man kann verstehen was ich meine.
-
@mctom sagte: Ich hoffe man kann verstehen was ich meine.
?? Die aktuelle Timer-Uhrzeit steht doch im Datenpunkt.
-
@paul53 Vielleicht habe ich mich schlecht ausgedrückt.
Ich würde in einer Schleife Datenpunkte checken.
Beispiel:
Timer 1: 06:00 => Wert1
Timer 2: 12:00 => Wert 2
Timer 3: 20:00 => Wert 3
Timer 4: 22:00 => Wert 4Aktuell ist es so dass erst im Log Wert 1 steht und dann Wert 2.
Ich würde aber gerne nur Wert 2 dort stehen haben.So verständlicher ?
-
@mctom sagte: So verständlicher ?
Nein.
Zeige mal die Schleife, die zwei Werte ausgibt.Einen Uhrzeitvergleich macht man so:
let Minutenaktuell = new Date().getMinutes() + 60 * new Date().getHours(); if(60 * timerstunde + timerminute <= Minutenaktuell) { log ("Test") }
-
Ja okay ich drücke mich etwas kompliziert aus daher hier noch mal der Versuch.
ab 06:00 Wert 1
ab 08:00 Wert 2
ab 15:00 Wert 3
ab 20:00 Wert 4
ab 22:00 Wert 5Und ich möchte gerne wissen welcher Wert für die aktuelle Uhrzeit gültig ist.
Und meiner Methode taucht erst Wert 1 Wert2 Wert3 und dann der richtige Wert4 auf.
So besser ?for (let countSlot = 0; countSlot < paProfileSlots[countRoom]; countSlot++) { let timerstunde = parseInt(getState(pfad + paRaeume[countRoom] + '.profil_'+ profil +'.' + countSlot + '_beginn').val.slice(0,2), 10) let timerminute = parseInt(getState(pfad + paRaeume[countRoom] + '.profil_'+ profil +'.' + countSlot + '_beginn').val.slice(3,5), 10) let Stundeaktuell = new Date().getHours() let Minutenaktuell = new Date().getMinutes() if (timerstunde <= Stundeaktuell){ if (timerminute <= Minutenaktuell){ setlocalTagetTemp(countRoom,profil,countSlot,'Timerset durchgeführt') } } }
-
@mctom sagte: taucht erst Wert 1 Wert2 Wert3 und dann der richtige Wert4 auf.
Du möchtest den letzten countSlot der Schleife haben, bei dem die Bedingung erfüllt ist?
let Minutenaktuell = new Date().getMinutes() + 60 * new Date().getHours(); let last = 0; for (let countSlot = 0; countSlot < paProfileSlots[countRoom]; countSlot++) { let timer = getState(pfad + paRaeume[countRoom] + '.profil_'+ profil +'.' + countSlot + '_beginn').val.split(':'); let timerstunde = parseInt(timer[0], 10) let timerminute = parseInt(timer[1], 10) if(60 * timerstunde + timerminute <= Minutenaktuell) { last = countSlot; } } setlocalTagetTemp(countRoom,profil,last,'Timerset durchgeführt');
-
@paul53
Hi, mir ist es im Altagstrubel durch die Lappen gegangen.
Danke für deine Hilfe. Es hat mir geholfen. Mein Script ist jetzt optimiert.