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

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

Vorheriges Thema - Nächstes Thema

FhemPiUser

Zitat von: roadghost am 02 Januar 2023, 11:20:51
Nein, das PV_forecast_morgen gibt es nicht, ich habe ja "nur" das definiert, was FhemPiUser mir per PN mitgeteilt hat. Da scheint etwas zu fehlen......

Ich habe mal meine Konfiguration für eine prognosebasierte Ladesteuerung in einem eigenem Thread unter https://forum.fhem.de/index.php/topic,132145.0.html gepostet. Ich hoffe das hilft.

SouzA

Zitat von: FhemPiUser am 12 September 2022, 19:15:54
Meine Config für die beiden Devices ist angehängt, evtl. hilft es anderen auch.

Ich habe inzwischen die modbusattr Definition um einige SH10rt Register laut Sungrow modbus Doku erweitert, u.a. um MAX/Min SoC für eine Batterie einzustellen, Global Scan zu initiieren, für die Abfrage des Systemzustands, für die Smart Meter Ablesung und für die tägliche/monatlichen/jährliche Statistiken.

Zur Anbindung von evcc habe ich außerdem noch ein modbus attr relay device, da der WR es nicht mag, wenn fhem und evcc parallel den Winet-S abfragen. evcc fragt dann beim fhem relay an.

defmod SH10rt_1_relay ModbusAttr 11 relay 192.168.x.x:1502 TCP to SH10rt_1_1

Bei mir läuft das so sehr stabil.

Des Weiteren habe ich noch eine prognosebasierte Ladesteuerung für die Batterie über Max_SOC gebaut auf Basis der freien api.forecast.solar, httpmod und doif. Wer Interesse hat kann sich bei mir melden, dann kann ich das teilen.

UPDATE: Habe die prognosebasierte Ladesteuerung im eigenen Thread gepostet unter https://forum.fhem.de/index.php/topic,132145.0.html

Moin,
habe die Register zum großen Teil so übernommen. Vielen Dank dafür!

Habe nun eine Frage zu dem Reading 99_Running_State.
Bestände da eigentlich die Möglichkeit, die einzelnen Bits darzustellen, bzw. eigenständige Readings zu erstellen, um den Status angezeigt zu bekommen.
Bei 98_System_state hast du es ja richtiger Weise mit einem Userreading gemacht.
Dies wäre bei dem Running State Register aber ein Unterfangen ohne gleichen, da zu viele Möglichkeiten (rein theoretisch 256).

Hast du dich damit schon einmal auseinander gesetzt?

Thx und bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

FhemPiUser

Habe für Running und System State folgende userreadings:


98_System_State_text:98_System_State.* {if (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0002) {return "Stop";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0008) {return "Standby";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0010) {return "Initial standby";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0020) {return "Startup";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0040) {return "Running";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0100) {return "Fault";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0400) {return "Running in maintain mode";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0800) {return "Running in forced mode";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1000) {return "Running in off-grid mode";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x2501) {return "Restarting";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x4000) {return "Running in External EMS mode";} else {return "unknown";}}



99_Running_State_text:99_Running_State.* {my $text=""; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 1) > 0) {$text=$text."Power generated from PV, ";} else {$text=$text."No power generated from PV, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 2) > 0) {$text=$text."Charging, ";} else {$text=$text."Not charging, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 4) > 0) {$text=$text."Discharging, ";} else {$text=$text."Not discharging, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 8) > 0) {$text=$text."Load is active, ";} else {$text=$text."Load is reactive, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 16) > 0) {$text=$text."Power feed-in the grid, ";} else {$text=$text."No power feed-in the grid, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 32) > 0) {$text=$text."Importing power from grid, ";} else {$text=$text."No power imported from the grid, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 128) > 0) {$text=$text."Power generated from Load , ";} else {$text=$text."No Power generated from Load , ";}; return $text;}

SouzA

Zitat von: FhemPiUser am 15 Februar 2023, 12:22:11
Habe für Running und System State folgende userreadings:


98_System_State_text:98_System_State.* {if (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0002) {return "Stop";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0008) {return "Standby";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0010) {return "Initial standby";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0020) {return "Startup";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0040) {return "Running";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0100) {return "Fault";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0400) {return "Running in maintain mode";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x0800) {return "Running in forced mode";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x1000) {return "Running in off-grid mode";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x2501) {return "Restarting";} elsif (ReadingsVal("SH10rt_1","98_System_State","0") == 0x4000) {return "Running in External EMS mode";} else {return "unknown";}}



99_Running_State_text:99_Running_State.* {my $text=""; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 1) > 0) {$text=$text."Power generated from PV, ";} else {$text=$text."No power generated from PV, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 2) > 0) {$text=$text."Charging, ";} else {$text=$text."Not charging, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 4) > 0) {$text=$text."Discharging, ";} else {$text=$text."Not discharging, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 8) > 0) {$text=$text."Load is active, ";} else {$text=$text."Load is reactive, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 16) > 0) {$text=$text."Power feed-in the grid, ";} else {$text=$text."No power feed-in the grid, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 32) > 0) {$text=$text."Importing power from grid, ";} else {$text=$text."No power imported from the grid, ";}; if ((ReadingsVal("SH10rt_1_LAN","99_Running_State","0") & 128) > 0) {$text=$text."Power generated from Load , ";} else {$text=$text."No Power generated from Load , ";}; return $text;}

Hi,
danke für die Infos.
Wie hast du die Attribute für das Running State Register gesetzt?
Die Anzeige passt nämlich überhaupt nicht.... :o
Meine sehen gerade so aus (wie in deiner Vorlage):

obj-i13000-expr $val/10
obj-i13000-poll 1
obj-i13000-reading 99_Running_State
obj-i13000-type U16


Thx und bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

FhemPiUser

...das sind userReadings, siehe https://fhem.de/commandref_DE.html#userReadings


D.h. es muss jeweils ein "attr <SH10rt_devicename> userReadings " vor den Code, den ich gepostet habe.

SouzA

Ja, das ist schon klar... Is nich mein erstes Userrading. 😉

Nein, die Anzeige im Reading passt nicht zum IST-Status.
Obwohl Sonne und PV-Ertrag sagt er, kein PV usw.
Deswegen wollte ich wissen, wie deine Attribute zum Running State Register sind... Geteilt durch 10 oder nicht usw...

Danke und bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

FhemPiUser

achso, das wäre

SH10rt_1_LAN obj-i13000-poll 1
attr SH10rt_1_LAN obj-i13000-reading 99_Running_State
attr SH10rt_1_LAN obj-i13000-type U16


Bei mir kommt außerdem der Running State nur über den LAN-Anschluss, nicht über Winet-S.

SouzA

Oh man...
Zwischen Tür und Angel nur stumpf Copy&Paste gemacht.
Muss natürlich den Devicenamen ändern!  ::) :-X

Funzt nu.
Thx und bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

SouzA

#83
Zitat von: FhemPiUser am 15 Februar 2023, 14:41:06
achso, das wäre

SH10rt_1_LAN obj-i13000-poll 1
attr SH10rt_1_LAN obj-i13000-reading 99_Running_State
attr SH10rt_1_LAN obj-i13000-type U16


Bei mir kommt außerdem der Running State nur über den LAN-Anschluss, nicht über Winet-S.

Moin, ich hab da nochmal Fragen zu den Anzeigen...
Was ist eigentlich:
Bit3: Positive load power
Bit3 == 0 Load is reactive
Bit3 == 1 Load is active

Was meinen die mit Last ist aktiv und Last ist reaktiv?

Und:
Bit7 (Refitting System): Negative load power
Bit7 == 0 No power generated from "Load"
Bit7== 1 Power generated from"Load"
Was ist damit gemeint?
Hast du eine Ahnung?

Thx und bis denn
SouzA

EDIT/weitere Anmerkung:
Wäre das Userreading Battery_Level_korrigiert nicht besser, wenn der Min_SOC auch berücksichtigt würde?
Also:
Battery_Level_korrigiert:Battery_Level.* {sprintf("%.1f", (ReadingsVal("SH10rt","Battery_Level","0")*(ReadingsVal("SH10rt","Max_SOC","0")-ReadingsVal("SH10rt","Min_SOC","0"))/100));;},
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Stephan27

Hallo zusammen und zunächst vielen Dank für den Thread und die Dokumentationsarbeit, die hier bereits gemacht wurde.
Wir montieren die Tage meine PV und als WR kommt wie sollte es hier im Thread anders sein der SG SH10RT.

Kann ich davon ausgehen, dass der erste Post aktualisiert ist und erstmal "Best Practise" ist?
Ich kann leider noch nicht probieren und konfigurieren, da der WR noch nicht am Strom hängt.


P.S.:
Aktuell lagen dem Paket der Winet-S2 und die DTU-S666 bei.
Für den WR habe ich zwei LAN-Kabel und entsprechende IP-Adresse bereitgelegt (denke mal, der WR kann sich die DHCP-Reservierungen (MAC) auf beiden Interfaces abholen?)

Kann ich über FHEM auch die Parameter für die Datenausgänge setzen? Bei mir hängt eine Viessmann WP hinten dran, die SG-Ready ist und die vom SG die Signale für Überschuss bekommen soll und entsprechend Warm-Wasser oder Heizüberschuss generieren soll. Ich könnte die WP auch via FHEM steuern statt über den Datenport vom SG, aber aktuell hängt diese noch an der Cloud von Viessmann zwecks Garantie-Verlängerung, sodass ich nur via API darauf komme. Opti-Linkkabel und lokale Steuerung kann ich erst nach der Garantie realisieren.

