Zeitstempelberechnung
Verfasst: 27. Dez 2024 14:43
Hallo zusammen,
ich versuche mir aktuell eine Regel zu basteln, die mir zum Ende eines jeden Monats die erzeugte Energie zum Ende des letzten Monats berechnet. Die Regel funktioniert soweit auch schon ganz gut, und sieht wie folgt aus.
Sobald ich den Zeitstempel so berechne, wird die Regel nicht mehr ausgeführt.
Lasse ich die unteren zwei Zeile weg, wird sie ausgeführt.
Allerdings ist das ja falsch, weil ich nicht den Wert von vor einem Monat haben will, sondern vom letzten Tag des Vormonates zur selben Zeit. Der Tag kann ja variabel sein... 28., 30., 31.
Aber irgendwie scheint sich Openhab an der Syntax zu stören.
Jemand eine Idee?
Gruß,
Boris
ich versuche mir aktuell eine Regel zu basteln, die mir zum Ende eines jeden Monats die erzeugte Energie zum Ende des letzten Monats berechnet. Die Regel funktioniert soweit auch schon ganz gut, und sieht wie folgt aus.
Code: Alles auswählen
var Number lastMonthValue = null // Variable, um den Wert des letzten Monats zu speichern
rule "PV Energy Differenz berechnen und E-Mail senden"
when
Time cron "0 0 12 L * ?" // Jeden letzten Tag des Monats um 12 Uhr
then
// Aktuellen Wert des Items abfragen
val currentValue = PV_ges_Eltako_Energy.state as Number
// Zeitstempel für den letzten Tag des Vormonats mit derselben Uhrzeit wie jetzt
val lastDayOfLastMonthSameTime = now.minusMonths(1)
.withDayOfMonth(now.minusMonths(1).dayOfMonth().maximumValue)
.withTime(now.hourOfDay, now.minuteOfHour, now.secondOfMinute, 0)
// Wert des Items zu diesem Zeitpunkt abrufen (InfluxDB wird verwendet)
val historicState = PV_ges_Eltako_Energy.historicState(lastDayOfLastMonthSameTime, "influxdb")
if (historicState === null) {
logError("PV_Energy_Rule", "Kein historischer Wert für den letzten Tag des letzten Monats gefunden!")
return
}
lastMonthValue = historicState.state as Number
val currentValueInKWh = (currentValue.doubleValue() / 1000)
val lastMonthValueInKWh = (lastMonthValue.doubleValue() / 1000)
// Differenz berechnen
val energyDifference = currentValueInKWh - lastMonthValueInKWh
// E-Mail senden
val emailBody = "Derzeugte Energie im letzten Monat beträgt: " + String.format("%.2f", energyDifference) + " kWh."
val mailActions = getActions("mail","mail:smtp:websmtp")
var success = mailActions.sendMail("xxx@xxx.com", "Monatlicher Energiebericht", emailBody)
// Log-Eintrag zur Kontrolle
logInfo("PV_Energy_Rule", "Monatlicher Energiebericht wurde erfolgreich gesendet. Differenz: " + String.format("%.2f", energyDifference) + " kWh")
end
Code: Alles auswählen
val lastDayOfLastMonthSameTime = now.minusMonths(1)
.withDayOfMonth(now.minusMonths(1).dayOfMonth().maximumValue)
.withTime(now.hourOfDay, now.minuteOfHour, now.secondOfMinute, 0)
Code: Alles auswählen
val lastDayOfLastMonthSameTime = now.minusMonths(1)
Aber irgendwie scheint sich Openhab an der Syntax zu stören.
Jemand eine Idee?
Gruß,
Boris