Einbindung eines Sungrow SH10RT: SH05,SH06,SH08,SH10

Begonnen von 3gmann, 05 November 2020, 11:22:14

Vorheriges Thema - Nächstes Thema

FhemPiUser

nur holding register können geschrieben werden, siehe fhem modbusattr wiki oder commandref...

Bara

#166
Zitat von: tobmaster1985 am 16 Januar 2024, 01:00:34Hallo Zusammen,
nachdem ich seit 1 Woche ebenfalls eine PV Anlage mit Sungrow Wechselrichter SH06rt habe ich mit Erfolg die hervorragende Anleitung umgesetzt.
Mit Interesse habe ich den Beitrag von tobmaster1985 gelesen zur Einbindung des DTSU666 . Ich habe mit der gleichen Systematik das userreading um die Punkte des DTSU666 ergänzt. Leider ist das Ergebnis nicht zu gebrauchen, es kommen überall nur 0 Werte.
@tobmaster1985 : Könntest Du evtl. Dein userreading posten.
Vielen Dank
Rainer
Grüße
Rainer

tobmaster1985

Im userreading habe ich nichts, was mit den Werten des DTSU666 zu tun hat, sie werden ausgelesen:

Zitat von: tobmaster1985 am 16 Januar 2024, 01:00:34Die Werte vom DTSU666 hatte ich geplant mit ModbusAttr im passive Modus auszulesen, ist aber gar nicht notwendig:

attr SH10RT obj-i5600-reading Power_DTSU666_Total
attr SH10RT obj-i5600-type S32
attr SH10RT obj-i5602-reading Power_DTSU666_L1
attr SH10RT obj-i5602-type S32
attr SH10RT obj-i5604-reading Power_DTSU666_L2
attr SH10RT obj-i5604-type S32
attr SH10RT obj-i5606-reading Power_DTSU666_L3
attr SH10RT obj-i5606-type S32
attr SH10RT obj-i5736-reading Frequency_DTSU666
attr SH10RT obj-i5736-expr $val/100
attr SH10RT obj-i5740-reading Voltage_DTSU666_L1
attr SH10RT obj-i5740-expr $val/10
attr SH10RT obj-i5741-reading Voltage_DTSU666_L2
attr SH10RT obj-i5741-expr $val/10
attr SH10RT obj-i5742-reading Voltage_DTSU666_L3
attr SH10RT obj-i5742-expr $val/10
attr SH10RT obj-i5743-reading Current_DTSU666_L1
attr SH10RT obj-i5743-expr $val/100
attr SH10RT obj-i5744-reading Current_DTSU666_L2
attr SH10RT obj-i5744-expr $val/100
attr SH10RT obj-i5745-reading Current_DTSU666_L3
attr SH10RT obj-i5745-expr $val/100
attr SH10RT obj-i5746-reading Energy_DTSU666_Import
attr SH10RT obj-i5746-expr $val/100
attr SH10RT obj-i5746-type U32
attr SH10RT obj-i5748-reading Energy_DTSU666_Export
attr SH10RT obj-i5748-expr $val/100
attr SH10RT obj-i5748-type U32

Wenn der DTSU666 offline ist (Spannungsfrei oder Modbus unterbrochen) dann liefern die Register 7FFFFFFF / 7FFF / FFFF.

Welche Hard- und Softwareversion hat dein SH06RT?

Was genau hast du konfiguriert?



Bara

Hallo tobmaster1985,
vielen Dank für die schnelle Antwort. Ich muss gestehen, dass ich die Einbindung meines SH6.0rt ausschl. per copy&paste gemacht habe; bisher habe ich in fhem nur mit filelog gearbeitet und keine DB.
Ich hatte gehofft, mit folgenden Ergänzungen (letzte 3 Zeilen) des userReadings Werte zu Weiterverarbeitung zu bekommen, klappt aber leider so nicht.