SouzA

Hi Stephan27,

willkommen bei den "Sungrowern"... ;)
Ich hab es tatsächlich großen Teils wie FhemPiUser umgesetzt:
Beitrag von FhemPiUser

Wobei man, meines Erachtens, lange nicht alle Register braucht. Ob man wirklich jeden Monat und jeden Tag abfragen muss, wenn man das eh schon gelogt hat, sei jedem selbst überlassen.

Anschlussmäßig habe ich die Anbindung an die Cloud über WLAN (der Winet-S2 Dongle am WR) und ModBus über die LAN-Schnittstelle direkt am WR. Das verträgt sich, meiner Erfahrung nach, gut miteinander.
DHCP funktioniert bei beiden Schnittstellen.
Setzen von Ausgängen habe ich noch nicht probiert. Hab ich z.Z. keine Notwendigkeit zu.

Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Stephan27

#86
Danke schonmal für die erste Antwort.

Also ob man alle Register braucht, sehe ich genauso, aber ich möchte zumindest erst einmal möglichst alle sehen und dann entscheiden, was ich in der MariaDB speichere und weiter verwende. Cloud möchte ich komplett darauf verzichten. Eigentlich habe ich alle meine smarten Geräte lokal, einige sind auch extra neu geflasht.

Was macht eigentlich den Unterschied beim ModbusAttr 1 3 und ModbusAttr 11 z.B. aus?

SouzA

#87
Zitat von: Stephan27 am 03 Mai 2023, 08:19:44Danke schonmal für die erste Antwort.

Also ob man alle Register braucht, sehe ich genauso, aber ich möchte zumindest erst einmal möglichst alle sehen und dann entscheiden, was ich in der MariaDB speichere und weiter verwende. Cloud möchte ich komplett darauf verzichten. Eigentlich habe ich alle meine smarten Geräte lokal, einige sind auch extra neu geflasht.

Was macht eigentlich den Unterschied beim ModbusAttr 1 3 und ModbusAttr 11 z.B. aus?

Moin,
in der Commandref:
define <name> ModbusAttr <Id> <Interval> <Address:Port> <RTU|ASCII|TCP>
In the first case the module connects to the external Modbus device with Modbus Id <Id> through the serial modbus device (RS232 or RS485). Therefore a physical [[Modbus]] device is defined first
In the second case the module connects directly through Modbus TCP or Modbus RTU or ASCII over TCP.
If <Interval> is not 0 then the module actively requests data from the external device every <Interval> seconds
The objects that the module should request and the readings it should create from these objects have to be defined with attributes (see below).
These attributes will define a mapping from so called "coils", "digital inputs", "input registers" or "holding registers" of the external device to readings inside Fhem together with the data type and format of the values.
Interval can be 0 in which case the Module only requests data when it is triggered with a Fhem get-Command.
With this mode a Fhem installation can for example query sensor data from a heating system, energy meter or solar power installation if these systems offer a Modbus interface.

Commandref ModbusAttr

Bis denn
SouzA

Edit: Aber ehrlich gesagt, habe ich mir nie groß Gedanken darüber gemacht. Habe einmal so ein Device wie im ersten Post von diesem Threat beschrieben angelegt... Und es hat auf Anhieb funktioniert.
Der andere Kram kam dann später... ;)

Edit 2: Zur Cloud-Anbindung kann ich nur sagen, dass ich es gemacht habe. Das läuft über den WLAN-Dongle im Gastnetzwerk.
Die Sache ist, dass du m.E. als "normaler" Nutzer, keine Updates o.ä. machen kannst. Dazu brauchst du das Admin-Passwort des Installateurs. Ergo muss der Installateur irgendwie auf das Gerät kommen.
Ob man das über ModBus anstoßen kann, weiß ich nicht...
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

pula

Hallo,

danke für die ganze Arbeit hierzu. Hab seit gestern einen sht8 in betrieb und bin am reintasten.
für den betrieb eines heizstabs im puffer ist diese lösung vermutlich deutlich zu langsam.
wie habt ihr das gemacht, falls jemand überschuss zum heizen verwendet?
cheers,
Pula
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

SouzA

Zitat von: pula am 12 Mai 2023, 09:54:53Hallo,

danke für die ganze Arbeit hierzu. Hab seit gestern einen sht8 in betrieb und bin am reintasten.
für den betrieb eines heizstabs im puffer ist diese lösung vermutlich deutlich zu langsam.
wie habt ihr das gemacht, falls jemand überschuss zum heizen verwendet?
cheers,
Pula

Hi,
welche Lösung ist zu langsam?
Bei meiner Konfiguration werden die Werte vom WR alle 3 Sekunden aktualisiert.
Wenn das nicht reicht die Schaltausgänge vom WR nutzen, vielleicht?!

Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee