Growatt XH Wechselrichter mit Speicher über ModBus lesen/schreiben -> meine Lösung

Begonnen von shorty1111, 13 September 2023, 17:29:08

Vorheriges Thema - Nächstes Thema

shorty1111

Da ich jetzt einen Growatt Hybrid Wechselrichter mit Speicher habe möchte ich euch hier meine Definition zum Auslesen und Beschreiben (Steuern) über ModBus zur Verfügung stellen.
Ein Modul habe ich daraus nicht gemacht, ich hab es einfach nicht geschafft.
Hier der Code:

defmod Growatt_2500 ModbusAttr 1 5 RTU
attr Growatt_2500 IODev HA_Modbus_2
attr Growatt_2500 alias Growatt_3600-XH
attr Growatt_2500 dev-h-defPoll 1
attr Growatt_2500 dev-i-defPoll 1
attr Growatt_2500 event-min-interval .*:600
attr Growatt_2500 event-on-change-reading input_voltage:10.0,input_voltage2:10.0,output_power:5.0,inverter_temperature:0.1,input_power:5.0,input_power1:5.0,input_power2:5.0,Charge_power:5.0,Battery_voltage:1.0,Discharge_power:5.0,State_of_charge_Capacity:1.0,Status,total_generated_energy:.*
attr Growatt_2500 icon solar
attr Growatt_2500 obj-h00000-expr ("s>",$val/1)
attr Growatt_2500 obj-h00000-format %.0f
attr Growatt_2500 obj-h00000-reading Remote_On_Off
attr Growatt_2500 obj-h00000-set 1
attr Growatt_2500 obj-h00000-unpack s>
attr Growatt_2500 obj-h00003-expr ("s>",$val/1)
attr Growatt_2500 obj-h00003-format %.0f
attr Growatt_2500 obj-h00003-reading Active_Power_Rate
attr Growatt_2500 obj-h00003-set 1
attr Growatt_2500 obj-h00003-unpack s>
attr Growatt_2500 obj-h00123-expr ("s>",$val/1)
attr Growatt_2500 obj-h00123-format %.0f
attr Growatt_2500 obj-h00123-reading Export_Power_Rate_in_0,1%
attr Growatt_2500 obj-h00123-set 1
attr Growatt_2500 obj-h00123-unpack s>
attr Growatt_2500 obj-h00543-expr ("s>",$val/1)
attr Growatt_2500 obj-h00543-format %.0f
attr Growatt_2500 obj-h00543-reading AfciReset
attr Growatt_2500 obj-h00543-set 1
attr Growatt_2500 obj-h00543-unpack s>
attr Growatt_2500 obj-h03036-expr ("s>",$val/1)
attr Growatt_2500 obj-h03036-format %.0f
attr Growatt_2500 obj-h03036-reading Discharge_Powerrate
attr Growatt_2500 obj-h03036-set 1
attr Growatt_2500 obj-h03036-unpack s>
attr Growatt_2500 obj-h03037-expr ("s>",$val/1)
attr Growatt_2500 obj-h03037-format %.0f
attr Growatt_2500 obj-h03037-reading Stop_SOC_low
attr Growatt_2500 obj-h03037-set 1
attr Growatt_2500 obj-h03037-unpack s>
attr Growatt_2500 obj-h03038-expr ("s>",$val/1)
attr Growatt_2500 obj-h03038-format %.0f
attr Growatt_2500 obj-h03038-len 2
attr Growatt_2500 obj-h03038-reading Battfirst/Loadfirst
attr Growatt_2500 obj-h03038-set 1
attr Growatt_2500 obj-h03038-unpack N
attr Growatt_2500 obj-h03047-expr ("s>",$val/1)
attr Growatt_2500 obj-h03047-format %.0f
attr Growatt_2500 obj-h03047-reading Charge_Powerrate
attr Growatt_2500 obj-h03047-set 1
attr Growatt_2500 obj-h03047-unpack s>
attr Growatt_2500 obj-i00000-expr ("s>",$val/1)
attr Growatt_2500 obj-i00000-format %.0f
attr Growatt_2500 obj-i00000-reading Status
attr Growatt_2500 obj-i00000-unpack s>
attr Growatt_2500 obj-i00001-expr ("s>",$val/10)
attr Growatt_2500 obj-i00001-format %.0f
attr Growatt_2500 obj-i00001-len 5
attr Growatt_2500 obj-i00001-reading input_power
attr Growatt_2500 obj-i00001-unpack l>
attr Growatt_2500 obj-i00003-expr ("s>",$val/10)
attr Growatt_2500 obj-i00003-format %.1f
attr Growatt_2500 obj-i00003-reading input_voltage
attr Growatt_2500 obj-i00003-unpack s>
attr Growatt_2500 obj-i00005-expr ("s>",$val/10)
attr Growatt_2500 obj-i00005-format %.0f
attr Growatt_2500 obj-i00005-len 2
attr Growatt_2500 obj-i00005-reading input_power1
attr Growatt_2500 obj-i00005-unpack l>
attr Growatt_2500 obj-i00007-expr ("s>",$val/10)
attr Growatt_2500 obj-i00007-format %.1f
attr Growatt_2500 obj-i00007-reading input_voltage2
attr Growatt_2500 obj-i00007-unpack s>
attr Growatt_2500 obj-i00009-expr ("s>",$val/10)
attr Growatt_2500 obj-i00009-format %.0f
attr Growatt_2500 obj-i00009-len 2
attr Growatt_2500 obj-i00009-reading input_power2
attr Growatt_2500 obj-i00009-unpack l>
attr Growatt_2500 obj-i00035-expr ("s>",$val/10)
attr Growatt_2500 obj-i00035-format %.0f
attr Growatt_2500 obj-i00035-len 2
attr Growatt_2500 obj-i00035-reading output_power
attr Growatt_2500 obj-i00035-unpack l>
attr Growatt_2500 obj-i00037-expr ("s>",$val/100)
attr Growatt_2500 obj-i00037-format %.1f
attr Growatt_2500 obj-i00037-reading grid_frequency
attr Growatt_2500 obj-i00037-unpack s>
attr Growatt_2500 obj-i00053-expr ("s>",$val/10)
attr Growatt_2500 obj-i00053-format %.1f
attr Growatt_2500 obj-i00053-len 2
attr Growatt_2500 obj-i00053-reading today_generated_energy
attr Growatt_2500 obj-i00053-unpack l>
attr Growatt_2500 obj-i00055-expr ("s>",$val/10)
attr Growatt_2500 obj-i00055-format %.1f
attr Growatt_2500 obj-i00055-len 2
attr Growatt_2500 obj-i00055-reading total_generated_energy
attr Growatt_2500 obj-i00055-unpack l>
attr Growatt_2500 obj-i00093-expr ("s>",$val/10)
attr Growatt_2500 obj-i00093-format %.1f
attr Growatt_2500 obj-i00093-reading inverter_temperature
attr Growatt_2500 obj-i00093-unpack s>
attr Growatt_2500 obj-i00113-expr ("s>",$val/1)
attr Growatt_2500 obj-i00113-format %.0f
attr Growatt_2500 obj-i00113-reading power_percentage
attr Growatt_2500 obj-i00113-unpack s>
attr Growatt_2500 obj-i03169-expr ("s>",$val/100)
attr Growatt_2500 obj-i03169-format %.2f
attr Growatt_2500 obj-i03169-reading Battery_voltage
attr Growatt_2500 obj-i03169-unpack s>
attr Growatt_2500 obj-i03171-expr ("s>",$val/1)
attr Growatt_2500 obj-i03171-format %.0f
attr Growatt_2500 obj-i03171-reading State_of_charge_Capacity
attr Growatt_2500 obj-i03171-showGet 1
attr Growatt_2500 obj-i03171-unpack s>
attr Growatt_2500 obj-i03178-expr ("s>",$val/10)
attr Growatt_2500 obj-i03178-format %.1f
attr Growatt_2500 obj-i03178-len 2
attr Growatt_2500 obj-i03178-reading Discharge_power
attr Growatt_2500 obj-i03178-unpack l>
attr Growatt_2500 obj-i03180-expr ("s>",$val/10)
attr Growatt_2500 obj-i03180-format %.1f
attr Growatt_2500 obj-i03180-len 2
attr Growatt_2500 obj-i03180-reading Charge_power
attr Growatt_2500 obj-i03180-unpack l>
attr Growatt_2500 room Modbus
attr Growatt_2500 stateFormat { "<b>". sprintf("%.0f W", (ReadingsVal($name,"input_power",0)) ) . " / ". \
sprintf("%.0f W", (ReadingsVal($name,"output_power",0) / 1) ) . " / ".\
sprintf("%.1f °C", ReadingsVal($name,"inverter_temperature",0)) . " / ".\
sprintf("%.1f kWh", ReadingsVal($name,"today_generated_energy",0)) . "<br/>+".\
sprintf("%.0f W", ReadingsVal($name,"Charge_power",0)) . " / -".\
sprintf("%.0f W", ReadingsVal($name,"Discharge_power",0)) . " / ".\
sprintf("%.2f V", ReadingsVal($name,"Battery_voltage",0)) . " / ".\
sprintf("%.0f %%", ReadingsVal($name,"State_of_charge_Capacity",0)) . "</b><br/>".\
sprintf("%.0f W", (ReadingsVal($name,"input_power1",0)) ) . " / ".\
sprintf("%.1f V", ReadingsVal($name,"input_voltage",0)) . " / ". \
sprintf("%.0f W", (ReadingsVal($name,"input_power2",0)) ) . " / ".   \
sprintf("%.1f V", ReadingsVal($name,"input_voltage2",0)) \
}
attr Growatt_2500 userReadings Total:total_generated_energy.* monotonic {ReadingsVal("Growatt_2500","total_generated_energy",0)}
attr Growatt_2500 verbose 0


