Huawei Wechselrichter (Modbus Fragen)

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

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.


Damit kann ich leben :slight_smile:

Hallo Michi

Das freut mich, dass es geklappt hat! :+1: :slight_smile:
Ü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:
image
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:


image

also, wenn ich den I/O für 5 Sekunden deaktiviere und wieder aktiviere, dann verschwindet die Meldung mit DEVICE_SLAVE_BUSY

Leider bin ich zu doof, mir ein Skript zu basteln, was den I/O alle 3 Stunden für 5 Sekunden deaktiviert. Kann mir hier einer weiterhelfen?
Danke!

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. :+1:

jape - bin zwar nicht so richtig glücklich damit, aber besser als nix und so kommen die Daten jetzt immerhin schon >24h regelhaft rein und keine Meldung „Slave_Device_Busy“

Hallo,

nochmals vielen Dank Martin für deine Vorlagen und Einrichtungshinweise. Der größte Teil funktioniert reibungslos :slight_smile:

Leider gibt es beim WR (Master und Slave) Werte die nicht aktualisiert werden oder noch nie abgefragt wurden.

Wo ist der Fehler? Welche Modbus-Adressen sind das?

Vielen Dank und Viele Grüße Michi

Hallo Michi

Schön dass es soweit klappt!

Ja, das ist (leider noch) so. Die zwei Variabeln PV1_Leistung und PV2_Leistung sind virtuelle/berechnete Variabeln. Auf Grund eines Fehlers in der neuen Modbus-Implementierung von Version 7.0 werden diese, in Kombination mit der Nutzung der Adressblock-Lese-Funktion, leider nicht aktualisiert… @paresy ist diesbezüglich im Bilde. Siehe auch folgende Info hier und hier.
D.h. du müsstest diese berechneten Variabeln ausserhalb der Modbus-Instanz erstellen, welche getriggert werden bei Änderung der entsprechenden zugrundeliegenden Variabeln (siehe auch die Formel, welche ich bei den virtuellen Variabeln hinterlegt habe)

Die Variable „Device Name“ (A_10_3_43349) sieht komisch aus. Bei mir steht meines Wissens (ich habe gerade keinen Zugriff auf mein System) ein Text drin, falls man den Wechselrichter in der Huawei-App geändert hat. Ansonsten ist/bleibt es leer. Und ja, solange es nicht ändert (was ja zu 99% der Fall ist), wird es nicht akualisiert. Kann ich aber nachher nochmals prüfen, wie es bei mir aussieht.

Hallo,

vielen Dank obwohl ich nur die Hälfte oder noch weniger verstanden habe.
Auch weiß ich nicht, wie ich eine berechnende Variable erstellen kann die auch noch getriggerte werden soll.
Wie kann ich denn die Formeln bei den zugrundeliegenden Variablen aufrufen?

Eigentlich möchte ich nur bei der Visualisierung von Andreas Brownson die Daten für das Energie Dashboard haben.

Vielen Dank Michi

Ich hatte die Visu nicht genutzt, deshalb brauchte ich die zusätzlichen, berechneten Variabeln nicht. Kann aber mal schauen, wie ich das machen würde (ich denke, ich kann die fehlenden Variabeln in einem Script bereitstellen).

Ich melde mich.

Ich habe es mit diesem Script gelöst:

<?php

$zahlA = GetValue(47939);
$zahlB = GetValue(33026);

// Multipliziere die Zahlen
$ergebnis = $zahlA * $zahlB;

// Gib das Ergebnis aus
echo "Das Ergebnis der Multiplikation von $zahlA und $zahlB ist: $ergebnis";

setValue(35403, $ergebnis);<?php

$zahlA = GetValue(47939);
$zahlB = GetValue(33026);

// Multipliziere die Zahlen
$ergebnis = $zahlA * $zahlB;

// Gib das Ergebnis aus
echo "Das Ergebnis der Multiplikation von $zahlA und $zahlB ist: $ergebnis";

setValue(35403, $ergebnis);

So die Variable angelegt:
grafik

Vielen Dank.

