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 -
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'); }); -
@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'); }); -
@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.
-
@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 ?
-
@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") } -
@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') } } } -
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'); -
@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');
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden