Replies: 1 comment 17 replies
-
|
Ich habe jetzt mal mit modbus-cli etwas die Response-Zeiten aller von evcc gelesenen Register gemessen. Ströme/Spannungen/Energie- und SOC Werte dauern ca. 5 ms. Einziger Ausreißer ist das neu eingeführte Register Dann habe ich von Modbus TCP auf Modbus RTU (Baudrate 19.200) umgestellt. Jetzt dauert jedes Register (inkl. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Ich habe mir mal die Mühe gemacht und die Ausfallsicherheit von evcc in Hinblick auf Modbus (vor allem die Batteriesteuerung) evaluiert und möchte die Ergebnisse mit euch teilen und ggfs. diskutieren.
Huawei-Anlagen sind bekannt dafür, dass Modbus nicht immer unter allen Gegebenheiten stabil funktioniert. Meine Anlage ist mit nur einem Wechselrichter (+Batterie und Smart Power Sensor) und ohne Parallelzugriffe (z.B. über Home Assistant) sehr einfach gestrickt. Ich werde auch keine Tests mit parallelen Instanzen machen, zumal ich es aus regulatorischer Sicht in Hinblick auf § 14a EnWG/§ 9 EEG schwierig sehe, wenn da ein Home Assistant auf die Anlage eindrischt (und u.U. sogar Register schreibt). Ich bin aber bereit, jeden zu unterstützen, der hier Probleme hat und konstruktiv mitarbeiten will.
Seit ich den schnelleren Dongle habe, sind die Antwortzeiten sehr gering und ich konnte keine Timeouts im Normalbetrieb mehr verzeichnen. Allerdings weiß ich um die Probleme sehr wohl Bescheid, zumal ich vor Jahren schon die gesamte Anlage in Solaranzeige mit dem langsamen Dongle mittels Einzelabfragen ausgelesen habe. Da konnte es zu Aussetzern von mehreren Sekunden (>10) kommen, mutmaßlich dann, wenn der Dongle parallel mit der Cloud (Daten-Upload in das FusionSolar-Portal) kommuniziert hat.
Periodisches Lesen von Registern - Ströme/Spannungen/SoC- und Energiewerte
Hier sehe ich keine großen Probleme. evcc verwendet einen Retry-Mechanismus mit exponentiellem Backoff. 10s lang wird mehrfach probiert, die entsprechenden Datenpunkte auszulesen. Und wenn mal ein Zyklus ausfällt, ist es auch nicht so schlimm.
Schreiben von Registern - Dim/Curtail/Battery Mode
Hier ist es natürlich deutlich ungünstiger, wenn man in einem restriktiven Batteriemodus oder der Leistungsreduzierung stecken bleibt. Es gibt zwar keinen direkten Retry, wenn allerdings ein Schreibvorgang fehlschlägt, verbleibt man erstmal im alten Zustand/Modus und es wird im nächsten Zyklus erneut versucht, den neuen Zustand/Modus herzustellen, indem die entsprechenden Register erneut geschrieben werden.
Natürlich kann es immer mal passieren, dass evcc Mist macht. Dem sollte man dann nachgehen und das entsprechende Verhalten korrigieren (siehe z.B. #25179). Erst wenn sich die Anlage intern verhaspelt und nach außen vorgibt, alles korrekt gemacht zu haben, hat man ein Problem. Auch das ist nicht auszuschließen. Das ist dann aber wahrscheinlich ein Zeichen dafür, dass man die Anlage außerhalb ihrer Wohlfühlzone betreibt, was mit Modbus-Proxy und parallelen Abfrage- und Steuerungsinstanzen evtl. der Fall sein kann. Aber auch hier habe ich bislang noch keine entsprechende Evidenz zu Gesicht bekommen.
Testen
Batterie-Modi kann man sehr einfach von außen über das evcc REST-API durchschalten.
holdundchargemüssen periodisch (z.B. alle 30s) neu gesetzt werden (Watchdog). Sonst fällt evcc in dennormalzurück (die Register werden allerdings nur dann periodisch neu geschrieben, wenn die Modi auch "nach unten" in Richtung Hardware via Watchdog implementiert sind). Hier ein paar einfache Shell-Kommandos (via curl-Programm) zum Setzen der Modi...normal:
curl -X 'POST' 'http://localhost:7070/api/batterymode/normal' -H 'accept: application/json' -d ''hold:
while true; do curl -X 'POST' 'http://localhost:7070/api/batterymode/hold' -H 'accept: application/json' -d ''; sleep 30; donecharge:
while true; do curl -X 'POST' 'http://localhost:7070/api/batterymode/charge' -H 'accept: application/json' -d ''; sleep 30; doneACHTUNG! Man kann die geänderten Einstellung zwar im FusionSolar-Portal prüfen (nur mit Installer-Rechten), jedoch werden diese dort u.U. nicht sofort reflektiert.
Optimierungsmöglichkeiten
Mit dem langsamen Dongle habe ich mit der Erhöhung der Baudrate von 9.600 auf 19.200 Baud gute Ergebnisse erzielen können (siehe #22708). Allerdings würde ich es da trotzdem tunlichst vermeiden, mit parallelen Instanzen auf den Dongle zuzugreifen.
@toeklk hat für das AA55-Plugin einen Block-Abfrage-Mechanismus entwickelt (siehe #29095). Diesen Mechanismus könnte man auch für Modbus übernehmen und so die Anzahl Abfragen reduzieren. Für das Auslesen der Ströme/Spannungen/SoC- und Energiewerte habe ich 5 sinnvolle Blöcke identifiziert und würde so von 12 auf 5 Abfragen kommen. Größere Blöcke machen IMHO keinen Sinn.
/cc @mucki12 @TRON4R
Beta Was this translation helpful? Give feedback.
All reactions