Solaranlage Komplettbeispiel Fronius BYD

Aus FHEMWiki


Clock - Under Construction.svg An dieser Seite wird momentan noch gearbeitet.


Einbindung eines Fronius-Wechselrichters, BYD-Speicher, SolarForecast, evcc-Autoladen und FTUI 2 Darstellung in FHEM

Dies Wiki beschreibt die beispielhafte Einbindung einer Solaranlage in FHEM.

Alle Module zur Steuerung der Komponenten sind bereits in fhem vorhanden bzw. werden gerade weiterentwickelt.

Ein Wechselrichter der Fa Fronius aus Österreich sowie der beliebte China-Speicher von BYD sind oft die Grundeinheiten einer Einfamilienhauslösung.

Alle notwendigen Readings werden über die vorhandenen Module speziell für dies Paket über Userreadings erzeugt,

so das auch andere Erzeuger oder Speicher in das Grundkonstrukt übernommen werden können.

Vorbedingungen

FHEM läuft und hat genügend Platz für Logdaten (>1GB/Jahr)

Der Wechselrichter sowie der Speicher sind über Lan oder eine sehr stabile(!) Wlan Verbindung erreichbar.

Von Wlan ist aber abzuraten, weil diese Verbindungen oftmals zu lange Zeitverzögerungen oder auch kurzzeitige Unterbrechungen haben.

Es läuft mit Wlan, aber oft nicht stabil genug. Der Aufbau eines Lan zu weiter entfernten Einheiten ist aufwändig, lohnt aber immer.

Alle Daten werden über DbLog gespeichert und die Graphen daraus gewonnen.

Für den Fronius Wechselrichter ist das Technician Passwort erforderlich, um die Kommunikation z.B. über Modbus zu ermöglichen.

Anleitungen dazu stehen in den Handbüchern der Firma Fronius.

Auf dem System läuft die Software EVCC, die das Laden eines Fahrzeugs komfortabel steuern kann. (aber leider auch etwas kostet :))

Grundstruktur

Der Wechselrichter wird über das Modul fronius ausgelesen und div. Userreadings erzeugt.

Zusätzlich werden über HTTPMOD weitere Daten ausgelesen.

Der Speicher ist über den Wechselrichter per ModbusAttr erreichbar sowie auch direkt über das Modul BYDBox.

Daraus ergeben sich zusätzlich gebrauchbare Darstellungen des Batteriezustands.

Bezug, Einspeisung, Erzeugung und Hausverbrauch werden über vier ElectricityCalculator Module erzeugt,

diese Module erzeugen auch die gesammten Statistikdaten. (Heute, Gestern, Monat, Vormonat, Jahr)

Zwei weitere Dummys plus Berechnungsroutinen erhalten die Daten Eigenverbrauchsquote und Autarkiegrad.

Das sehr umfangreiche Modul SolarForecast wird integriert und viele Graphen dargestellt.

Eine größere readingsGroup stellt die Gesamtstatistik der Anlage dar.

Das optinonale Programm EVCC wird integriert und kann auch gesteuert werden.

Einige FTUI2 Beispiele runden die Darstellung auf einem Tablet ab.

Fronius_Symo in FHEM

in FHEM wird das Modul fronius angelegt und darin diverse userRedings erzeugt