Entschuldigt die Anfängerfrage.
Das kommt so genau unter der Variable PV1-Leistung oder erstelle ich eine neue „PV1-berechnet“ Variable?
Die Zahl hinter GetValue ist deine ID die ich durch meine ersetzen muss. Dies entspricht dann z.B. PV1 voltage.

Der Trigger ist dann das Ereignis unterhalb des Skriptes.

OK, das probiere ich dann mal aus und wird mein erstes Script sein, das ich in meinem Objektbaum einfüge. :slight_smile:

Vielen dank und Viele Grüße Michi

Hallo,

diese beiden Fragen könnt ich mir auch schnell selbst beantworten :slight_smile: , einfach ausprobieren.

Allerdings bekomme ich nun folgenden Fehler:
Parse error: syntax error, unexpected token „<“, expecting end of file in /mnt/data/symcon/scripts/14027.ips.php on line 12

Ich habe hier die ID von PV1_berechnet eingetragen. Ist da korrekt?

Anbei meine Script und mein Objektbaum dazu:

Vielen Dank und Viele Grüße Michi

Hmm, du müsstest zwei Scripte anlegen. Je eines unter „PV1-berechnet“ und eines unter „PV2-berechnet“… (im Falle von mambo1988 siehst du es ==> Script 1 „PV1_PHP“ und Script2 „PV2_PHP“)

Der erste Script beinhaltet den Code von mambo1988 bis Zeile 12 (ACHTUNG: das <?php auf Zeile 12 am Ende entfernen. Dann sollte dieser Fehler verschwinden und der Wert wird kalkuliert)

Das zweite Script funktioniert so nicht ganz, da ja das selbe berechnet wird :slight_smile: sprich, du musst hier die anderen IDs verwenden, für „PV2 voltage“ und „PV2 current“ und dann aber auch die Value in die korrekte ID zurückschreiben (sprich „PV2-berechnet“)

Ich komme aktuell gerade nicht dazu, aber sobald ich Zeit habe, kann ich auch noch einen Vorschlag für das Script erstellen, welches die anderen Werte für die Visu berechnet. Falls du weitere benötigen solltest. Dies wäre dann angelehnt an das ursprüngliche Script.

Super Martin,

ich habe es hinbekommen. Vielen Dank.

Ich hatte alles in einem Script. Hatte mich schon gewundert das alles zweimal drin stand, aber das ist ja auch mein erstes Script.

Vielen dank an alle Beteiligten, jetzt habe ich erst einmal meine Werte :slight_smile:

Hallo Michael,

sehr gut. Ja, aller Anfang ist schwer. Ich tue mich auch noch schwer mit PHP. :wink:
Ein kleiner Fehler ist im Script auch noch. Das Ergebnis muss noch durch 1000 geteilt werden. Dann passt es mit dem Huawei Profil in KW.

Eine Frage noch in die Runde:
Wer hat denn Optimierer von Huawei und liest diese per Modbus aus? Da kenne ich mich leider überhaupt nicht aus. Vielen Dank!

Eine weitere Frage habe ich noch: Im Statusdialog habe ich einige Fehler, welche regelmäßig kommen. Wie könnte man diese beheben? Client Socket betrifft die beiden Instanzkonfigurationen.

Dazu kann ich dir leider nicht weiterhelfen, da ich keinen Optimierer im Einsatz habe. Aber falls der auch via Modbus ansprechbar ist, sollte es analog gehen (weiter oben habe ich den Link auf die Huawei-Doku aufgeführt. Ev. findest du dort was oder diese Adressen sind auch via dem Wechselrichter auslesbar und somit in dieser Doku vorhanden)

Ja, die TimerPool-Fehler kommen bei mir auch. Aber nicht mehr in der Menge wie bei den Einzelaufrufen. Ich denke, damit müssen wir leben oder die zukünftige Modbus-Implementierung in Symcon kann besser damit umgehen.
Betreffend den Client-Socket Problemen: Diese sind mir bisher nicht aufgefallen. Muss ich noch schauen, ob bei mir welche angezeigt werden. Falls ja, ev. eine Folgeerscheinung von den Timerpool Fehlern?