Erfahrungen mit der Anbindung von Huawei Wechselrichtern?

Begonnen von lingerb, 30 Oktober 2020, 20:02:56

Vorheriges Thema - Nächstes Thema

tpoetschan

Danke für euren schnellen Support!

Hier nochmal mein Aufbau, für alle die später einsteigen und evtl. das gleiche Problem haben:

10KTL inkl. Dongle
5KTL mit Buskabel am 10KTL
Smartmeter im Bus am 10KTL
Raspberry mit LAN
Dongle mit LAN

Ich habe zwischenzeitlich mit BOPV.info mal eine Windowsseitige Abfrage gemacht und hier nun ein bisschen "Debug" machen können.
Mein zweiter 5KTL war ja abgeschaltet... nach Foreninformationen (PV Forum) stört ein nicht existentes Busmitglied auch den Modbus.
Also habe ich meinen 5KTL nun wieder eingesichert und der läuft nun ohne Strings.

Jetzt kommen wieder Modbus-Daten!

Aber  ;D  ...

Es kommen mit der Def

DEF 1 60 10.4.0.88:502 TCP
aber nun ausschließlich Daten vom 5KTL. Der 10KTL an dem der Dongle hängt ist nicht erreichbar.
Jemand eine Idee?
Ich habe natürlich schon die anderen ID´s in der Def versucht (2,3,4,5...) - aber da kommt überall timeout.

Also scheint sich alles auf den Huawei Bus zu konzentieren.

Ich hoffe jemand hat noch Ideen - ich stochere total im Nebel.

bertl

Hallo Thomas,

ich kann dir da nicht ganz folgen!

Einmal verbindest du dich mit der IP '10.4.0.5' und dann mit der IP '10.4.0.88'

So wie ich deine Beschreibung verstehe, hängt der 5KTL mit Buskabel am 10KTL (kaskadiert).
Am 10KTL ist der SDongle über LAN angeschlossen, welcher die IP '10.4.0.5' hat.

Sämtliche Daten werden nun über den SDongle welcher am 10KTL hängt (und auch die darunter kaskadierten weiteren Wechselrichter) abgefragt.
Auf den 5KTL kannst du ja direkt gar nicht zugreifen, da er ja nicht im LAN hängt.

Somit sollte deine Definition wie folgt sein:
define pv_wr ModbusSUN2000WR 1 30 10.4.0.5:502 TCP
Falls nicht, habe ich deine Beschreibungen falsch verstanden oder du hast zwischen deinen beiden Posts https://forum.fhem.de/index.php?msg=1301655 und https://forum.fhem.de/index.php?msg=1301812 etwas geändert!

Gruß, Robert



Wasserwerk33

#137
Hallo Leute,

bitte nicht direkt steinigen.

Ich bin über das Web Interface gegangen und habe dort den Dongle MODbus uneingeschränt aktiviert.

Dann habe ich den unter Fhem Die IP meines Dongle eingetragen

defmod Sun2000 ModbusAttr 1 10 192.168.xxx.72:502 TCP
Nur leider bekomme ich keine Daten heraus.

Das system zeigt open an.

Internals:
   CFGFN     
   DEF        1 10 192.168.xxx.72:502 TCP
   DeviceName 192.168.xxx.72:502
   EXPECT     response
   FD         15
   FUUID      65bf5777-f33f-688c-1e14-07427960ad3e98f0
   IODev      Sun2000
   Interval   10
   LASTOPEN   1707041567.34498
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.4.13 - 4.12.2022
   NAME       Sun2000
   NOTIFYDEV  global
   NR         8698
   NTFY_ORDER 50-Sun2000
   PARTIAL   
   PROTOCOL   TCP
   STATE      opened
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   eventCount 45
   nextOpenDelay 60
   nextTimeout 1707041760.81339
   scanOAdr   365
   scanOEnd   16384
   scanOLen   1
   scanOStart 1
   scanOType  h
   FRAME:
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2024-02-04 11:15:55   Daily_energy_yield 0.11
     2024-02-04 11:12:47   state           opened
   REMEMBER:
     lid        1
     lname      Sun2000
     lrecv      1707041758.30148
     lsend      1707041758.81722
   REQUEST:
     ADR        365
     DBGINFO    scan objs
     FCODE      3
     FRAME      ^␆␁␃␁m␁
     LEN        1
     MODBUSID   1
     OPERATION  scanobj
     QUEUED     1707041758.81157
     READING   
     SENT       1707041758.81339
     TID        94
     TYPE       h
     MASTERHASH:
   defptr:
     Sun2000    1
   gotReadings:
     Daily_energy_yield 0.11
   lastRead:
     h32114     1707041755.6141
Attributes:
   obj-h32114-expr $val/100
   obj-h32114-len 2
   obj-h32114-poll 1
   obj-h32114-reading Daily_energy_yield
   obj-h32114-unpack N
   openTimeout 10

Könnte mir jemand vielleicht helfen??

Wenn ich es richtig verstanden habe funktoniert dieses auch mit dem Dongle direkt ohne zusatzmodul. Richtig?? oder benötige ich dieses ModBus modul mit RS schnittstelle?

Oder sagen wie ich die einzelen Parameter herausfinden kann die ich abfragen kann??

Danke für eure Hilfe.




Wasserwerk33

So es läuft.

Könnte mir den vielleicht jemand sagen wie ich es schaffe, zu sehen ob die Batterie geladen wird oder nicht? Und wenn welcher der beiden adressen es ist??

attr Sun2000 obj-h37001-len 2
attr Sun2000 obj-h37001-map >0:charging, <0:discharging
attr Sun2000 obj-h37001-poll 1
attr Sun2000 obj-h37001-reading Battery_charing
attr Sun2000 obj-h37001-unpack n!

attr Sun2000 obj-h37743-len 1
attr Sun2000 obj-h37743-map >0:charging, <0:discharging
attr Sun2000 obj-h37743-poll 1
attr Sun2000 obj-h37743-reading Battery_charing
attr Sun2000 obj-h37743-unpack n

passibe

Wenn du nur wissen willst, ob geladen wird oder nicht, dann ist es 37001, aber unpack N!. Wenn größer 0 wird geladen, wenn kleiner 0 entladen (hast du glaube ich richtig so).
Ansonsten: Wenn die Batterie im Ruhezustand ist, dann gibt sie bei mir 2147483647 (also den Maximalwert für 32-Bit signed Integer) aus, das müsstest du ggfs. filtern.

Ansonsten siehe hier meinen Post bzw. im Anhang davon, da sind weitere Register für die Batterie umgesetzt.

Falls du mehr brauchst wirst du im Modbus Interface Definition pdf ab S. 22 fündig (siehe hier).

feger

Zitat von: passibe am 04 Februar 2024, 15:52:15... Ansonsten: Wenn die Batterie im Ruhezustand ist, dann gibt sie bei mir 2147483647 (also den Maximalwert für 32-Bit signed Integer) aus, das müsstest du ggfs. filtern. ...

Wie filterst du das?

mfg Feger
CUL433MHz für Intertechno & Somfy
CUL868MHz für Homematic
RFXTRX433E für Oregon & KeeLoq

feger

"h37001" => { len       => 2,
              polldelay => "x1",
              reading   => "Battery_charge",
              unpack    => "N!",
            }
Für jeden Akkublock gibt es auch noch Register.
"h38233" => { len       => 2,
              expr      => '$val/1000',
              polldelay => "x1",
              reading   => "ESU1_Battery1_charge",
              unpack    => "N!",
             }
"h38275" => { len       => 2,
              expr      => '$val/1000',
              polldelay => "x1",
              reading   => "ESU1_Battery2_charge",
              unpack    => "N!",
            }
Und dann noch die Werte pro Tag:
"h37015" => { len       => 2,
              expr      => '$val/100',
              polldelay => "x10",
              reading   => "ESU1_Current_Day_Charge_Capacity",
              unpack    => "N",
            },
"h37017" => { len       => 2,
              expr      => '$val/100',
              polldelay => "x10",
              reading   => "ESU1_Current_Day_Discharge_Capacity",
              unpack    => "N",
            },
CUL433MHz für Intertechno & Somfy
CUL868MHz für Homematic
RFXTRX433E für Oregon & KeeLoq

passibe


Wasserwerk33

#143
@ passibe

Danke für die Hilfe, bin nun schon einiges weiter gekommen.

Ja die Doku habe/ hatte ich schon gefunden und gelesen  ;)

Nur man findet nicht hinter jedem etwas passendes dazu.

Vielleicht kannst du mir noch sagen was was ist habe bei 2-3 noch fragen was die ausgabe damit sagt.

obj-h32080-reading Active_power

obj-h32064-reading Input_powerobj-h37113-reading Peak_active_powerLaut PDF ist es das was ich ins Netz einspeise oder Beziehe ist das richtig?

In der PDF steht da nix genaues drin. Oder ejar ich kann da nix mit anfangen so würde ich es sagen.

Danke für die Hilfe

feger

Zitat von: passibe am 10 Februar 2024, 15:45:35Siehe im oben verlinkten Post der Anhang
Sorry ich wollte nur ein paar Beispiele schreiben. (Mische mich nicht mehr ein ;) )
Solche Beispiele erleichtern mir das Verständnis.

