Verbrauch Haus berechnen aus Energiewerten
Verfasst: 23. Feb 2023 20:28
Hallo zusammen,
ich habe 2 Regeln, wo bei eine Werte der anderen verarbeitet
zum einen der aktuelle Wechselrichterertrag über ModBus, wo es bei SMA leider zu einem falschen Wert bei "Keine Sonne" führt.
Hier hatte eine Forum-Fee
in einem anderen Thread eine Rule optimiert, dies abzufangen
Die dazu gehörenden Items (exemplarisch für 1 String)
Die Berechnung des Hausverbrauchs erfolgt mittels
Die Gruppe gSMA_Watt beinhaltet alle 3 Werte zu Watt und wird Abends/Nachts nicht über Rule 1 upgadated.
Somit hagelt es dann Fehlermeldungen im Log
Nun fehlt mir die Idee, wie ich dies am besten wo abfange. Wahrscheinlich mit instanceof Number aber eben nicht wo
Viele Grüße
ich habe 2 Regeln, wo bei eine Werte der anderen verarbeitet
zum einen der aktuelle Wechselrichterertrag über ModBus, wo es bei SMA leider zu einem falschen Wert bei "Keine Sonne" führt.
Hier hatte eine Forum-Fee


Code: Alles auswählen
rule "Fehlerbehebung Nacht Wechselrichter"
when
Member of gSMA_Input changed
then
val output = Inverter.members.filter[ i|triggeringItem.name.startsWith(i.name)].head
var Number nWert = 0
if(triggeringItem.state instanceof Number) {
var Number nGrenze = 0
switch(triggeringItem.name.split("_").get(1)) {
case "power" : nGrenze = 4500
case "voltage" : nGrenze = 400
case "ampere" : nGrenze = 5
case "watt" : nGrenze = 4500
}
if((triggeringItem.state as Number) < nGrenze) nWert = triggeringItem.state as Number
}
output.sendCommand(nWert)
end
Code: Alles auswählen
Number SMA40_ampere_1_In "Ampere: [%s A]" <smaampere> (gSMA_Input) {channel="modbus:data:smaSB40:smaHolding_7:input_ampere_1:number"}
Number SMA40_voltage_1_In "Volt: [%s V]" <smavolt> (gSMA_Input) {channel="modbus:data:smaSB40:smaHolding_7:input_voltage_1:number"}
Number SMA40_watt_1_In "Watt [%d W]" <smawatt> (gSMA_Input) {channel="modbus:data:smaSB40:smaHolding_7:input_watt_1:number"}
Number SMA40_ampere_1 "Ampere: [%s A]" <smaampere> (Inverter, gSMA_Ampere)
Number SMA40_voltage_1 "Volt: [%s V]" <smavolt> (Inverter, gSMA_Voltage)
Number SMA40_watt_1 "Watt [%d W]" <smawatt> (Inverter, gSMA_Watt)
Code: Alles auswählen
rule "House Consumption"
when
Item House_PowerIn changed or
Item House_PowerOut changed or
Item SMA37_BatteryWatt changed or
Item gSMA_Watt changed
then
postUpdate(House_Consumption, (House_PowerIn.state as DecimalType + gSMA_Watt.state as DecimalType - House_PowerOut.state as DecimalType + SMA37_BatteryWatt.state as DecimalType).intValue)
end
Somit hagelt es dann Fehlermeldungen im Log
Code: Alles auswählen
[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'smart-14' failed: Could not cast NULL to org.openhab.core.library.types.DecimalType; line 299, column 76, length 38 in smart

Viele Grüße