define Fronius_Symo fronius 192.168.xxx.xxx
attr Fronius_Symo DbLogExclude .*
attr Fronius_Symo DbLogInclude PowerFlow_Site_P_PV,PowerFlow_Site_P_Grid,PowerFlow_Site_P_Load,Akku_Laden,Akku_Entladen,User_Consumed_E
attr Fronius_Symo group Fronius
attr Fronius_Symo icon measure_photovoltaic_inst
attr Fronius_Symo room Energie-Strom
attr Fronius_Symo stateFormat {return "Status: ".ReadingsVal($name,"state","")."<br>\
PV-aktuell: ".sprintf("%.0f",ReadingsVal($name,"PowerFlow_Site_P_PV",0))." W<br>\
PV Einspeisung: ".sprintf("%.0f",ReadingsVal($name,"Einspeisung",0))." W<br>\
Netzbezug: ".sprintf("%.0f",ReadingsVal($name,"Bezug",0))." W<br>\
Akku Laden: ".sprintf("%.0f",ReadingsVal($name,"Akku_Laden",0))." W<br>\
Akku Entladen: ".sprintf("%.0f",ReadingsVal($name,"Akku_Entladen",0))." W<br>\
Ladestand Akku: ".sprintf("%.0f",ReadingsVal($name,"Storage_0_Controller_StateOfCharge_Relative",0))." %<br>\
Autarkiegrad: ".sprintf("%.1f",ReadingsVal($name,"PowerFlow_Site_rel_Autonomy",0))." %<br>\
PV gesamt: ".sprintf("%.2f",ReadingsVal($name,"PowerFlow_Site_E_Total",0)/1000)." kWh";;;;}
attr Fronius_Symo userReadings Einspeisung:PowerFlow_Site_P_Grid.* {ReadingsVal($name,"PowerFlow_Site_P_Grid","")<0?ReadingsVal($name,"PowerFlow_Site_P_Grid","")*-1:0},\
Neg_Einspeisung:PowerFlow_Site_P_Grid.* {ReadingsVal($name,"PowerFlow_Site_P_Grid","")<0?ReadingsVal($name,"PowerFlow_Site_P_Grid",""):0},\
Bezug:PowerFlow_Site_P_Grid.* {ReadingsVal($name,"PowerFlow_Site_P_Grid","")>0?ReadingsVal($name,"PowerFlow_Site_P_Grid",""):0},\
Akku_Laden:PowerFlow_Site_P_Akku.* {ReadingsVal($name,"PowerFlow_Site_P_Akku","")<0?ReadingsVal($name,"PowerFlow_Site_P_Akku","")*-1:0},\
Akku_Entladen:PowerFlow_Site_P_Akku.* {ReadingsVal($name,"PowerFlow_Site_P_Akku","")>0?ReadingsVal($name,"PowerFlow_Site_P_Akku",""):0},\
User_Produced_PV:PowerFlow_Site_P_PV.* integral {ReadingsVal("$name","PowerFlow_Site_P_PV","0")/3600000},\
User_Consumed_EN:PowerFlow_Site_P_PV.* {ReadingsVal($name,"PowerFlow_Site_P_PV","")+ReadingsVal($name,"PowerFlow_Site_P_Grid","")+ReadingsVal($name,"PowerFlow_Site_P_Akku","")},\
User_Consumed_E:PowerFlow_Site_P_PV.* {ReadingsVal($name,"User_Consumed_EN","")>0?ReadingsVal($name,"User_Consumed_EN",""):0},\
User_Consumed_Energie_C:User_Consumed_E.* integral {ReadingsVal("$name","User_Consumed_E","0")/3600000}

GEN24_MPPT

über HTTPMOD werden aus dem Fronius String Werte ausgelesen

define GEN24_MPPT HTTPMOD http://192.168.178.7/components/cache/readable 30
attr GEN24_MPPT alignTime 00:00
attr GEN24_MPPT event-on-update-reading .*
attr GEN24_MPPT group Fronius
attr GEN24_MPPT icon inverter
attr GEN24_MPPT reading1Name MPPT1_DC_W
attr GEN24_MPPT reading1OExpr {sprintf("%.0f", $val)}
attr GEN24_MPPT reading1OMap null:0
attr GEN24_MPPT reading1Regex "PV_POWERACTIVE_MEAN_01_F32"[ : \t]+([-+]?[a-z\d\.]+)
attr GEN24_MPPT reading2Name MPPT2_DC_W
attr GEN24_MPPT reading2OExpr {sprintf("%.0f", $val)}
attr GEN24_MPPT reading2OMap null:0
attr GEN24_MPPT reading2Regex "PV_POWERACTIVE_MEAN_02_F32"[ : \t]+([-+]?[a-z\d\.]+)
attr GEN24_MPPT reading3Name MPPT1_DC_A
attr GEN24_MPPT reading3OExpr {sprintf("%.3f", $val)}
attr GEN24_MPPT reading3OMap null:0
attr GEN24_MPPT reading3Regex "PV_CURRENT_MEAN_01_F32"[ : \t]+([-+]?[a-z\d\.]+)
attr GEN24_MPPT reading4Name MPPT1_DC_V
attr GEN24_MPPT reading4OExpr {sprintf("%.3f", $val)}
attr GEN24_MPPT reading4OMap null:0
attr GEN24_MPPT reading4Regex "PV_VOLTAGE_MEAN_01_F32"[ : \t]+([-+]?[a-z\d\.]+)
attr GEN24_MPPT reading5Name MPPT2_DC_A
attr GEN24_MPPT reading5OExpr {sprintf("%.3f", $val)}
attr GEN24_MPPT reading5OMap null:0
attr GEN24_MPPT reading5Regex "PV_CURRENT_MEAN_02_F32"[ : \t]+([-+]?[a-z\d\.]+)
attr GEN24_MPPT reading6Name MPPT2_DC_V
attr GEN24_MPPT reading6OExpr {sprintf("%.3f", $val)}
attr GEN24_MPPT reading6OMap null:0
attr GEN24_MPPT reading6Regex "PV_VOLTAGE_MEAN_02_F32"[ : \t]+([-+]?[a-z\d\.]+)
attr GEN24_MPPT room Energie-Strom
attr GEN24_MPPT showError 1
attr GEN24_MPPT stateFormat Süd: MPPT1_DC_W W, MPPT1_DC_V V, MPPT1_DC_A A West: MPPT2_DC_W W, MPPT2_DC_V V, MPPT2_DC_A A