Ich hoffe es nützt euch ...

... Edit: Mein Wechselrichter ist auf die Masteradresse 1 eingestellt und ich lese den ModBus mit nem RS485 to USB Adapter an nem Raspi aus ...

eckhard scholz

Hallo shorty1111,

seit 14 Tagen läuft bei mir ein Growatt SPH 3000 TL BL-UP.
Die neuste Geräteversion hat für die WLAN-Anbindung jetzt einen USB Anschluß.
Wie kann ich deine oben beschriebene Fhem-Software und den WLAN Stick am Wechselrichter verwenden. Oder muß ich mich für eins von Beiden entscheiden?

Gruß
Eckhard
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,

shorty1111

Der Anschluß des Wechselrichters erfolgt über ModBus (2-Draht Leitung) und einem entsprechenden Adapter. Bei deinem Wechselrichter wohl über die Kommunikationsschnittstellen (Pos15 in der Bed. Anleitung). Die USB und W-LAN Schnittstelle bleibt unberührt und damit voll nutzbar für die Growatt Anwendung. ModBus USB Adapter für den Raspi gibt's im Netz für wenig Geld:
https://cdn-reichelt.de/bilder/web/xxl_ws/A300/RPI_USB_RS485_01.png

Suche in deiner bevorzugten Suchmaschine nach: Modbus2usb

eckhard scholz

Moin,

danke für deine Info.
Eine interessante Lösung scheint das hier auch zu sein. Man benötigt keine direkte Verbindung zum Raspberry und kann es über MQTT in Fhem einbinden.
Bei mir ist die Entfernung Wechselrichter und RbPi ziemlich groß.

ZitatModbus mit entprechender Hardware (Raspberry ESP32 etc. und Modbus Adapter) direkt abfragen und zu MQTT schicken.
  https://github.com/tobiasfaust/SolaxModbusGateway
Tobias ist auch hier im Forum vertreten

Gruß und schönes Wochenende
Eckhard
F!B,RPi-Fhem,RaspberryMatic,Cuno,Cul,S7-300,LOGO,HMIP,HM,FS20,