Seite 1 von 2

now.toString in OH3 mit JavaTime

Verfasst: 7. Mär 2021 10:52
von SaschaQ
Hallo zusammen,

ich habe bei meinem Pflanzensensoren eine Rule mit der die letzte Aktualisierung festgehalten wird Datum und Uhrzeit.

Das hatte ich bisher so gelöst:

Code: Alles auswählen

rule "Letzte Aktualisierung Bodensensor Bonsai"
when 
Item og_arbeitszimmersascha_bodensensor_palme_moisture received update 
then
og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung.postUpdate(now.toString("dd.MM.yyyy,HH:mm"))

end

Wie bekomme ich das wieder sauber in den String?

Re: now.toString in OH3 mit JavaTime

Verfasst: 7. Mär 2021 12:24
von int5749
SaschaQ hat geschrieben: 7. Mär 2021 10:52 Wie bekomme ich das wieder sauber in den String?
Hi,

probier doch mal

Code: Alles auswählen

og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung.postUpdate(now.toLocalTime.toString("dd.MM.yyyy,HH:mm"))
Viele Grüße

Re: now.toString in OH3 mit JavaTime

Verfasst: 7. Mär 2021 17:20
von SaschaQ
Das funzt leider nicht.

Jetzzt aktualisiert es garnicht mehr.

Es sieht immer noch so aus:

2021-03-07T13:03:22.483607+01:00[Europe/Ber

Re: now.toString in OH3 mit JavaTime

Verfasst: 7. Mär 2021 18:44
von peter-pan
SaschaQ hat geschrieben: 7. Mär 2021 17:20 Es sieht immer noch so aus:
2021-03-07T13:03:22.483607+01:00[Europe/Ber
...hier mal wieder eine "kleine Spielerei" mit den Datumsumwandlungen (OH3). Ich gehe davon aus, dass og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung ein String Type Item ist:

Code: Alles auswählen

import java.time.format.DateTimeFormatter

rule "testruleDatumUhrzeit"
when
    Item Dummy_6 changed to ON
then
    val lastUpdate = Dummy_6.lastUpdate
    
    //Ausgabe ohne eigene Formatierung, liefert z. B. 2021-01-05T12:43+01:00[Europe/Berlin]
    logInfo("Testrule Datum Uhrzeit 1", "Dummy_6 wurde geändert am " + lastUpdate)
    
    //Muster für die Ausgabe festlegen
    val DateTimeFormatter myDateTimeFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy") 
    
    //Ausgabe unter Verwendung der festgelegten Formatierung, liefert z. B. 05.01.2021
    logInfo("Testrule Datum Uhrzeit 2", "Dummy_6 wurde geändert am " + lastUpdate.format(myDateTimeFormatter))
    
    //oder alles direkt in einer Zeile, liefert z. B. Tue, 05.01.2021 um 12:42:50
    logInfo("Testrule Datum Uhrzeit 3", "Dummy_6 wurde geändert am " + lastUpdate.format(DateTimeFormatter.ofPattern("eee, dd.MM.yyyy"))
            + " um " + lastUpdate.format(DateTimeFormatter.ofPattern("kk:mm:ss")))

    CurrentTime2.postUpdate( now().format(DateTimeFormatter.ofPattern("HH:mm,dd.MM")))
    logInfo("Testrule Datum Uhrzeit 4", "CurrentTime2 wurde geändert am {}", CurrentTime2.state)

end
Bezogen auf dein Problem, sollte die Regel ungefähr so aussehen:

Code: Alles auswählen

import java.time.format.DateTimeFormatter

rule "testruleDatumUhrzeit"
when
    Item Dummy_6 changed to ON   // Datums-Item, dass sich verändert - evtl. auch received update
then
    // tu was du willst  ....
    og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung.postUpdate( now().format(DateTimeFormatter.ofPattern("dd.MM.yyyy,HH:mm")))
    logInfo("Testrule Datum Uhrzeit 4", "og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung wurde geändert am {}", og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung.state)  //Test

end
Das hab ich hier gefunden, von Scott Rushworth.

Re: now.toString in OH3 mit JavaTime

Verfasst: 7. Mär 2021 20:07
von SaschaQ
Hallo,

zur Erklärung: Ich möchte wenn sich ein Item des Bodensensors aktualisiert, das dann ein Item mit der Uhrzeit der Aktualisierung beschrieben wird, damit ich weiß, wann der Sensor sich das letzte mal gemeldet hat.

ich habe das jetzt mal wie folgt angepasst:

Code: Alles auswählen


rule "Letzte Aktualisierung Bodensensor Palme"
when 
		Item og_arbeitszimmersascha_bodensensor_palme_moisture received update or
		Item og_arbeitszimmersascha_bodensensor_palme_light received update or
		Item og_arbeitszimmersascha_bodensensor_palme_temperatur received update or
		Item og_arbeitszimmersascha_bodensensor_palme_conductivity received update or
		Item og_arbeitszimmersascha_bodensensor_palme_batterie received update 

then
og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung.postUpdate.postUpdate(now().format(DateTimeFormatter.ofPattern("dd.MM.yyyy,HH:mm")))

end
Das liefert in den Logs das zurück:

Script execution of rule with UID 'pflanzen-6' failed: An error occurred during the script execution: index=1, size=1 in pflanzen

Noch eine Idee?

Re: now.toString in OH3 mit JavaTime

Verfasst: 7. Mär 2021 20:26
von peter-pan
Du hast den Import vergessen (vor der Rule):

import java.time.format.DateTimeFormatter

Edit: Ausserdem ist der Update-Befehl falsch (2 x postUpdate)

Re: now.toString in OH3 mit JavaTime

Verfasst: 9. Mär 2021 12:33
von SaschaQ
Jetzt kommt zwar kein Fehler mehr im Log aber es bleibt dabei:
Unbenannt.JPG
Item:

Code: Alles auswählen


String og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung  "Letzte Aktualisierung [%s]" <time>	(gArecaPalme)


Sitemap:

Code: Alles auswählen


Text item=og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung label="Letzte Aktualisierung"

Rule:

Code: Alles auswählen


import java.time.format.DateTimeFormatter

rule "Letzte Aktualisierung Bodensensor Palme"
when 
		Item og_arbeitszimmersascha_bodensensor_palme_moisture received update or
		Item og_arbeitszimmersascha_bodensensor_palme_light received update or
		Item og_arbeitszimmersascha_bodensensor_palme_temperatur received update or
		Item og_arbeitszimmersascha_bodensensor_palme_conductivity received update or
		Item og_arbeitszimmersascha_bodensensor_palme_batterie received update 

then
og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung.postUpdate.(now().format(DateTimeFormatter.ofPattern("dd.MM.yyyy,HH:mm")))

end


Re: now.toString in OH3 mit JavaTime

Verfasst: 9. Mär 2021 13:08
von peter-pan
.....aaaah .. Sitemap.

Evtl. so ??!!

Code: Alles auswählen

Text item=og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung label="Letzte Aktualisierung [%s]"
oder

Code: Alles auswählen

Text item=og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung

Re: now.toString in OH3 mit JavaTime

Verfasst: 9. Mär 2021 18:41
von SaschaQ
Neee bleibt dabei.

Man sieht aber auch in den Logs garnicht, dass das Item die Zeit bzw. den String zugewiesen bekommt, obwohl sich die Items aus der Rule ändern.

Re: now.toString in OH3 mit JavaTime

Verfasst: 9. Mär 2021 18:52
von sihui
SaschaQ hat geschrieben: 9. Mär 2021 12:33

Code: Alles auswählen

og_arbeitszimmersascha_bodensensor_palme_letzte_aktualisierung.postUpdate.(now().format(DateTimeFormatter.ofPattern("dd.MM.yyyy,HH:mm")))

Code: Alles auswählen

postUpdate.
gibt es nicht,

Code: Alles auswählen

postUpdate(
aber schon.