NEWS
[GELÖST] Abfrage anhand der aktuellen Uhrzeit
-
Hi,
ich habe da mal eine Frage an die javascript Profis.
Ich habe folgendes script geschrieben:
function temp() { debug = true; createState('javascript.0.Wetter.Temp_akt', 0); if (compareTime('00:00', '01:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.0h.Temperature").val, true); } if (compareTime('01:00', '02:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.1h.Temperature").val, true); } if (compareTime('02:00', '03:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.2h.Temperature").val, true); } if (compareTime('03:00', '04:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.3h.Temperature").val, true); } if (compareTime('04:00', '05:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.4h.Temperature").val, true); } if (compareTime('05:00', '06:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.5h.Temperature").val, true); } if (compareTime('06:00', '07:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.6h.Temperature").val, true); } if (compareTime('07:00', '08:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.7h.Temperature").val, true); } if (compareTime('08:00', '09:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.8h.Temperature").val, true); } if (compareTime('09:00', '10:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.2h.Temperature").val, true); } if (compareTime('10:00', '11:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.10h.Temperature").val, true); } if (compareTime('11:00', '12:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.11h.Temperature").val, true); } if (compareTime('12:00', '13:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.12h.Temperature").val, true); } if (compareTime('13:00', '14:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.13h.Temperature").val, true); } if (compareTime('14:00', '15:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.14h.Temperature").val, true); } if (compareTime('15:00', '16:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.15h.Temperature").val, true); } if (compareTime('16:00', '17:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.16h.Temperature").val, true); } if (compareTime('17:00', '18:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.17h.Temperature").val, true); } if (compareTime('18:00', '19:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.18h.Temperature").val, true); } if (compareTime('19:00', '20:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.19h.Temperature").val, true); } if (compareTime('20:00', '21:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.20h.Temperature").val, true); } if (compareTime('21:00', '22:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.21h.Temperature").val, true); } if (compareTime('22:00', '23:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.22h.Temperature").val, true); } if (compareTime('23:00', '24:00', "between", null)) { setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.23h.Temperature").val, true); } } // Ende temp() schedule('* * * * *', temp);
Ziel des script ist es, mit der aktuellen Uhrzeit das passende state "Temperature" zu finden und in mein neues state "Temp_akt" zu schreiben.
Nun meine Frage, kann mann das vereinfachen bzw. anders Lösen?
Bin noch ganz am Anfang was javascript betrifft…
Gruß,
Tom
-
Der ID-String für die Quelle kann aus der Stunde der aktuellen Uhrzeit und einem String davor und einem danach gebildet werden.
const start = 'daswetter.0.hourly.0d.'; const end = 'h.Temperature'; createState('javascript.0.Wetter.Temp_akt', 0, {type: 'number', unit: '°C'}); function temp() { var hour = new Date().getHours(); setState("javascript.0.Wetter.Temp_akt", getState(start + hour + end).val, true); } schedule('* * * * *', temp); // Weshalb jede Minute ?
-
Guten Morgen Paul,
vielen lieben Dank für die tolle Unterstützung!
Das kann ich noch für viele Abfragen nutzen und ich habe wieder was neues gelernt.
Die Abfrage im Minutentakt hatte ich nur aus Testzwecken so drin.
Was ich noch nicht so ganz bei cron verstehe, ist der Start zu jeder volle Stunde, also 14, 15 und 16:00Uhr, ist das dann "0 * * * *" oder sagt das dann nur führe es jede Stunde nach cron Start aus?
Also nochmals vielen Dank für die Unterstützung.
Schöne Ostern noch und Gruß,
Tom
-
ist der Start zu jeder volle Stunde, also 14, 15 und 16:00Uhr, ist das dann "0 * * * *" `
Ja. Ich würde allerdings die Abfrage eine Minute später machen: "1 * * * *".Setze bitte das Thema auf gelöst (im Betreff des ersten Beitrags).
-
Danke
Gruß,
Tom
-
Hallo Paul,
eine Frage hätte ich noch?
Was bedeutet diese Fehlermeldung, so ganz werde ich daraus nicht schlau?
Gruß,
Tom
-
Der Quell-Datenpunkt liefert offenbar die Temperatur als String. Dann ergänze bitte um parseFloat().
setState("javascript.0.Wetter.Temp_akt", parseFloat(getState(start + hour + end).val), true);
-
Hallo Paul,
danke für die schnelle hilfe, ich hatte das zwischen durch schon gefunden, aber die zweite Klammer falsch gesetzt… :lol:
Jetzt funktioniert es.
Danke und Gruß,
Tom
-
Danke für das Skript, ich habe auf Basis der Idee folgendes fertige Script erstellt: