enecess EcoMain als EVU-Zähler und PV-Wechselrichter integrieren - #3681
enecess EcoMain als EVU-Zähler und PV-Wechselrichter integrieren#3681enecess wants to merge 1 commit into
Conversation
|
Hallo zusammen, zur Einordnung der angesprochenen Punkte ist dieser PR bewusst in zwei unabhängige Commits aufgeteilt:
Falls Legacy SmartHome nicht mehr aufgenommen werden soll, kann der zweite Commit vor dem Merge entfernt werden; wir nehmen ihn auf Wunsch gerne aus dem PR heraus. Der zugehörige UI-PR openWB/openwb-ui-settings#1018 ist auf die gleiche Weise getrennt. Die Seriennummer ist nicht für den Modbus-Transport erforderlich. Sie wurde als zusätzliche Identitätsprüfung ergänzt: Bei DHCP kann eine IP-Adresse später einem anderen Gerät zugewiesen werden, und ein anderes Modbus-Gerät könnte teilweise identische Registeradressen sowie einen zufällig plausiblen Versionswert liefern. Der Abgleich mit dem Seriennummernregister stellt deshalb sicher, dass die Messwerte tatsächlich vom konfigurierten EcoMain stammen, bevor die Kompatibilitätsprüfung als erfolgreich zwischengespeichert wird. Der ursprüngliche Zweck war damit eine robustere Gerätezuordnung und die Vermeidung unbemerkter Fehlmessungen. Wir warten die Bewertung des openWB-Teams ab und passen die Seriennummernprüfung sowie den Legacy-Umfang anschließend gerne an das gewünschte Vorgehen an. |
|
Hallo, |
There was a problem hiding this comment.
Pull request overview
Diese Änderung erweitert openWB um eine native Modbus-TCP-Integration für den enecess EcoMain (ab Softwareversion 138) und macht das Gerät sowohl als EVU-Zähler und PV-Wechselrichter als auch als separates Leistungsmessgerät in der Legacy-SmartHome-Konfiguration nutzbar.
Changes:
- Neue EcoMain-Modbus-Runtime inkl. Kompatibilitätsprüfung (Softwareversion/Seriennummer) und Register-Mapping für EVU- und Kanalwerte.
- Neue Geräte-/Komponentenmodule (Device, Counter, Inverter) inkl. Seriennummern-Suffixen und PeakFilter-Anbindung.
- Legacy-SmartHome: neues Messgeräte-Backend (SlEcoMain) inkl. Konfigurationsvalidierung, Fehler-Backoff-Logging und Persistenz der zusätzlichen MQTT-Konfigurationstopics.
Reviewed changes
Copilot reviewed 19 out of 21 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/smarthome/smartmeas.py | Ergänzt SlEcoMain-Adapter für Legacy-SmartHome-Leistungsmessung inkl. Fehler-/Logik. |
| packages/smarthome/smartmeas_test.py | Tests für Fehlerfall-Reset sowie Log-Throttling/Recovery des SlEcoMain-Adapters. |
| packages/smarthome/smartbase.py | Registriert neuen measurement-Typ ecomain in der Legacy-SmartHome-Erzeugung. |
| packages/smarthome/smartbase_test.py | Test, dass separate Messung vom Typ ecomain erzeugt und wiederverwendet wird. |
| packages/smarthome/ecomain_measurement.py | SmartHome-spezifische EcoMain-Konfiguration + Runtime-Sharing + Read/Clamp-Logik. |
| packages/smarthome/ecomain_measurement_test.py | Unit-Tests für Config-Parsing, Runtime-Registry und Read-Verhalten (Summen, Invert, Clamp). |
| packages/modules/devices/enecess/vendor.py | Neuer Vendor-Descriptor für „enecess“ zur Geräte-Discovery. |
| packages/modules/devices/enecess/ecomain/runtime.py | Modbus-Runtime: Kompatibilitätsprüfung, Registerzugriff, Skalierung, Kanaladressen. |
| packages/modules/devices/enecess/ecomain/runtime_test.py | Tests für Serial-Decoding, Adressberechnung, Kompatibilitäts-Caching und Skalierung. |
| packages/modules/devices/enecess/ecomain/inverter.py | Inverter-Komponente: Kanalzuordnung, Summierung, Vorzeichenlogik, PeakFilter, Seriennummern. |
| packages/modules/devices/enecess/ecomain/inverter_test.py | Tests für Inverter-Update/Read inkl. Invert-Logik, Sortierung, Aggregation. |
| packages/modules/devices/enecess/ecomain/device.py | ConfigurableDevice-Factory: gemeinsame Runtime und gemeinsamer Client-Kontext pro Update. |
| packages/modules/devices/enecess/ecomain/device_test.py | Tests für Runtime-Sharing sowie „ein Client-Kontext für mehrere Komponenten“-Updatepfad. |
| packages/modules/devices/enecess/ecomain/counter.py | EVU/Counter-Komponente: Mapping auf CounterState inkl. PeakFilter. |
| packages/modules/devices/enecess/ecomain/counter_test.py | Tests für vollständiges EVU-Mapping und PeakFilter-Integration. |
| packages/modules/devices/enecess/ecomain/config.py | Konfigurationsklassen + Validierung der Inverter-Kanal-/Phasen-Konfiguration. |
| packages/modules/devices/enecess/ecomain/config_test.py | Tests für Deserialisierung, Validierung und Descriptor-Discovery (Vendor/Components). |
| packages/modules/devices/enecess/ecomain/init.py | Paketinitialisierung für ecomain-Gerätemodul. |
| packages/modules/devices/enecess/init.py | Paketinitialisierung für enecess Vendor-Geräte. |
| packages/helpermodules/update_config.py | Persistenz-RegEx-Liste um EcoMain-Legacy-SmartHome-Konfigurationstopics erweitert. |
| packages/helpermodules/update_config_test.py | Test stellt sicher, dass neue EcoMain-Konfigtopics als gültig/persistent erkannt werden. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| def read_counter(self) -> EcoMainCounterReading: | ||
| imported = self._read(12, ModbusDataType.INT_64) | ||
| exported = self._read(28, ModbusDataType.INT_64) |
| power = self._read(power_address, ModbusDataType.INT_32) | ||
| current = self._read(current_address, ModbusDataType.UINT_16) | ||
| forward_energy = self._read(forward_address, ModbusDataType.INT_64) | ||
| reverse_energy = self._read(reverse_address, ModbusDataType.INT_64) |
| assert client.read_holding_registers.call_args_list == [ | ||
| call(12, ModbusDataType.INT_64, **READ_KWARGS), | ||
| call(28, ModbusDataType.INT_64, **READ_KWARGS), | ||
| call(1000, [ModbusDataType.INT_32] * 4, **READ_KWARGS), | ||
| call(1200, [ModbusDataType.UINT_16, ModbusDataType.UINT_16, | ||
| ModbusDataType.INT_16] * 3, **READ_KWARGS), | ||
| ] |
| assert client.read_holding_registers.call_args_list == [ | ||
| call(1028, ModbusDataType.INT_32, **READ_KWARGS), | ||
| call(1240, ModbusDataType.UINT_16, **READ_KWARGS), | ||
| call(72, ModbusDataType.INT_64, **READ_KWARGS), | ||
| call(232, ModbusDataType.INT_64, **READ_KWARGS), | ||
| ] |
|
Der Legacy-SmartHome-Commit wurde wie gewünscht entfernt. Dieser Pull Request enthält jetzt ausschließlich die native EcoMain-Geräteintegration für EVU und PV. |
|
Hallo, |
|
Hallo, |
|
Hallo, DokumentationProduktvorstellung: EcoMain-Produktseite Benutzerhandbuch: EcoMain-Benutzerhandbuch openWB-Integrationsanleitung: user-guide.de.pdf KurzvorstellungDer EcoMain ist ein mehrkanaliges AC-Energiemessgerät für elektrische Verteilungen in Wohn- und Gewerbegebäuden. Er erfasst unter anderem Netzbezug, PV-Erzeugung sowie Verbraucher wie Wallboxen und Wärmepumpen. Das Hauptgerät bietet drei Messanschlüsse für die Hauptstromkreise und zehn Kanäle für Abzweigstromkreise. Es können bis zu drei EcoSub-Erweiterungsgeräte mit jeweils zehn zusätzlichen Kanälen kaskadiert werden, sodass insgesamt bis zu 40 Abzweigstromkreise überwacht werden können. openWB-IntegrationIn openWB wird der EcoMain über eine ausschließlich lesende Modbus-TCP-Verbindung eingebunden. Er kann als EVU-Zähler sowie für einen oder mehrere ein- oder dreiphasige PV-Wechselrichter verwendet werden. Jede Phase lässt sich einem der Kanäle 1 bis 10 des Hauptgeräts oder von Slave 1 bis 3 zuordnen. |
|
Ich denke die Frage nach Dokumentation war eher: Gibt es eine dokumentierte Registerbeschreibung aller Modbus Register? :) |
|
Hallo, damit ist tatsächlich der Teil angesprochen, der in den zuvor bereitgestellten Unterlagen noch fehlte: Die bisherigen Dokumente enthielten hauptsächlich die Produktvorstellung und die openWB-Integrationsanleitung, jedoch keine vollständige Beschreibung der Modbus-Register. Wir haben nun auf Grundlage der EcoMain-Registertabelle v318 eine öffentliche Registerbeschreibung erstellt: modbus-registers.de.pdf Die Dokumentation enthält die Verbindungsparameter, Datentypen und Byte-Reihenfolge, die Register der Hauptstromkreise, die Adressberechnung für alle 40 Abzweigkanäle, die Kanalkonfiguration, Systeminformationen sowie EcoSub-Scan und Online-Status. Zusätzlich ist der von openWB aktuell ausschließlich lesend verwendete Registerumfang gesondert aufgeführt, um das Geräteprotokoll klar von der konkreten Implementierung in openWB abzugrenzen. Falls das openWB-Team andere Anforderungen an Format, Terminologie oder öffentlichen Umfang hat, passen wir die Dokumentation gerne an die Konventionen des Projekts an. |
|
Hallo, |
Zusammenfassung
Diese Änderung ergänzt die native Modbus-TCP-Unterstützung für den enecess EcoMain ab Softwareversion 138.
Geräteintegration
Motivation
Damit kann der EcoMain über eine lokale Modbus-TCP-Verbindung direkt für Netzanschluss- und PV-Messungen in openWB verwendet werden.
Bezug: #3657
Validierung
Abhängigkeit
Die zugehörigen Einstellungen werden in openWB/openwb-ui-settings#1018 ergänzt.