Geräte mit gemeinsamer Verbindung: Fehlerzustand korreliert setzen - #3958
seaspotter wants to merge 2 commits into
Conversation
seaspotter
commented
Sep 16, 2026
- RCT, Kostal Piko, generic/http, solar_view, sonnenBatterie, Discovergy, Powerfox und smart-me lesen Zähler/WR/Speicher über eine gemeinsame Verbindung/Session desselben Geräts aus, nutzten dafür aber IndependentComponentUpdater - jede Komponente bekam so einen eigenen Fehlerzustand statt eines gemeinsamen, obwohl ein Verbindungsausfall alle betrifft
- Umgestellt auf MultiComponentUpdater: schlägt die Verbindung fehl, werden jetzt alle Komponenten des Geräts als fehlerhaft markiert
- RCT zusätzlich umgebaut: alle drei Komponenten teilen sich jetzt eine TCP-Verbindung statt je eine eigene zu öffnen
There was a problem hiding this comment.
🟡 Changes recommended
Component-specific request or parsing failures now abort updates and incorrectly mark healthy sibling components as faulty.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Refactors shared-device updates to use MultiComponentUpdater, correlating component fault states. RCT components additionally share one TCP connection.
Changes:
- Replaced independent updaters across eight device integrations.
- Added grouped component update callbacks.
- Reworked RCT connection lifecycle.
File summaries
| File | Description |
|---|---|
sonnen/.../device.py |
Groups SonnenBatterie component updates |
solar_view/.../device.py |
Groups SolarView updates |
smart_me/.../device.py |
Groups smart-me session updates |
rct/.../device.py |
Shares one RCT TCP connection |
powerfox/.../device.py |
Groups Powerfox session updates |
kostal/.../device.py |
Groups Kostal component updates |
generic/http/device.py |
Groups HTTP session updates |
discovergy/.../device.py |
Groups Discovergy session updates |
Review details
- Files reviewed: 8/8 changed files
- Comments generated: 8
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| for component in components: | ||
| component.update(session) |
| for component in components: | ||
| component.update(session) |
| for component in components: | ||
| component.update() |
| for component in components: | ||
| component.update(session) |
| for component in components: | ||
| component.update(rct) |
| for component in components: | ||
| component.update(session) |
| for component in components: | ||
| component.update( | ||
| device_config.configuration.ip_address, | ||
| device_config.configuration.port, | ||
| device_config.configuration.timeout) |
| for component in components: | ||
| component.update() |
|
Copilot moniert ja aber genau das gewünscht Verhalten :) Bei den aller Meisten anderen Modulen ist es ja auch korrekt, nur bei diesen paar Module ist es eben bisher imho eben falsch bisher :) |
|
Das gewünschte Verhalten ist, wenn es eine Verbindung gibt, aber unterschiedliche Register/Endpoints, soll nicht für alle Komponenten die Abfrage abbrechen, sondern nur für das, bei dem das Register falsch ist. Kann die Verbindung nicht aufgebaut werden, bricht die Verarbeitung sofort ab und setzt bei allen Komponenten den Fehlerstatus. Bei den Modbus-Modulen wird deshalb Oder so wie bei der aktuellen Implementierung. Dort sind die Vor- und Nachteile genau andersrum. Das finde ich kundenfreundlicher, weil möglichst viele Daten angezeigt werden und die Fehlersuche erleichtert wird, wenn das Problem eine einzelne Komponente betrifft. Für RCT kannst Du auch die Vorgehensweise wie bei den Modbus-Modulen verwenden: |
- RCT, Kostal Piko, generic/http, solar_view, sonnenBatterie, Discovergy, Powerfox, smart-me lesen Zähler/Wechselrichter/Speicher alle über dieselbe Verbindung/Session desselben physischen Geräts aus, verwendeten dafür aber IndependentComponentUpdater - dadurch bekam jede Komponente einen eigenen, unabhängigen Fehlerzustand statt eines gemeinsamen, obwohl ein Verbindungs- ausfall alle betrifft. - Umgestellt auf MultiComponentUpdater: schlägt die gemeinsame Verbindung fehl, werden jetzt alle Komponenten des Geräts als fehlerhaft markiert, nicht nur die zuerst geprüfte. - RCT zusätzlich so umgebaut, dass sich alle drei Komponenten eine einzige TCP-Verbindung teilen statt je eine eigene zu öffnen. - Shelly und Tasmota bewusst nicht angepasst: technisch möglich, kombinierte Zähler+WR+Speicher-Konfiguration auf einem Gerät anzulegen, aber keine reale Anwendung bei diesen Einzelzweck-Sensoren.
…eren Wie von Lena vorgeschlagen: MultiComponentUpdater deckt weiterhin Verbindungsfehler ab (alle Komponenten betroffen), zusätzlich SingleComponentUpdateContext pro Komponente wie bei den Modbus-Modulen - ein Fehler bei nur einer Komponente (falsches Register/Endpoint) markiert nicht mehr fälschlich die anderen als defekt.
1d2bc88 to
221de26
Compare
|
Umgesetzt: |