Skip to content

fix: EVSE-Register-Einheit beim Stromvergleich korrigieren#3323

Open
s0170071 wants to merge 1 commit intoopenWB:masterfrom
s0170071:fix/evse-register-units-comparison
Open

fix: EVSE-Register-Einheit beim Stromvergleich korrigieren#3323
s0170071 wants to merge 1 commit intoopenWB:masterfrom
s0170071:fix/evse-register-units-comparison

Conversation

@s0170071
Copy link
Copy Markdown

@s0170071 s0170071 commented Apr 24, 2026

Problem

In get_plug_charge_state() wird self.evse_current aus dem Modbus-Register gelesen und bei aktiviertem Precise-Current-Modus (Firmware >= 17) in Ampere umgerechnet, indem der Wert durch 100 geteilt wird. Das geschieht über den Heuristik-Check if self.evse_current > 32, der den Wert direkt in self.evse_current schreibt.

In set_current() hingegen wird der zu schreibende Strom als Rohwert im Register-Format gespeichert ( ormatted_current = round(current*100)), und dann mit self.evse_current verglichen:

if self.evse_current != formatted_current:
    self.client.write_register(1000, formatted_current, unit=self.id)

Da get_plug_charge_state() self.evse_current bereits in Ampere umgewandelt hat (z.B. 16.0), aber ormatted_current im Register-Format vorliegt (z.B. 1600), schlägt der Vergleich immer fehl. Dadurch wird die EVSE alle paar Sekunden neu beschrieben, auch wenn sich der Sollstrom nicht geändert hat.

Ursache

Die Konvertierung von Register-Einheiten nach Ampere darf self.evse_current nicht überschreiben – dieser Wert wird als Zustand für den nachfolgenden Vergleich in set_current() benötigt.

Fix

self.evse_current bleibt unverändert als Rohwert im Register-Format. Für den Rückgabewert wird eine separate lokale Variable set_current_amps verwendet, die korrekt anhand von self._precise_current umrechnet:

set_current_amps = self.evse_current / 100 if self._precise_current else float(self.evse_current)
return plugged, charging, set_current_amps

Außerdem entfällt die fehleranfällige Heuristik > 32 – stattdessen wird das bereits bekannte Flag self._precise_current verwendet.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 behebt einen Einheiten-/Datentyp-Mismatch zwischen get_plug_charge_state() und set_current(), der dazu führte, dass der Sollstrom bei aktiviertem Precise-Current-Modus (Firmware ≥ 17) unnötig häufig erneut ins Modbus-Register geschrieben wurde.

Changes:

  • self.evse_current bleibt künftig als Rohwert im Register-Format erhalten (keine Überschreibung durch Ampere-Konvertierung).
  • Rückgabe in get_plug_charge_state() liefert den Sollstrom in Ampere über eine separate Variable (set_current_amps), basierend auf self._precise_current.
  • Entfernung der fehleranfälligen > 32-Heuristik zugunsten des bekannten Precise-Current-Flags.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

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.

2 participants