Huawei Wechselrichter (Modbus Fragen)

30 Adressen. Habe mich hier auf das Notwendige beschränkt.

sehr gerne :slight_smile:
Danke!

seit ich jetzt die Abfrageverzögerung aktiviert habe erscheint folgender Fehler im Log und die Variablen aktualisieren sich nicht mehr:

irgendwie ist da der Wurm drin :confused:

Hmm, ok, hier mal auf die Schnelle mein Setup

Ich habe 3 Splitter-Instanzen (du brauchst wohl nur 2):


Dort habe ich dann jeweils die nötigen Adressblöcke erfasst (natürlich abhängig davon, welche Adressen du liest). Hier die Datenblöcke pro Splitter:

Beim Master-/1. Wechselrichter:


Abfrageverzögerung: 2517 ms

Beim Dongle:


Abfrageverzögerung: 2450 ms

Beim Slave-/2. Wechselrichter (falls nötig):


Abfrageverzögerung: 2370 ms
Hier sind es bewusst weniger Adressblöcke, da ich nicht alle benötige.

Welche Werte bei den Abfrageverzögerung sinnvoll/zielführend sind, … keine Ahnung :slight_smile:

Dann habe ich pro Gerät resp. Komponente, welche ich auslesen möchte, eine Modbus-Instanz erstellt und die gewünschten Vaiabeln mit den entsprechenden Modbus-Adressen dort aufgeführt. Das sind dann bei mir 5 Instanzen (bei dir und nur einem Wechselrichter dann nur 4; und falls keine Batterie vorhanden, dann nur 3)

Darunter sind dann alle Variabeln aufgeführt; das sieht dann in etwa wie folgt aus im Objektbaum:


Ich kann dir dazu gerne meine Templates zur Verfügung stellen. Sind doch einige Adressen…

Dies mal kurz das Prinzip, wie ich Modbus verwende.
Und wichtig, bei den Datenblöcken: diese müssen wohl den Bereich der gelesenen Adressen der Variabeln abdecken. Könnte sein, dass deshalb die Fehlermeldungen auftreten (auf einem meiner Screenshots in einem vorherigen Post hat es wohl ein paar Adressen abgeschnitten… Diese hier sollten nun aktuell sein und hoffentlich nichts mehr abschneiden… … auf dem Smartphone nicht ganz so einfach zu bewerkstelligen :smirk:)

Ich lese damit rund 120-130 Adressen aus. Aber erhalte leider auch immer noch einige hundert Fehlermeldungen pro Tag (zumindest nicht mehr zig Tausend pro Tag…:smirk:)
Martin

1 „Gefällt mir“

vielen Dank für die Ausführungen!
Damit konnte ich die Fehler jetzt immerhin von knapp 200.000 Fehler pro Tag auf „nur noch“ knapp 10.000 Fehler reduzieren :wink:

Aktuell muss ich mal noch etwas mit den Abrufzeiten spielen, da die Hauptursache für die Fehlermeldungen weiterhin „SLAVE_DEVICE_BUSY“ ist

Das ist doch schon mal was :wink: :+1:

Ich habe übrigens beim Intervall bei meinen 5 Modbus-Instanzen den Wert auf 0 gestellt. Hast du das auch?

Und hast du alle Adressen in einer Modbus-Instanz oder nutzt du weiterhin einzelne Modbus-Variabeln, die einzeln auch gelesen werden? Falls letzteres, könnte ich mir vorstellen, dass dies auch dazu führen könnte, dass noch so viele Fehler entstehen

so - bin grad maximal genervt…
nachdem es jetzt 2 Tage lief kommt seit ca. ner Stunde der Fehler.

Instanz 51608:

was bedeutet jetzt der Fehler?
Es gab weder einen Neustart, noch irgendeine Änderung, noch sonst irgendwas…

Da wird auf die Instanz „Garage“ verwiesen. Was läuft da drüber?
Ist das eine Instanz auf den PV-Wechselrichter?

auf der Splitter-Instanz „Garage“ laufen folgende Werte:

auf der Splitter-Instanz „Smart Dongle PV-Anlage“ laufen folgende Werte:

warum das so ist weiß ich nicht, wurde damals mit dem Installations-Skript von @drapple so angelegt :wink:

