From a418b8472b0a2d112b852e20e368b132f90b1f0d Mon Sep 17 00:00:00 2001 From: Marcel Goerentz <57457529+marcelGoerentz@users.noreply.github.com> Date: Fri, 27 Feb 2026 08:23:53 +0100 Subject: [PATCH] Tinkerforge Warp: detect charger type and deactivate auto phase switching if necessary (#27745) --- charger/warp-ws.go | 31 ++++++++++++------- charger/warp/types.go | 7 +++++ .../charger/tinkerforge-warp-ws.yaml | 9 ++++-- .../charger/tinkerforge-warp1-ws.yaml | 28 ----------------- 4 files changed, 33 insertions(+), 42 deletions(-) delete mode 100644 templates/definition/charger/tinkerforge-warp1-ws.yaml diff --git a/charger/warp-ws.go b/charger/warp-ws.go index bb25c4319..a8f2d5e60 100644 --- a/charger/warp-ws.go +++ b/charger/warp-ws.go @@ -64,14 +64,13 @@ func init() { func NewWarpWSFromConfig(ctx context.Context, other map[string]any) (api.Charger, error) { var cc struct { - URI string - User string - Password string - EnergyManagerURI string - EnergyManagerUser string - EnergyManagerPassword string - DisablePhaseAutoSwitch bool - EnergyMeterIndex uint + URI string + User string + Password string + EnergyManagerURI string + EnergyManagerUser string + EnergyManagerPassword string + EnergyMeterIndex uint } if err := util.DecodeOther(other, &cc); err != nil { @@ -131,10 +130,13 @@ func NewWarpWSFromConfig(ctx context.Context, other map[string]any) (api.Charger } } - // Phase Auto Switching needs to be disabled for WARP3 + // Phase Auto Switching needs to be disabled for WARP3 and WARP2 + EM // Necessary if charging 1p only vehicles - if cc.DisablePhaseAutoSwitch { - // unfortunately no feature to check for, instead this is set in template + typ, err := wb.getWarpType() + if err != nil { + return nil, err + } + if typ == "warp3" || (typ == "warp2" && wb.pmURI != "") { if err := wb.disablePhaseAutoSwitch(); err != nil { return nil, err } @@ -572,3 +574,10 @@ func (w *WarpWS) ensurePmState() (warp.PmState, error) { return ns, nil } + +func (w *WarpWS) getWarpType() (string, error) { + var res warp.Name + uri := fmt.Sprintf("%s/info/name", w.uri) + err := w.GetJSON(uri, &res) + return res.WarpType, err +} diff --git a/charger/warp/types.go b/charger/warp/types.go index bba36d19d..121d28cb0 100644 --- a/charger/warp/types.go +++ b/charger/warp/types.go @@ -38,6 +38,13 @@ type MeterValues struct { TmpValues []float64 } +type Name struct { + Name string `json:"name"` + WarpType string `json:"type"` + DisplayType string `json:"display_type"` + Uid string `json:"uid"` +} + type PhasePair struct { CurrentID int VoltageID int diff --git a/templates/definition/charger/tinkerforge-warp-ws.yaml b/templates/definition/charger/tinkerforge-warp-ws.yaml index 9feac2e9a..622b7320a 100644 --- a/templates/definition/charger/tinkerforge-warp-ws.yaml +++ b/templates/definition/charger/tinkerforge-warp-ws.yaml @@ -2,11 +2,15 @@ template: tinkerforge-warp-ws products: - { brand: TinkerForge, description: { generic: WARP3 Smart } } - { brand: TinkerForge, description: { generic: WARP3 Pro } } + - { brand: TinkerForge, description: { generic: WARP2 Smart } } + - { brand: TinkerForge, description: { generic: WARP2 Pro } } + - { brand: TinkerForge, description: { generic: WARP1 Smart } } + - { brand: TinkerForge, description: { generic: WARP1 Pro } } capabilities: ["mA", "1p3p", "rfid"] requirements: description: - de: Die WARP-eigene automatische Phasenumschaltung wird von EVCC beim Verbinden mit der Wallbox deaktiviert. Siehe [docs.warp-charger.com](https://docs.warp-charger.com/docs/mqtt_http/api_reference/evse#evse_phase_auto_switch_warp3). - en: WARP's own automatic phase switching will be deactivated by EVCC when connecting to the wallbox. See [docs.warp-charger.com](https://docs.warp-charger.com/docs/mqtt_http/api_reference/evse#evse_phase_auto_switch_warp3). + de: Falls notwendig wird die WARP-eigene automatische Phasenumschaltung von EVCC beim Verbinden mit der Wallbox deaktiviert. Siehe [docs.warp-charger.com](https://docs.warp-charger.com/docs/mqtt_http/api_reference/evse#evse_phase_auto_switch_warp3). + en: If necessary, WARP's own automatic phase switching will be deactivated by EVCC when connecting to the wallbox. See [docs.warp-charger.com](https://docs.warp-charger.com/docs/mqtt_http/api_reference/evse#evse_phase_auto_switch_warp3). evcc: ["skiptest"] params: - name: uri @@ -27,4 +31,3 @@ render: | user: {{ .user }} password: {{ .password }} energyMeterIndex: {{ .energyMeterIndex }} - disablePhaseAutoSwitch: true diff --git a/templates/definition/charger/tinkerforge-warp1-ws.yaml b/templates/definition/charger/tinkerforge-warp1-ws.yaml deleted file mode 100644 index c15bd032a..000000000 --- a/templates/definition/charger/tinkerforge-warp1-ws.yaml +++ /dev/null @@ -1,28 +0,0 @@ -template: tinkerforge-warp1-ws -products: - - { brand: TinkerForge, description: { generic: WARP2 Smart } } - - { brand: TinkerForge, description: { generic: WARP2 Pro } } - - { brand: TinkerForge, description: { generic: WARP1 Smart } } - - { brand: TinkerForge, description: { generic: WARP1 Pro } } -capabilities: ["mA", "rfid"] -requirements: - evcc: ["skiptest"] -params: - - name: uri - required: true - - name: user - - name: password - - name: energyMeterIndex - advanced: true - default: 0 - description: - generic: Energy Meter Index - help: - de: Index des in der Warp konfigurierten Meters dessen Werte genutzt werden sollen. - en: Index of the meter configured in the WARP charger whose values should be used. -render: | - type: warp-ws - uri: {{ .uri }} - user: {{ .user }} - password: {{ .password }} - energyMeterIndex: {{ .energyMeterIndex }}