From 0d5adcbcd24e06efde605d2b96dc1dbbdd174ae9 Mon Sep 17 00:00:00 2001 From: andig Date: Sat, 30 Apr 2022 15:29:23 +0200 Subject: [PATCH] Add SmartWB template (#3282) --- charger/evse/types.go | 31 ++++++++++++++++ charger/evsewifi.go | 41 ++++------------------ templates/definition/charger/evsewifi.yaml | 2 +- templates/definition/charger/smartwb.yaml | 13 +++++++ templates/docs/charger/evsewifi_0.yaml | 2 +- templates/docs/charger/smartwb_0.yaml | 7 ++++ 6 files changed, 59 insertions(+), 37 deletions(-) create mode 100644 charger/evse/types.go create mode 100644 templates/definition/charger/smartwb.yaml create mode 100644 templates/docs/charger/smartwb_0.yaml diff --git a/charger/evse/types.go b/charger/evse/types.go new file mode 100644 index 000000000..8556ec2d5 --- /dev/null +++ b/charger/evse/types.go @@ -0,0 +1,31 @@ +package evse + +const Success = "S0_" + +// ParameterResponse is the getParameters response +type ParameterResponse struct { + Type string `json:"type"` + List []ListEntry `json:"list"` +} + +// ListEntry is ParameterResponse.List +type ListEntry struct { + VehicleState int64 `json:"vehicleState"` + EvseState bool `json:"evseState"` + MaxCurrent int64 `json:"maxCurrent"` + ActualCurrent int64 `json:"actualCurrent"` + ActualCurrentMA *int64 `json:"actualCurrentMA"` // 1/100 A + ActualPower float64 `json:"actualPower"` + Duration int64 `json:"duration"` + AlwaysActive bool `json:"alwaysActive"` + UseMeter bool `json:"useMeter"` + LastActionUser string `json:"lastActionUser"` + LastActionUID string `json:"lastActionUID"` + Energy float64 `json:"energy"` + Mileage float64 `json:"mileage"` + MeterReading float64 `json:"meterReading"` + CurrentP1 float64 `json:"currentP1"` + CurrentP2 float64 `json:"currentP2"` + CurrentP3 float64 `json:"currentP3"` + RFIDUID *string `json:"RFIDUID"` +} diff --git a/charger/evsewifi.go b/charger/evsewifi.go index 9873d24a7..cb1c13dcb 100644 --- a/charger/evsewifi.go +++ b/charger/evsewifi.go @@ -7,40 +7,11 @@ import ( "time" "github.com/evcc-io/evcc/api" + "github.com/evcc-io/evcc/charger/evse" "github.com/evcc-io/evcc/util" "github.com/evcc-io/evcc/util/request" ) -const evseSuccess = "S0_" - -// EVSEParameterResponse is the getParameters response -type EVSEParameterResponse struct { - Type string `json:"type"` - List []EVSEListEntry `json:"list"` -} - -// EVSEListEntry is EVSEParameterResponse.List -type EVSEListEntry struct { - VehicleState int64 `json:"vehicleState"` - EvseState bool `json:"evseState"` - MaxCurrent int64 `json:"maxCurrent"` - ActualCurrent int64 `json:"actualCurrent"` - ActualCurrentMA *int64 `json:"actualCurrentMA"` // 1/100 A - ActualPower float64 `json:"actualPower"` - Duration int64 `json:"duration"` - AlwaysActive bool `json:"alwaysActive"` - UseMeter bool `json:"useMeter"` - LastActionUser string `json:"lastActionUser"` - LastActionUID string `json:"lastActionUID"` - Energy float64 `json:"energy"` - Mileage float64 `json:"mileage"` - MeterReading float64 `json:"meterReading"` - CurrentP1 float64 `json:"currentP1"` - CurrentP2 float64 `json:"currentP2"` - CurrentP3 float64 `json:"currentP3"` - RFIDUID *string `json:"RFIDUID"` -} - // EVSEWifi charger implementation type EVSEWifi struct { *request.Helper @@ -143,16 +114,16 @@ func NewEVSEWifi(uri string) (*EVSEWifi, error) { } // query evse parameters -func (wb *EVSEWifi) getParameters() (EVSEListEntry, error) { - var res EVSEParameterResponse +func (wb *EVSEWifi) getParameters() (evse.ListEntry, error) { + var res evse.ParameterResponse uri := fmt.Sprintf("%s/getParameters", wb.uri) err := wb.GetJSON(uri, &res) if err != nil { - return EVSEListEntry{}, err + return evse.ListEntry{}, err } if len(res.List) != 1 { - return EVSEListEntry{}, fmt.Errorf("unexpected response: %s", res.Type) + return evse.ListEntry{}, fmt.Errorf("unexpected response: %s", res.Type) } params := res.List[0] @@ -193,7 +164,7 @@ func (wb *EVSEWifi) Enabled() (bool, error) { // get executes GET request and checks for EVSE error response func (wb *EVSEWifi) get(uri string) error { b, err := wb.GetBody(uri) - if err == nil && !strings.HasPrefix(string(b), evseSuccess) { + if err == nil && !strings.HasPrefix(string(b), evse.Success) { err = errors.New(string(b)) } return err diff --git a/templates/definition/charger/evsewifi.yaml b/templates/definition/charger/evsewifi.yaml index f3457836c..da2d67ed3 100644 --- a/templates/definition/charger/evsewifi.yaml +++ b/templates/definition/charger/evsewifi.yaml @@ -1,7 +1,7 @@ template: evsewifi products: - description: - generic: EVSE-Wifi + generic: EVSE-WiFi params: - name: host render: | diff --git a/templates/definition/charger/smartwb.yaml b/templates/definition/charger/smartwb.yaml new file mode 100644 index 000000000..5dc8d400f --- /dev/null +++ b/templates/definition/charger/smartwb.yaml @@ -0,0 +1,13 @@ +template: smartwb +products: + - description: + generic: smartWB +params: + - name: host +render: | + type: evsewifi + uri: http://{{ .host }} + meter: + power: true + energy: true + currents: true diff --git a/templates/docs/charger/evsewifi_0.yaml b/templates/docs/charger/evsewifi_0.yaml index 3c56ffa4c..33c11648d 100644 --- a/templates/docs/charger/evsewifi_0.yaml +++ b/templates/docs/charger/evsewifi_0.yaml @@ -1,5 +1,5 @@ product: - description: EVSE-Wifi + description: EVSE-WiFi render: - default: | type: template diff --git a/templates/docs/charger/smartwb_0.yaml b/templates/docs/charger/smartwb_0.yaml new file mode 100644 index 000000000..f98b8afc1 --- /dev/null +++ b/templates/docs/charger/smartwb_0.yaml @@ -0,0 +1,7 @@ +product: + description: smartWB +render: + - default: | + type: template + template: smartwb + host: 192.0.2.2 # IP-Adresse oder Hostname