Seite 1 von 2
Persistence Min/Max mit Zeitstempel
Verfasst: 7. Feb 2021 13:28
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
Re: Persistence Min/Max mit Zeitstempel
Verfasst: 8. Feb 2021 00:06
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
Re: Persistence Min/Max mit Zeitstempel
Verfasst: 8. Feb 2021 21:08
von seka
Hi,
Danke für deine schnelle Antwort.
Ja Regeln Programmieren zählt nicht zu meinen Stärken
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
Re: Persistence Min/Max mit Zeitstempel
Verfasst: 8. Feb 2021 23:18
von udo1toni
Hmm... Lass mal das as Number in der Zuweisung der Konstanten Min weg.
Notfalls könnte man die Zuweisung anders gestalten.
Re: Persistence Min/Max mit Zeitstempel
Verfasst: 9. Feb 2021 16:38
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].
Re: Persistence Min/Max mit Zeitstempel
Verfasst: 9. Feb 2021 18:54
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.
Re: Persistence Min/Max mit Zeitstempel
Verfasst: 9. Feb 2021 22:01
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.
Re: Persistence Min/Max mit Zeitstempel
Verfasst: 9. Feb 2021 22:46
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
Re: Persistence Min/Max mit Zeitstempel
Verfasst: 9. Feb 2021 22:50
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]
Re: Persistence Min/Max mit Zeitstempel
Verfasst: 9. Feb 2021 22:55
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