Ich hatte am Anfang auch das Script von drapple genutzt. Dann bin ich umgestiegen auf die neue Art der Modbus-Implementierung (ab V7.0). Das macht das ganze deutlich übersichtlicher und einfacher zum verwalten. Aber ist halt eine andere Struktur als bei dir.

Daher weiss ich gerade nicht, wie ich dir weiterhelfen kann. Bei mir tauchen ja diese Fehlermeldungen auch auf, aber offensichtlich nicht so häufig wie bei dir.
Ev. nochmals die Datenblöcke der Garage-Instanz prüfen oder die Abfrageverzögerung anpassen (z.B. auf 10’000 ms)? Bei der Dongle-Instanz treten diese Fehler nicht so häufig auf, richtig?

Martin

die alte Struktur wäre mir ehrlicherweise erstmal egal - es soll einfach wieder funktionieren und im IPS die korrekten Werte auftauchen :wink:
hab ein paar Abläufe hinten dran stehen, für die ich die aktuellen Abfragewerte benötige. Daher bringt mir auch der Import über HomeAssistant und MQTT nichts - dort aktualisieren sich die Werte über den PV-Kiosk nur alle 30 Minuten und ich bekomme auch nur einen Bruchteil der Werte (was kommt vom Dach und die versch. Erträge), aber kein Wert zu Batterieladung, etc.

Könntest du mich an die Hand nehmen um es umzubauen? Dann würde ich die bisherige Installation rausschmeißen. Helfen mir da ggfs. Vorlagen weiter?
Lieber nochmal von Null anfangen und dafür die aktuelle Technik und funktionierend…

Die für mich passenden Register-Definitionen habe ich wohl gefunden:

Inverter:
https://photomate.zendesk.com/hc/en-gb/article_attachments/4573202911133

SmartDongle:
https://photomate.zendesk.com/hc/en-gb/article_attachments/13800172732829

Dann schauen wir doch mal, ob wir das gemeinsam hin kriegen :slight_smile:

Hier mal eine Möglichkeit, wie du parallel zu deiner bisherigen Struktur das Ganze mit der neuen Modbus-Implementierung aufbauen könntest (dabei wird die bisherige Struktur mal vorerst deaktiviert und erst wenn dann die neue Struktur erfolgreich ist, kannst du dann die bisherigen Instanzen entfernen). So habe ich es auch getan…

  1. Zuerst mal den bisherigen Modbus-Client-Socket deaktivieren (somit werden die aktuellen Variabeln nicht mehr aktualisiert)
    image

  2. Dann einen neuen Modbus-Socket erstellen
    image
    Musst dann noch die richtige IP-Adresse und Port-Nummer erfassen (analog der alten Modbus-Instanz)

  3. Nun zwei neue Modbus-Gateways erstellen - für den (Master-)Wechselrichter und Dongle - , welche natürlich auf den neuen, aktiven Modbus-Socket verweisen müssen.
    Falls noch ein weiterer Wechselrichter vorhanden sein sollte (Slave), dann für diesen auch ein Modbus-Gateway erstellen.
    Das sieht dann bei mir wie folgt aus:


    Hier bitte sicherstellen, dass die IDs korrekt gesetzt sind. Ev. sind diese bei dir anders?
    Bei mir sehen sie wie folgt aus:
    image image
    Beim optionalen Slave-Wechselrichter ist die Geräte-ID bei mir 1.
    Die Datenblöcke schauen wir uns dann als Letztes an.

  4. Nun die neuen Modbus-Geräte-Instanzen erstellen. Sprich für Dongle, Smart-Meter (DTSU666-H), Wechselrichter 1 (Master), Wechselrichter 2 (Slave, falls vorhanden) und Batterie (falls vorhanden).
    image

  5. Und hier nun die Vorlage/Templates importieren. Diese kannst du entweder hier finden oder gleich meine benutzen (ich hoffe, dass es die gleichen Adressen sind… )
    Modbus_Vorlage_PVA-Huawei (Dongle).json (3,7 KB)
    Modbus_Vorlage_PVA-Huawei (SmartMeter).json (10,3 KB)
    Modbus_Vorlage_PVA-Huawei (Wechselrichter).json (20,1 KB)
    Modbus_Vorlage_PVA-Huawei (Batterie).json (9,3 KB)
    Wichtig: Diese Instanzen müssen auf den richtigen Gateway zeigen!
    Sprich die Geräte-Instanzen Wechselrichter, Smart-Meter und Batterie zeigen auf den (Master)-Wechselrichter-Gateway.
    Falls weitere Wechselrichter vorhanden sein sollten, analog dem Master-Wechselrichter, diese dann zu den entsprechenden Wechselrichter-Gateways (Slave) zuweisen.
    Und die Geräte-Instanz Dongle zeigt auf den Dongle-Gateway.
    ==> Das sieht dann beispielsweise bei meinem Dongle wie folgt aus:


    Nun sollten sich die Werte ja auch schon aktualisieren, denke ich.

  6. Falls das soweit geklappt hat, kannst du dann die Adressblöcke in den Gateways (siehe Punkt 3) erfassen. Das sieht dann so aus (ich glaube, ich habe weiter oben auch schon ein Screenshot dazu eingefügt…)
    Beim Dongle-Gateway:
    image
    Beim Wechselrichter-Gateway (Master):
    image
    Und falls noch ein weiterer Wechselrichter-Gateway (Slave) installiert wurde, dann folgende Adressblöcke:
    image
    Hier werden weniger Adressblöcke benötigt, da weniger Register als beim Master ausgelesen werden.
    Und nicht vergessen, bei den Geräte-Instanzen den Intervall auf 0 Millisekunden zu stellen.

