OH Rule - Berechnungen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
and7787
Beiträge: 5
Registriert: 2. Mär 2022 11:04
Answers: 0

OH Rule - Berechnungen

Beitrag von and7787 »

Hallo Zusammen,

ich hab schon einige Beispiele gesehen die mein Problem eigentlich treffen, aber ich kriegs trotzdem nicht hin. Vielleicht könnte mir jemand helfen ?

Ich möchte verschieden Stromverbräuche / Einspeisungen in einer Rule berechnen, hab aber das Problem das in einem ITEM die Einheit "kWh" mit dabei steht, im anderen nicht bzw. "." statt "," und es mag nicht funktionieren.

Vielen Dank schon im Voraus!

Gruß,
Andreas

Code: Alles auswählen


when
        Time cron "0 0 0 * * ? *"
then

logInfo("Rule Netzbezug", "Netzbezug2359: {}, Einspeisung2359: {},Smart_Meter_10180 {}, Smart_Meter_10280 {} ", Netzbezug2359, Einspeisung2359, Smart_Meter_10180, Smart_Meter_10280 )

Netzbezugheute.postUpdate((Smart_Meter_10180.state as Number) - (Netzbezug2359.state as Number))
Einspeisungheute.postUpdate((Smart_Meter_10280.state as Number) - (Einspeisung2359.state as Number))
Netzbezugakutellermonat.postUpdate((Smart_Meter_10180.state as Number) - (Netzbezug01Month.state as Number))
Einspeisungakutellermonat.postUpdate((Smart_Meter_10280.state as Number) - (Einspeisung01Month.state as Number))

end

Ergebnis Logoutput:

2023-07-10 11:11:10.261 [INFO ] [hab.core.model.script.Rule Netzbezug] -
Netzbezug2359: Netzbezug2359 (Type=NumberItem, State=5579.9067, Label=Netzbezug2359, Category=null),
Einspeisung2359: Einspeisung2359 (Type=NumberItem, State=1909.1206, Label=Einspeisung2359, Category=null),
Smart_Meter_10180 Smart_Meter_10180 (Type=NumberItem, State=5580.3557 kWh, Label=1-0:1.8.0, Category=, Tags=[Point]),
Smart_Meter_10280 Smart_Meter_10280 (Type=NumberItem, State=1909.5559 kWh, Label=1-0:2.8.0, Category=, Tags=[Point])

Bzw: in der UI:
Netzbezugheute = 20089276380.093 kWh
Einspeisung Heute = 6874399330.879 kWh

and7787
Beiträge: 5
Registriert: 2. Mär 2022 11:04
Answers: 0

Re: OH Rule - Berechnungen

Beitrag von and7787 »

Ich habe es jetzt doch hinbekommen, vielleicht hilft es jemandem. Indem ich nicht mit dem Item des Zählers gerechnet habe sondern den Zählerwert in ein separates ITEM schreibe und mit diesem dann rechne:

Code: Alles auswählen

rule "Time Based Berechnung Aktuell"

when
// Time cron 		"ss mm hh DD MM WW YYYY"
        Time cron 	"0/10 * * * * ? *"
then

Netzbezugaktuell.postUpdate(Smart_Meter_10180.state as Number)
Einspeisungaktuell.postUpdate(Smart_Meter_10280.state as Number)

end

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

Re: OH Rule - Berechnungen

Beitrag von udo1toni »

Ja, aber nein.

Die erste Frage wäre: Was willst Du eigentlich erreichen? Wenn ich die Namen der Items richtig deute, merkst Du Dir Zählerstände und und berechnest darüber Tages- und Monatsverbrauch bzw. -einspeisung.
Das geht einfacher :) unter der Voraussetzung, dass Du die beiden Items Smart_Meter_10180 und Smart_Meter_10280 mindestens mit rrd4j persistieren lässt (das ist das Default Verhalten von openHAB3):

Code: Alles auswählen

rule "Tages- und Monatswerte"
when
    Time cron "0 0 0 * * ?" 
then
    val dtStartOfDay = now.with(Localtime.MIDNIGHT)                                      // Mitternacht, heute
    val dtYesterday  = dtStartOfDay.minusDays(1)                                         // Mitternacht, gestern
    val dtMonth      = dtStartOfDay.withDayOfMonth(1)                                    // Mitternacht, 1. des Monats

    var nGetYesterday = 0.0                                                              // Variablen für die vier Werte
    var nPutYesterday = 0.0
    var nGetMonth = 0.0
    var nPutMonth = 0.0

    if(Smart_Meter_10180.deltaSince(dtYesterday) instanceof Number)                      // falls gültiger Wert
        nGetYesterday = (Smart_Meter_10180.deltaSince(dtYesterday) as Number).floatValue // in Variable schreiben
    if(Smart_Meter_10280.deltaSince(dtYesterday) instanceof Number) 
        nPutYesterday = (Smart_Meter_10280.deltaSince(dtYesterday) as Number).floatValue
    if(Smart_Meter_10180.deltaSince(dtMonth) instanceof Number) 
        nGetMonth= (Smart_Meter_10180.deltaSince(dtMonth) as Number).floatValue
    if(Smart_Meter_10280.deltaSince(dtMonth) instanceof Number) 
        nPutMonth = (Smart_Meter_10280.deltaSince(dtMonth) as Number).floatValue

    Netzbezugheute.postUpdate(nGetYesterday)                                             // Variable in Item schreiben
    Einspeisungheute.postUpdate(nPutYesterday)
    Netzbezugakutellermonat.postUpdate(nGetMonth)
    Einspeisungakutellermonat.postUpdate(nPutMonth)
end
Du benötigst also nur diese beiden Items, keine weiteren Hilfsitems.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten