Meine Rule:
Code: Alles auswählen
rule "PV-Anlage Update"
when
Item PV_Current received update
then
var String strCurr = "Err; "
var String strDay = "Err; "
var String strYear = "Err; "
var String strTotal = "Err; "
logDebug("PV-update", "Start der Rule")
if (PV_Current.state instanceof Number) {
if (PV_Current.state > 1000)
strCurr = String::format("%.2f kW; ", (PV_Current.state as Number) / 1000)
else
strCurr = PV_Current.state.format("%d W; ")
}
logDebug("PV-update", "strCurr = {}",strCurr)
if (PV_DaySum.state instanceof Number) {
if (PV_DaySum.state > 1000)
strDay = String::format("%.2f kWh/d; ", (PV_DaySum.state as Number) / 1000)
else
strDay = PV_DaySum.state.format("%d Wh/d; ")
}
logDebug("PV-update", "strDay = {}",strDay)
if (PV_YearSum.state instanceof Number) {
if (PV_YearSum.state > 1000000)
strYear = String::format("%.2f MWh/y; ", (PV_YearSum.state as Number) / 1000000)
else if (PV_YearSum.state > 1000)
strYear = String::format("%.2f kWh/y; ", (PV_YearSum.state as Number) / 1000)
else
strYear = PV_YearSum.state.format("%d Wh/y; ")
}
logDebug("PV-update", "strYear = {}",strYear)
if (PV_Total.state instanceof Number) {
if (PV_Total.state > 1000000)
strTotal = String::format("%.2f MWh/t", (PV_Total.state as Number) / 1000000)
else if (PV_Total.state > 1000)
strTotal = String::format("%.2f kWh/t", (PV_Total.state as Number) / 1000)
else
strTotal = PV_Total.state.format("%d Wh/t")
}
logDebug("PV-update", "strTotal = {}",strTotal)
MyPV.postUpdate(strCurr + strDay + strYear + strTotal)
end
Meine Items:
Code: Alles auswählen
Number PV_Current "Aktuelle Leistung [%0f W]" <inverter> (PV,PV_Graf) { http="<[froniusrtd:30000:JSONPATH($.Body.Data.PAC.Values.1)]" }
Number PV_DaySum "Tagessumme [%0f Wh]" <inverter> (PV,PV_Graf) { http="<[froniusrtd:30000:JSONPATH($.Body.Data.DAY_ENERGY.Values.1)]" }
Number PV_YearSum "Jahressumme [%0f Wh]" <inverter> (PV) { http="<[froniusrtd:30000:JSONPATH($.Body.Data.YEAR_ENERGY.Values.1)]" }
Number PV_Total "Gesamtsumme [%0f Wh]" <inverter> (PV) { http="<[froniusrtd:30000:JSONPATH($.Body.Data.TOTAL_ENERGY.Values.1)]" }
String MyPV "PV-Anlage [%s]" <inverter> (PV)
Die Konfiguration des http-Caches:
Code: Alles auswählen
froniusrtd.url=http://<ip.des.fronius.symo>/solar_api/v1/GetInverterRealtimeData.cgi?Scope=System
Die Werte werden von der Rule automatisch in Wh, kWh oder MWh angezeigt, und zwar aktueller Messwert, Tagessumme, Jahressumme und Gesamtertrag. Eine Monatssumme bilde ich in der UI nicht ab, allerdings sammle ich nachts die 5-Minuten-Messwerte der Anlage und schreibe sie in eine MariaDB-Tabelle. Die hat mir auch schon geholfen, wenn ich vergessen hatte, am 31.12. für die Steuer abzulesen. Aus den Werten kann ich aufaddierte Werte für beliebige Zeiträume bilden, das mache ich dann halt in SQL.
Gesendet von iPad mit Tapatalk
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet