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. |
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.