ich möchte gerne in meiner PV-Anlage mit SMA Komponenten, das prognosebasierte Laden der Batterie, selbst regeln.
Es gibt ein funktionierendes Projekt mit ioBroker auf github (https://github.com/Maverick78de/SMA_forecast_charging), das auch ausführlich im Photovoltaikforum besprochen wurde. Der Code, meine ich mal, ist recht einfach auf openHAB portierbar.
Aber mein Speicherwechselrichter (SMA SBS 2.5) lässt sich nicht mit openHAB steuern.
Leider gibt es kaum Beispiele, wo nur schreibend auf ein Modbus-Register zugegriffen wird.
Lesend habe ich mit dem Modbus keine Probleme.
sbs25.things:
Code: Alles auswählen
Bridge modbus:tcp:inverter3 [ host="192.168.178.20", port=502, id=3 ] // SBS 2.5
{
Bridge poller sbs_sma30201 [start=30201, length=2, refresh=60000, type="input"] { Thing data SBS_Status [readStart="30201", readValueType="uint32"] } // Gerätestatus
Bridge poller sbs_sma30845 [start=30845, length=4, refresh=5000, type="input"] { Thing data SBS_Ladung [readStart="30845", readValueType="int32"] } // Ladungszustand in %
Bridge poller sbs_sma30775 [start=30775, length=4, refresh=5000, type="input"] { Thing data SBS_PIO [readStart="30775", readValueType="int32"] } // Ladung bzw Entl. in W
Bridge poller sbs_sma30535 [start=30535, length=4, refresh=10000, type="input"] { Thing data SBS_TagEntladung [readStart="30535", readValueType="uint32"] } // heutige Entladung in Wh
Bridge poller sbs_sma30777 [start=30777, length=4, refresh=5000, type="input"] { Thing data Leistung_L1 [readStart="30777", readValueType="int32"] } // Ladung bzw Entl. in W (L1)
Bridge poller sbs_sma30865 [start=30865, length=2, refresh=5000, type="input"] { Thing data SBS_TotWIn [readStart="30865", readValueType="int32"] } // Leistung Bezug (W)
Bridge poller sbs_sma30867 [start=30537, length=2, refresh=5000, type="input"] { Thing data SBS_TotWOut [readStart="30867", readValueType="int32"] } // Leistung Einspeisung (W)
Bridge poller sbs_sma31009 [start=31009, length=2, refresh=5000, type="input"] { Thing data Entladelimit [readStart="31009", readValueType="uint32"] } // Entladelimit in %
Bridge poller sbs_sma30867 [start=30867, length=2, refresh=5000, type="input"] { Thing data PowerOut [readStart="30867", readValueType="int32"] } // aktuelle Einspeiseleistung
Bridge poller sbs_sma40189 [start=40189, length=2, refresh=60000, type="input"] { Thing data WMaxCha [readStart="40189", readValueType="uint32"] } // max Ladeleistung BatWR
Bridge poller sbs_sma40191 [start=40191, length=2, refresh=60000, type="input"] { Thing data WMaxDsch [readStart="40191", readValueType="uint32"] } // max Entladeleistung BatWR
Bridge poller sbs_sma40035 [start=40035, length=2, refresh=60000, type="input"] { Thing data BatType [readStart="40035", readValueType="uint32"] } // Abfrage Batterietyp LiIonen=1785
Bridge poller sbs_sma30053 [start=30053, length=2, refresh=60000, type="input"] { Thing data Dev_Type [readStart="30053", readValueType="uint32"] } // Typnummer, 9326: Sunny Boy Storage 2.5
Bridge poller sbs_sma31061 [start=31061, length=2, refresh=10000, type="input"] { Thing data Kommunikation [readStart="31061", readValueType="uint32"] } // Kommunikation extern zugelassen
Bridge poller sbs_sma30847 [start=30847, length=2, refresh=60000, type="input"] { Thing data SOH [readStart="30847", readValueType="uint32"] } // Tatsächliche, restliche Batteriekapazität
// Diese 6 Register werden zur Lade- und Entladsteuerung benötigt und müssen innerhalb 60s nacheinander geschrieben werden!
Thing data CmpBMSOpMod [writeStart="40236", writeValueType="uint32", writeType="holding", updateUnchangedValuesEveryMillis=1000 ] // Betriebsart des BMS
Thing data BatChaMinW [writeStart="40793", writeValueType="int32", writeType="holding", updateUnchangedValuesEveryMillis=1000 ] // Minimale Batterieladeleistung
Thing data BatChaMaxW [writeStart="40795", writeValueType="int32", writeType="holding", updateUnchangedValuesEveryMillis=1000 ] // Maximale Batterieladeleistung
Thing data BatDschMinW [writeStart="40797", writeValueType="int32", writeType="holding", updateUnchangedValuesEveryMillis=1000 ] // Minimale Batterieentladeleistung
Thing data BatDschMaxW [writeStart="40799", writeValueType="int32", writeType="holding", updateUnchangedValuesEveryMillis=1000 ] // Maximale Batterieentladeleistung
Thing data GridWSpt [writeStart="40801", writeValueType="int32", writeType="holding", updateUnchangedValuesEveryMillis=1000 ] // Sollwert der Netzaustauschleistung
}
Code: Alles auswählen
Number SBS_Ladung "Aktuelle Ladung [%.0f %%]" { channel="modbus:data:inverter3:sbs_sma30845:SBS_Ladung:number" }
Number SBS_PIO "SBS PIO [%.0f W]" { channel="modbus:data:inverter3:sbs_sma30775:SBS_PIO:number" } // aktuelle Lade- bzw Entladeleistung
Number SBS_Status "Status [%.0f]" { channel="modbus:data:inverter3:sbs_sma30201:SBS_Status:number" }
Number SBS_TagEntladung { channel="modbus:data:inverter3:sbs_sma30535:SBS_TagEntladung:number" }
Number SBS_Entladelimit "Entladelimit" { channel="modbus:data:inverter3:sbs_sma31009:Entladelimit:number" } // Untere Entladegrenze für Eigenverbrauchsbereich
Number SBS_Dev_Type "Dev_Type" { channel="modbus:data:inverter3:sbs_sma30053:Dev_Type:number" } // Typnummer, 9326 = Sunny Boy Storage 2.5
Number SBS_WMaxCha "WMaxCha" { channel="modbus:data:inverter3:sbs_sma40189:WMaxCha:number" } // 0 - 2500 W
Number SBS_WMaxDsch "WMaxDsch" { channel="modbus:data:inverter3:sbs_sma40191:WMaxDsch:number" } // 0 - 2650 W
Number SBS_BatType "BatType" { channel="modbus:data:inverter3:sbs_sma40035:BatType:number"} // Li-Ionen = 1785
Number SBS_Kommunikation { channel="modbus:data:inverter3:sbs_sma31061:Kommunikation:number"}
Number SBS_SOH "Kap [%.0f %%]" { channel="modbus:data:inverter3:sbs_sma30847:SOH:number"}
// WO-Register für Prognosebasiertes Laden SBS 2.5
Number SBS_CmpBMSOpMod "Holding BMS" { channel="modbus:data:inverter3:CmpBMSOpMod:number" } // Betriebsart BMS (2424,2289,2290,303,308)
Number SBS_BatChaMinW "Holding BCMin" { channel="modbus:data:inverter3:BatChaMinW:number" } // Minimale Batterieladeleistung
Number SBS_BatChaMaxW "Holding BCMax" { channel="modbus:data:inverter3:BatChaMaxW:number" } // Maximale Batterieladeleistung
Number SBS_BatDschMinW "Holding BDMin" { channel="modbus:data:inverter3:BatDschMinW:number" } // Minimale Batterieentladeleistung
Number SBS_BatDschMaxW "Holding BDMax" { channel="modbus:data:inverter3:BatDschMaxW:number" } // Maximale Batterieentladeleistung
}
Prognosebasiertes_Laden.rules:
Code: Alles auswählen
rule "Prognosebasiertes Laden"
when
Time cron "0/15 * * * * ?" // alle 15 Sekunden
then
// Schreiben der 6 Register
SBS_CmpBMSOpMod.postUpdate(2424) // 40236, Steuerregister: 2424=Presetting, 2289=Charche Battery, 2290 = Discharche Battery.
SBS_BatChaMinW.postUpdate(0) // 40793, Minimale Batterieladeleistung
SBS_BatChaMaxW.postUpdate(500) // 40795, Maximale Batterieladeleistung, zu Testzwecke auf 500 W begrenzt
SBS_BatDschMinW.postUpdate(0) // 40797, Minimale Batterieentladeleistung
SBS_BatDschMaxW.postUpdate(2500) // 40799, Maximale Batterieentladeleistung
SBS_SollAC.postUpdate(0) // 40801, Sollwert der Netzaustauschleistung
end
In der events.log tauchen die items auch nicht auf.
Bitte schaut euch mal die Dateien an, ob das was nicht passt.
Besten Dank im Voraus!