Ich hoffe, das hilft… Wie erwähnt, hat diese Vorgehensweise die Anzahl der Fehler bei mir massiv reduziert. Zum erwähnen wäre noch:

  • ich wollte noch berechnete (virtuelle) Modbus-Variabeln nutzen. Das geht aber leider noch nicht, da diese Funktionalität in der neuen Modbus-Implementierung noch Fehlerhaft ist… leider. Hier musst du einen Workaround vorsehen und mittels Script bei Änderung diese fehlenden Werte berechnen lassen
  • wenn du andere Adressen (Modbus-Variabeln) benötigen solltest, musst du natürlich auch die Adressblöcke entsprechend anpassen. Aber ich denke, zusätzliche Adressen sind gar nicht nötig (allenfalls habe ich sogar zu viele drin… diese kannst du auch deaktivieren in der Geräte-Instanz)
  • Und ich empfehle dir, die alte Struktur erst dann zu entfernen, wenn du wirklich auch zufrieden bist… ;-)… du verlierst dann natürlich auch die archivierten/historischen Daten der alten resp. bisherigen Variabeln…

Grüsse Martin

UPDATE 4.3.2024 - Korrekturen auf Grund falschen, verwirrenden Bezeichnungen von Meter und Dongle.

1 „Gefällt mir“

1000 Dank! Es läuft und das deutlich besser wie vorher! Endlich kann ich das Thema vorerst als erledigt abhaken :slight_smile:
Jetzt in einer ruhigen Minute noch die Variablen in meiner View anpassen, aber das sollte recht zügig gehen. Die Scripte sind ebenfalls ruckzuck angepasst :smiley:

Die Werte kommen nun wieder sauber rein, ohne Slave busy und Zuordnungsfehler.

Ich suche jetzt aktuell nur noch den Wert für den aktuellen Hausverbrauch :wink:

Ist das der Wert?

Weiterhin werden als einzige Werte folgende Werte nicht aktualisiert:


muss ich hierfür noch etwas besonderes beachten?

Wenn nun der zweite String vom Wechselrichter angesteuert wird, dann kann ich die Einstellungen so lassen?

Super, das freut mich, dass es auf anhieb funktioniert hat! Es kann aber schon noch sein, dass noch Fehlermeldungen auftreten. Ich habe es noch nicht ganz wegbekommen; wie erwähnt, sind es bei mir nur noch einige hundert pro Tag. … bin gespannt wie es sich bei dir entwickelt.

Zu deinen Fragen muss ich noch schauen, aber kurz noch zu

Ja, das ist, wie oben erwähnt, die Folge von einem bekannten Problem bei der neuen Modbus-Implementierung. Sprich, das sind berechnete virtuelle Variabeln. Diese werden leider nicht berechnet. Paresy hat hierzu schon was dazu geschrieben, dass dies in Verbindung von Adressblock-Lesen ein bekanntes Problem darstellt. Ich habe es noch nicht umgesetzt, aber eigentlich könnte man ein Ereignis bei den betroffenen Basis-Variabeln vorsehen, die bei Änderung dann diese Werte kalkulieren. Ich kann mal am Wochenende kurz schauen, ob ich diese Umgehungslösung erstelle und dann kann ich dir hier wieder berichten.