PV_Batterie

per ModbusAttr werden Daten der Batterie aus dem Fronius gelesen und es können so auch Einstellungen daran vorgenommen werden

define PV_Batterie ModbusAttr 1 60 192.168.xxx.xxx:502 TCP
attr PV_Batterie DbLogExclude .*
attr PV_Batterie dev-h-combine 125
attr PV_Batterie dev-h-defFormat %.1f
attr PV_Batterie dev-h-defLen 2
attr PV_Batterie dev-h-defPoll 1
attr PV_Batterie dev-h-defUnpack f>
attr PV_Batterie devStateStyle style="text-align:right"
attr PV_Batterie disable 0
attr PV_Batterie event-min-interval ACActEnergy:7200,ACPower:7200,Battery.*:7200
attr PV_Batterie event-on-change-reading .*Energy:0.1,ACPower:1,DCPowerMPPT.*:1,status,Battery.*charge.*:1,BatteryState
attr PV_Batterie group Fronius
attr PV_Batterie icon measure_battery_100
attr PV_Batterie obj-h40073-reading ACCurrentPhaseA
attr PV_Batterie obj-h40075-reading ACCurrentPhaseB
attr PV_Batterie obj-h40077-reading ACCurrentPhaseC
attr PV_Batterie obj-h40085-reading ACVoltagePhaseA
attr PV_Batterie obj-h40087-reading ACVoltagePhaseB
attr PV_Batterie obj-h40089-reading ACVoltagePhaseC
attr PV_Batterie obj-h40091-format %.0f
attr PV_Batterie obj-h40091-reading ACPower
attr PV_Batterie obj-h40093-reading ACFrequency
attr PV_Batterie obj-h40109-reading CabinetTemperature
attr PV_Batterie obj-h40117-format %s
attr PV_Batterie obj-h40117-len 1
attr PV_Batterie obj-h40117-map 1:off,2:sleeping,3:starting,4:active,5:throttled,6:shutdown,7:fault,8:standby
attr PV_Batterie obj-h40117-reading status
attr PV_Batterie obj-h40117-unpack n
attr PV_Batterie obj-h40196-expr $val / 1000
attr PV_Batterie obj-h40196-format %.2f
attr PV_Batterie obj-h40196-len 4
attr PV_Batterie obj-h40196-reading ACActEnergy
attr PV_Batterie obj-h40196-unpack Q>
attr PV_Batterie obj-h40267-format %d
attr PV_Batterie obj-h40267-group 1-1
attr PV_Batterie obj-h40267-len 1
attr PV_Batterie obj-h40267-reading DCPowerScale
attr PV_Batterie obj-h40267-unpack s>
attr PV_Batterie obj-h40284-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr PV_Batterie obj-h40284-group 1-2
attr PV_Batterie obj-h40284-len 1
attr PV_Batterie obj-h40284-reading DCPowerMPPT1
attr PV_Batterie obj-h40284-unpack n
attr PV_Batterie obj-h40304-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr PV_Batterie obj-h40304-group 1-3
attr PV_Batterie obj-h40304-len 1
attr PV_Batterie obj-h40304-reading DCPowerMPPT2
attr PV_Batterie obj-h40304-unpack n
attr PV_Batterie obj-h40324-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr PV_Batterie obj-h40324-group 1-4
attr PV_Batterie obj-h40324-len 1
attr PV_Batterie obj-h40324-reading BatteryChargeWatt
attr PV_Batterie obj-h40324-unpack n
attr PV_Batterie obj-h40325-expr $val/1000000
attr PV_Batterie obj-h40325-ignoreExpr $val < 100
attr PV_Batterie obj-h40325-len 2
attr PV_Batterie obj-h40325-poll 300
attr PV_Batterie obj-h40325-reading Summe_Ladung
attr PV_Batterie obj-h40325-unpack N
attr PV_Batterie obj-h40344-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr PV_Batterie obj-h40344-group 1-5
attr PV_Batterie obj-h40344-len 1
attr PV_Batterie obj-h40344-reading BatteryDischargeWatt
attr PV_Batterie obj-h40344-unpack n
attr PV_Batterie obj-h40345-expr $val/1000000
attr PV_Batterie obj-h40345-ignoreExpr $val < 100
attr PV_Batterie obj-h40345-len 2
attr PV_Batterie obj-h40345-poll 300
attr PV_Batterie obj-h40345-reading Summe_Entladung
attr PV_Batterie obj-h40345-unpack N
attr PV_Batterie obj-h40355-len 1
attr PV_Batterie obj-h40355-reading BatConfigMaxReferenceWatt
attr PV_Batterie obj-h40355-unpack n
attr PV_Batterie obj-h40358-format %s
attr PV_Batterie obj-h40358-len 1
attr PV_Batterie obj-h40358-map 0:none,1:chargeMax,2:dischrMax,3:bothMax
attr PV_Batterie obj-h40358-reading BatConfigMaxEnabled
attr PV_Batterie obj-h40358-set 1
attr PV_Batterie obj-h40358-unpack n
attr PV_Batterie obj-h40360-expr $val / 100
attr PV_Batterie obj-h40360-format %.0f
attr PV_Batterie obj-h40360-len 1
attr PV_Batterie obj-h40360-poll 60
attr PV_Batterie obj-h40360-reading BatConfigReserve
attr PV_Batterie obj-h40360-set 1
attr PV_Batterie obj-h40360-setexpr $val * 100
attr PV_Batterie obj-h40360-unpack n
attr PV_Batterie obj-h40361-expr $val / 100
attr PV_Batterie obj-h40361-len 1
attr PV_Batterie obj-h40361-reading BatteryChargePercent
attr PV_Batterie obj-h40361-unpack n
attr PV_Batterie obj-h40364-format %s
attr PV_Batterie obj-h40364-len 1
attr PV_Batterie obj-h40364-map 1:off,2:empty,3:discharging,4:charging,5:full,6:holding,7:testing
attr PV_Batterie obj-h40364-reading BatteryState
attr PV_Batterie obj-h40364-unpack n
attr PV_Batterie obj-h40365-expr $val / 10000 * ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr PV_Batterie obj-h40365-len 1
attr PV_Batterie obj-h40365-max ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr PV_Batterie obj-h40365-min -ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr PV_Batterie obj-h40365-reading BatConfigMaxDischargeWatt
attr PV_Batterie obj-h40365-set 1
attr PV_Batterie obj-h40365-setexpr $val / ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1) * 10000
attr PV_Batterie obj-h40365-unpack s>
attr PV_Batterie obj-h40366-expr $val / 10000 * ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr PV_Batterie obj-h40366-len 1
attr PV_Batterie obj-h40366-max ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr PV_Batterie obj-h40366-min -ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr PV_Batterie obj-h40366-reading BatConfigMaxChargeWatt
attr PV_Batterie obj-h40366-set 1
attr PV_Batterie obj-h40366-setexpr $val / ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1) * 10000
attr PV_Batterie obj-h40366-unpack s>
attr PV_Batterie room Energie-Strom
attr PV_Batterie stateFormat Status: BatteryState <br/>\
Ladung: BatteryChargePercent % | Reserve: BatConfigReserve %<br/>\
Temp: CabinetTemperature °C<br/>\
Summe Entladung: Summe_Entladung kWh | Summe Ladung: Summe_Ladung kWh<br/>