Zitat von: feger am 10 Februar 2024, 15:18:15
Zitat... Ansonsten: Wenn die Batterie im Ruhezustand ist, dann gibt sie bei mir 2147483647 (also den Maximalwert für 32-Bit signed Integer) aus, das müsstest du ggfs. filtern. ...
Wie filterst du das?
CUL433MHz für Intertechno & Somfy
CUL868MHz für Homematic
RFXTRX433E für Oregon & KeeLoq

bertl

Zitat von: feger am 13 Februar 2024, 16:07:42
Zitat von: feger am 10 Februar 2024, 15:18:15
Zitat... Ansonsten: Wenn die Batterie im Ruhezustand ist, dann gibt sie bei mir 2147483647 (also den Maximalwert für 32-Bit signed Integer) aus, das müsstest du ggfs. filtern. ...
Wie filterst du das?

Hallo feger,
nachdem du die Frage schon mehrmals gestellt hast, hier die Info im Klartext und nicht verlinkt wie @passibe das filtert:

"h37001" => {  expr    => 'my $newval = $val == 2147483647 ? 0 : $val; return $newval',
               len     => 2,
               reading => "BAT_Leistung_W",
               unpack  => "N!",
            }

feger

"h37001" => {  expr    => 'my $newval = $val == 2147483647 ? 0 : $val; return $newval',
               len     => 2,
               reading => "BAT_Leistung_W",
               unpack  => "N!",
            }
Danke für die schnelle Antwort.
Ist es so auch möglich einen Wertebereich anzugeben?
z.B. für die Speicherfüllmenge die nur zwischen 0 und 100% sein kann, alles außerhalb soll verworfen werden.

mfg Feger
CUL433MHz für Intertechno & Somfy
CUL868MHz für Homematic
RFXTRX433E für Oregon & KeeLoq

bertl

Zitat von: feger am 13 Februar 2024, 22:36:05Ist es so auch möglich einen Wertebereich anzugeben?
z.B. für die Speicherfüllmenge die nur zwischen 0 und 100% sein kann, alles außerhalb soll verworfen werden.
Hallo Feger,
folgende Vorgehensweise würde ich dir empfehlen um am schnellsten ans Ziel zu kommen und die Ressourcen der Forums-Hilfesteller zu schonen:

1. Lade dir das Definitions-Modul für den Huawei-Wechselrichter (98_ModbusSUN2000WR.pm) von @passibe herunter:
Zitat von: passibe am 25 Oktober 2023, 00:38:57Servus Andre09,

ich gebe dir mal im Anhang folgendes Modul rüber, das basiert auf dem von bertl und ist ergänzt durch die relevanten Daten zur Batterie (habe mir nicht die Mühe gemacht alle Register abzubilden, sondern nur die, die ich brauche).
Hinzugefügt ist: Gerätestatus, Ladestand, (Ent-)Ladeleistung in W und (Ent-)Ladung/Tag.

https://forum.fhem.de/index.php?action=dlattach;attach=173840

2) Lese dir in aller Ruhe die Beschreibung für das Gerätemodul 'ModbusAttr' durch:
   https://fhem.de/commandref.html#ModbusAttr

Mit diesen beiden Punkten hast du alles in der Hand was du benötigst.

z.B. Für deinen konkreten Fall:
In der heruntergeladenen Datei '98_ModbusSUN2000WR.pm' findest du das Register 'h47418' welches die Leistungsbegrenzung des Wechselrichters in Prozent angibt. Also zwischen 0 und 100 sein muss (so wie in deinem Fall).
Dann gibt man in der Definition folgendes an:
  max => 100,
  min => 0,

Das alles ist bereits vorhanden und muss nicht neu erfunden werden - einfach mal die bestehenden Vorarbeiten der Forums-Hilfesteller durchsehen und verwenden ;)

Schönen Tag
Robert

Phill

Hallo.

Ich hänge mich hier mal dran. Und bedanke mich gleich mal für die Vorarbeit die hier geleistet wurde. Ich hatte gestern in kürzester Zeit meine neue SUN2000 in FHEM drin. Bei mir sind es SUN2000-10KTL-M1,Luna 2000-10-SO,DTSU666-H,SCharger-22KT-S0. Die Anbindung läuft direkt über Modbus im LAN.

Allerdings haben mir ein paar Werte und Einstellmöglichkeiten für die Batterie bei der aktuellen Modbuskonfiguation gefehlt. Ich hänge meine Konfig mal an.

Konkret hinzugefügt sind:
BAT_Max_SOC (Maximaler Ladestand)
BAT_Min_SOC (Minimaler Ladestand)
BAT_Arbeitsmodus (Eigenverbrauch/Netzeinspeisung/Erzwunger Modus)
BAT_Erzwinge (Erzwungenes Laden/Entladen)
BAT_Ziel_SOC (Ziel Ladestand)

Ich muss zugeben das ich die Zeile unpack nicht wirklich verstanden habe. Es könnte also sein das hier nicht alle Parameter korrekt sind. Hat aber erst mal funktioniert bei mir.

