Repository navigation
EVSE-Auslesen: Retry-Lücke und fehlende Synchronisierung beheben - #3895
Closed
seaspotter wants to merge 1 commit into
Closed
seaspotter wants to merge 1 commit into
seaspotter wants to merge 1 commit into
Conversation
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Raw delegate accesses remain outside the lock, so connection-wide synchronization is incomplete.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
This pull request improves EVSE retry handling and synchronizes shared Modbus operations.
Changes:
- Retries arbitrary EVSE read exceptions.
- Adds
RLockprotection for Modbus operations. - Adds retry and concurrency regression tests.
File summaries
| File | Summary |
|---|---|
packages/modules/common/modbus.py |
Adds Modbus access synchronization. |
packages/modules/common/modbus_test.py |
Tests concurrent access serialization. |
packages/modules/common/hardware_check.py |
Expands EVSE retry handling. |
packages/modules/common/hardware_check_test.py |
Tests transient retry scenarios. |
Review details
- Files reviewed: 4/4 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+62
to
+64
| # Serialisiert alle Zugriffe auf die (ggf. von mehreren Threads geteilte) Verbindung, zB. | ||
| # Haupt-Poll-Thread und Phasenumschaltungs-/CP-Unterbrechungs-Thread bei internem Ladepunkt. | ||
| self._lock = threading.RLock() |
Contributor
There was a problem hiding this comment.
@seaspotter Möchtest Du Dir das ansehen oder soll ich einen Folge-PR erstellen?
LKuemmel
approved these changes
Sep 15, 2026
LKuemmel
pushed a commit
that referenced
this pull request
Sep 16, 2026
…schliessen (#3947) * Fix EVSE readout retry gap and unsynchronized Modbus access * Modbus: verbleibende ungesperrte Zugriffe auf den rohen Delegate schliessen Follow-up zu #3895 - Copilot-Review deckte auf, dass die neue Verbindungs- sperre in ModbusClient nur die eigenen Wrapper-Methoden schuetzt, waehrend drei Stellen direkt an self._delegate/.delegate vorbeigreifen und die Sperre damit umgehen: - sungrow_sh/bat.py: unnoetiger Roh-Zugriff fuer ein Bitfeld, das per ModbusDataType.UINT_16 identisch dekodiert werden kann - jetzt ueber den normalen, gesperrten Lesepfad. - marstek/venus_c_e/bat.py und openwb_series2_satellit/chargepoint_module.py (Phasenumschaltung) brauchten echtes FC06 (Write Single Register), das write_register() (FC16) nicht abbildet - dafuer gab es bisher keinen gesperrten Zugriffspfad. Neue Methode write_single_register_raw() schliesst diese Luecke.
Contributor
|
replaced by #3947 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Zusammenfassung
hardware_check.pyerfasst jetzt beliebige Exceptions statt nurModbusIOException/ConnectionException— schließt die Lücke, durch die ein einzelner RS485-/CRC-Glitch oder ein kurzzeitiger FAILURE-Status der EVSE sämtliche Wiederholungsversuche übersprungen und sofort "Erneutes Auslesen der EVSE" ausgelöst hat.threading.RLockinmodbus.pyergänzt, der alle Connect-/Lese-/Schreib-/Close-Operationen auf einem gemeinsam genutzten Modbus-Client serialisiert, da der Haupt-Poll-Loop und die Phasenumschaltungs-/CP-Unterbrechungs-Threads sonst unsynchronisiert gleichzeitig auf dieselbe Verbindung zugreifen können.Testplan
hardware_check_test.py, die beide zuvor übersprungenen Fehlerpfade jetzt nachweislich per Retry abfangenmodbus_test.py, der beweist, dass Zugriffe serialisiert werden und dabei kein Aufruf verloren geht (ohne Lock schlägt der Test fehl, mit Lock besteht er)