From bfdaf49047793dc98a446dedd19a9f0ad9feebca Mon Sep 17 00:00:00 2001 From: mfuchs1984 <57141790+mfuchs1984@users.noreply.github.com> Date: Fri, 30 May 2025 16:41:57 +0200 Subject: [PATCH] Vestel: decorate RFID based on version (#21519) --- charger/vestel.go | 21 ++++++++++++++++++--- templates/definition/charger/vestel.yaml | 4 ++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/charger/vestel.go b/charger/vestel.go index 33a66cd7f..7e8ad540b 100644 --- a/charger/vestel.go +++ b/charger/vestel.go @@ -21,12 +21,14 @@ import ( "context" "encoding/binary" "fmt" + "strings" "time" "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/modbus" "github.com/evcc-io/evcc/util/sponsor" + "github.com/hashicorp/go-version" ) const ( @@ -111,13 +113,26 @@ func NewVestel(ctx context.Context, uri string, id uint8) (api.Charger, error) { phasesG = wb.getPhases } + // compare firmware version to determine if RFID is available var identify func() (string, error) - if _, err := wb.identify(); err == nil { - identify = wb.identify + + b, err := wb.conn.ReadInputRegisters(vestelRegFirmware, 50) + if err != nil { + return nil, fmt.Errorf("failed to read firmware version: %w", err) + } + + fw := strings.TrimPrefix(bytesAsString(b), "v") + if v, err := version.NewSemver(fw); err == nil { + if v.Compare(version.Must(version.NewSemver("3.156.0"))) >= 0 { + // firmware >= v3.156.0 supports RFID according to https://github.com/evcc-io/evcc/issues/21359 + identify = wb.identify + } + } else { + log.WARN.Printf("failed to parse firmware version %q: %v", string(b), err) } // get failsafe timeout from charger - b, err := wb.conn.ReadHoldingRegisters(vestelRegFailsafeTimeout, 1) + b, err = wb.conn.ReadHoldingRegisters(vestelRegFailsafeTimeout, 1) if err != nil { return nil, fmt.Errorf("failsafe timeout: %w", err) } diff --git a/templates/definition/charger/vestel.yaml b/templates/definition/charger/vestel.yaml index a4b3fab43..aa0a39a60 100644 --- a/templates/definition/charger/vestel.yaml +++ b/templates/definition/charger/vestel.yaml @@ -16,8 +16,8 @@ products: capabilities: ["rfid", "1p3p"] requirements: description: - de: 1P3P und RFID erfordern Firmware 3.187.0 oder neuer. - en: 1P3P and RFID require at least firmware version 3.187.0. + de: 1P3P erfordert Firmware 3.187.0 oder neuer, RFID erfordert 3.156.0 oder neuer. + en: 1P3P requires at least firmware version 3.187.0, RFID at least 3.156.0. evcc: ["sponsorship"] params: - name: modbus