Das muss ich noch genauer anschauen. Gebe dazu dann auch noch Rückmeldung

Ja, ich denke schon. Huawei hat hier aber eine komische Implementierung. Falls du unsicher bist, versuche es mal mit der App zu vergleichen, ob dies zutreffen könnte auf Grund der Werte. Auch da muss ich nochmals genauer schauen, ob ich allenfalls einen berechneten Wert erstellt habe… Habe gerade keinen Zugriff auf meine Umgebung…
Ich melde mich nochmals.
Grüsse
Martin

1 „Gefällt mir“

nachdem es jetzt problemlos lief hat sich wohl heute Nacht der Wechselrichter „aufgehängt“ bzw. ist „busy“. Der Dongle wiederum lief noch problemlos (sieht man rechts an der Uhrzeit der letzten Aktualisierung der Variablen):

Ich habe ihn daraufhin neu gestartet und die Abfragezeit auf 6.000ms erhöht.


Jetzt erhalte ich folgende Meldungen im Log:

Kann die Meldung ignoriert werden, oder ist das mit den 6.000ms eine doofe Idee?

Ja, diese habe ich auch immer mal wieder; aber wie gesagt, haben sich diese bei mir so auf ein paar hundert bis 1000 pro Tag eingependelt.

Aus meiner Sicht kann die Meldung (so lange sie nicht zu tausenden pro Tag auftreten) ignoriert werden; ich denke, das hängt einfach damit zusammen, dass in diesem Fall zu schnell/häufig hintereinander der Zugriff auf Modbus stattfindet. Allenfalls kannst du auch nicht verwendete Adress-Variabeln in den Geräte-Instanzen deaktivieren. Das hilft sicherlich auch…
Ob du mit 6’000 ms weniger Fehlermeldungen erhälst, ist denkbar.

Das mit dem Aufhängen verstehe ich nicht ganz (resp. ist bei mir bisher nie passiert). Dass jedoch ein Wechselrichter, der an keiner Batterie angeschlossen ist, am Abend in einen Standby-Modus geht (und somit nichts mehr sendet), sehr wohl. Das ist bei meinem 2. Wechselrichter der Fall. Dann kommen keine neuen Daten an, bis es am Morgen dann wieder automatisch „erwacht“. Meinst du dies?

Hallo Martin,

Sitze gerade davor und versuche nach deiner Anleitung die PV Anlage mit 2 WR, Dongle und Batterie einzurichten.
Ich richte als erstes die I/O Instanz ein. Das klappt.
Beim einrichten der Splitter Instanzen war mein Hindernis, das er immer eine neue I/O Instanz eingerichtet hat und damit war meine erste I/O Instanz fehlerhaft. Beide hatten ja die gleiche IP-Adresse. Erst jetzt habe ich gesehen, das ich keine neue einrichten muss, sondern über Schnittstelle Ändern im Menü meine vorher eingerichtet I/O Instanz auswählen kann. Entschuldige die Einfachheit, aber ich bin wirklich ein Anfänger.

Bei den Bezeichnungen komme ich auch etwas durcheinander.
DTSU666-H ist doch der Smart-Meter, oder?
Bei den Vorlagen habe ich aber einmal DTSU666-H und den Meter. Ist hier bei dem Meter der Dongle gemeint? Also welche Vorlage nehme ich für den Dongle und welche für den Smart-Meter?

Die Instanzen habe ich dann auch eingerichtet und deine Vorlagen (soweit ich ich es mir dachte) gewählt.
Wenn ich 2WR habe, dann lade ich sie auch zweimal - nur das bei Master der Gateway auf dem Master liegt und bei Slave auf den kaskadierten (2.) WR.
Soweit auch in Ordnung, oder?
Oder wird beim 2. WR kein Gateway eingerichtet und es wird der Gateway vom Master genommen?

Nun habe ich schon einige Werte stehen. Aber die scheinen nicht zu stimmen. Beim 2.WR (Slave) zeigt er bei PV1 voltage/current Werte an. Bei PV2 nicht. Sind das nicht die beiden Strings am WR? Dann müsste aber bei beiden Werte sein.
Beim WR2 fehlen überhaupt eine Menge Werte weiter unten. Die jeweiligen SN oder Modelbezeichnungen sind aber richtig.
Beim Gerät Meter wird als SN und OS Version Daten vom WR1 angezeigt. Ist das richtig so?
Aber da können wir noch warten, eventuell habe ich ja schon bei den ersten Schritten Anfänger-Fehler gemacht.

