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
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?
die alte Struktur wäre mir ehrlicherweise erstmal egal - es soll einfach wieder funktionieren und im IPS die korrekten Werte auftauchen
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:
Dann schauen wir doch mal, ob wir das gemeinsam hin kriegen
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…
Zuerst mal den bisherigen Modbus-Client-Socket deaktivieren (somit werden die aktuellen Variabeln nicht mehr aktualisiert)
Dann einen neuen Modbus-Socket erstellen
Musst dann noch die richtige IP-Adresse und Port-Nummer erfassen (analog der alten Modbus-Instanz)
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:
Beim optionalen Slave-Wechselrichter ist die Geräte-ID bei mir 1.
Die Datenblöcke schauen wir uns dann als Letztes an.
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).
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.
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:
Beim Wechselrichter-Gateway (Master):
Und falls noch ein weiterer Wechselrichter-Gateway (Slave) installiert wurde, dann folgende Adressblöcke:
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.
1000 Dank! Es läuft und das deutlich besser wie vorher! Endlich kann ich das Thema vorerst als erledigt abhaken
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
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
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
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):
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?
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.
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
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“ 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:
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
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?
kaum macht man es richtig, schon gehts…
Tatsächlich hatte ich beim Meter (der ja nun der Dongle ist ) 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.
Das ist komisch mit dem Aufhängen des Wechselrichters. Das hatte ich bisher nie.
Aus meiner Sicht kann es auch nicht sein, dass du dann jedesmal den Wechselrichter neu starten musst.
Den SLAVE_DEVICE_BUSY habe ich auch, aber wie gesagt, nicht mehr so häufig.
Das freut mich, dass es geklappt hat!
Übrigens, bei mir pendeln sich die Fehler so bei ein paar 100 bis knapp 1000 pro Tag ein; was deutlich weniger ist, als früher.
Betreffend den Erklärungen zu den : Da verweise ich am besten auf die Doku von Huawei. Ich glaube sunnyww hat mal die Links auf die Doku gepostet (siehe hier).
Oder hier im Huawei-Dokumentations-Portal (klick)
Da sind die Register gut erklärt. So habe ich mir diejenigen, die ich spannend gefunden habe, auch identifiziert und erfasst.
Viel Spass noch
Grüsse Martin
ich habe jetzt mal die Abfragezeiten der Blöcke angepasst:
ob das tatsächlich Auswirkungen hat, oder ob sich das Gerät dann wieder mit SLAVE_DEVICE_BUSY verabschiedet kann ich nicht abschätzen und muss ich beobachten.
Zumindest läuft es jetzt seit gestern Abend erstmal wieder:
Interessant ist es schon, dass du das überhaupt tun musst. Da scheint irgendwas noch faul zu sein.
Ich kann allenfalls noch am Wochenende gucken, wie ich ein solches Script erstellen würde.
Update: habe gerade gesehen, dass du eine Lösung in einem anderen Thread erhalten hast.