attr SH06rt_Fast userReadingsPower_MPPT_1 {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","MPPT_1_Voltage", 0) * ReadingsNum ("SH06rt_Fast","MPPT_1_Current", 0)));} ,
Power_MPPT_2 {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","MPPT_2_Voltage", 0) * ReadingsNum ("SH06rt_Fast","MPPT_2_Current", 0)));},
Complete_Daily_Yield {sprintf("%.1f", (ReadingsNum ("SH06rt_Fast","Daily_PV_Generation", 0) + ReadingsNum ("Plenticore","Dailey_Yield", 0)));},
Complete_Daily_Einspeisung {sprintf("%.1f", (ReadingsNum ("SH06rt_Fast","Daily_Export_Energy", 0) + ReadingsNum ("Plenticore","Dailey_Einspeisung_KWh", 0)));},
Complete_Daily_PV_Consumption {sprintf("%.1f", (ReadingsNum ("SH06rt_Fast","Complete_Daily_Yield", 0) - ReadingsNum ("SH06rt_Fast","Complete_Daily_Einspeisung", 0)));},
Complete_DC_Power {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","Power_MPPT_1", 0) + ReadingsNum ("SH06rt_Fast","Power_MPPT_2", 0)+ ReadingsNum ("Plenti_Fast","Power_DC1", 0) + ReadingsNum ("Plenti_Fast","Power_DC2", 0) + ReadingsNum ("Plenti_Fast","Power_DC3", 0)));},
Complete_AC_Power {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","Total_DC_Power", 0) + ReadingsNum ("Plenti_Fast","Total_AC_active_power", 0)));},
Power_DTSU666_Total {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","Power_DTSU666_Total", 0)));},
Energy_DTSU666_Import {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","Energy_DTSU666_Import", 0)));},
Energy_DTSU666_Export {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","Energy_DTSU666_Export", 0)));}

Ich denke ich muss mich erstmal seelisch und gedanklich auf die Umstellen auf DB vorbereiten.
Wo kann ich die Softwareversion des Sungrow WR ablesen? Ich finde nur die Versionsnr.CB0-1.0.18.0-AB0-1.0.17.0-AA10-1.0.4.0 in den Geräteeinstellungen Isolarcloud.
 
Grüße
Rainer

tobmaster1985

Wie liest du die Register aus?
Poste doch mal die komplette Definition vom Device.

Deine userreadings für die DTSU666 Werte sind doch komplett sinnlos, weil sie das Reading überschreiben, was sie auslesen. Was hast du damit vor?

Das Auslesen hat nichts mit Filelog oder DB zu tun.. Eher ein Problem bei der Definition vom Device...

Bara

Hallo tobmaster1985,
vielen Dank für die Antwort.
Ich möchte die aktuelle Eispeisung und den Strombezug aus der DTSU666 auslesen um Überschussstrom entsprechend zu verbrauchen.
Wie gesagt habe ich von modbus keine Ahnung und nur per copy & paste das ganze übernommen. Sämtliche Daten -mit AusnahmeDTSU666- werden ausgelesen und inzwischen auch ausgewählt in der DB gespeichert.
Nachfolgend das device:
define SH06rt_Fast ModbusAttr 1 30 192.168.178.140:502 TCP
attr SH06rt_Fast DbLogExclude .*
attr SH06rt_Fast DbLogInclude Inside_Temperature:600:force,\
Power_MPPT_1:600:force,\
Power_MPPT_2:600:force,\
MPPT_1_Voltage:600:force,\
MPPT_2_Voltage:600:force,\
MPPT_1_Current:600:force,\
MPPT_2_Current:600:force,\
Daily_PV_Generation:600:force,\
Complete_Daily_Yield:600:force,\
Complete_Daily_Einspeisung:600:force,\
Complete_Daily_PV_Consumption:600:force,\
Power_DTSU666_Total,\
Power_DTSU666_L1,\
Power_DTSU666_L2,\
Power_DTSU666_L3,\
Frequency_DTSU666,\
Voltage_DTSU666_L1,\
Voltage_DTSU666_L2,\
Voltage_DTSU666_L3,\
Current_DTSU666_L1,\
Current_DTSU666_L2,\
Current_DTSU666_L3,\
Energy_DTSU666_Import,\
Energy_DTSU666_Export,\
BYD_Battery_Power:600:force,
attr SH06rt_Fast dev-type-S16-unpack s>
attr SH06rt_Fast dev-type-S32-len 2
attr SH06rt_Fast dev-type-S32-revRegs 1
attr SH06rt_Fast dev-type-S32-unpack l>
attr SH06rt_Fast dev-type-U32-len 2
attr SH06rt_Fast dev-type-U32-revRegs 1
attr SH06rt_Fast dev-type-U32-unpack N
attr SH06rt_Fast event-on-change-reading .*
attr SH06rt_Fast obj-i13001-expr $val/10
attr SH06rt_Fast obj-i13001-poll 1
attr SH06rt_Fast obj-i13001-polldelay x199
attr SH06rt_Fast obj-i13001-reading Daily_PV_Generation
attr SH06rt_Fast obj-i13002-expr $val/10
attr SH06rt_Fast obj-i13002-poll 1
attr SH06rt_Fast obj-i13002-polldelay x199
attr SH06rt_Fast obj-i13002-reading Total_PV_Generation
attr SH06rt_Fast obj-i13002-type U32
attr SH06rt_Fast obj-i13004-expr $val/10
attr SH06rt_Fast obj-i13004-poll 1
attr SH06rt_Fast obj-i13004-polldelay x199
attr SH06rt_Fast obj-i13004-reading Daily_Export_Energy
attr SH06rt_Fast obj-i13005-expr $val/10
attr SH06rt_Fast obj-i13005-poll 1
attr SH06rt_Fast obj-i13005-polldelay x199
attr SH06rt_Fast obj-i13005-reading Total_Export_Energy
attr SH06rt_Fast obj-i13005-type U32
attr SH06rt_Fast obj-i13007-poll 1
attr SH06rt_Fast obj-i13007-reading Load_Power
attr SH06rt_Fast obj-i13007-type S32
attr SH06rt_Fast obj-i13009-poll 1
attr SH06rt_Fast obj-i13009-reading Export_Power
attr SH06rt_Fast obj-i13009-type S32
attr SH06rt_Fast obj-i13016-expr $val/10
attr SH06rt_Fast obj-i13016-poll 1
attr SH06rt_Fast obj-i13016-polldelay x199
attr SH06rt_Fast obj-i13016-reading Daily_direct_Energy_Consumption
attr SH06rt_Fast obj-i13021-expr $val/1
attr SH06rt_Fast obj-i13021-poll 1
attr SH06rt_Fast obj-i13021-reading BYD_Battery_Power
attr SH06rt_Fast obj-i5007-expr $val/10
attr SH06rt_Fast obj-i5007-poll 1
attr SH06rt_Fast obj-i5007-polldelay x199
attr SH06rt_Fast obj-i5007-reading Inside_Temperature
attr SH06rt_Fast obj-i5007-type S16
attr SH06rt_Fast obj-i5010-expr $val/10
attr SH06rt_Fast obj-i5010-poll 1
attr SH06rt_Fast obj-i5010-reading MPPT_1_Voltage
attr SH06rt_Fast obj-i5011-expr $val/10
attr SH06rt_Fast obj-i5011-poll 1
attr SH06rt_Fast obj-i5011-reading MPPT_1_Current
attr SH06rt_Fast obj-i5012-expr $val/10
attr SH06rt_Fast obj-i5012-poll 1
attr SH06rt_Fast obj-i5012-reading MPPT_2_Voltage
attr SH06rt_Fast obj-i5013-expr $val/10
attr SH06rt_Fast obj-i5013-poll 1
attr SH06rt_Fast obj-i5013-reading MPPT_2_Current
attr SH06rt_Fast obj-i5016-poll 1
attr SH06rt_Fast obj-i5016-reading Total_DC_Power
attr SH06rt_Fast obj-i5016-type U32
attr SH06rt_Fast obj-i5035-expr $val/10
attr SH06rt_Fast obj-i5035-poll 1
attr SH06rt_Fast obj-i5035-polldelay x199
attr SH06rt_Fast obj-i5035-reading Grid_Frequency
attr SH06rt_Fast obj-i5600-reading Power_DTSU666_Total
attr SH06rt_Fast obj-i5600-type S32
attr SH06rt_Fast obj-i5604-reading Power_DTSU666_L2
attr SH06rt_Fast obj-i5604-type S32
attr SH06rt_Fast obj-i5606-reading Power_DTSU666_L3
attr SH06rt_Fast obj-i5606-type S32
attr SH06rt_Fast obj-i5743-expr $val/100
attr SH06rt_Fast obj-i5743-reading Current_DTSU666_L1
attr SH06rt_Fast obj-i5744-expr $val/100
attr SH06rt_Fast obj-i5744-reading Current_DTSU666_L2
attr SH06rt_Fast obj-i5745-expr $val/100
attr SH06rt_Fast obj-i5745-reading Current_DTSU666_L3
attr SH06rt_Fast obj-i5746-expr $val/100
attr SH06rt_Fast obj-i5746-reading Energy_DTSU666_Import
attr SH06rt_Fast obj-i5746-type U32
attr SH06rt_Fast obj-i5748-expr $val/100
attr SH06rt_Fast obj-i5748-reading Energy_DTSU666_Export
attr SH06rt_Fast obj-i5748-type U32
attr SH06rt_Fast room 2.4 PV Solar
attr SH06rt_Fast userReadings Power_MPPT_1 {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","MPPT_1_Voltage", 0) * ReadingsNum ("SH06rt_Fast","MPPT_1_Current", 0)));;} ,\
Power_MPPT_2 {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","MPPT_2_Voltage", 0) * ReadingsNum ("SH06rt_Fast","MPPT_2_Current", 0)));;},\
Complete_Daily_Yield {sprintf("%.1f", (ReadingsNum ("SH06rt_Fast","Daily_PV_Generation", 0)));;},\
Complete_Daily_Einspeisung {sprintf("%.1f", (ReadingsNum ("SH06rt_Fast","Daily_Export_Energy", 0)));;},\
Complete_Daily_PV_Consumption {sprintf("%.1f", (ReadingsNum ("SH06rt_Fast","Complete_Daily_Yield", 0) - ReadingsNum ("SH06rt_Fast","Complete_Daily_Einspeisung", 0)));;},\
Complete_DC_Power {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","Power_MPPT_1", 0) + ReadingsNum ("SH06rt_Fast","Power_MPPT_2", 0)));;},\
Complete_AC_Power {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","Total_DC_Power", 0)));;},\
Power_DTSU666_Total {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","Power_DTSU666_Total", 0)));;},\
Energy_DTSU666_Import {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","Energy_DTSU666_Import", 0)));;}, \
Energy_DTSU666_Export {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","Energy_DTSU666_Export", 0)));;}
 
Grüße
Rainer

tobmaster1985

Tut mir leid, aber ich verstehe nicht, was du da machst.

Du hast die Objekte definiert, um die Werte auszulesen, aber kein polling aktiv.
Dann definierst du userreadings mit den selben Readings, wie die Readings, die die userreadings wiederum auslesen. HÄ?

Bitte nicht falsch verstehen, aber stumpfes Copy&Paste funktioniert nicht, wenn man nicht weiß was man umsetzen will oder tut.

Um einen Überschussverbrauch zu steuern brauchst du nicht unbedingt die Werte vom DTSU666, das geht auch mit den Werten, die der SHxxRT auf Register 13009/13010 liefert.
Dort sieht man den Leistungsfluss ins bzw aus dem öffentlichen Netz.

Für eine Überschusssteuerung solltest du dir SolarForecast ansehen und das Abfrageintervall für den Wechselrichter sinnvoll setzen, 30sek ist IMHO zu groß für eine genaue Steuerung.
Solarforecast hat 1. eine Prognose, wann welche Leistung zu erwarten ist und 2. eine Verbrauchersteuerung


Hier die Lösung:

Lösche die sinnlosen Userreadings zum DTSU.. auch andere userreadings, die Schwachsinn sind:
Complete_AC_Power {sprintf("%.0f", (ReadingsNum ("SH06rt_Fast","Total_DC_Power", 0)));;},\
Deinen Registerdefinitionen fehlt das polling:
attr SH06rt_Fast obj-i5600-reading Power_DTSU666_Total
attr SH06rt_Fast obj-i5600-type S32
Erst mit
attr SH06rt_Fast obj-i5600-poll 1 wird auch wirklich das Register abgefragt.
Warum das in meinem Listing nicht mit dabei war? Ich verwende defPoll.

Bitte auch nochmal meinen ersten Post lesen, dort habe ich was zum combine Attribut geschrieben.


Wenn du die Ausgangsleistung vom SHxxRT sehen willst, folgende Register abfragen:
attr SH10RT obj-i05231-reading Power_AC_Active
attr SH10RT obj-i05231-type S32
attr SH10RT obj-i05233-reading Power_AC_Reactive
attr SH10RT obj-i05233-type S32
attr SH10RT obj-i05235-reading Power_DC_Total
attr SH10RT obj-i05235-type S32
attr SH10RT obj-i05237-reading Power_AC_Apparent
attr SH10RT obj-i05237-type S32

Dann wirst du sehen, dass "DC Total" nicht immer mit der AC Leistung übereinstimmt und auch nicht immer mit der Summe der beiden Strings.



Bara

Vielen Dank für die Unterstützung tobmaster1985!
Grüße
Rainer

tupol

Zitat von: tobmaster1985 am 19 Januar 2024, 13:09:43Die Register frage ich direkt über den LAN-Port am SH10RT ab.

Über den WiNet-S frage ich nur Register vom SBR128 ab, zweimal ModbusAttr gegen den LAN-Port mag der SH10RT nicht.


Das hatte ich ursprünglich auch so, aber leider erhält man über WiNet-S nicht die Zellspannungen der Batterie und kann das Cell-Balancing nicht überprüfen bzw. steuern. :-(