Hallo,
ich habe das Modbus-Profil von tger777 schon seit einiger Zeit mit meinem Solaredge SE8K-RWS Hybrid-Wechselrichter im Einsatz. Zur Steuerung des DC-gekoppelten PV-Speichers von BYD habe ich noch die relevanten Register hinzugefügt. Das Profil ist auch für andere Kombinationen von Solaredge-Hybridwechselrichter + DC-Speicher nutzbar (z.B. LG)
Für das Problem mit dem Springen des Scalefaktors habe ich einen Custom-Logikbaustein erstellt, der die Werte umrechnet und auch gleich auf plausible Grenzen prüft:[*]
Code: Alles auswählen
/**
* Scalefactor und Wertprüfung für aus Solaredge ausgelesene Modbus TCP-Werte
*
*
*/
{
"_Meta": { // Optional
"Description": "",
"Version": "1.00",
"Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
},
"Input": [
["reading","Wert des Solaredge Wechselrichters","$iReading","ci"],
["scalefactor","Scalefactor des Solaredge Wechselrichters","$iSf","ui"],
["min","minimum value","$iMin","a"],
["max","maximum value","$iMax","a"]
],
"Output": [
["value","Scaled and filtered value","$oValue","a"]
],
"Level": [
["$formula_pv_sf","string","X1*10^(X2)"], // Formel für das umrechnen mit Scalefactor
["$iReading","float",0.0],
["$iSf","float",0.0],
["$iMin","float",0.0],
["$iMax","float",0.0],
["$oValue","float",0.0],
["$valid","bool",false], // validity trigger
["$scaledValue","float",0.0],
["$limitedValue","float",0.0]
],
"Module": [
["CalcFormula",["$iReading","$iSf"],"$scaledValue","$formula_pv_sf"], // Skalierungsfaktor WR anwenden
["Limiter","$scaledValue","$limitedValue","$valid",["$iMin","$iMax"]], // Wertebereich auf gültige Werte begrenzen
["Latch","$limitedValue","$oValue","$valid",0] // Nur gültige Werte an den Ausgang schreiben
]
}
Bei Systemen mit Hybrid-Wechselrichtern lässt sich der tatsächliche PV-Ertrag nur berechnen aus DC-Leistung Wechselrichter + DC-Leistung Batterie. Zur besseren Darstellung in Grafana habe ich mit einem Custom-Logikbaustein die Berechnung der einzelnen Teil-Energieströme umgesetzt:
Code: Alles auswählen
/**
* calculate solaredge meter values (scaling and energy flows)
*
*
*/
{
"_Meta": { // Optional
"Description": "",
"Version": "1.00",
"Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
},
"Input": [
["i_ac_power_scaled","AC Power des Solaredge Wechselrichters","$i_ac_power_scaled","c"],
["i_dc_power","DC Power des Solaredge Wechselrichters","$i_dc_power_scaled","c"],
["m_ac_power","AC Power des Solaredge Modbuszählers [W]","$m_ac_power_scaled","c"],
["b_dc_power","DC Power der Storedge Battery [W]","$b_dc_power","c"]
],
"Output": [
["PV Ertrag DC","PV Ertrag auf der DC-Seite [W]","$pv_ertrag","c"],
["WR AC Erzeugung","Gesamte AC Erzeugung des Wechselrichters [W]","$pv_ac_erzeugung","c"],
["Netzbezug","Netzbezug am SmartMeter [W]","$pv_netzbezug","c"],
["Einspeisung","Einspeisung am SmartMeter [W]","$pv_einspeisung","c"],
["Hausverbrauch","Hausverbrauch am SmartMeter [W]","$pv_verbrauch","c"],
["PV-Eigenverbrauch","Eigenverbrauch / Direktverbrauch der PV-Leistung + Speicherleistung [W]","$pv_eigenverbrauch","c"],
["WR AC Speicherladung-Netz","Ladeleistung des PV-Speichers aus dem Netz [W]","$pv_netzladung","c"],
["WR DC Speicherladung","DC-Ladeleistung des PV-Speichers aus der PV-Anlage [W]","$pv_ladung","c"],
["WR DC Speicherentladung","DC-Entladeleistung des PV-Speichers [W]","$b_entladung","c"],
["WR AC Speicherentladung","AC-Entladeleistung des PV-Speichers [W]","$i_ac_entladung","c"],
["PV Ertrag AC","PV Ertrag auf der AC-Seite [W]","$pv_ertrag_ac","c"]
],
"Level": [
["$formula_pv_netzbezug","string","abs(X1)"], // Formel für die Berechnung des Netzbezugs als positiven Wert (negativer Wert von $m_ac_power)
["$formula_pv_ertrag","string","X1+X2"], // Formel zur Berechnung des PV-Ertrags (DC-Leistung WR + DC-Leistung Speicher, negativ bei Entladung)
["$formula_pv_verbrauch","string","X1+X3-X2"], // Formel zur Berechnung des Hausverbrauchs (Erzeugung AC - Einspeisung + Netzbezug)
["$formula_pv_eigenverbrauch","string","X1-X2"], // Formel zur Berechnung des Eigenverbrauchs (Erzeugung AC - Einspeisung)
["$formula_pv_ladung","string","X1-X2"], // Formel zur Berechnung der PV-Ladeleistung ohne AC-Laden des Speichers (DC-Input Speicher - DC-Output WR)
["$formula_b_entladung","string","abs(X1)"], // Formel für die Berechnung der Speicherentladung als positiven Wert (negativer Wert von $b_dc_power)
["$formula_i_ac_entladung","string","(X1)*(X2/(X2+X3+X4))"], // Formel zur Berechnung der AC-Speicherentladung als Anteil der Gesamt-Erzeugung AC (AC-Erzeugung gesamt * DC-Speicherentladung / (DC-Speicherentladung + PV-Ertrag DC + 0.00001 zur Verhinderung von Nulldivision in Zeiten ohne Ertrag))
["$formula_pv_ertrag_ac","string","X1-X2"], // Formel zur Berechnung der AC-Einspeiseleistung als Anteil der Gesamt-Erzeugung AC (AC-Erzeugung gesamt - AC Speicherentladung)
["$i_ac_power_scaled","float",0.0],
["$i_dc_power_scaled","float",0.0],
["$m_ac_power_scaled","float",0.0],
["$b_dc_power","float",0.0],
["$pv_netzladung","float",0.0],
["$pv_ertrag","float",0.0],
["$pv_netzbezug_sgn","float",0.0],
["$pv_netzbezug","float",0.0],
["$pv_einspeisung","float",0.0],
["$pv_verbrauch","float",0.0],
["$pv_eigenverbrauch","float",0.0],
["$error","bool",false],
["$limit_upper","float",65000.0],
["$limit_lower","float",-65000.0],
["$limit_0","float",0.0],
["$pv_ac_erzeugung","float",0.0],
["$pv_ladung","float",0.0],
["$b_ladung","float",0.0],
["$b_entladung","float",0.0],
["$b_entladung_sgn","float",0.0],
["$wr_b_ladung","float",0.0],
["$i_ac_entladung","float",0.0],
["$pv_ertrag_ac","float",0.0],
["$nulldivisor","float",0.00001]
],
"Module": [
["Limiter","$m_ac_power_scaled","$pv_einspeisung","$error",["$limit_0","$limit_upper"]], // PV Einspeisung aus SmartMeter-Leistung berechnen
["Limiter","$m_ac_power_scaled","$pv_netzbezug_sgn","$error",["$limit_lower","$limit_0"]], // Netzbezug aus SmartMeter-Leistung berechnen (vorzeichenbehaftet)
["CalcFormula",["$pv_netzbezug_sgn"],"$pv_netzbezug","$formula_pv_netzbezug"], // Netzbezug vorzeichenbereinigt
["Limiter","$i_ac_power_scaled","$pv_ac_erzeugung","$error",["$limit_0","$limit_upper"]], // WR-Erzeugung auf der AC-Seite berechnen (Netzladung ignorieren)
["Limiter","$i_ac_power_scaled","$pv_netzladung","$error",["$limit_lower","$limit_0"]], // Speicherladung aus dem Netz berechnen
["Limiter","$b_dc_power","$b_ladung","$error",["$limit_0","$limit_upper"]], // Speicherladung gesamt berechnen
["Limiter","$b_dc_power","$b_entladung_sgn","$error",["$limit_lower","$limit_0"]], // Speicherentladung gesamt berechnen (vorzeichenbehaftet)
["CalcFormula",["$b_entladung_sgn"],"$b_entladung","$formula_b_entladung"], // Speicherentlatung DC vorzeichenbereiningt
["Limiter","$i_dc_power_scaled","$wr_b_ladung","$error",["$limit_lower","$limit_0"]], // DC-seitige Ladung des Speichers berechnen
["CalcFormula",["$b_ladung","$wr_b_ladung"],"$pv_ladung","$formula_pv_ladung"], // Ladeleistung des Speichers aus der PV-Anlage berechnen
["CalcFormula",["$i_dc_power_scaled","$b_dc_power"],"$pv_ertrag","$formula_pv_ertrag"], // PV-Ertrag auf der DC-Seite berechen
["CalcFormula",["$pv_ac_erzeugung","$pv_einspeisung","$pv_netzbezug"],"$pv_verbrauch","$formula_pv_verbrauch"], // Netzbezug berechen
["CalcFormula",["$pv_ac_erzeugung","$pv_einspeisung"],"$pv_eigenverbrauch","$formula_pv_eigenverbrauch"], // Eigenverbrauch berechnen
["CalcFormula",["$pv_ac_erzeugung","$b_entladung","$pv_ertrag","$nulldivisor"],"$i_ac_entladung","$formula_i_ac_entladung"], // Speicherentladung AC-seitig berechnen
["CalcFormula",["$pv_ac_erzeugung","$i_ac_entladung"],"$pv_ertrag_ac","$formula_pv_ertrag_ac"] // PV Ertrag auf der AC-Seite berechnen
]
}
Mit dem erweiterten Profil funktioniert nun zusätzlich:
- Speicherzustand auslesen (Ladestand, Be-/Entladeleistung usw.)
- Speicherbe- und -entladung steuern (Solaredge lädt im Modus Eigenverbrauchsoptimierung stur morgens den Speicher, sobald Sonne da ist.)
Die Ansteuerung des PV-Speichers habe ich über Logikbausteine gelöst. Folgendes habe ich umgesetzt:
- Ladeleistung an sehr sonnigen Tagen so anpassen, dass der Speicher mittags noch Kapazität frei hat, um 70% Abregelung zu umgehen
- maximalen Ladestand im Sommer auf 90% begrenzen, um den Akku zu schonen (volle Kapazität des Speichers wird aktuell nur im Winterhalbjahr benötigt)
Hier die Logik für die Ladesteuerung. Die Ladesteuerung lässt sich über einen Eingang aktivieren und die max. Ladeleistung in Watt vorgeben. Als Trigger sind 15s eingestellt.
Code: Alles auswählen
{
"_Meta": { // Optional
"Description": "",
"Version": "1.00",
"Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
},
"Input": [
["Limit Aktiv","Begrenzung der Ladeleistung ist aktiviert","$limitAktiv","a"],
["Limit","Limit der Ladeleistung [W]","$currentChargeLimit","ai"]
],
"Output": [
["MB Storage Control Default Mode","","$mbStorageControlDefaultMode","a"],
["MB Storage Control Mode","","$mbStorageControlMode","a"],
["MB Storage Remote Control Mode","","$mbRemoteControlMode","a"],
["MB Storage Charge Limit","","$mbRemoteChargeLimit","a"]
],
"Level": [
["$limitAktiv","bool",false],
["$maxChargeLimit","float",5000.0],
["$currentChargeLimit","float",0.0],
["$RemoteControlMaxConsumption","integer",7],
["$StorageControlModeRemote","integer",4],
["$StorageControlModeDefault","integer",1],
["$mbRemoteControlMode","integer",0],
["$mbRemoteChargeLimit","float",0.0],
["$mbStorageControlMode","integer",0],
["$mbStorageControlDefaultMode","integer",0],
["$true","bool",true]
],
"Module": [
// Storage default mode auf 7 (Max. Eigenverbrauch) als Fallback immer setzen
["Latch","$RemoteControlMaxConsumption","$mbStorageControlDefaultMode","$true",0],
// Wenn Ladegreze aktiv, Modus umschalten
// Storage Control Mode = 4 (Remote)
["Multiplexer",["$StorageControlModeDefault","$StorageControlModeRemote"],"$mbStorageControlMode","$limitAktiv"],
// Remote Control Mode = 7 (Max. Eigenverbrauch)
["Latch","$RemoteControlMaxConsumption","$mbRemoteControlMode","$limitAktiv",0],
// Charge Limit = Wert in Watt
["Multiplexer",["$maxChargeLimit","$currentChargeLimit"],"$mbRemoteChargeLimit","$limitAktiv"]
]
}
Achtung: Mit den Registern Export Control Mode 57344 - 57346 lässt sich die vom Solarteur eingestellte Einspeisebegrenzung überschreiben. Vorsicht beim Beschreiben / Testen des Profils, nicht dass versehentlich die 70%-Abregelung deaktiviert wird.