Skip to content

enecess EcoMain als EVU-Zähler und PV-Wechselrichter integrieren - #3681

Draft
enecess wants to merge 1 commit into
openWB:masterfrom
enecess:master
Draft

enecess EcoMain als EVU-Zähler und PV-Wechselrichter integrieren#3681
enecess wants to merge 1 commit into
openWB:masterfrom
enecess:master

Conversation

@enecess

@enecess enecess commented Jul 18, 2026

Copy link
Copy Markdown

Zusammenfassung

Diese Änderung ergänzt die native Modbus-TCP-Unterstützung für den enecess EcoMain ab Softwareversion 138.

Geräteintegration

  • Konfiguration über IP-Adresse und zwölfstellige Geräteseriennummer
  • Prüfung der Softwareversion und Abgleich der konfigurierten Seriennummer mit den Geräteregistern
  • Zwischenspeicherung des Prüfergebnisses; fehlgeschlagene Prüfungen werden nach fünf Minuten anhand einer monotonen Zeitquelle erneut ausgeführt
  • Unterstützung als EVU-Zähler mit Gesamt- und Phasenwerten für Leistung, Strom, Spannung und Leistungsfaktor sowie bezogener und eingespeister Energie
  • Unterstützung als ein- oder dreiphasiger PV-Wechselrichter
  • Freie Zuordnung jeder Phase zu EcoMain-Hauptgerät bzw. Slave 1–3 und Messkanal 1–10
  • Summierung der Phasenleistung bei dreiphasigen Wechselrichtern
  • Umrechnung der EcoMain-Erzeugungsleistung in die von openWB verwendete negative PV-Leistung
  • Optionale Vorzeichenumkehr für falsch montierte Stromwandler
  • Eindeutige Komponenten-Seriennummern durch EVU- bzw. Kanal-Suffixe

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

  • 34 automatisierte EcoMain-Gerätetests erfolgreich
  • Prüfung an realer EcoMain-Hardware mit Softwareversion 138
  • Prüfung in einer openWB-Entwicklungsinstallation

Abhängigkeit

Die zugehörigen Einstellungen werden in openWB/openwb-ui-settings#1018 ergänzt.

@enecess

enecess commented Jul 18, 2026

Copy link
Copy Markdown
Author

Hallo zusammen,

zur Einordnung der angesprochenen Punkte ist dieser PR bewusst in zwei unabhängige Commits aufgeteilt:

  1. b6d617abb – native EcoMain-Geräteintegration für EVU und PV
  2. 1f4c68889 – ergänzende Legacy-SmartHome-Messung

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.

@LKuemmel

Copy link
Copy Markdown
Contributor

Hallo,
den Commit im Legacy SmartHome bitte entfernen. Dort sollen keine Änderungen mehr gemacht werden.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +124 to +126
def read_counter(self) -> EcoMainCounterReading:
imported = self._read(12, ModbusDataType.INT_64)
exported = self._read(28, ModbusDataType.INT_64)
Comment on lines +146 to +149
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)
Comment on lines +170 to +176
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),
]
Comment on lines +191 to +196
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),
]
@enecess enecess changed the title enecess EcoMain als EVU-, PV- und SmartHome-Messgerät integrieren enecess EcoMain als EVU-Zähler und PV-Wechselrichter integrieren Jul 21, 2026
@enecess

enecess commented Jul 21, 2026

Copy link
Copy Markdown
Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants