getZonedDateTime() .....deprecated

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Antworten
Quautiputzli
Beiträge: 364
Registriert: 29. Okt 2020 19:53
Answers: 2

getZonedDateTime() .....deprecated

Beitrag von Quautiputzli »

Hallo miteinander,
wie in der Überschrift wird nun von OH4.3 auf folgenden Umstand hingewiesen:

Code: Alles auswählen

The method getZonedDateTime() from the type DateTimeType is deprecated
Das ganze funktioniert zwar noch, aber in Zukunft wahrscheinlich nicht mehr, ich möchte das deshalb berichtigen.

Hier ein Ausschnitt der Rule:

Code: Alles auswählen

    if(ZonedDateTime.now.getHour() < 16) { //  zwischen 0 Uhr und 16 Uhr
        if (ZonedDateTime.now.getMonthValue() > 3 && ZonedDateTime.now.getMonthValue() < 11 ) {
            en_batt = 0 // AUS
            logInfo("rules", logPrefix2 + "Sommerzeit. Setze en_batt auf({})", en_batt)
        }
Ich nutze das "ZonedDateTime" um die Zeit in Stunden oder den Monat herauszufinden, um davon abhängig etwas auszulösen.
Wie ist nun die richtige Syntax für so etwas? Oder mache ich das sowieso zu kompliziert?
Servus

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: getZonedDateTime() .....deprecated

Beitrag von udo1toni »

getZonedDateTime() erwartet nun die Angabe der ZoneId, z.B. so:

Code: Alles auswählen

now.getZonedDateTime(ZoneId.systemDefault())
Allerdings kannst Du hier ZonedDateTime einfach weg lassen.

Abgesehen davon wäre das hier mutmaßlich die saubere Option (April bis Oktober ist ja schon etwas ungenau):

Code: Alles auswählen

val java.util.TimeZone tz = java.util.TimeZone.getTimeZone("Europe/Berlin")
if(tz.inDaylightTime(new java.util.Date) && now.getHour < 16) {
    logInfo("dst","Sommerzeit in Deutschland aktiv")
    ...
}
Alternativ kannst Du in einer rules-Datei auch die beiden Utilities TimeZone und Date im Dateikopf importieren, um anschließend nur TimeZone und Date schreiben zu müssen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Quautiputzli
Beiträge: 364
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: getZonedDateTime() .....deprecated

Beitrag von Quautiputzli »

Danke :D
Servus

Lux73
Beiträge: 69
Registriert: 26. Dez 2019 12:32
Answers: 0
Wohnort: Bielefeld

Re: getZonedDateTime() .....deprecated

Beitrag von Lux73 »

Ich hänge mich hier mal mit rein - habe heute von 4.2.3 auf 4.3.2 upgedatet

allerdings habe ich in einer Rule auch ein Problem mit getZonedDateTime

Code: Alles auswählen

rule "eMail Timestamp"
when
	Member of gTimestamp changed
then
	if (!(gTimestamp.state instanceof DateTimeType)) return;
	
	if (Emailblocker_Timestamp.state != ON) {
		if (now.isAfter((gTimestamp.state as DateTimeType).getZonedDateTime.plusHours(8))) {
			getActions("mail","mail:smtp:MAILPROVIDER").sendHtmlMail("USER@DOMAIN:DE", "OpenHAB Alarm - Statusänderung "+triggeringItem.name+ " überfällig", "HINWEIS! Bitte: "+triggeringItem.name+ " prüfen! ...letzte Statusänderung ist länger als 8 Stunden her...")
			logInfo("myLog", "Timestamp - E-MAIL verschickt!")
			Emailblocker_Timestamp.postUpdate(ON)
		}
	}
end
alle meine Versuche

Code: Alles auswählen

if (now.isAfter((gTimestamp.state as DateTimeType).getZonedDateTime.plusHours(8))) {
entsprechend den Empfehlungen im OpenHAB Forum abzuändern schlagen fehl. Was ich schon probiert habe:

Code: Alles auswählen

if (now.isAfter((gTimestamp.state as DateTimeType).getZonedDateTime(ZoneId.systemDefault().plusHours(8)))) {
Fehler: Script execution of rule with UID 'email-2' failed: 'plusHours' is not a member of 'java.time.ZoneId'; line 40, column 71, length 35 in email

Code: Alles auswählen

if (now.isAfter((gTimestamp.state as DateTimeType).getInstant().plusHours(8))) {
Fehler: Script execution of rule with UID 'email-2' failed: 'plusHours' is not a member of 'java.time.Instant'; line 40, column 19, length 60 in email

insgesamt habe ich alle möglichen Varianten (welche mir logisch erscheinen) von hier https://community.openhab.org/t/the-met ... ted/160763 probiert

bekomme aber immer wieder 'plusHours' is not a member of 'java.time.ZoneId' - ich denke ich muss den Aufbau der Zeile grundsätzlich ändern und wäre für eine Hilfestellung diesbzgl. sehr dankbar :)

ich bin schon auf Java21 (zulu21) falls das irgendwie von Belang ist
APU2c4|Debian12.9|OpenHAB4.3.2@Zulu21|mosquitto|hostapd|dnsmasq|zigbee2mqtt / Huawei MediaPad T5|FullyKioskBrowser
Zigbee:CC2652RB|1xCC2530.ROUTER|11xHue|4xIlluminize 5110.40|Danfoss:4xAlly+4xRoomSensor
Aqara:5xMCCGQ11LM/6xWSDCGQ11LM/6xGZCGQ01LM/4xRTCGQ11LM/2xRTCGQ13LM/2xRTCGQ14LM/1xDJT11LM/1xRTCZCGQ11LM/2x WXKG02LM
TuYa:2xTS011F/3xTS0601/1xTS0001|MOES:1xUFO-R11|HEIMAN:1xHS2WD-E
MQTT:Tasmota12.5.0|6xDelock 11826|3xShelly1|3xBlitzwolf SHP8|1xGosund SP112

Lux73
Beiträge: 69
Registriert: 26. Dez 2019 12:32
Answers: 0
Wohnort: Bielefeld

Re: getZonedDateTime() .....deprecated

Beitrag von Lux73 »

habs rausgefunden... zwar mehr try&error aber gut :mrgreen:

Code: Alles auswählen

if (now.isAfter((gTimestamp.state as DateTimeType).getZonedDateTime(ZoneId.systemDefault()).plusHours(8))) {
also war mein erster geänderter Codeblock schon richtig - allerdings war eine Klammer falsch gesetzt ^^

(ZoneId.systemDefault()) - die fehlte und bei .plusHours(8)))) war eine zuviel :lol:

war wohl noch nicht ganz wach ;)
APU2c4|Debian12.9|OpenHAB4.3.2@Zulu21|mosquitto|hostapd|dnsmasq|zigbee2mqtt / Huawei MediaPad T5|FullyKioskBrowser
Zigbee:CC2652RB|1xCC2530.ROUTER|11xHue|4xIlluminize 5110.40|Danfoss:4xAlly+4xRoomSensor
Aqara:5xMCCGQ11LM/6xWSDCGQ11LM/6xGZCGQ01LM/4xRTCGQ11LM/2xRTCGQ13LM/2xRTCGQ14LM/1xDJT11LM/1xRTCZCGQ11LM/2x WXKG02LM
TuYa:2xTS011F/3xTS0601/1xTS0001|MOES:1xUFO-R11|HEIMAN:1xHS2WD-E
MQTT:Tasmota12.5.0|6xDelock 11826|3xShelly1|3xBlitzwolf SHP8|1xGosund SP112

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: getZonedDateTime() .....deprecated

Beitrag von udo1toni »

Genau (falsch gesetzte Klammer, über den Grad der Wachheit erlaube ich mir kein Urteil ;) )

Wichtig: ZoneId.systemDefault() ist ein Parameter, der gehört zu getZonedDateTime().
.plusHours() ist eine Methode, die auf den von getZonedDateTime() gelieferten Wert angewendet wird.
Wenn man sich das klar macht, kommt man auch schnell auf die Klammern, bzw. wo diese zu setzen sind.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten