Persistence Min/Max mit Zeitstempel

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

seka
Beiträge: 27
Registriert: 30. Nov 2018 11:13
Answers: 0

Persistence Min/Max mit Zeitstempel

Beitrag von seka »

Hallo zusammen,

ich habe bei mir eine Wetterstation die mir die aktuelle Außentemperatur anzeigt. Diesen Wert speichere ich über rrd4j.
Nun würde ich gerne zu meinem bereit vorhandenen Minimum-Wert und Maximum- Wert den Zeit Stempel.

Anbei mal meine Regel:

Code: Alles auswählen

rule "Enocean6: Temp min Wert Monat"
when	
	Item EnOcean_Wetter_Temp changed

then
        val hmformat = java.time.format.DateTimeFormatter.ofPattern("HH:mm, yy/MM/dd")

            var Min = EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j").state as Number
            EnOcean_Wetter_Temp_Min_m_test.postUpdate(EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j").state as Number) + " °C (" + Min.timestamp.format(hmformat) + ")"
            

end
und hier den Opanhab.log Eintrag

Code: Alles auswählen

2021-02-07 13:24:56.340 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'enocean-6' failed: 'timestamp' is not a member of 'java.lang.Number'; line 75, column 146, length 13 in enocean
Kann mir jemand sagen wie die Regel richtig aussehen müsste?

Dank und einen schönen restlichen Sonntag
Sebastian

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

Re: Persistence Min/Max mit Zeitstempel

Beitrag von udo1toni »

Na ja, ist doch klar. Du verwendest die Variable Min, der Du einen Zahlenwert zugewiesen hast und erwartest ernsthaft, dass diese Variable zusätzlich noch einen Zeitstempel hält?

Du möchtest eher sowas:

Code: Alles auswählen

rule "Enocean6: Temp min Wert Monat"
when
    Item EnOcean_Wetter_Temp changed
then
    val hmformat = java.time.format.DateTimeFormatter.ofPattern("HH:mm, yy/MM/dd")

    val Min = EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j").state as Number
    val MinTime = EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j").timestamp

    EnOcean_Wetter_Temp_Min_m_test.postUpdate(Min.format("%.1f °C") + " (" + MinTime.format(hmformat) + ")")
end
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

seka
Beiträge: 27
Registriert: 30. Nov 2018 11:13
Answers: 0

Re: Persistence Min/Max mit Zeitstempel

Beitrag von seka »

Hi,
Danke für deine schnelle Antwort.
Ja Regeln Programmieren zählt nicht zu meinen Stärken :D

Wenn ich dein Beispiel in meine Regel packe bekomme ich folgende Error Meldung im log:

Code: Alles auswählen

2021-02-08 21:05:36.034 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-1' failed: 'format' is not a member of 'java.lang.Number'; line 11, column 47, length 21 in test
Danke

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

Re: Persistence Min/Max mit Zeitstempel

Beitrag von udo1toni »

Hmm... Lass mal das as Number in der Zuweisung der Konstanten Min weg.

Notfalls könnte man die Zuweisung anders gestalten.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

seka
Beiträge: 27
Registriert: 30. Nov 2018 11:13
Answers: 0

Re: Persistence Min/Max mit Zeitstempel

Beitrag von seka »

Wenn ich das ".state as Number" weglasse bleibt die Fehlermeldung gleich.
Wenn ich dann das ".format" auch noch rauswerfe würde die Regel so aussehen:

Code: Alles auswählen

rule "1_Test: Temp min Wert Monat"
when
    Item EnOcean_Wetter_Temp changed
then
    val hmformat = java.time.format.DateTimeFormatter.ofPattern("HH:mm, yy/MM/dd")

    val Min = EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j")
    val MinTime = EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j").timestamp

    EnOcean_Wetter_Temp_Min_m_test.postUpdate(Min + " (" + MinTime.format(hmformat) + ")")
end
Dann ist wenigstens die Fehlermeldung eine andere vllt hilft das weiter:

Code: Alles auswählen

Cannot convert '11.01.21, 03:30: EnOcean_Wetter_Temp -> -7.058823529411768 (03:30, 21/01/11)' to a state type which item 'EnOcean_Wetter_Temp_Min_m_test' accepts: [DecimalType, QuantityType, UnDefType].

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

Re: Persistence Min/Max mit Zeitstempel

Beitrag von udo1toni »

Ich habe nichts davon geschrieben, .state wegzulassen. minimumSince liefert ein genericItem zurück, das heißt, es liefert sowohl Status als auch Zeitstempel, deshalb liefert eine Anfrage ohne .state beide Werte zurück.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

seka
Beiträge: 27
Registriert: 30. Nov 2018 11:13
Answers: 0

Re: Persistence Min/Max mit Zeitstempel

Beitrag von seka »

Hab jetzt mehrere Sachen versucht
aktuell schaut die Regel so aus:

Code: Alles auswählen

rule "1_Test: Temp min Wert Monat"
when
    Item EnOcean_Wetter_Temp changed
then
    val hmformat = java.time.format.DateTimeFormatter.ofPattern("HH:mm, yy/MM/dd")

    val Min = EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j").state
    val MinTime = EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j").timestamp

    EnOcean_Wetter_Temp_Min_m_test.postUpdate(Min.format("%.1f °C") + " (" + MinTime.format(hmformat) + ")")
end
die Error Meldung ist noch die selbe.

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

Re: Persistence Min/Max mit Zeitstempel

Beitrag von udo1toni »

Dann machen wir mal was anderes:

Code: Alles auswählen

rule "1_Test: Temp min Wert Monat"
when
    Item EnOcean_Wetter_Temp changed
then
    val hmformat = java.time.format.DateTimeFormatter.ofPattern("HH:mm, yy/MM/dd")

    val Min = EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j").state
    val MinTime = EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j").timestamp
    logInfo("tempMinWert","Min: {} MinTime: {}",Min,MinTime)
    // vorerst auskommentiert---
    // EnOcean_Wetter_Temp_Min_m_test.postUpdate(Min.format("%.1f °C") + " (" + MinTime.format(hmformat) + ")")
end
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

seka
Beiträge: 27
Registriert: 30. Nov 2018 11:13
Answers: 0

Re: Persistence Min/Max mit Zeitstempel

Beitrag von seka »

Dann habe ich das im log stehen:

Code: Alles auswählen

2021-02-09 22:50:13.453 [INFO ] [penhab.core.model.script.tempMinWert] - Min: -7.058823529411768 MinTime: 2021-01-11T03:30+01:00[Europe/Berlin]

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

Re: Persistence Min/Max mit Zeitstempel

Beitrag von udo1toni »

Also, dann ist shcon mal das richtige in den Konstanten.

Nächster Versuch:

Code: Alles auswählen

rule "1_Test: Temp min Wert Monat"
when
    Item EnOcean_Wetter_Temp changed
then
    val hmformat = java.time.format.DateTimeFormatter.ofPattern("HH:mm, yy/MM/dd")

    val Min = EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j").state.format("%.1f °C")
    val MinTime = EnOcean_Wetter_Temp.minimumSince(now.minusMonths(1), "rrd4j").timestamp.format(hmformat)
    logInfo("tempMinWert","Min: {} MinTime: {}",Min,MinTime)
    // vorerst auskommentiert---
    // EnOcean_Wetter_Temp_Min_m_test.postUpdate(Min + " (" + MinTime + ")")
end
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten