Seite 1 von 1
Sommerzeit-Problem
Verfasst: 3. Jun 2024 11:05
von Nosch
Hi,
ich habe in einem OH4-Script (ECMAScript 262 Edition 11) folgende Bedingung:
Im Winter funktionierts, im Sommer (MESZ) leider nicht (eine Stunde Versatz).
Ich suche jetzt schon geraume Zeit, aber ich finde nicht, wie ich die Sommerzeit berücksichtigen kann.
Für Hinweise die zum Ziel führen wäre ich echt dankbar.
Viele Grüße
Norbert
Re: Sommerzeit-Problem
Verfasst: 3. Jun 2024 16:23
von Harka
Moin,
die Zeit (06:00 und 09:00) wird so als
LocalTime vorliegen.
Mit Blockly habe ich folgenden Code erstellt (und getestet)
Code: Alles auswählen
if ((time.ZonedDateTime.now()).isBetweenTimes((time.toZDT('06:00:00')), (time.toZDT('09:00:00')))) {
.....
}
alternativ bietet sich hier auch folgende Variante an
Code: Alles auswählen
tStunde = ((time.ZonedDateTime.now()).hour());
if (tStunde >= 6 && tStunde < 9) {
.....
}
Re: Sommerzeit-Problem
Verfasst: 3. Jun 2024 16:38
von nw378
Ich habe keine Script-Erfahrung, daher kann ich dir nur einen Denkansatz als Rules DSL anbieten.
Ich habe manche Funktionen, die nur im Sommer, und andere, die nur im Winter laufen sollen.
Dafür habe ich mir einen Schalter gebastelt:
Code: Alles auswählen
rule "Sommerzeit?"
when
Time cron "0 0 5 * * ? *" or
System started
then
var offset_txt = OffsetDateTime.now().toString().replace("+","#").split("#").get(1)
if (offset_txt =="01:00")
Sommerzeit.sendCommand(OFF)
else
Sommerzeit.sendCommand(ON)
end
Re: Sommerzeit-Problem
Verfasst: 4. Jun 2024 08:44
von Nosch
Harka hat geschrieben: ↑3. Jun 2024 16:23
Moin,
die Zeit (06:00 und 09:00) wird so als
LocalTime vorliegen.
Mit Blockly habe ich folgenden Code erstellt (und getestet)
Code: Alles auswählen
if ((time.ZonedDateTime.now()).isBetweenTimes((time.toZDT('06:00:00')), (time.toZDT('09:00:00')))) {
.....
}
alternativ bietet sich hier auch folgende Variante an
Code: Alles auswählen
tStunde = ((time.ZonedDateTime.now()).hour());
if (tStunde >= 6 && tStunde < 9) {
.....
}
Hi,
funktioniert leider nicht:
Die Log-Ausgabe (aufgerufen um 8:40 Uhr MESZ) ergibt folgendes:
Code: Alles auswählen
console.info(time.toZDT().isBetweenTimes('8:00', '9:00') + " - " + time.toZDT().isBetweenTimes(time.toZDT('08:00:00'), time.toZDT('09:00:00')));
false - false
DieLog-Ausgabe für:
Code: Alles auswählen
console.info("################: between: " + time.ZonedDateTime.now().hour());
7
Die Ausgabe auf Betriebssystem-Ebene (openhabian) ist korrekt:
Tue Jun 4 08:42:49 AM CEST 2024
Viele Grüße
Norbert
Re: Sommerzeit-Problem
Verfasst: 4. Jun 2024 08:45
von Nosch
nw378 hat geschrieben: ↑3. Jun 2024 16:38
Ich habe keine Script-Erfahrung, daher kann ich dir nur einen Denkansatz als Rules DSL anbieten.
Ich habe manche Funktionen, die nur im Sommer, und andere, die nur im Winter laufen sollen.
Dafür habe ich mir einen Schalter gebastelt:
Code: Alles auswählen
rule "Sommerzeit?"
when
Time cron "0 0 5 * * ? *" or
System started
then
var offset_txt = OffsetDateTime.now().toString().replace("+","#").split("#").get(1)
if (offset_txt =="01:00")
Sommerzeit.sendCommand(OFF)
else
Sommerzeit.sendCommand(ON)
end
Überlegt habe ich sowas auch schon. Das würde ich aber erst machen, wenn sich keine Lösung findet. Die muss es aber sicher geben.
Viele Grüße
Norbert
Re: Sommerzeit-Problem
Verfasst: 4. Jun 2024 09:20
von EmptySoft
Nosch hat geschrieben: ↑3. Jun 2024 11:05
Hi,
ich habe in einem OH4-Script (ECMAScript 262 Edition 11) folgende Bedingung:
Im Winter funktionierts, im Sommer (MESZ) leider nicht (eine Stunde Versatz).
Ich suche jetzt schon geraume Zeit, aber ich finde nicht, wie ich die Sommerzeit berücksichtigen kann.
aktuelle Zeit (in der Zeitzone Wien)
also zum Beispiel
Code: Alles auswählen
if(now(ZoneId.of("Europe/Vienna")).getHour >= 6 && now(ZoneId.of("Europe/Vienna")).getHour <= 9)
(geht sicher mit between auch ...)
Re: Sommerzeit-Problem
Verfasst: 4. Jun 2024 10:26
von udo1toni
Also, worum geht es denn wirklich?
Erkennung ob Sommerzeit oder keine Sommerzeit?
Oder doch eher darum, dass openHAB jederzeit korrekt rechnen soll?
Die wichtigste Frage in dem Zusammenhang wäre, ob denn die Zeit innerhalb openHAB korrekt ist. Das sollte z.B. im Log erkennbar sein. Stimmt die Zeit hier? Dann musst auch die Berechnung der Zeit korrekt funktionieren (wenn die Formel bzw. wie verwendete Funktion die richtige ist).
Stimmt die Zeit im Log nicht, wäre mein Tipp, die Zeitzone über die EXTRA_JAVA_OPTS explizit zu setzen (/etc/default/openhab ist Dein Freund)
Stimmt die Zeit im Log, ist der Aufruf mit .toZDT vermutlich falsch. Meine Vermutung wäre, dass Du .toLocalDateTime verwenden musst (Achtung, die Funktion kann in ECMA anders heißen, ich nutze ECMA bisher nicht aktiv...)
Re: Sommerzeit-Problem
Verfasst: 4. Jun 2024 10:30
von Nosch
Hi zusammen,
ich habe den Fehler selber gefunden.
Openhab hat eine eigene Zeitzone. Nicht die des Betriebssystems. Das war mir nicht bekannt.
Nachdem ich über openhabian-config die ZEitzone richtig eingestellt hatte funktioniert alles wie gewünscht. Blöder Fehler!
Vielen Dank an alle für die Unterstützung!
Viele Grüße
Norbert