Hintergrund ist, dass ich zum einen, gewisse Verbraucher nicht über den Akku speißen möchte und zum anderen wegen dem Stromvertrag bei Tibber etwas Leistung für die teuren Stunden aufheben möchte. Das ganze auch eher vermutlich bei schlechteren Wetterlagen.

Erste Versuche waren schon erfolgreich.

Was ich in der Modbus Interface Definition nicht gefunden habe sind Werte der Wallbox oder des Dongles. Ist vermutlich nicht über den Wechselrichter Modbus definiert. Kann mir jemand sagen wie und ob ich an diese Werte ran komme?
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

bertl

Hallo Phill,

bezüglich Batterie 'Luna 2000-10-S0' und deiner Konfig ein paar kleine Bemerkungen:

Eine gute Doku bezüglch der Parameter für 'unpack' findest du hier.
n....U16 (len 1, unsigned)
n!...I16 (len 1, signed +/-)
N....U32 (len 2, unsigned)
N!...I32 (len 2, signed +/-)

Hier nur die zu korrigierenden Werte:
h47081 unpack => 'n'
h47082 unpack => 'n', min => 12

Die Modbus Interface Definition für den SDongleA findest du hier.
Diese sind im Modul 98_ModbusSun2000WR.pm noch nicht eingepflegt, da sie noch niemand benötigt hat.

Hier habe ich mal einige Werte für den 'SDongelA-05 WLAN-FE' konfiguriert.
         "h30050" =>  {            len => 15,
                             polldelay => "x180",
                               reading => "WR_Modell_Firmware",
                                unpack => "a*",
                      },
         "h30068" =>  {           expr => 'sprintf( "D%d.%d.", $val/65536, $val%65536 )',
                                   len => 2,
                             polldelay => "x180",
                               reading => "SDongleA_Protokoll",
                                unpack => "N",
                      },
         "h31200" =>  {            len => 15,
                             polldelay => "x180",
                               reading => "WR_Modell_RegKey",
                                unpack => "a*",
                      },
         "h37410" =>  {            len => 1,
                                   map => "0:NA_0, 1:NA_1, 2:WLAN, 3:4G, 4:NA_4, 5:WLAN-FE",
                                   max => 5,
                                   min => 0,
                             polldelay => "x180",
                               reading => "SDongleA_Typ",
                                unpack => "n",
                      },
         "h37411" =>  {            len => 1,
                                   map => "0:fertig, 1:suchen, 2:fehlgeschlagen",
                                   max => 2,
                                   min => 0,
                             polldelay => "x180",
                               reading => "SDongleA_Suche",
                                unpack => "n",
                      },
         "h43064" =>  {            len => 1,
                                   max => 65535,
                                   min => 1,
                             polldelay => "x180",
                               reading => "SDongleA_Hearbeat_AppLayer_Min",
                                   set => 1,
                                unpack => "n",
                      },
         "h43065" =>  {            len => 1,
                                   max => 65535,
                                   min => 0,
                             polldelay => "x180",
                               reading => "SDongleA_Hearbeat_TCP_Sek",
                                   set => 1,
                                unpack => "n",
                      },
         "h43067" =>  {            len => 30,
                             polldelay => "x180",
                               reading => "SDongleA_Domain_Name",
                                   set => 1,
                                unpack => "a*",
                      },
         "h43097" =>  {            len => 1,
                                   max => 65535,
                                   min => 0,
                             polldelay => "x180",
                               reading => "SDongleA_Domain_Port_1",
                                   set => 1,
                                unpack => "n",
                      },
         "h43098" =>  {            len => 1,
                                   map => "0:deaktiviert, 1:aktiviert",
                                   max => 1,
                                   min => 0,
                             polldelay => "x180",
                               reading => "SDongleA_SSL_Verschluesselung",
                                   set => 1,
                                unpack => "n",
                      },
         "h43099" =>  {            len => 1,
                                   max => 65535,
                                   min => 0,
                             polldelay => "x180",
                               reading => "SDongleA_Domain_Port_2",
                                   set => 1,
                                unpack => "n",
                      },
         "h43100" =>  {            len => 1,
                                   map => "0:dual, 1:einzel",
                                   max => 1,
                                   min => 0,
                             polldelay => "x180",
                               reading => "SDongleA_Port_Modus",
                                   set => 1,
                                unpack => "n",
                      },
Anmerkung:
Bie mir liefert das Register h37410 'SDongleA_Typ' den laut Doku nicht dokumentierten Wert 4, obwohl ich den WLAN-FE (Wert 5) habe  :o

Bezüglich der Wallbox 'SCharger-22KT-S0' kann ich leider nichts sagen, da ich keine besitze.

Schönen Tag
Robert