Vielen Dank schon einmal und viele Grüße Michi

Hallo Michi

Schauen wir mal :slight_smile:

Ja, das ist mir am Anfang auch passiert (aber auch schon beim Nutzen des Scriptes von drapple, als ich angefangen hatte, das ganze zu überarbeiten)… geht wohl allen mal so. Hatte nicht mehr daran gedacht, diese zu erwähnen, sorry :slight_smile:

Ja, du hast recht. Da hatte ich mich vertan in der Bezeichnung. Sprich, das was ich als „Meter“ bezeichnet hatte, ist tatsächlich der „Dongle“ und der DTSU666-H ist der „Meter“ :slight_smile: Sorry für diese Unstimmigkeit… Ich werde es am besten oben noch anpassen und auch die Templates ändern resp. umbenennen.

Ja, sprich, die beiden Geräte-Instanzen verweisen auf die jeweilige Splitter-Instanzen der Wechselrichter. So wie du das aufgeführt hast resp. wie ich dich verstanden habe.

Nein, je ein Gateway (=Splitter-Instanz) mit unterschiedlichen IDs. Wie vorher erwähnt.

Hmm, das scheint mir komisch. Hast du auch tatsächlich unterschiedliche IDs bei den Splitter-Instanzen genommen? Bei mir sind diese wie folgt: Master-WR (ID 16), Slave-WR (ID 1) und Dongle (ID 100).

Vielleicht stimmt noch etwas nicht beim Gateway (Splitter-Instanz)?

Ev. ein (von mir verursachtes Durcheinander) auf Grund der fehlerhaften Bezeichnung? Sprich, bei mir ist beim Meter kein SN /OS-Version angezeigt, sondern nur beim Dongle:
Bei mir sieht es (nach Umbenennung) wie folgt aus:

Hilft das schon mal?
Grüsse Martin

Sodele,

nachdem es jetzt eigentlich gut lief habe ich seit einigen Tagen den Fehler:

und die Werte wurden zuletzt am 03.03.24 aktualisiert:

Der Wert um 15:29:27 ist vom Dongle, welcher mittlerweile ohne Hänger läuft und sich nicht mehr aufhängt, bzw. SLAVE_DEVICE_BUSY meldet.
Nur der Wechselrichter meldet jetzt SLAVE_DEVICE_BUSY - ich könnte jetzt den Wechselrichter neustarten, dann funktioniert es eine gewisse Zeit, bis er sich wieder in Bezug auf die Modbus-Abfrage „aufhängt“.
Der Wechselrichter als solches funktioniert problemlos weiter und arbeitet korrekt.

Die Abfragezeit habe ich für den Wechselrichter auf 15.000ms gestellt
image
und die einzelnen Blöcke stehen auf 0ms.

@paresy
Kann ich in Bezug auf die Modbus-Abfrage / die Modbus-Blöcke noch irgendwas optimieren oder muss ich damit leben, dass der Wechselrichter alle 2 Tage mit „Sicherung raus - Sicherung rein“ neu gestartet werden muss?

Hallo Martin,

kaum macht man es richtig, schon gehts…
Tatsächlich hatte ich beim Meter (der ja nun der Dongle ist :slight_smile: ) nicht die 100 stehen sondern die 1 und damit wurde natürlich Werte vom WR übertragen.
Auch sind nun mehr Werte vorhanden. Vermutlich muss man wirklich erst einmal einen Tag bzw. Nacht abwarten.
Allerdings sind sie nicht alle Werte selbsterklärend. Hat jemand schon eine Übersicht welche Variable was bedeutet?

Noch eine erfreuliche Meldung. Meine Fehler sind von 08:00 bis 17:30 Uhr bei 2700. Das ist deutlich weniger als gestern. Warum weiß ich nicht.

Martin, dir erst einmal noch einmal vielen Dank für deine Hilfe. Ich habe gleichzeitig einigermaßen die Zusammenhänge zwischen I/O Instanzen, Splitter Instanzen und den Instanzen verstanden.

Ich fummel mal hier und da noch ein wenig rum.

Vielen Dank noch einmal und viele Grüße Michi