From c6cccbb309f1aab1139bca9775be3c3be0e1d40a Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Tue, 31 Dec 2024 22:37:52 +0000 Subject: [PATCH] refactor api charging status --- api/chargemodestatus.go | 39 +++----- charger/_blueprint.go | 2 +- charger/abb.go | 20 ++-- charger/abl-em4.go | 4 +- charger/abl.go | 4 +- charger/alfen.go | 5 +- charger/alphatec.go | 10 +- charger/amperfied.go | 16 ++-- charger/bender.go | 10 +- charger/cfos.go | 10 +- charger/charger.go | 2 +- charger/connectiq.go | 8 +- charger/dadapower.go | 10 +- charger/daheimladen-mb.go | 18 ++-- charger/daheimladen.go | 10 +- charger/delta.go | 20 ++-- charger/easee.go | 10 +- charger/eebus.go | 16 ++-- charger/em2go.go | 10 +- charger/etrel.go | 10 +- charger/evsedin.go | 10 +- charger/evsewifi.go | 10 +- charger/fritzdect.go | 4 +- charger/fronius-wattpilot.go | 10 +- charger/go-e.go | 10 +- charger/hardybarth-ecb1.go | 10 +- charger/hardybarth-salia.go | 2 +- charger/heidelberg-ec.go | 16 ++-- charger/helper.go | 2 +- charger/hesotec.go | 2 +- charger/innogy.go | 7 +- charger/keba-modbus.go | 8 +- charger/keba-udp.go | 10 +- charger/kse.go | 10 +- charger/mennekes-compact.go | 10 +- charger/mennekes-hcc3.go | 10 +- charger/mypv-elwa2.go | 6 +- charger/nrgble_linux.go | 10 +- charger/nrgconnect.go | 8 +- charger/nrggen2.go | 18 ++-- charger/obo.go | 4 +- charger/ocpp.go | 10 +- charger/openevse.go | 12 +-- charger/openwb-2.0.go | 6 +- charger/openwb-pro.go | 8 +- charger/openwb.go | 2 +- charger/pantabox.go | 2 +- charger/pcelectric.go | 18 ++-- charger/peblar.go | 4 +- charger/phoenix-charx.go | 2 +- charger/phoenix-em-eth.go | 2 +- charger/phoenix-ev-eth.go | 2 +- charger/phoenix-ev-ser.go | 2 +- charger/prachtalpha.go | 10 +- charger/pulsares.go | 10 +- charger/pulsatrix.go | 2 +- charger/schneider-v3.go | 10 +- charger/sgready.go | 6 +- charger/smaevcharger.go | 12 +-- charger/smartevse.go | 12 +-- charger/solax.go | 10 +- charger/sungrow.go | 10 +- charger/switchsocket.go | 8 +- charger/trydan.go | 10 +- charger/twc3.go | 8 +- charger/versicharge.go | 2 +- charger/vestel.go | 6 +- charger/victron.go | 6 +- charger/wallbe.go | 2 +- charger/warp2.go | 8 +- charger/webasto-next.go | 12 +-- "charger/weidm\303\274ller.go" | 4 +- charger/zaptec.go | 10 +- core/coordinator/coordinator.go | 2 +- core/coordinator/coordinator_test.go | 12 +-- core/loadpoint.go | 20 ++-- core/loadpoint_phases_test.go | 8 +- core/loadpoint_status_test.go | 18 ++-- core/loadpoint_sync_test.go | 20 ++-- core/loadpoint_test.go | 134 +++++++++++++-------------- core/loadpoint_vehicle_test.go | 10 +- core/site_battery.go | 2 +- hems/semp/semp.go | 8 +- provider/combined.go | 6 +- vehicle/aiways/provider.go | 8 +- vehicle/bluelink/provider.go | 2 +- vehicle/bluelink/types.go | 16 ++-- vehicle/bmw/provider.go | 8 +- vehicle/carwings.go | 6 +- vehicle/fiat/provider.go | 8 +- vehicle/ford/connect/provider.go | 6 +- vehicle/ford/provider.go | 8 +- vehicle/jlr/provider.go | 8 +- vehicle/mercedes/provider.go | 8 +- vehicle/nissan/provider.go | 6 +- vehicle/niu.go | 6 +- vehicle/ovms.go | 6 +- vehicle/polestar/provider.go | 6 +- vehicle/porsche/provider.go | 14 +-- vehicle/psa/provider.go | 8 +- vehicle/renault/provider.go | 6 +- vehicle/saic/provider.go | 8 +- vehicle/seat/cupra/provider.go | 6 +- vehicle/skoda/myskoda/provider.go | 6 +- vehicle/skoda/provider.go | 6 +- vehicle/smart/hello/provider.go | 6 +- vehicle/smart/provider.go | 14 +-- vehicle/tesla/provider.go | 6 +- vehicle/tronity.go | 6 +- vehicle/vehicle.go | 2 +- vehicle/volvo.go | 8 +- vehicle/volvo/connected/provider.go | 8 +- vehicle/vw/id/provider.go | 6 +- vehicle/vw/provider.go | 6 +- vehicle/zero/provider.go | 8 +- 115 files changed, 549 insertions(+), 556 deletions(-) diff --git a/api/chargemodestatus.go b/api/chargemodestatus.go index 5123772b10..d0dc67f632 100644 --- a/api/chargemodestatus.go +++ b/api/chargemodestatus.go @@ -27,48 +27,39 @@ type ChargeStatus string // Charging states const ( - StatusNone ChargeStatus = "" - StatusA ChargeStatus = "A" // Fzg. angeschlossen: nein Laden aktiv: nein Ladestation betriebsbereit, Fahrzeug getrennt - StatusB ChargeStatus = "B" // Fzg. angeschlossen: ja Laden aktiv: nein Fahrzeug verbunden, Netzspannung liegt nicht an - StatusC ChargeStatus = "C" // Fzg. angeschlossen: ja Laden aktiv: ja Fahrzeug lädt, Netzspannung liegt an - StatusE ChargeStatus = "E" // Fzg. angeschlossen: ja Laden aktiv: nein Fehler Fahrzeug / Kabel (CP-Kurzschluss, 0V) + StatusUnknown ChargeStatus = "" + StatusDisconnected ChargeStatus = "A" // No vehicle connected + StatusConnected ChargeStatus = "B" // Vehicle connected, no charging + StatusCharging ChargeStatus = "C" // Vehicle charging ) -var StatusEasA = map[ChargeStatus]ChargeStatus{StatusE: StatusA} - -// ChargeStatusString converts a string to ChargeStatus +// ChargeStatusString converts from IEC 62196 string to ChargeStatus func ChargeStatusString(status string) (ChargeStatus, error) { s := strings.ToUpper(strings.Trim(status, "\x00 ")) if len(s) == 0 { - return StatusNone, fmt.Errorf("invalid status: %s", status) + return StatusUnknown, fmt.Errorf("invalid status: %s", status) } switch s1 := s[:1]; s1 { - case "A", "B": - return ChargeStatus(s1), nil + case "A": + return StatusDisconnected, nil + + case "B": + return StatusConnected, nil case "C", "D": if s == "C1" || s == "D1" { - return StatusB, nil + return StatusConnected, nil } - return StatusC, nil + return StatusCharging, nil case "E", "F": - return ChargeStatus(s1), fmt.Errorf("invalid status: %s", s) + return StatusUnknown, fmt.Errorf("error status: %s", s) default: - return StatusNone, fmt.Errorf("invalid status: %s", status) - } -} - -// ChargeStatusStringWithMapping converts a string to ChargeStatus. In case of error, mapping is applied. -func ChargeStatusStringWithMapping(s string, m map[ChargeStatus]ChargeStatus) (ChargeStatus, error) { - status, err := ChargeStatusString(s) - if mappedStatus, ok := m[status]; ok && err != nil { - return mappedStatus, nil + return StatusUnknown, fmt.Errorf("invalid status: %s", status) } - return status, err } // String implements Stringer diff --git a/charger/_blueprint.go b/charger/_blueprint.go index e680fd20d2..65f8e545d6 100644 --- a/charger/_blueprint.go +++ b/charger/_blueprint.go @@ -63,7 +63,7 @@ func NewBlueprint(uri string, cache time.Duration) (api.Charger, error) { // Status implements the api.Charger interface func (wb *Blueprint) Status() (api.ChargeStatus, error) { - return api.StatusNone, api.ErrNotAvailable + return api.StatusUnknown, api.ErrNotAvailable } // Enabled implements the api.Charger interface diff --git a/charger/abb.go b/charger/abb.go index 3fb47ce7e5..38a0fb9c11 100644 --- a/charger/abb.go +++ b/charger/abb.go @@ -110,31 +110,31 @@ func (wb *ABB) status() (byte, error) { func (wb *ABB) Status() (api.ChargeStatus, error) { s, err := wb.status() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch s { case 0: // State A: Idle - return api.StatusA, nil + return api.StatusDisconnected, nil case 1: // State B1: EV Plug in, pending authorization - return api.StatusB, nil + return api.StatusConnected, nil case 2: // State B2: EV Plug in, EVSE ready for charging(PWM) - return api.StatusB, nil + return api.StatusConnected, nil case 3: // State C1: EV Ready for charge, S2 closed(no PWM) - return api.StatusB, nil + return api.StatusConnected, nil case 4: // State C2: Charging Contact closed, energy delivering - return api.StatusC, nil + return api.StatusCharging, nil case 5: // Other: Session stopped b, err := wb.conn.ReadHoldingRegisters(abbRegSocketLock, 2) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } if binary.BigEndian.Uint32(b) >= 0x0101 { - return api.StatusB, nil + return api.StatusConnected, nil } - return api.StatusA, nil + return api.StatusDisconnected, nil default: // Other - return api.StatusNone, fmt.Errorf("invalid status: %0x", s) + return api.StatusUnknown, fmt.Errorf("invalid status: %0x", s) } } diff --git a/charger/abl-em4.go b/charger/abl-em4.go index ed282176a9..489f62bb3e 100644 --- a/charger/abl-em4.go +++ b/charger/abl-em4.go @@ -126,7 +126,7 @@ func (wb *AblEm4) getCurrent() (uint16, error) { func (wb *AblEm4) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(wb.base+abl4RegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } r := rune(b[1]>>4-0x0A) + 'A' @@ -140,7 +140,7 @@ func (wb *AblEm4) Status() (api.ChargeStatus, error) { status = string(r) } - return api.StatusNone, fmt.Errorf("invalid status: %s", status) + return api.StatusUnknown, fmt.Errorf("invalid status: %s", status) } } diff --git a/charger/abl.go b/charger/abl.go index 9a5953b2e9..40c61f6f8f 100644 --- a/charger/abl.go +++ b/charger/abl.go @@ -154,7 +154,7 @@ func (wb *ABLeMH) get(reg, count uint16) ([]byte, error) { func (wb *ABLeMH) Status() (api.ChargeStatus, error) { b, err := wb.get(ablRegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } r := rune(b[1]>>4-0x0A) + 'A' @@ -168,7 +168,7 @@ func (wb *ABLeMH) Status() (api.ChargeStatus, error) { status = string(r) } - return api.StatusNone, fmt.Errorf("invalid status: %s", status) + return api.StatusUnknown, fmt.Errorf("invalid status: %s", status) } } diff --git a/charger/alfen.go b/charger/alfen.go index 97cabc20b4..e563746994 100644 --- a/charger/alfen.go +++ b/charger/alfen.go @@ -21,6 +21,7 @@ import ( "context" "encoding/binary" "math" + "strings" "sync" "time" @@ -134,10 +135,10 @@ func (wb *Alfen) heartbeat(ctx context.Context) { func (wb *Alfen) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(alfenRegStatus, 5) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } - return api.ChargeStatusStringWithMapping(string(b), api.StatusEasA) + return api.ChargeStatusString(strings.Replace(string(b), "E", "A", 1)) } // Enabled implements the api.Charger interface diff --git a/charger/alphatec.go b/charger/alphatec.go index 7e76df6301..d5d1eb112c 100644 --- a/charger/alphatec.go +++ b/charger/alphatec.go @@ -113,18 +113,18 @@ func (wb *Alphatec) getCurrent() (uint16, error) { func (wb *Alphatec) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(alphatecRegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch u := binary.BigEndian.Uint16(b); u { case 1: - return api.StatusA, nil + return api.StatusDisconnected, nil case 2, 8: - return api.StatusB, nil + return api.StatusConnected, nil case 3: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", u) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", u) } } diff --git a/charger/amperfied.go b/charger/amperfied.go index 212b7e494d..898438f3d1 100644 --- a/charger/amperfied.go +++ b/charger/amperfied.go @@ -144,7 +144,7 @@ func (wb *Amperfied) set(reg, val uint16) error { func (wb *Amperfied) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(ampRegChargingState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } sb := binary.BigEndian.Uint16(b) @@ -155,33 +155,33 @@ func (wb *Amperfied) Status() (api.ChargeStatus, error) { switch sb { case 2, 3: - return api.StatusA, nil + return api.StatusDisconnected, nil case 4, 5: - return api.StatusB, nil + return api.StatusConnected, nil case 6, 7: - return api.StatusC, nil + return api.StatusCharging, nil case 10: // ensure RemoteLock is disabled after wake-up b, err := wb.conn.ReadHoldingRegisters(ampRegRemoteLock, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } // unlock if binary.BigEndian.Uint16(b) != 1 { if err := wb.set(ampRegRemoteLock, 1); err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } } // keep status B2 during wakeup if wb.wakeup { - return api.StatusB, nil + return api.StatusConnected, nil } fallthrough default: - return api.StatusNone, fmt.Errorf("invalid status: %d", sb) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", sb) } } diff --git a/charger/bender.go b/charger/bender.go index e7d5a0f7bb..49a785f5d4 100644 --- a/charger/bender.go +++ b/charger/bender.go @@ -154,18 +154,18 @@ func NewBenderCC(uri string, id uint8) (api.Charger, error) { func (wb *BenderCC) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(bendRegChargePointState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch s := binary.BigEndian.Uint16(b); s { case 1: - return api.StatusA, nil + return api.StatusDisconnected, nil case 2: - return api.StatusB, nil + return api.StatusConnected, nil case 3, 4: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", s) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", s) } } diff --git a/charger/cfos.go b/charger/cfos.go index eb0980f333..7dd244affb 100644 --- a/charger/cfos.go +++ b/charger/cfos.go @@ -104,18 +104,18 @@ func NewCfosPowerBrain(uri string, id uint8) (api.Charger, error) { func (wb *CfosPowerBrain) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(cfosRegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch b[1] { case 0: // warten - return api.StatusA, nil + return api.StatusDisconnected, nil case 1: // Fahrzeug erkannt - return api.StatusB, nil + return api.StatusConnected, nil case 2: // laden - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", b[1]) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", b[1]) } } diff --git a/charger/charger.go b/charger/charger.go index d8278a9619..c69f0afb13 100644 --- a/charger/charger.go +++ b/charger/charger.go @@ -167,7 +167,7 @@ func NewConfigurable( func (m *Charger) Status() (api.ChargeStatus, error) { s, err := m.statusG() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(s) diff --git a/charger/connectiq.go b/charger/connectiq.go index 55f98e5dd6..8e5ff95ae1 100644 --- a/charger/connectiq.go +++ b/charger/connectiq.go @@ -92,14 +92,14 @@ func (wb *ConnectIq) status() (connectiq.ChargeStatus, error) { func (wb *ConnectIq) Status() (api.ChargeStatus, error) { resp, err := wb.status() - res := api.StatusNone + res := api.StatusUnknown switch resp.Status { case "ready": - res = api.StatusA + res = api.StatusDisconnected case "ev": - res = api.StatusB + res = api.StatusConnected case "charging": - res = api.StatusC + res = api.StatusCharging default: if err == nil { err = fmt.Errorf("invalid status: %s", resp.Status) diff --git a/charger/dadapower.go b/charger/dadapower.go index 71abe6b0b6..4f8c478793 100644 --- a/charger/dadapower.go +++ b/charger/dadapower.go @@ -103,18 +103,18 @@ func (wb *Dadapower) heartbeat(ctx context.Context) { func (wb *Dadapower) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(dadapowerRegPlugState+wb.regOffset, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch status := binary.BigEndian.Uint16(b); status { case 0x0A: // ready - return api.StatusA, nil + return api.StatusDisconnected, nil case 0x0B: // EV is present - return api.StatusB, nil + return api.StatusConnected, nil case 0x0C: // charging - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", status) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", status) } } diff --git a/charger/daheimladen-mb.go b/charger/daheimladen-mb.go index 4f5397c173..d94478c028 100644 --- a/charger/daheimladen-mb.go +++ b/charger/daheimladen-mb.go @@ -160,30 +160,30 @@ func utf16BytesToString(b []byte, o binary.ByteOrder) string { func (wb *DaheimLadenMB) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(dlRegChargingState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } s := binary.BigEndian.Uint16(b) switch s { case 1: // Standby (A) - return api.StatusA, nil + return api.StatusDisconnected, nil case 2: // Connect (B1) - return api.StatusB, nil + return api.StatusConnected, nil case 3: // Start-up State (B2) - return api.StatusB, nil + return api.StatusConnected, nil case 4: // Charging (C) enabled, err := wb.Enabled() if !enabled { - return api.StatusB, err + return api.StatusConnected, err } - return api.StatusC, nil + return api.StatusCharging, nil case 5: // Start-UP Fail (B2) - return api.StatusB, nil + return api.StatusConnected, nil case 6: // Session Terminated by EVSE - return api.StatusB, nil + return api.StatusConnected, nil default: // Other - return api.StatusNone, fmt.Errorf("invalid status: %d", s) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", s) } } diff --git a/charger/daheimladen.go b/charger/daheimladen.go index b75acefa35..eadb9d899a 100644 --- a/charger/daheimladen.go +++ b/charger/daheimladen.go @@ -92,19 +92,19 @@ func (c *DaheimLaden) reset() { func (c *DaheimLaden) Status() (api.ChargeStatus, error) { res, err := c.statusG.Get() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } status := daheimladen.ChargePointStatus(res.Status) switch status { case daheimladen.AVAILABLE: - return api.StatusA, nil + return api.StatusDisconnected, nil case daheimladen.PREPARING: - return api.StatusB, nil + return api.StatusConnected, nil case daheimladen.CHARGING, daheimladen.FINISHING: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %s", res.Status) + return api.StatusUnknown, fmt.Errorf("invalid status: %s", res.Status) } } diff --git a/charger/delta.go b/charger/delta.go index e1cd380775..f32cf227f1 100644 --- a/charger/delta.go +++ b/charger/delta.go @@ -156,7 +156,7 @@ func (wb *Delta) heartbeat(ctx context.Context, timeout time.Duration) { func (wb *Delta) statusDelta() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(wb.base+deltaRegEvseChargerState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } // 0: Charging process not started (no vehicle connected) @@ -170,13 +170,13 @@ func (wb *Delta) statusDelta() (api.ChargeStatus, error) { switch s := encoding.Uint16(b); s { case 0: - return api.StatusA, nil + return api.StatusDisconnected, nil case 3: - return api.StatusC, nil + return api.StatusCharging, nil case 1, 2, 4, 5, 6, 7: - return api.StatusB, nil + return api.StatusConnected, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %0x", s) + return api.StatusUnknown, fmt.Errorf("invalid status: %0x", s) } } @@ -201,7 +201,7 @@ func (wb *Delta) statusReasonDelta() (api.Reason, error) { func (wb *Delta) statusOCPP() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(wb.base+deltaRegEvseState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } // 0: Unavailable @@ -217,13 +217,13 @@ func (wb *Delta) statusOCPP() (api.ChargeStatus, error) { switch s := encoding.Uint16(b); s { case 0, 1, 2: - return api.StatusA, nil + return api.StatusDisconnected, nil case 4: - return api.StatusC, nil + return api.StatusCharging, nil case 3, 5, 6, 7, 9: - return api.StatusB, nil + return api.StatusConnected, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %0x", s) + return api.StatusUnknown, fmt.Errorf("invalid status: %0x", s) } } diff --git a/charger/easee.go b/charger/easee.go index 11a72576a9..089d9e6b56 100644 --- a/charger/easee.go +++ b/charger/easee.go @@ -428,16 +428,16 @@ func (c *Easee) Status() (api.ChargeStatus, error) { c.mux.RLock() defer c.mux.RUnlock() - res := api.StatusNone + res := api.StatusUnknown switch c.opMode { case easee.ModeDisconnected: - res = api.StatusA + res = api.StatusDisconnected case easee.ModeAwaitingStart, easee.ModeCompleted, easee.ModeReadyToCharge, easee.ModeAwaitingAuthentication, easee.ModeDeauthenticating: - res = api.StatusB + res = api.StatusConnected case easee.ModeCharging: - res = api.StatusC + res = api.StatusCharging default: return res, fmt.Errorf("invalid opmode: %d", c.opMode) } @@ -694,7 +694,7 @@ var _ api.Meter = (*Easee)(nil) // CurrentPower implements the api.Meter interface func (c *Easee) CurrentPower() (float64, error) { - if status, err := c.Status(); err != nil || status == api.StatusA { + if status, err := c.Status(); err != nil || status == api.StatusDisconnected { return 0, err } diff --git a/charger/eebus.go b/charger/eebus.go index 633b863b37..a2521a8301 100644 --- a/charger/eebus.go +++ b/charger/eebus.go @@ -176,7 +176,7 @@ func (c *EEBus) isCharging(evEntity spineapi.EntityRemoteInterface) bool { func (c *EEBus) Status() (res api.ChargeStatus, err error) { evEntity, ok := c.isEvConnected() if !ok { - return api.StatusA, nil + return api.StatusDisconnected, nil } // re-set current limit after reconnect @@ -186,7 +186,7 @@ func (c *EEBus) Status() (res api.ChargeStatus, err error) { } c.mux.Lock() - if !c.reconnect && (res == api.StatusB || res == api.StatusC) { + if !c.reconnect && (res == api.StatusConnected || res == api.StatusCharging) { c.mux.Unlock() return } @@ -204,21 +204,21 @@ func (c *EEBus) Status() (res api.ChargeStatus, err error) { currentState, err := c.uc.EvCC.ChargeState(evEntity) if err != nil { - return api.StatusA, nil + return api.StatusDisconnected, nil } switch currentState { case ucapi.EVChargeStateTypeUnknown, ucapi.EVChargeStateTypeUnplugged: // Unplugged - return api.StatusA, nil + return api.StatusDisconnected, nil case ucapi.EVChargeStateTypeFinished, ucapi.EVChargeStateTypePaused: // Finished, Paused - return api.StatusB, nil + return api.StatusConnected, nil case ucapi.EVChargeStateTypeActive: // Active if c.isCharging(evEntity) { - return api.StatusC, nil + return api.StatusCharging, nil } - return api.StatusB, nil + return api.StatusConnected, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %s", currentState) + return api.StatusUnknown, fmt.Errorf("invalid status: %s", currentState) } } diff --git a/charger/em2go.go b/charger/em2go.go index 3642eb8289..8cb7154e92 100644 --- a/charger/em2go.go +++ b/charger/em2go.go @@ -138,18 +138,18 @@ func NewEm2Go(uri string, slaveID uint8) (api.Charger, error) { func (wb *Em2Go) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(em2GoRegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch binary.BigEndian.Uint16(b) { case 1: - return api.StatusA, nil + return api.StatusDisconnected, nil case 2, 3: - return api.StatusB, nil + return api.StatusConnected, nil case 4, 6: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", b[1]) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", b[1]) } } diff --git a/charger/etrel.go b/charger/etrel.go index 2fa84cc4d4..bae84762f7 100644 --- a/charger/etrel.go +++ b/charger/etrel.go @@ -112,7 +112,7 @@ func NewEtrel(connector int, uri string, id uint8) (*Etrel, error) { func (wb *Etrel) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(wb.base+etrelRegChargeStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } // 0 Unknown @@ -129,13 +129,13 @@ func (wb *Etrel) Status() (api.ChargeStatus, error) { switch u := binary.BigEndian.Uint16(b); u { case 1, 2: - return api.StatusA, nil + return api.StatusDisconnected, nil case 3, 5, 6, 7, 9: - return api.StatusB, nil + return api.StatusConnected, nil case 4: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", u) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", u) } } diff --git a/charger/evsedin.go b/charger/evsedin.go index fb7820d46d..60cf214d87 100644 --- a/charger/evsedin.go +++ b/charger/evsedin.go @@ -66,18 +66,18 @@ func NewEvseDIN(uri, device, comset string, baudrate int, proto modbus.Protocol, func (evse *EvseDIN) Status() (api.ChargeStatus, error) { b, err := evse.conn.ReadHoldingRegisters(evseRegVehicleStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch b[1] { case 1: // ready - return api.StatusA, nil + return api.StatusDisconnected, nil case 2: // EV is present - return api.StatusB, nil + return api.StatusConnected, nil case 3: // charging - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", b[1]) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", b[1]) } } diff --git a/charger/evsewifi.go b/charger/evsewifi.go index 6775dbefe8..6fa00432a4 100644 --- a/charger/evsewifi.go +++ b/charger/evsewifi.go @@ -144,18 +144,18 @@ func NewEVSEWifi(uri string, cache time.Duration) (*EVSEWifi, error) { func (wb *EVSEWifi) Status() (api.ChargeStatus, error) { params, err := wb.paramG.Get() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch params.VehicleState { case 1: // ready - return api.StatusA, nil + return api.StatusDisconnected, nil case 2: // EV is present - return api.StatusB, nil + return api.StatusConnected, nil case 3: // charging - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", params.VehicleState) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", params.VehicleState) } } diff --git a/charger/fritzdect.go b/charger/fritzdect.go index 81a0fc9fa1..9be178be9a 100644 --- a/charger/fritzdect.go +++ b/charger/fritzdect.go @@ -58,7 +58,7 @@ func NewFritzDECT(embed embed, uri, ain, user, password string, standbypower flo func (c *FritzDECT) Status() (api.ChargeStatus, error) { resp, err := c.conn.ExecCmd("getswitchpresent") if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } present, err := strconv.ParseBool(resp) @@ -67,7 +67,7 @@ func (c *FritzDECT) Status() (api.ChargeStatus, error) { } if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return c.switchSocket.Status() diff --git a/charger/fronius-wattpilot.go b/charger/fronius-wattpilot.go index de277e6552..dcadbe1276 100644 --- a/charger/fronius-wattpilot.go +++ b/charger/fronius-wattpilot.go @@ -70,18 +70,18 @@ func (c *Wattpilot) Log(level string, data string) { func (c *Wattpilot) Status() (api.ChargeStatus, error) { car, err := c.api.GetProperty("car") if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch car.(float64) { case 1.0: - return api.StatusA, nil + return api.StatusDisconnected, nil case 2.0, 5.0: - return api.StatusC, nil + return api.StatusCharging, nil case 3.0, 4.0: - return api.StatusB, nil + return api.StatusConnected, nil default: - return api.StatusNone, fmt.Errorf("car unknown result: %d", car) + return api.StatusUnknown, fmt.Errorf("car unknown result: %d", car) } } diff --git a/charger/go-e.go b/charger/go-e.go index 6418ce86de..917d944173 100644 --- a/charger/go-e.go +++ b/charger/go-e.go @@ -91,18 +91,18 @@ func NewGoE(uri, token string, cache time.Duration) (api.Charger, error) { func (c *GoE) Status() (api.ChargeStatus, error) { resp, err := c.api.Status() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch car := resp.Status(); car { case 1: - return api.StatusA, nil + return api.StatusDisconnected, nil case 2: - return api.StatusC, nil + return api.StatusCharging, nil case 3, 4: - return api.StatusB, nil + return api.StatusConnected, nil default: - return api.StatusNone, fmt.Errorf("car unknown result: %d", car) + return api.StatusUnknown, fmt.Errorf("car unknown result: %d", car) } } diff --git a/charger/hardybarth-ecb1.go b/charger/hardybarth-ecb1.go index 2102db2c35..3c9dc28b7d 100644 --- a/charger/hardybarth-ecb1.go +++ b/charger/hardybarth-ecb1.go @@ -127,20 +127,20 @@ func (wb *HardyBarth) getChargeControl() (ecb1.ChargeControl, error) { func (wb *HardyBarth) Status() (api.ChargeStatus, error) { resp, err := wb.getChargeControl() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } if resp.State == "" { - return api.StatusNone, errors.New("invalid state- check controller type (eCB1 vs Salia)") + return api.StatusUnknown, errors.New("invalid state- check controller type (eCB1 vs Salia)") } - res := api.StatusA + res := api.StatusDisconnected if resp.Connected { - res = api.StatusB + res = api.StatusConnected if resp.StateID == 5 { - res = api.StatusC + res = api.StatusCharging } } diff --git a/charger/hardybarth-salia.go b/charger/hardybarth-salia.go index 1763b84c74..80e9eda40a 100644 --- a/charger/hardybarth-salia.go +++ b/charger/hardybarth-salia.go @@ -195,7 +195,7 @@ func (wb *Salia) post(key, val string) error { func (wb *Salia) Status() (api.ChargeStatus, error) { res, err := wb.apiG.Get() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(res.Secc.Port0.Ci.Charge.Cp.Status) } diff --git a/charger/heidelberg-ec.go b/charger/heidelberg-ec.go index b567589719..cbee2350e4 100644 --- a/charger/heidelberg-ec.go +++ b/charger/heidelberg-ec.go @@ -141,7 +141,7 @@ func (wb *HeidelbergEC) set(reg, val uint16) error { func (wb *HeidelbergEC) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(hecRegVehicleStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } sb := binary.BigEndian.Uint16(b) @@ -152,33 +152,33 @@ func (wb *HeidelbergEC) Status() (api.ChargeStatus, error) { switch sb { case 2, 3: - return api.StatusA, nil + return api.StatusDisconnected, nil case 4, 5: - return api.StatusB, nil + return api.StatusConnected, nil case 6, 7: - return api.StatusC, nil + return api.StatusCharging, nil case 10: // ensure RemoteLock is disabled after wake-up b, err := wb.conn.ReadHoldingRegisters(hecRegRemoteLock, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } // unlock if binary.BigEndian.Uint16(b) != 1 { if err := wb.set(hecRegRemoteLock, 1); err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } } // keep status B2 during wakeup if wb.wakeup { - return api.StatusB, nil + return api.StatusConnected, nil } fallthrough default: - return api.StatusNone, fmt.Errorf("invalid status: %d", sb) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", sb) } } diff --git a/charger/helper.go b/charger/helper.go index a1368276db..63ee951b1c 100644 --- a/charger/helper.go +++ b/charger/helper.go @@ -66,5 +66,5 @@ func verifyEnabled(c api.Charger, enabled bool) (bool, error) { status, err := c.Status() // always treat charging as enabled - return status == api.StatusC, err + return status == api.StatusCharging, err } diff --git a/charger/hesotec.go b/charger/hesotec.go index 9a6b913e71..18b9208fc2 100644 --- a/charger/hesotec.go +++ b/charger/hesotec.go @@ -97,7 +97,7 @@ func NewHesotec(uri string, id uint8) (api.Charger, error) { func (wb *Hesotec) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(hesotecRegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(string(b[0])) } diff --git a/charger/innogy.go b/charger/innogy.go index 463745ed7a..f12e3de57b 100644 --- a/charger/innogy.go +++ b/charger/innogy.go @@ -21,6 +21,7 @@ import ( "encoding/binary" "fmt" "math" + "strings" "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/util" @@ -110,10 +111,10 @@ func NewInnogy(uri string, id uint8) (*Innogy, error) { func (wb *Innogy) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(igyRegStatus, 2) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } - return api.ChargeStatusStringWithMapping(string(b), api.StatusEasA) + return api.ChargeStatusString(strings.Replace(string(b), "E", "A", 1)) } // Enabled implements the api.Charger interface @@ -175,7 +176,7 @@ var _ api.Meter = (*Innogy)(nil) // CurrentPower implements the api.Meter interface func (wb *Innogy) CurrentPower() (float64, error) { // https://github.com/evcc-io/evcc/issues/6848 - if status, err := wb.Status(); status != api.StatusC || err != nil { + if status, err := wb.Status(); status != api.StatusCharging || err != nil { return 0, err } diff --git a/charger/keba-modbus.go b/charger/keba-modbus.go index d34368aca1..b6d6cdf859 100644 --- a/charger/keba-modbus.go +++ b/charger/keba-modbus.go @@ -208,17 +208,17 @@ func (wb *Keba) getChargingState() (uint32, error) { // Status implements the api.Charger interface func (wb *Keba) Status() (api.ChargeStatus, error) { if connected, err := wb.isConnected(); err != nil || !connected { - return api.StatusA, err + return api.StatusDisconnected, err } s, err := wb.getChargingState() if err != nil { - return api.StatusA, err + return api.StatusDisconnected, err } if s == 3 { - return api.StatusC, nil + return api.StatusCharging, nil } - return api.StatusB, nil + return api.StatusConnected, nil } // statusReason implements the api.StatusReasoner interface diff --git a/charger/keba-udp.go b/charger/keba-udp.go index 7b7fefbe30..0eda4be826 100644 --- a/charger/keba-udp.go +++ b/charger/keba-udp.go @@ -171,20 +171,20 @@ func (c *KebaUdp) Status() (api.ChargeStatus, error) { var kr keba.Report2 err := c.roundtrip("report", 2, &kr) if err != nil { - return api.StatusA, err + return api.StatusDisconnected, err } if kr.Plug < 5 { - return api.StatusA, nil + return api.StatusDisconnected, nil } if kr.State == 3 { - return api.StatusC, nil + return api.StatusCharging, nil } if kr.State != 4 { - return api.StatusB, nil + return api.StatusConnected, nil } - return api.StatusNone, fmt.Errorf("invalid status: %+d", kr.State) + return api.StatusUnknown, fmt.Errorf("invalid status: %+d", kr.State) } // Enabled implements the api.Charger interface diff --git a/charger/kse.go b/charger/kse.go index dbfb33c052..6a3b57f11b 100644 --- a/charger/kse.go +++ b/charger/kse.go @@ -118,18 +118,18 @@ func NewKSE(uri, device, comset string, baudrate int, slaveID uint8) (api.Charge func (wb *KSE) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(kseRegVehicleState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch status := binary.BigEndian.Uint16(b); status { case 0, 1, 3: - return api.StatusA, nil + return api.StatusDisconnected, nil case 4: - return api.StatusB, nil + return api.StatusConnected, nil case 5: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", status) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", status) } } diff --git a/charger/mennekes-compact.go b/charger/mennekes-compact.go index 4b4c9b5563..41fb257fd9 100644 --- a/charger/mennekes-compact.go +++ b/charger/mennekes-compact.go @@ -134,21 +134,21 @@ func (wb *MennekesCompact) heartbeat(ctx context.Context, timeout time.Duration) func (wb *MennekesCompact) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(mennekesRegEvseState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch status := encoding.Uint16(b); status { case 1: - return api.StatusA, nil + return api.StatusDisconnected, nil case 2, 3, 4: - return api.StatusB, nil + return api.StatusConnected, nil case 5: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", status) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", status) } } diff --git a/charger/mennekes-hcc3.go b/charger/mennekes-hcc3.go index 2107fe6763..8707d54a55 100644 --- a/charger/mennekes-hcc3.go +++ b/charger/mennekes-hcc3.go @@ -93,18 +93,18 @@ func NewMennekesHcc3(uri string, slaveID uint8) (api.Charger, error) { func (wb *MennekesHcc3) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(mennekesHcc3RegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch status := binary.BigEndian.Uint16(b); status { case 1, 2: - return api.StatusA, nil + return api.StatusDisconnected, nil case 3, 4: - return api.StatusB, nil + return api.StatusConnected, nil case 5, 6: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", status) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", status) } } diff --git a/charger/mypv-elwa2.go b/charger/mypv-elwa2.go index 151e2f6af8..8acd649139 100644 --- a/charger/mypv-elwa2.go +++ b/charger/mypv-elwa2.go @@ -123,15 +123,15 @@ func (wb *MyPvElwa2) heartbeat(ctx context.Context, timeout time.Duration) { // Status implements the api.Charger interface func (wb *MyPvElwa2) Status() (api.ChargeStatus, error) { - res := api.StatusA + res := api.StatusDisconnected b, err := wb.conn.ReadHoldingRegisters(elwaRegStatus, 1) if err != nil { return res, err } - res = api.StatusB + res = api.StatusConnected if binary.BigEndian.Uint16(b) == 2 { - res = api.StatusC + res = api.StatusCharging } return res, nil diff --git a/charger/nrgble_linux.go b/charger/nrgble_linux.go index 943c21a8f3..46cd37da79 100644 --- a/charger/nrgble_linux.go +++ b/charger/nrgble_linux.go @@ -214,20 +214,20 @@ func (wb *NRGKickBLE) mergeSettings(info ble.Info) ble.Settings { func (wb *NRGKickBLE) Status() (api.ChargeStatus, error) { var res ble.Power if err := wb.read(ble.PowerService, &res); err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } wb.log.TRACE.Printf("read power: %+v", res) switch res.CPSignal { case 3: - return api.StatusB, nil + return api.StatusConnected, nil case 2: - return api.StatusC, nil + return api.StatusCharging, nil case 4: - return api.StatusA, nil + return api.StatusDisconnected, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", res.CPSignal) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", res.CPSignal) } } diff --git a/charger/nrgconnect.go b/charger/nrgconnect.go index 5e84b796c0..9a59d1e94d 100644 --- a/charger/nrgconnect.go +++ b/charger/nrgconnect.go @@ -114,18 +114,18 @@ func (nrg *NRGKickConnect) putJSON(url string, data interface{}) error { func (nrg *NRGKickConnect) Status() (api.ChargeStatus, error) { res, err := nrg.settingsG.Get() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } if res.Values.ChargingStatus == nil { - return api.StatusNone, errors.New("unknown status") + return api.StatusUnknown, errors.New("unknown status") } if res.Values.ChargingStatus.Charging { - return api.StatusC, nil + return api.StatusCharging, nil } - return api.StatusB, nil + return api.StatusConnected, nil } // Enabled implements the api.Charger interface diff --git a/charger/nrggen2.go b/charger/nrggen2.go index 885287fc3f..2e16c56420 100644 --- a/charger/nrggen2.go +++ b/charger/nrggen2.go @@ -109,7 +109,7 @@ func NewNRGKickGen2(uri string, slaveID uint8) (*NRGKickGen2, error) { func (nrg *NRGKickGen2) Status() (api.ChargeStatus, error) { b, err := nrg.conn.ReadHoldingRegisters(nrgKickGen2RegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } // 0 - "UNKNOWN", @@ -120,13 +120,13 @@ func (nrg *NRGKickGen2) Status() (api.ChargeStatus, error) { // 7 - "WAKEUP" switch status := binary.BigEndian.Uint16(b); status { case 0: - return api.StatusNone, nil + return api.StatusUnknown, nil case 1: - return api.StatusA, nil + return api.StatusDisconnected, nil case 2: - return api.StatusB, nil + return api.StatusConnected, nil case 3: - return api.StatusC, nil + return api.StatusCharging, nil case 6: // 0 - "NO_ERROR", // 1 - "GENERAL_ERROR", @@ -162,13 +162,13 @@ func (nrg *NRGKickGen2) Status() (api.ChargeStatus, error) { // x - "UNKNOWN" b, err := nrg.conn.ReadHoldingRegisters(nrgKickGen2RegError, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } - return api.StatusNone, fmt.Errorf("charger error: %d", binary.BigEndian.Uint16(b)) + return api.StatusUnknown, fmt.Errorf("charger error: %d", binary.BigEndian.Uint16(b)) case 7: - return api.StatusB, nil + return api.StatusConnected, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", status) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", status) } } diff --git a/charger/obo.go b/charger/obo.go index 3dc85067d0..177b3d2150 100644 --- a/charger/obo.go +++ b/charger/obo.go @@ -101,7 +101,7 @@ func (wb *Obo) heartbeat(ctx context.Context, timeout time.Duration) { func (wb *Obo) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(oboRegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch u := binary.BigEndian.Uint16(b); u { @@ -110,7 +110,7 @@ func (wb *Obo) Status() (api.ChargeStatus, error) { return api.ChargeStatus(string('A' + rune(u))), nil default: // D, F - return api.StatusNone, fmt.Errorf("invalid status: %d", u) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", u) } } diff --git a/charger/ocpp.go b/charger/ocpp.go index fef6df3a8e..d810a19d8d 100644 --- a/charger/ocpp.go +++ b/charger/ocpp.go @@ -198,25 +198,25 @@ func (c *OCPP) Connector() *ocpp.Connector { func (c *OCPP) Status() (api.ChargeStatus, error) { status, err := c.conn.Status() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch status { case core.ChargePointStatusAvailable, // "Available" core.ChargePointStatusUnavailable: // "Unavailable" - return api.StatusA, nil + return api.StatusDisconnected, nil case core.ChargePointStatusPreparing, // "Preparing" core.ChargePointStatusSuspendedEVSE, // "SuspendedEVSE" core.ChargePointStatusSuspendedEV, // "SuspendedEV" core.ChargePointStatusFinishing: // "Finishing" - return api.StatusB, nil + return api.StatusConnected, nil case core.ChargePointStatusCharging: // "Charging" - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %s", status) + return api.StatusUnknown, fmt.Errorf("invalid status: %s", status) } } diff --git a/charger/openevse.go b/charger/openevse.go index dfa5f00391..c6e54b3659 100644 --- a/charger/openevse.go +++ b/charger/openevse.go @@ -138,7 +138,7 @@ func (c *OpenEVSE) hasPhaseSwitchCapabilities() error { func (c *OpenEVSE) Status() (api.ChargeStatus, error) { res, err := c.statusG.Get() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } /* @@ -160,16 +160,16 @@ func (c *OpenEVSE) Status() (api.ChargeStatus, error) { switch res.State { case 1: - return api.StatusA, nil + return api.StatusDisconnected, nil case 2, 254, 255: if res.Vehicle == 1 { - return api.StatusB, nil + return api.StatusConnected, nil } - return api.StatusA, nil + return api.StatusDisconnected, nil case 3: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", res.State) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", res.State) } } diff --git a/charger/openwb-2.0.go b/charger/openwb-2.0.go index 961d7b7e9a..ef71df16bf 100644 --- a/charger/openwb-2.0.go +++ b/charger/openwb-2.0.go @@ -95,14 +95,14 @@ func NewOpenWB20(uri string, slaveID uint8, connector uint16) (*OpenWB20, error) // Status implements the api.Charger interface func (wb *OpenWB20) Status() (api.ChargeStatus, error) { if b, err := wb.conn.ReadInputRegisters(wb.base+openwbRegCharging, 1); err != nil || binary.BigEndian.Uint16(b) == 1 { - return api.StatusC, err + return api.StatusCharging, err } if b, err := wb.conn.ReadInputRegisters(wb.base+openwbRegPlugged, 1); err != nil || binary.BigEndian.Uint16(b) == 1 { - return api.StatusB, err + return api.StatusConnected, err } - return api.StatusA, nil + return api.StatusDisconnected, nil } // Enabled implements the api.Charger interface diff --git a/charger/openwb-pro.go b/charger/openwb-pro.go index 1feec1ca24..6d2a13610c 100644 --- a/charger/openwb-pro.go +++ b/charger/openwb-pro.go @@ -94,15 +94,15 @@ func (wb *OpenWBPro) set(payload string) error { func (wb *OpenWBPro) Status() (api.ChargeStatus, error) { resp, err := wb.statusG.Get() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } - res := api.StatusA + res := api.StatusDisconnected switch { case resp.ChargeState: - res = api.StatusC + res = api.StatusCharging case resp.PlugState: - res = api.StatusB + res = api.StatusConnected } return res, nil diff --git a/charger/openwb.go b/charger/openwb.go index e4de91d008..e700edc96b 100644 --- a/charger/openwb.go +++ b/charger/openwb.go @@ -221,7 +221,7 @@ func (m *OpenWB) Enabled() (bool, error) { func (m *OpenWB) Status() (api.ChargeStatus, error) { status, err := m.statusG() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(status) } diff --git a/charger/pantabox.go b/charger/pantabox.go index 4b94c969ea..66c53f61f0 100644 --- a/charger/pantabox.go +++ b/charger/pantabox.go @@ -52,7 +52,7 @@ func (wb *Pantabox) Status() (api.ChargeStatus, error) { } if err := wb.GetJSON(wb.uri+"/charger/state", &res); err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(res.State) diff --git a/charger/pcelectric.go b/charger/pcelectric.go index 484e52c9ae..ec85d2afed 100644 --- a/charger/pcelectric.go +++ b/charger/pcelectric.go @@ -100,7 +100,7 @@ func (wb *PCElectric) Status() (api.ChargeStatus, error) { uri := fmt.Sprintf("%s/status", wb.uri) if err := wb.GetJSON(uri, &status); err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } chargeStatus = status.ChargeStatus sessionStartTime = status.SessionStartTime @@ -109,10 +109,10 @@ func (wb *PCElectric) Status() (api.ChargeStatus, error) { uri := fmt.Sprintf("%s/slaves/false", wb.uri) if err := wb.GetJSON(uri, &status); err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } if wb.slaveIndex >= len(status) { - return api.StatusNone, nil + return api.StatusUnknown, nil } chargeStatus = status[wb.slaveIndex].ChargeStatus sessionStartTime = status[wb.slaveIndex].SessionStartTime @@ -121,22 +121,22 @@ func (wb *PCElectric) Status() (api.ChargeStatus, error) { switch chargeStatus { case 0x00, 0x10: // notconnected - return api.StatusA, nil + return api.StatusDisconnected, nil case 0x30: // connected - return api.StatusB, nil + return api.StatusConnected, nil case 0x40: // charging - return api.StatusC, nil + return api.StatusCharging, nil case 0x42, // chargepaused 0x50, // chargefinished 0x60: // chargecancelled - return api.StatusB, nil + return api.StatusConnected, nil case 0x90: // unavailable if sessionStartTime > 0 { - return api.StatusB, nil + return api.StatusConnected, nil } fallthrough default: - return api.StatusNone, fmt.Errorf("invalid status: %d", chargeStatus) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", chargeStatus) } } diff --git a/charger/peblar.go b/charger/peblar.go index 9bbae2b903..441d3a0852 100644 --- a/charger/peblar.go +++ b/charger/peblar.go @@ -128,14 +128,14 @@ func NewPeblar(uri string, id uint8) (api.Charger, error) { func (wb *Peblar) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(peblarRegCpState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch s := rune(encoding.Uint16(b)); s { case 'A', 'B', 'C': return api.ChargeStatus(s), nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", s) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", s) } } diff --git a/charger/phoenix-charx.go b/charger/phoenix-charx.go index 2099487c64..23240b90ae 100644 --- a/charger/phoenix-charx.go +++ b/charger/phoenix-charx.go @@ -133,7 +133,7 @@ func (wb *PhoenixCharx) meter() (uint16, error) { func (wb *PhoenixCharx) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(wb.register(charxRegStatus), 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } // TODO check IEC 61851-1 C1 state diff --git a/charger/phoenix-em-eth.go b/charger/phoenix-em-eth.go index 462896aa74..902f74ee2c 100644 --- a/charger/phoenix-em-eth.go +++ b/charger/phoenix-em-eth.go @@ -87,7 +87,7 @@ func NewPhoenixEMEth(uri string, slaveID uint8) (*PhoenixEMEth, error) { func (wb *PhoenixEMEth) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(phxEMEthRegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(string(b[1])) diff --git a/charger/phoenix-ev-eth.go b/charger/phoenix-ev-eth.go index ec1b542e36..bd54991edf 100644 --- a/charger/phoenix-ev-eth.go +++ b/charger/phoenix-ev-eth.go @@ -129,7 +129,7 @@ func NewPhoenixEVEth(uri string, slaveID uint8) (api.Charger, error) { func (wb *PhoenixEVEth) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(phxRegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(string(b[1])) diff --git a/charger/phoenix-ev-ser.go b/charger/phoenix-ev-ser.go index 3e5366d1f6..e0e0428d2a 100644 --- a/charger/phoenix-ev-ser.go +++ b/charger/phoenix-ev-ser.go @@ -58,7 +58,7 @@ func NewPhoenixEVSer(uri, device, comset string, baudrate int, proto modbus.Prot func (wb *PhoenixEVSer) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(phxEVSerRegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(string(b[0])) diff --git a/charger/prachtalpha.go b/charger/prachtalpha.go index 6bdeb75e14..6f1dc0cc38 100644 --- a/charger/prachtalpha.go +++ b/charger/prachtalpha.go @@ -109,18 +109,18 @@ func (wb *PrachtAlpha) Status() (api.ChargeStatus, error) { reg := wb.register(prachtConnStatus) b, err := wb.conn.ReadHoldingRegisters(reg, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch u := binary.BigEndian.Uint16(b); u { case 0: - return api.StatusA, nil + return api.StatusDisconnected, nil case 1: - return api.StatusB, nil + return api.StatusConnected, nil case 2, 3: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", u) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", u) } } diff --git a/charger/pulsares.go b/charger/pulsares.go index 33c6538743..1209b7d71b 100644 --- a/charger/pulsares.go +++ b/charger/pulsares.go @@ -179,23 +179,23 @@ func (wb *Pulsares) getCurrent() (uint16, error) { func (wb *Pulsares) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(pulsaresRegConnectionStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } if binary.BigEndian.Uint16(b) != 1 { - return api.StatusA, nil + return api.StatusDisconnected, nil } b, err = wb.conn.ReadHoldingRegisters(pulsaresRegChargeStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } if u := binary.BigEndian.Uint16(b); u == 3 || u == 4 { - return api.StatusC, nil + return api.StatusCharging, nil } - return api.StatusB, nil + return api.StatusConnected, nil } // Enabled implements the api.Charger interface diff --git a/charger/pulsatrix.go b/charger/pulsatrix.go index 76512a5e4c..52aea8898c 100644 --- a/charger/pulsatrix.go +++ b/charger/pulsatrix.go @@ -211,7 +211,7 @@ func (c *Pulsatrix) heartbeat(ctx context.Context) { func (c *Pulsatrix) Status() (api.ChargeStatus, error) { res, err := c.data.Get() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(res.VehicleStatus) diff --git a/charger/schneider-v3.go b/charger/schneider-v3.go index 66c63c3da8..c2baf988d0 100644 --- a/charger/schneider-v3.go +++ b/charger/schneider-v3.go @@ -133,20 +133,20 @@ func (wb *Schneider) heartbeat(ctx context.Context, timeout time.Duration) { func (wb *Schneider) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(schneiderRegEvState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } s := encoding.Uint16(b) switch s { case 0, 1, 2, 6: - return api.StatusA, nil + return api.StatusDisconnected, nil case 3, 4, 5, 7: - return api.StatusB, nil + return api.StatusConnected, nil case 8, 9: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", s) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", s) } } diff --git a/charger/sgready.go b/charger/sgready.go index 34aeaf5485..1916d9da31 100644 --- a/charger/sgready.go +++ b/charger/sgready.go @@ -163,14 +163,14 @@ func (wb *SgReady) mode() (int64, error) { func (wb *SgReady) Status() (api.ChargeStatus, error) { mode, err := wb.mode() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } if mode == Stop { - return api.StatusNone, errors.New("stop mode") + return api.StatusUnknown, errors.New("stop mode") } - status := map[int64]api.ChargeStatus{Boost: api.StatusC, Normal: api.StatusB}[mode] + status := map[int64]api.ChargeStatus{Boost: api.StatusCharging, Normal: api.StatusConnected}[mode] return status, nil } diff --git a/charger/smaevcharger.go b/charger/smaevcharger.go index b25555f622..43d56e35be 100644 --- a/charger/smaevcharger.go +++ b/charger/smaevcharger.go @@ -140,7 +140,7 @@ func NewSmaevcharger(uri, user, password string, cache time.Duration) (api.Charg func (wb *Smaevcharger) Status() (api.ChargeStatus, error) { state, err := wb.getMeasurement("Measurement.Operation.EVeh.ChaStt") if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } if state != wb.oldstate { @@ -152,7 +152,7 @@ func (wb *Smaevcharger) Status() (api.ChargeStatus, error) { if state == smaevcharger.StatusB && wb.oldstate == smaevcharger.StatusA { if err := wb.Send(value("Parameter.Chrg.ActChaMod", smaevcharger.StopCharge)); err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } } wb.oldstate = state @@ -160,13 +160,13 @@ func (wb *Smaevcharger) Status() (api.ChargeStatus, error) { switch state { case smaevcharger.StatusA: - return api.StatusA, nil + return api.StatusDisconnected, nil case smaevcharger.StatusB: - return api.StatusB, nil + return api.StatusConnected, nil case smaevcharger.StatusC: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid state: %.0f", state) + return api.StatusUnknown, fmt.Errorf("invalid state: %.0f", state) } } diff --git a/charger/smartevse.go b/charger/smartevse.go index 7d1c480be1..da04f39dd0 100644 --- a/charger/smartevse.go +++ b/charger/smartevse.go @@ -103,22 +103,22 @@ func NewsmartEVSE(uri, device, comset string, baudrate int, proto modbus.Protoco func (wb *smartEVSE) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(smartEVSERegChargingState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } status := binary.BigEndian.Uint16(b) & 0xff switch status { case 0: - return api.StatusNone, nil + return api.StatusUnknown, nil case 1: - return api.StatusA, nil + return api.StatusDisconnected, nil case 2: - return api.StatusB, nil + return api.StatusConnected, nil case 3: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", status) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", status) } } diff --git a/charger/solax.go b/charger/solax.go index 09dc723760..9b92b03d26 100644 --- a/charger/solax.go +++ b/charger/solax.go @@ -114,24 +114,24 @@ func (wb *Solax) getPhaseValues(reg uint16) (float64, float64, float64, error) { func (wb *Solax) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(solaxRegState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch s := encoding.Uint16(b); s { case 0, // "Available" 5: // "Unavailable" - return api.StatusA, nil + return api.StatusDisconnected, nil case 1, // "Preparing" 8, // "SuspendedEVSE" 7, // "SuspendedEV" 3: // "Finishing" - return api.StatusB, nil + return api.StatusConnected, nil case 2: // "Charging" - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", s) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", s) } } diff --git a/charger/sungrow.go b/charger/sungrow.go index 50fadcb27d..147453812f 100644 --- a/charger/sungrow.go +++ b/charger/sungrow.go @@ -120,22 +120,22 @@ func (wb *Sungrow) getPhaseValues(regs []uint16, divider float64) (float64, floa func (wb *Sungrow) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(sgRegState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch s := binary.BigEndian.Uint16(b); s { case 1: // Idle - return api.StatusA, nil + return api.StatusDisconnected, nil case 2, // Standby 4, // SuspendedEVSE 5, // SuspendedEV 6: // Completed - return api.StatusB, nil + return api.StatusConnected, nil case 3: // Charging - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", s) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", s) } } diff --git a/charger/switchsocket.go b/charger/switchsocket.go index 17107501e2..02e6d884ca 100644 --- a/charger/switchsocket.go +++ b/charger/switchsocket.go @@ -102,16 +102,16 @@ func NewSwitchSocket( // Status calculates a generic switches status func (c *switchSocket) Status() (api.ChargeStatus, error) { if c.lp != nil && c.lp.GetMode() == api.ModeOff { - return api.StatusA, nil + return api.StatusDisconnected, nil } - res := api.StatusB + res := api.StatusConnected // static mode if c.standbypower < 0 { on, err := c.enabled() if on { - res = api.StatusC + res = api.StatusCharging } return res, err @@ -120,7 +120,7 @@ func (c *switchSocket) Status() (api.ChargeStatus, error) { // standby power mode power, err := c.currentPower() if power > c.standbypower { - res = api.StatusC + res = api.StatusCharging } return res, err diff --git a/charger/trydan.go b/charger/trydan.go index 38f7205ac5..cea6824830 100644 --- a/charger/trydan.go +++ b/charger/trydan.go @@ -97,17 +97,17 @@ func NewTrydan(uri string, cache time.Duration) (api.Charger, error) { func (t Trydan) Status() (api.ChargeStatus, error) { data, err := t.statusG.Get() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch state := data.ChargeState; state { case 0: - return api.StatusA, nil + return api.StatusDisconnected, nil case 1: - return api.StatusB, nil + return api.StatusConnected, nil case 2: - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, fmt.Errorf("unknown status: %d", state) + return api.StatusUnknown, fmt.Errorf("unknown status: %d", state) } } diff --git a/charger/twc3.go b/charger/twc3.go index 9c34a4cf5a..d9a0938848 100644 --- a/charger/twc3.go +++ b/charger/twc3.go @@ -84,14 +84,14 @@ func NewTwc3FromConfig(other map[string]interface{}) (api.Charger, error) { // Status implements the api.Charger interface func (v *Twc3) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.vitalsG() switch { case res.ContactorClosed: - status = api.StatusC + status = api.StatusCharging case res.VehicleConnected: - status = api.StatusB + status = api.StatusConnected } return status, err @@ -114,7 +114,7 @@ func (c *Twc3) Enable(enable bool) error { if err != nil { return err } - if status == api.StatusA && !enable { + if status == api.StatusDisconnected && !enable { c.enabled = false return nil } diff --git a/charger/versicharge.go b/charger/versicharge.go index 8251d4357a..8f5d05e36d 100644 --- a/charger/versicharge.go +++ b/charger/versicharge.go @@ -96,7 +96,7 @@ func NewVersicharge(uri string, id uint8) (*Versicharge, error) { func (wb *Versicharge) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(versiRegChargeStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(string(b)) diff --git a/charger/vestel.go b/charger/vestel.go index e38824efe3..df21421515 100644 --- a/charger/vestel.go +++ b/charger/vestel.go @@ -130,15 +130,15 @@ func (wb *Vestel) heartbeat(ctx context.Context, timeout time.Duration) { // Status implements the api.Charger interface func (wb *Vestel) Status() (api.ChargeStatus, error) { - res := api.StatusA + res := api.StatusDisconnected b, err := wb.conn.ReadInputRegisters(vestelRegCableStatus, 1) if err == nil && binary.BigEndian.Uint16(b) >= 2 { - res = api.StatusB + res = api.StatusConnected b, err = wb.conn.ReadInputRegisters(vestelRegChargeStatus, 1) if err == nil && binary.BigEndian.Uint16(b) == 1 { - res = api.StatusC + res = api.StatusCharging } } diff --git a/charger/victron.go b/charger/victron.go index 2c4ca75d71..88e5afac28 100644 --- a/charger/victron.go +++ b/charger/victron.go @@ -125,7 +125,7 @@ func NewVictron(uri string, slaveID uint8, regs victronRegs) (api.Charger, error func (wb *Victron) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(wb.regs.Status, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } u := binary.BigEndian.Uint16(b) @@ -133,9 +133,9 @@ func (wb *Victron) Status() (api.ChargeStatus, error) { case 0, 1, 2, 3: return api.ChargeStatusString(string('A' + rune(binary.BigEndian.Uint16(b)))) case 5, 6, 21: - return api.StatusB, nil + return api.StatusConnected, nil default: - return api.StatusNone, fmt.Errorf("invalid status: %d", u) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", u) } } diff --git a/charger/wallbe.go b/charger/wallbe.go index 7923f380cf..c40d024b27 100644 --- a/charger/wallbe.go +++ b/charger/wallbe.go @@ -112,7 +112,7 @@ func NewWallbe(uri string) (*Wallbe, error) { func (wb *Wallbe) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadInputRegisters(wbRegStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(string(b[1])) diff --git a/charger/warp2.go b/charger/warp2.go index a477a3ab99..9c2f181815 100644 --- a/charger/warp2.go +++ b/charger/warp2.go @@ -200,7 +200,7 @@ func (wb *Warp2) Enabled() (bool, error) { // Status implements the api.Charger interface func (wb *Warp2) Status() (api.ChargeStatus, error) { - res := api.StatusNone + res := api.StatusUnknown var status warp.EvseState err := wb.statusG(&status) @@ -210,11 +210,11 @@ func (wb *Warp2) Status() (api.ChargeStatus, error) { switch status.Iec61851State { case 0: - res = api.StatusA + res = api.StatusDisconnected case 1: - res = api.StatusB + res = api.StatusConnected case 2: - res = api.StatusC + res = api.StatusCharging default: err = fmt.Errorf("invalid status: %d", status.Iec61851State) } diff --git a/charger/webasto-next.go b/charger/webasto-next.go index deb7c08850..5e155f0516 100644 --- a/charger/webasto-next.go +++ b/charger/webasto-next.go @@ -123,22 +123,22 @@ func (wb *WebastoNext) heartbeat(ctx context.Context, timeout time.Duration) { func (wb *WebastoNext) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(tqRegChargePointState, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } sb := binary.BigEndian.Uint16(b) switch sb { case 0: - return api.StatusA, nil + return api.StatusDisconnected, nil case 1, 4: - return api.StatusB, nil + return api.StatusConnected, nil case 3: - return api.StatusC, nil + return api.StatusCharging, nil case 7: - return api.StatusNone, fmt.Errorf("charging error: status %d", sb) + return api.StatusUnknown, fmt.Errorf("charging error: status %d", sb) default: - return api.StatusNone, fmt.Errorf("invalid status: %d", sb) + return api.StatusUnknown, fmt.Errorf("invalid status: %d", sb) } } diff --git "a/charger/weidm\303\274ller.go" "b/charger/weidm\303\274ller.go" index efebcd1171..40372e29db 100644 --- "a/charger/weidm\303\274ller.go" +++ "b/charger/weidm\303\274ller.go" @@ -133,14 +133,14 @@ func (wb *Weidmüller) getPhaseValues(reg uint16) (float64, float64, float64, er func (wb *Weidmüller) Status() (api.ChargeStatus, error) { b, err := wb.conn.ReadHoldingRegisters(wmRegCarStatus, 1) if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } switch s := string(b[1]); s { case "A", "B", "C": return api.ChargeStatus(s), nil default: - return api.StatusNone, fmt.Errorf("invalid status: %s", s) + return api.StatusUnknown, fmt.Errorf("invalid status: %s", s) } } diff --git a/charger/zaptec.go b/charger/zaptec.go index fddcf0b4f6..da0af551c1 100644 --- a/charger/zaptec.go +++ b/charger/zaptec.go @@ -152,21 +152,21 @@ func (c *Zaptec) chargers() ([]string, error) { func (c *Zaptec) Status() (api.ChargeStatus, error) { res, err := c.statusG.Get() if err != nil { - return api.StatusA, err + return api.StatusDisconnected, err } switch i, err := res.ObservationByID(zaptec.ChargerOperationMode).Int(); i { case zaptec.OpModeDisconnected: - return api.StatusA, err + return api.StatusDisconnected, err case zaptec.OpModeConnectedRequesting, zaptec.OpModeConnectedFinished: - return api.StatusB, err + return api.StatusConnected, err case zaptec.OpModeConnectedCharging: - return api.StatusC, err + return api.StatusCharging, err default: if err == nil { err = fmt.Errorf("unknown status: %d", i) } - return api.StatusNone, err + return api.StatusUnknown, err } } diff --git a/core/coordinator/coordinator.go b/core/coordinator/coordinator.go index 6793c3b56a..28a7046696 100644 --- a/core/coordinator/coordinator.go +++ b/core/coordinator/coordinator.go @@ -147,7 +147,7 @@ func (c *Coordinator) identifyVehicleByStatus(available []api.Vehicle) api.Vehic c.log.DEBUG.Printf("vehicle status: %s (%s)", status, vehicle.Title()) // vehicle is plugged or charging, so it should be the right one - if status == api.StatusB || status == api.StatusC { + if status == api.StatusConnected || status == api.StatusCharging { if res != nil { c.log.WARN.Println("vehicle status: >1 matches, giving up") return nil diff --git a/core/coordinator/coordinator_test.go b/core/coordinator/coordinator_test.go index 5af8eec15f..d98b7de192 100644 --- a/core/coordinator/coordinator_test.go +++ b/core/coordinator/coordinator_test.go @@ -26,12 +26,12 @@ func TestVehicleDetectByStatus(t *testing.T) { res api.Vehicle } tc := []testcase{ - {"A/A->0", api.StatusA, api.StatusA, nil}, - {"B/A->1", api.StatusB, api.StatusA, v1}, - {"B/A->1", api.StatusB, api.StatusA, v1}, - {"A/B->2", api.StatusA, api.StatusB, v2}, - {"A/B->2", api.StatusA, api.StatusB, v2}, - {"B/B->1", api.StatusB, api.StatusB, nil}, + {"A/A->0", api.StatusDisconnected, api.StatusDisconnected, nil}, + {"B/A->1", api.StatusConnected, api.StatusDisconnected, v1}, + {"B/A->1", api.StatusConnected, api.StatusDisconnected, v1}, + {"A/B->2", api.StatusDisconnected, api.StatusConnected, v2}, + {"A/B->2", api.StatusDisconnected, api.StatusConnected, v2}, + {"B/B->1", api.StatusConnected, api.StatusConnected, nil}, } log := util.NewLogger("foo") diff --git a/core/loadpoint.go b/core/loadpoint.go index 906a4c39bf..27aef9a859 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -298,7 +298,7 @@ func NewLoadpoint(log *util.Logger, settings *Settings) *Loadpoint { clock: clock, // mockable time bus: bus, // event bus mode: api.ModeOff, - status: api.StatusNone, + status: api.StatusUnknown, minCurrent: 6, // A maxCurrent: 16, // A Soc: SocConfig{ @@ -921,12 +921,12 @@ func (lp *Loadpoint) setLimit(chargeCurrent float64) error { // connected returns the EVs connection state func (lp *Loadpoint) connected() bool { status := lp.GetStatus() - return status == api.StatusB || status == api.StatusC + return status == api.StatusConnected || status == api.StatusCharging } // charging returns the EVs charging state func (lp *Loadpoint) charging() bool { - return lp.GetStatus() == api.StatusC + return lp.GetStatus() == api.StatusCharging } // setStatus updates the internal charging state according to EV @@ -1023,22 +1023,22 @@ func statusEvents(prevStatus, status api.ChargeStatus) []string { res := make([]string, 0, 2) // changed from A - connected - if prevStatus == api.StatusA || (status != api.StatusA && prevStatus == api.StatusNone) { + if prevStatus == api.StatusDisconnected || (status != api.StatusDisconnected && prevStatus == api.StatusUnknown) { res = append(res, evVehicleConnect) } // changed to C - start charging - if status == api.StatusC { + if status == api.StatusCharging { res = append(res, evChargeStart) } // changed from C - stop charging - if prevStatus == api.StatusC { + if prevStatus == api.StatusCharging { res = append(res, evChargeStop) } // changed to A - disconnected - if status == api.StatusA { + if status == api.StatusDisconnected { res = append(res, evVehicleDisconnect) } @@ -1063,7 +1063,7 @@ func (lp *Loadpoint) updateChargerStatus() (bool, error) { lp.bus.Publish(ev) // send connect/disconnect events except during startup - if prevStatus != api.StatusNone { + if prevStatus != api.StatusUnknown { switch ev { case evVehicleConnect: welcomeCharge = lp.chargerHasFeature(api.WelcomeCharge) @@ -1767,7 +1767,7 @@ func (lp *Loadpoint) Update(sitePower, batteryBoostPower float64, rates api.Rate lp.publish(keys.Connected, lp.connected()) lp.publish(keys.Charging, lp.charging()) - if sr, ok := lp.charger.(api.StatusReasoner); ok && lp.GetStatus() == api.StatusB { + if sr, ok := lp.charger.(api.StatusReasoner); ok && lp.GetStatus() == api.StatusConnected { if r, err := sr.StatusReason(); err == nil { lp.publish(keys.ChargerStatusReason, r) } else { @@ -1874,7 +1874,7 @@ func (lp *Loadpoint) Update(sitePower, batteryBoostPower float64, rates api.Rate } // Wake-up checks - if lp.enabled && lp.status == api.StatusB && + if lp.enabled && lp.status == api.StatusConnected && // TODO take vehicle api limits into account int(lp.vehicleSoc) < lp.effectiveLimitSoc() && lp.wakeUpTimer.Expired() { lp.wakeUpVehicle() diff --git a/core/loadpoint_phases_test.go b/core/loadpoint_phases_test.go index 2faca534a9..7a94f2f504 100644 --- a/core/loadpoint_phases_test.go +++ b/core/loadpoint_phases_test.go @@ -232,7 +232,7 @@ func TestPvScalePhases(t *testing.T) { vehicle: vehicle, configuredPhases: 0, // allow switching phases: tc.physical, - status: api.StatusC, + status: api.StatusCharging, } if phaseCharger != nil { @@ -371,11 +371,11 @@ func TestPvScalePhasesTimer(t *testing.T) { // switch down from 3p/0p while not yet charging {"3/0->1, not enough power, not charging", 3, 0, 0, 1, 1, func(lp *Loadpoint) { - lp.status = api.StatusB + lp.status = api.StatusConnected }}, // switch up from 1p/0p while not yet charging {"1/0->3, enough power, not charging", 1, 0, -3 * Voltage * minA, 3, 3, func(lp *Loadpoint) { - lp.status = api.StatusB + lp.status = api.StatusConnected }}, // error states from 1p/3p misconfiguration - no correction for time being (stay at 1p) @@ -404,7 +404,7 @@ func TestPvScalePhasesTimer(t *testing.T) { maxCurrent: maxA, phases: tc.phases, measuredPhases: tc.measuredPhases, - status: api.StatusC, + status: api.StatusCharging, Enable: ThresholdConfig{ Delay: dt, }, diff --git a/core/loadpoint_status_test.go b/core/loadpoint_status_test.go index 55e7980e18..d039d38f3f 100644 --- a/core/loadpoint_status_test.go +++ b/core/loadpoint_status_test.go @@ -12,18 +12,18 @@ func TestStatusEvents(t *testing.T) { from, to api.ChargeStatus events []string }{ - {api.StatusNone, api.StatusA, []string{evVehicleDisconnect}}, - {api.StatusNone, api.StatusB, []string{evVehicleConnect}}, - {api.StatusNone, api.StatusC, []string{evVehicleConnect, evChargeStart}}, + {api.StatusUnknown, api.StatusDisconnected, []string{evVehicleDisconnect}}, + {api.StatusUnknown, api.StatusConnected, []string{evVehicleConnect}}, + {api.StatusUnknown, api.StatusCharging, []string{evVehicleConnect, evChargeStart}}, - {api.StatusA, api.StatusB, []string{evVehicleConnect}}, - {api.StatusA, api.StatusC, []string{evVehicleConnect, evChargeStart}}, + {api.StatusDisconnected, api.StatusConnected, []string{evVehicleConnect}}, + {api.StatusDisconnected, api.StatusCharging, []string{evVehicleConnect, evChargeStart}}, - {api.StatusB, api.StatusA, []string{evVehicleDisconnect}}, - {api.StatusB, api.StatusC, []string{evChargeStart}}, + {api.StatusConnected, api.StatusDisconnected, []string{evVehicleDisconnect}}, + {api.StatusConnected, api.StatusCharging, []string{evChargeStart}}, - {api.StatusC, api.StatusA, []string{evChargeStop, evVehicleDisconnect}}, - {api.StatusC, api.StatusB, []string{evChargeStop}}, + {api.StatusCharging, api.StatusDisconnected, []string{evChargeStop, evVehicleDisconnect}}, + {api.StatusCharging, api.StatusConnected, []string{evChargeStop}}, } for _, tc := range tc { diff --git a/core/loadpoint_sync_test.go b/core/loadpoint_sync_test.go index 2107c91bee..56bf33c326 100644 --- a/core/loadpoint_sync_test.go +++ b/core/loadpoint_sync_test.go @@ -17,11 +17,11 @@ func TestSyncCharger(t *testing.T) { status api.ChargeStatus expected, actual, corrected bool }{ - {api.StatusA, false, false, false}, - {api.StatusC, false, false, true}, // disabled but charging - {api.StatusA, false, true, true}, - {api.StatusA, true, false, false}, - {api.StatusA, true, true, true}, + {api.StatusDisconnected, false, false, false}, + {api.StatusCharging, false, false, true}, // disabled but charging + {api.StatusDisconnected, false, true, true}, + {api.StatusDisconnected, true, false, false}, + {api.StatusDisconnected, true, true, true}, } ctrl := gomock.NewController(t) @@ -32,7 +32,7 @@ func TestSyncCharger(t *testing.T) { charger := api.NewMockCharger(ctrl) charger.EXPECT().Enabled().Return(tc.actual, nil).AnyTimes() - if tc.status == api.StatusC { + if tc.status == api.StatusCharging { charger.EXPECT().Enable(tc.corrected).Times(1) } @@ -81,7 +81,7 @@ func TestSyncChargerCurrentsByGetter(t *testing.T) { bus: evbus.New(), clock: clock.New(), charger: charger, - status: api.StatusC, + status: api.StatusCharging, enabled: true, phases: 3, chargeCurrent: tc.lpCurrent, @@ -117,7 +117,7 @@ func TestSyncChargerCurrentsByMeasurement(t *testing.T) { bus: evbus.New(), clock: clock.New(), charger: charger, - status: api.StatusC, + status: api.StatusCharging, enabled: true, phases: 3, chargeCurrent: tc.lpCurrent, @@ -166,7 +166,7 @@ func TestSyncChargerPhasesByGetter(t *testing.T) { bus: evbus.New(), clock: clock.New(), charger: charger, - status: api.StatusC, + status: api.StatusCharging, enabled: true, phases: tc.lpPhases, measuredPhases: tc.actualPhases, @@ -212,7 +212,7 @@ func TestSyncChargerPhasesByMeasurement(t *testing.T) { bus: evbus.New(), clock: clock.New(), charger: charger, - status: api.StatusC, + status: api.StatusCharging, enabled: true, phases: tc.lpPhases, measuredPhases: tc.actualPhases, diff --git a/core/loadpoint_test.go b/core/loadpoint_test.go index 4adfbb80e1..fddfe96057 100644 --- a/core/loadpoint_test.go +++ b/core/loadpoint_test.go @@ -92,7 +92,7 @@ func TestNew(t *testing.T) { if lp.maxCurrent != maxA { t.Errorf("MaxCurrent %v", lp.maxCurrent) } - if lp.status != api.StatusNone { + if lp.status != api.StatusUnknown { t.Errorf("status %v", lp.status) } if lp.charging() { @@ -106,44 +106,44 @@ func TestUpdatePowerZero(t *testing.T) { mode api.ChargeMode expect func(h *api.MockCharger) }{ - {api.StatusA, api.ModeOff, func(h *api.MockCharger) { + {api.StatusDisconnected, api.ModeOff, func(h *api.MockCharger) { h.EXPECT().Enable(false) }}, - {api.StatusA, api.ModeNow, func(h *api.MockCharger) { + {api.StatusDisconnected, api.ModeNow, func(h *api.MockCharger) { h.EXPECT().Enable(false) }}, - {api.StatusA, api.ModeMinPV, func(h *api.MockCharger) { + {api.StatusDisconnected, api.ModeMinPV, func(h *api.MockCharger) { h.EXPECT().Enable(false) }}, - {api.StatusA, api.ModePV, func(h *api.MockCharger) { + {api.StatusDisconnected, api.ModePV, func(h *api.MockCharger) { h.EXPECT().Enable(false) // zero since update called with 0 }}, - {api.StatusB, api.ModeOff, func(h *api.MockCharger) { + {api.StatusConnected, api.ModeOff, func(h *api.MockCharger) { h.EXPECT().Enable(false) }}, - {api.StatusB, api.ModeNow, func(h *api.MockCharger) { + {api.StatusConnected, api.ModeNow, func(h *api.MockCharger) { h.EXPECT().MaxCurrent(int64(maxA)) // true }}, - {api.StatusB, api.ModeMinPV, func(h *api.MockCharger) { + {api.StatusConnected, api.ModeMinPV, func(h *api.MockCharger) { // MaxCurrent omitted since identical value }}, - {api.StatusB, api.ModePV, func(h *api.MockCharger) { + {api.StatusConnected, api.ModePV, func(h *api.MockCharger) { // zero since update called with 0 // force = false due to pv mode climater check h.EXPECT().Enable(false) }}, - {api.StatusC, api.ModeOff, func(h *api.MockCharger) { + {api.StatusCharging, api.ModeOff, func(h *api.MockCharger) { h.EXPECT().Enable(false) }}, - {api.StatusC, api.ModeNow, func(h *api.MockCharger) { + {api.StatusCharging, api.ModeNow, func(h *api.MockCharger) { h.EXPECT().MaxCurrent(int64(maxA)) // true }}, - {api.StatusC, api.ModeMinPV, func(h *api.MockCharger) { + {api.StatusCharging, api.ModeMinPV, func(h *api.MockCharger) { // MaxCurrent omitted since identical value }}, - {api.StatusC, api.ModePV, func(h *api.MockCharger) { + {api.StatusCharging, api.ModePV, func(h *api.MockCharger) { // omitted since PV balanced }}, } @@ -299,7 +299,7 @@ func TestPVHysteresis(t *testing.T) { }}, } - for _, status := range []api.ChargeStatus{api.StatusB, api.StatusC} { + for _, status := range []api.ChargeStatus{api.StatusConnected, api.StatusCharging} { for _, tc := range tc { t.Log(tc) @@ -367,7 +367,7 @@ func TestPVHysteresisForStatusOtherThanC(t *testing.T) { } // not connected, test PV mode logic short-circuited - lp.status = api.StatusA + lp.status = api.StatusDisconnected // maxCurrent will read enabled state in PV mode sitePower := -float64(phases)*minA*Voltage + 1 // 1W below min power @@ -421,11 +421,11 @@ func TestDisableAndEnableAtTargetSoc(t *testing.T) { lp.enabled = true lp.chargeCurrent = minA - lp.status = api.StatusC + lp.status = api.StatusCharging t.Log("charging below soc target") vehicle.EXPECT().Soc().Return(85.0, nil) - charger.EXPECT().Status().Return(api.StatusC, nil) + charger.EXPECT().Status().Return(api.StatusCharging, nil) charger.EXPECT().Enabled().Return(lp.enabled, nil) charger.EXPECT().MaxCurrent(int64(maxA)).Return(nil) lp.Update(500, 0, nil, false, false, 0, nil, nil) @@ -434,7 +434,7 @@ func TestDisableAndEnableAtTargetSoc(t *testing.T) { t.Log("charging above target - soc deactivates charger") clock.Add(5 * time.Minute) vehicle.EXPECT().Soc().Return(90.0, nil) - charger.EXPECT().Status().Return(api.StatusC, nil) + charger.EXPECT().Status().Return(api.StatusCharging, nil) charger.EXPECT().Enabled().Return(lp.enabled, nil) charger.EXPECT().Enable(false).Return(nil) lp.Update(500, 0, nil, false, false, 0, nil, nil) @@ -443,14 +443,14 @@ func TestDisableAndEnableAtTargetSoc(t *testing.T) { t.Log("deactivated charger changes status to B") clock.Add(5 * time.Minute) vehicle.EXPECT().Soc().Return(95.0, nil) - charger.EXPECT().Status().Return(api.StatusB, nil) + charger.EXPECT().Status().Return(api.StatusConnected, nil) charger.EXPECT().Enabled().Return(lp.enabled, nil) lp.Update(-500, 0, nil, false, false, 0, nil, nil) ctrl.Finish() t.Log("soc has risen below target - soc update prevented by timer") clock.Add(5 * time.Minute) - charger.EXPECT().Status().Return(api.StatusB, nil) + charger.EXPECT().Status().Return(api.StatusConnected, nil) charger.EXPECT().Enabled().Return(lp.enabled, nil) lp.Update(-500, 0, nil, false, false, 0, nil, nil) ctrl.Finish() @@ -458,7 +458,7 @@ func TestDisableAndEnableAtTargetSoc(t *testing.T) { t.Log("soc has fallen below target - soc update timer expired") clock.Add(pollInterval) vehicle.EXPECT().Soc().Return(85.0, nil) - charger.EXPECT().Status().Return(api.StatusB, nil) + charger.EXPECT().Status().Return(api.StatusConnected, nil) charger.EXPECT().Enabled().Return(lp.enabled, nil) charger.EXPECT().MaxCurrent(int64(maxA)).Return(nil) charger.EXPECT().Enable(true).Return(nil) @@ -483,7 +483,7 @@ func TestSetModeAndSocAtDisconnect(t *testing.T) { sessionEnergy: NewEnergyMetrics(), minCurrent: minA, maxCurrent: maxA, - status: api.StatusC, + status: api.StatusCharging, Mode_: api.ModeOff, // default mode } @@ -495,14 +495,14 @@ func TestSetModeAndSocAtDisconnect(t *testing.T) { t.Log("charging at min") charger.EXPECT().Enabled().Return(lp.enabled, nil) - charger.EXPECT().Status().Return(api.StatusC, nil) + charger.EXPECT().Status().Return(api.StatusCharging, nil) charger.EXPECT().MaxCurrent(int64(maxA)).Return(nil) lp.Update(500, 0, nil, false, false, 0, nil, nil) t.Log("switch off when disconnected") clock.Add(5 * time.Minute) charger.EXPECT().Enabled().Return(lp.enabled, nil) - charger.EXPECT().Status().Return(api.StatusA, nil) + charger.EXPECT().Status().Return(api.StatusDisconnected, nil) charger.EXPECT().Enable(false).Return(nil) lp.Update(-300, 0, nil, false, false, 0, nil, nil) @@ -551,7 +551,7 @@ func TestChargedEnergyAtDisconnect(t *testing.T) { sessionEnergy: NewEnergyMetrics(), minCurrent: minA, maxCurrent: maxA, - status: api.StatusC, + status: api.StatusCharging, } attachListeners(t, lp) @@ -566,14 +566,14 @@ func TestChargedEnergyAtDisconnect(t *testing.T) { t.Log("start charging at 0 kWh") rater.EXPECT().ChargedEnergy().Return(0.0, nil) charger.EXPECT().Enabled().Return(lp.enabled, nil) - charger.EXPECT().Status().Return(api.StatusC, nil) + charger.EXPECT().Status().Return(api.StatusCharging, nil) lp.Update(-1, 0, nil, false, false, 0, nil, nil) t.Log("at 1:00h charging at 5 kWh") clock.Add(time.Hour) rater.EXPECT().ChargedEnergy().Return(5.0, nil) charger.EXPECT().Enabled().Return(lp.enabled, nil) - charger.EXPECT().Status().Return(api.StatusC, nil) + charger.EXPECT().Status().Return(api.StatusCharging, nil) lp.Update(-1, 0, nil, false, false, 0, nil, nil) expectCache("chargedEnergy", 5000.0) @@ -581,7 +581,7 @@ func TestChargedEnergyAtDisconnect(t *testing.T) { clock.Add(time.Second) rater.EXPECT().ChargedEnergy().Return(5.0, nil) charger.EXPECT().Enabled().Return(lp.enabled, nil) - charger.EXPECT().Status().Return(api.StatusB, nil) + charger.EXPECT().Status().Return(api.StatusConnected, nil) lp.Update(-1, 0, nil, false, false, 0, nil, nil) expectCache("chargedEnergy", 5000.0) @@ -589,7 +589,7 @@ func TestChargedEnergyAtDisconnect(t *testing.T) { clock.Add(time.Second) rater.EXPECT().ChargedEnergy().Return(5.0, nil) charger.EXPECT().Enabled().Return(lp.enabled, nil) - charger.EXPECT().Status().Return(api.StatusC, nil) + charger.EXPECT().Status().Return(api.StatusCharging, nil) lp.Update(-1, 0, nil, false, false, 0, nil, nil) expectCache("chargedEnergy", 5000.0) @@ -597,7 +597,7 @@ func TestChargedEnergyAtDisconnect(t *testing.T) { clock.Add(30 * time.Minute) rater.EXPECT().ChargedEnergy().Return(7.5, nil) charger.EXPECT().Enabled().Return(lp.enabled, nil) - charger.EXPECT().Status().Return(api.StatusC, nil) + charger.EXPECT().Status().Return(api.StatusCharging, nil) lp.Update(-1, 0, nil, false, false, 0, nil, nil) expectCache("chargedEnergy", 7500.0) @@ -605,7 +605,7 @@ func TestChargedEnergyAtDisconnect(t *testing.T) { clock.Add(30 * time.Minute) rater.EXPECT().ChargedEnergy().Return(10.0, nil) charger.EXPECT().Enabled().Return(lp.enabled, nil) - charger.EXPECT().Status().Return(api.StatusB, nil) + charger.EXPECT().Status().Return(api.StatusConnected, nil) lp.Update(-1, 0, nil, false, false, 0, nil, nil) expectCache("chargedEnergy", 10000.0) @@ -634,45 +634,45 @@ func TestSocPoll(t *testing.T) { res bool }{ // pollCharging - {pollCharging, api.StatusA, -1, false}, - {pollCharging, api.StatusA, 0, false}, - {pollCharging, api.StatusA, tRefresh, false}, - {pollCharging, api.StatusB, -1, true}, // poll once when car connected - {pollCharging, api.StatusB, 0, false}, - {pollCharging, api.StatusB, tRefresh, false}, - {pollCharging, api.StatusC, -1, true}, - {pollCharging, api.StatusC, 0, true}, - {pollCharging, api.StatusC, tNoRefresh, true}, // cached by vehicle - {pollCharging, api.StatusB, -1, true}, // fetch if car stopped charging - {pollCharging, api.StatusB, 0, false}, // no more polling - {pollCharging, api.StatusB, tRefresh, false}, // no more polling + {pollCharging, api.StatusDisconnected, -1, false}, + {pollCharging, api.StatusDisconnected, 0, false}, + {pollCharging, api.StatusDisconnected, tRefresh, false}, + {pollCharging, api.StatusConnected, -1, true}, // poll once when car connected + {pollCharging, api.StatusConnected, 0, false}, + {pollCharging, api.StatusConnected, tRefresh, false}, + {pollCharging, api.StatusCharging, -1, true}, + {pollCharging, api.StatusCharging, 0, true}, + {pollCharging, api.StatusCharging, tNoRefresh, true}, // cached by vehicle + {pollCharging, api.StatusConnected, -1, true}, // fetch if car stopped charging + {pollCharging, api.StatusConnected, 0, false}, // no more polling + {pollCharging, api.StatusConnected, tRefresh, false}, // no more polling // pollConnected - {pollConnected, api.StatusA, -1, false}, - {pollConnected, api.StatusA, 0, false}, - {pollConnected, api.StatusA, tRefresh, false}, - {pollConnected, api.StatusB, -1, true}, - {pollConnected, api.StatusB, 0, false}, - {pollConnected, api.StatusB, tNoRefresh, false}, - {pollConnected, api.StatusB, tRefresh, true}, - {pollConnected, api.StatusC, -1, true}, - {pollConnected, api.StatusC, 0, true}, - {pollConnected, api.StatusC, tNoRefresh, true}, // cached by vehicle - {pollConnected, api.StatusC, tRefresh, true}, + {pollConnected, api.StatusDisconnected, -1, false}, + {pollConnected, api.StatusDisconnected, 0, false}, + {pollConnected, api.StatusDisconnected, tRefresh, false}, + {pollConnected, api.StatusConnected, -1, true}, + {pollConnected, api.StatusConnected, 0, false}, + {pollConnected, api.StatusConnected, tNoRefresh, false}, + {pollConnected, api.StatusConnected, tRefresh, true}, + {pollConnected, api.StatusCharging, -1, true}, + {pollConnected, api.StatusCharging, 0, true}, + {pollConnected, api.StatusCharging, tNoRefresh, true}, // cached by vehicle + {pollConnected, api.StatusCharging, tRefresh, true}, // pollAlways - {pollAlways, api.StatusA, -1, true}, - {pollAlways, api.StatusA, 0, false}, - {pollAlways, api.StatusA, tNoRefresh, false}, - {pollAlways, api.StatusA, tRefresh, true}, - {pollAlways, api.StatusB, -1, true}, - {pollAlways, api.StatusB, 0, false}, - {pollAlways, api.StatusB, tNoRefresh, false}, - {pollAlways, api.StatusB, tRefresh, true}, - {pollAlways, api.StatusC, -1, true}, - {pollAlways, api.StatusC, 0, true}, - {pollAlways, api.StatusC, tNoRefresh, true}, // cached by vehicle - {pollAlways, api.StatusC, tRefresh, true}, + {pollAlways, api.StatusDisconnected, -1, true}, + {pollAlways, api.StatusDisconnected, 0, false}, + {pollAlways, api.StatusDisconnected, tNoRefresh, false}, + {pollAlways, api.StatusDisconnected, tRefresh, true}, + {pollAlways, api.StatusConnected, -1, true}, + {pollAlways, api.StatusConnected, 0, false}, + {pollAlways, api.StatusConnected, tNoRefresh, false}, + {pollAlways, api.StatusConnected, tRefresh, true}, + {pollAlways, api.StatusCharging, -1, true}, + {pollAlways, api.StatusCharging, 0, true}, + {pollAlways, api.StatusCharging, tNoRefresh, true}, // cached by vehicle + {pollAlways, api.StatusCharging, tRefresh, true}, } for _, tc := range tc { @@ -750,7 +750,7 @@ func TestPVHysteresisAfterPhaseSwitch(t *testing.T) { Disable: ThresholdConfig{ Delay: dt, }, - status: api.StatusC, + status: api.StatusCharging, enabled: true, } diff --git a/core/loadpoint_vehicle_test.go b/core/loadpoint_vehicle_test.go index d60cf8da7c..19cffce85e 100644 --- a/core/loadpoint_vehicle_test.go +++ b/core/loadpoint_vehicle_test.go @@ -63,8 +63,8 @@ func TestPublishSocAndRange(t *testing.T) { status api.ChargeStatus allowed bool }{ - {api.StatusB, false}, - {api.StatusC, true}, + {api.StatusConnected, false}, + {api.StatusCharging, true}, } for _, tc := range tc { @@ -240,7 +240,7 @@ func TestReconnectVehicle(t *testing.T) { vehicle.MockVehicle.EXPECT().Soc().Return(0.0, nil).AnyTimes() charger := api.NewMockCharger(ctrl) - charger.EXPECT().Status().Return(api.StatusB, nil).AnyTimes() + charger.EXPECT().Status().Return(api.StatusConnected, nil).AnyTimes() lp := &Loadpoint{ log: util.NewLogger("foo"), @@ -268,7 +268,7 @@ func TestReconnectVehicle(t *testing.T) { charger.EXPECT().Enabled().Return(true, nil) // vehicle not updated yet - vehicle.MockChargeState.EXPECT().Status().Return(api.StatusA, nil) + vehicle.MockChargeState.EXPECT().Status().Return(api.StatusDisconnected, nil) lp.Update(0, 0, nil, false, false, 0, nil, nil) ctrl.Finish() @@ -282,7 +282,7 @@ func TestReconnectVehicle(t *testing.T) { // sync charger charger.EXPECT().Enabled().Return(true, nil) // vehicle not updated yet - vehicle.MockChargeState.EXPECT().Status().Return(api.StatusB, nil) + vehicle.MockChargeState.EXPECT().Status().Return(api.StatusConnected, nil) lp.Update(0, 0, nil, false, false, 0, nil, nil) ctrl.Finish() diff --git a/core/site_battery.go b/core/site_battery.go index 8b4895e2e3..71ccf27d53 100644 --- a/core/site_battery.go +++ b/core/site_battery.go @@ -103,7 +103,7 @@ func (site *Site) dischargeControlActive(rate api.Rate) bool { for _, lp := range site.Loadpoints() { smartCostActive := site.smartCostActive(lp, rate) - if lp.GetStatus() == api.StatusC && (smartCostActive || lp.IsFastChargingActive()) { + if lp.GetStatus() == api.StatusCharging && (smartCostActive || lp.IsFastChargingActive()) { return true } } diff --git a/hems/semp/semp.go b/hems/semp/semp.go index 5445a6059d..541fb2f736 100644 --- a/hems/semp/semp.go +++ b/hems/semp/semp.go @@ -410,11 +410,11 @@ func (s *SEMP) deviceStatus(id int, lp loadpoint.API) DeviceStatus { isPV := mode == api.ModeMinPV || mode == api.ModePV deviceStatus := StatusOff - if status == api.StatusC { + if status == api.StatusCharging { deviceStatus = StatusOn } - connected := status == api.StatusB || status == api.StatusC + connected := status == api.StatusConnected || status == api.StatusCharging res := DeviceStatus{ DeviceID: s.deviceID(id), @@ -439,8 +439,8 @@ func (s *SEMP) allDeviceStatus() (res []DeviceStatus) { func (s *SEMP) planningRequest(id int, lp loadpoint.API) (res PlanningRequest) { mode := lp.GetMode() - charging := lp.GetStatus() == api.StatusC - connected := charging || lp.GetStatus() == api.StatusB + charging := lp.GetStatus() == api.StatusCharging + connected := charging || lp.GetStatus() == api.StatusConnected // remaining max demand duration in seconds chargeRemainingDuration := lp.GetRemainingDuration() diff --git a/provider/combined.go b/provider/combined.go index d9ea83df1c..09d96b9590 100644 --- a/provider/combined.go +++ b/provider/combined.go @@ -61,7 +61,7 @@ func (o *combinedProvider) StringGetter() (func() (string, error), error) { return "", err } if charging { - return string(api.StatusC), nil + return string(api.StatusCharging), nil } plugged, err := o.plugged() @@ -69,9 +69,9 @@ func (o *combinedProvider) StringGetter() (func() (string, error), error) { return "", err } if plugged { - return string(api.StatusB), nil + return string(api.StatusConnected), nil } - return string(api.StatusA), nil + return string(api.StatusDisconnected), nil }, nil } diff --git a/vehicle/aiways/provider.go b/vehicle/aiways/provider.go index d0662df362..5d731cd55f 100644 --- a/vehicle/aiways/provider.go +++ b/vehicle/aiways/provider.go @@ -38,7 +38,7 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusNone // disconnected + status := api.StatusUnknown // disconnected res, err := v.statusG() if err != nil { @@ -47,11 +47,11 @@ func (v *Provider) Status() (api.ChargeStatus, error) { switch res.Data.Vc.ChargeSts { case 3: - status = api.StatusA + status = api.StatusDisconnected case 4: - status = api.StatusB + status = api.StatusConnected case 1: - status = api.StatusC + status = api.StatusCharging default: err = fmt.Errorf("invalid status: %d", res.Data.Vc.ChargeSts) } diff --git a/vehicle/bluelink/provider.go b/vehicle/bluelink/provider.go index bf9344ac02..43aba995e6 100644 --- a/vehicle/bluelink/provider.go +++ b/vehicle/bluelink/provider.go @@ -106,7 +106,7 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.Battery interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusNone + status := api.StatusUnknown res, err := v.statusG() if err != nil { return status, err diff --git a/vehicle/bluelink/types.go b/vehicle/bluelink/types.go index 06ee85d9a9..cd235deb87 100644 --- a/vehicle/bluelink/types.go +++ b/vehicle/bluelink/types.go @@ -115,17 +115,17 @@ func (d VehicleStatus) SoC() (float64, error) { func (d VehicleStatus) Status() (api.ChargeStatus, error) { if d.EvStatus != nil { - status := api.StatusA + status := api.StatusDisconnected if d.EvStatus.BatteryPlugin > 0 || d.EvStatus.ChargePortDoorOpenStatus == 1 { - status = api.StatusB + status = api.StatusConnected } if d.EvStatus.BatteryCharge { - status = api.StatusC + status = api.StatusCharging } return status, nil } - return api.StatusNone, api.ErrNotAvailable + return api.StatusUnknown, api.ErrNotAvailable } func (d VehicleStatus) FinishTime() (time.Time, error) { @@ -294,14 +294,14 @@ func (d StatusLatestResponseCCS) SoC() (float64, error) { func (d StatusLatestResponseCCS) Status() (api.ChargeStatus, error) { if d.ResMsg.State.Vehicle.Green != nil { if d.ResMsg.State.Vehicle.Green.ChargingInformation.ConnectorFastening.State == 1 { - return api.StatusB, nil + return api.StatusConnected, nil } if d.ResMsg.State.Vehicle.Green.ChargingInformation.Charging.RemainTime > 0 { - return api.StatusC, nil + return api.StatusCharging, nil } - return api.StatusA, nil + return api.StatusDisconnected, nil } - return api.StatusNone, api.ErrNotAvailable + return api.StatusUnknown, api.ErrNotAvailable } func (d StatusLatestResponseCCS) FinishTime() (time.Time, error) { diff --git a/vehicle/bmw/provider.go b/vehicle/bmw/provider.go index 6978347b2b..89edd0927c 100644 --- a/vehicle/bmw/provider.go +++ b/vehicle/bmw/provider.go @@ -45,15 +45,15 @@ var _ api.ChargeState = (*Provider)(nil) func (v *Provider) Status() (api.ChargeStatus, error) { res, err := v.statusG() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected if res.State.ElectricChargingState.IsChargerConnected { - status = api.StatusB + status = api.StatusConnected } if res.State.ElectricChargingState.ChargingStatus == "CHARGING" { - status = api.StatusC + status = api.StatusCharging } return status, nil diff --git a/vehicle/carwings.go b/vehicle/carwings.go index a088a66fc7..6fdbceb389 100644 --- a/vehicle/carwings.go +++ b/vehicle/carwings.go @@ -187,15 +187,15 @@ var _ api.ChargeState = (*CarWings)(nil) // Status implements the api.ChargeState interface func (v *CarWings) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.statusG() if err == nil { if res.PluginState == carwings.Connected { - status = api.StatusB // connected, not charging + status = api.StatusConnected // connected, not charging } if res.ChargingStatus == carwings.NormalCharging { - status = api.StatusC // charging + status = api.StatusCharging // charging } } diff --git a/vehicle/fiat/provider.go b/vehicle/fiat/provider.go index 3cf85bde48..0a16c8901a 100644 --- a/vehicle/fiat/provider.go +++ b/vehicle/fiat/provider.go @@ -139,19 +139,19 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.statusG() if err == nil { if res.EvInfo == nil { - return api.StatusNone, api.ErrNotAvailable + return api.StatusUnknown, api.ErrNotAvailable } if res.EvInfo.Battery.PlugInStatus { - status = api.StatusB // connected, not charging + status = api.StatusConnected // connected, not charging } if res.EvInfo.Battery.ChargingStatus == "CHARGING" { - status = api.StatusC // charging + status = api.StatusCharging // charging } } diff --git a/vehicle/ford/connect/provider.go b/vehicle/ford/connect/provider.go index 2351ad1dd8..ce34ab0223 100644 --- a/vehicle/ford/connect/provider.go +++ b/vehicle/ford/connect/provider.go @@ -46,7 +46,7 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA + status := api.StatusDisconnected res, err := v.statusG() if err != nil { @@ -54,10 +54,10 @@ func (v *Provider) Status() (api.ChargeStatus, error) { } if res.VehicleStatus.PlugStatus.Value { - status = api.StatusB // plugged + status = api.StatusConnected // plugged if res.VehicleStatus.ChargingStatus.Value == "Charging" { - status = api.StatusC // charging + status = api.StatusCharging // charging } } diff --git a/vehicle/ford/provider.go b/vehicle/ford/provider.go index 7718bf9135..4185c490a0 100644 --- a/vehicle/ford/provider.go +++ b/vehicle/ford/provider.go @@ -56,17 +56,17 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusNone + status := api.StatusUnknown res, err := v.statusG() if err == nil { switch res.Metrics.XevPlugChargerStatus.Value { case "DISCONNECTED": - status = api.StatusA // disconnected + status = api.StatusDisconnected // disconnected case "CONNECTED": - status = api.StatusB // connected, not charging + status = api.StatusConnected // connected, not charging case "CHARGING", "CHARGINGAC": - status = api.StatusC // charging + status = api.StatusCharging // charging default: err = fmt.Errorf("unknown charge status: %s", res.Metrics.XevPlugChargerStatus.Value) } diff --git a/vehicle/jlr/provider.go b/vehicle/jlr/provider.go index 42fb1814dc..9d63eeda7e 100644 --- a/vehicle/jlr/provider.go +++ b/vehicle/jlr/provider.go @@ -59,18 +59,18 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.statusG() if err == nil { if s, err := res.VehicleStatus.EvStatus.StringVal("EV_CHARGING_STATUS"); err == nil { switch s { case "NOTCONNECTED": - status = api.StatusA + status = api.StatusDisconnected case "INITIALIZATION", "PAUSED": - status = api.StatusB + status = api.StatusConnected case "CHARGING": - status = api.StatusC + status = api.StatusCharging } } } diff --git a/vehicle/mercedes/provider.go b/vehicle/mercedes/provider.go index babbb57da2..20b1367249 100644 --- a/vehicle/mercedes/provider.go +++ b/vehicle/mercedes/provider.go @@ -54,7 +54,7 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.dataG() if err == nil { @@ -109,10 +109,10 @@ func MapChargeStatus(lookup int) api.ChargeStatus { switch lookup { case 0, 5, 6, 9, 10, 11: - return api.StatusC + return api.StatusCharging case 1, 2, 4, 7, 8: - return api.StatusB + return api.StatusConnected } - return api.StatusA + return api.StatusDisconnected } diff --git a/vehicle/nissan/provider.go b/vehicle/nissan/provider.go index d17b95ed38..0ddecb1eda 100644 --- a/vehicle/nissan/provider.go +++ b/vehicle/nissan/provider.go @@ -97,15 +97,15 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.statusG() if err == nil { if res.Attributes.PlugStatus > 0 { - status = api.StatusB + status = api.StatusConnected } if res.Attributes.ChargeStatus > 1.0 { - status = api.StatusC + status = api.StatusCharging } } diff --git a/vehicle/niu.go b/vehicle/niu.go index f03c51f7be..4446f247e2 100644 --- a/vehicle/niu.go +++ b/vehicle/niu.go @@ -133,15 +133,15 @@ var _ api.ChargeState = (*Niu)(nil) // Status implements the api.ChargeState interface func (v *Niu) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.apiG() if err == nil { if res.Data.IsConnected { - status = api.StatusB + status = api.StatusConnected } if res.Data.IsCharging > 0 { - status = api.StatusC + status = api.StatusCharging } } diff --git a/vehicle/ovms.go b/vehicle/ovms.go index 9a292e45cc..38f6211b6b 100644 --- a/vehicle/ovms.go +++ b/vehicle/ovms.go @@ -181,15 +181,15 @@ var _ api.ChargeState = (*Ovms)(nil) // Status implements the api.ChargeState interface func (v *Ovms) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.chargeG() if err == nil { if res.ChargePortOpen > 0 { - status = api.StatusB + status = api.StatusConnected } if res.ChargeState == "charging" { - status = api.StatusC + status = api.StatusCharging } } diff --git a/vehicle/polestar/provider.go b/vehicle/polestar/provider.go index 5b71def7bd..12200bae33 100644 --- a/vehicle/polestar/provider.go +++ b/vehicle/polestar/provider.go @@ -43,12 +43,12 @@ var _ api.ChargeState = (*Provider)(nil) func (v *Provider) Status() (api.ChargeStatus, error) { status, err := v.statusG() - res := api.StatusA + res := api.StatusDisconnected if status.ChargerConnectionStatus == "CHARGER_CONNECTION_STATUS_CONNECTED" { - res = api.StatusB + res = api.StatusConnected } if status.ChargingStatus == "CHARGING_STATUS_CHARGING" { - res = api.StatusB + res = api.StatusConnected } return res, err diff --git a/vehicle/porsche/provider.go b/vehicle/porsche/provider.go index 577c5c227a..5c20ad4466 100644 --- a/vehicle/porsche/provider.go +++ b/vehicle/porsche/provider.go @@ -95,29 +95,29 @@ func (v *Provider) Status() (api.ChargeStatus, error) { res2, err := v.emobilityG() if err == nil { if res2.BatteryChargeStatus == nil { - return api.StatusNone, api.ErrNotAvailable + return api.StatusUnknown, api.ErrNotAvailable } switch res2.BatteryChargeStatus.PlugState { case "DISCONNECTED": - return api.StatusA, nil + return api.StatusDisconnected, nil case "CONNECTED": // ignore if the car is connected to a DC charging station if res2.BatteryChargeStatus.ChargingInDCMode { - return api.StatusA, nil + return api.StatusDisconnected, nil } switch res2.BatteryChargeStatus.ChargingState { case "OFF", "COMPLETED": - return api.StatusB, nil + return api.StatusConnected, nil case "ON", "CHARGING": - return api.StatusC, nil + return api.StatusCharging, nil default: - return api.StatusNone, errors.New("emobility - invalid status: " + res2.BatteryChargeStatus.ChargingState) + return api.StatusUnknown, errors.New("emobility - invalid status: " + res2.BatteryChargeStatus.ChargingState) } } } - return api.StatusNone, err + return api.StatusUnknown, err } var _ api.VehicleClimater = (*Provider)(nil) diff --git a/vehicle/psa/provider.go b/vehicle/psa/provider.go index e31f5b86d9..81a58d84f1 100644 --- a/vehicle/psa/provider.go +++ b/vehicle/psa/provider.go @@ -107,13 +107,13 @@ func (v *Provider) Status() (api.ChargeStatus, error) { continue } - status := api.StatusA + status := api.StatusDisconnected if e.Charging.Plugged { - status = api.StatusB + status = api.StatusConnected if strings.ToLower(e.Charging.Status) == "inprogress" { - status = api.StatusC + status = api.StatusCharging } } @@ -123,7 +123,7 @@ func (v *Provider) Status() (api.ChargeStatus, error) { err = api.ErrNotAvailable } - return api.StatusNone, err + return api.StatusUnknown, err } var _ api.VehicleClimater = (*Provider)(nil) diff --git a/vehicle/renault/provider.go b/vehicle/renault/provider.go index d92de41f30..19d4203f93 100644 --- a/vehicle/renault/provider.go +++ b/vehicle/renault/provider.go @@ -70,15 +70,15 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.batteryG() if err == nil { if res.Data.Attributes.PlugStatus == 1 { - status = api.StatusB + status = api.StatusConnected } if res.Data.Attributes.ChargingStatus >= 1.0 { - status = api.StatusC + status = api.StatusCharging } } diff --git a/vehicle/saic/provider.go b/vehicle/saic/provider.go index 1074133e01..fbde88af6d 100644 --- a/vehicle/saic/provider.go +++ b/vehicle/saic/provider.go @@ -67,15 +67,15 @@ var _ api.ChargeState = (*Provider)(nil) func (v *Provider) Status() (api.ChargeStatus, error) { res, err := v.status.Get() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected if res.RvsChargeStatus.ChargingGunState != 0 { if (res.ChrgMgmtData.BmsChrgSts & 0x01) == 0 { - status = api.StatusB + status = api.StatusConnected } else { - status = api.StatusC + status = api.StatusCharging } } diff --git a/vehicle/seat/cupra/provider.go b/vehicle/seat/cupra/provider.go index 9bdf5ea9f8..2141ca7b96 100644 --- a/vehicle/seat/cupra/provider.go +++ b/vehicle/seat/cupra/provider.go @@ -61,15 +61,15 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.statusG() if err == nil { switch strings.ToLower(res.Services.Charging.Status) { case "connected", "readyforcharging": - status = api.StatusB + status = api.StatusConnected case "charging": - status = api.StatusC + status = api.StatusCharging } } diff --git a/vehicle/skoda/myskoda/provider.go b/vehicle/skoda/myskoda/provider.go index f3ad10c755..ec8b2b67cb 100644 --- a/vehicle/skoda/myskoda/provider.go +++ b/vehicle/skoda/myskoda/provider.go @@ -58,19 +58,19 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.climateG() if err == nil { if res.ChargerConnectionState == "CONNECTED" { - status = api.StatusB + status = api.StatusConnected } } resChrg, err := v.chargerG() if err == nil { if resChrg.Status.State == "CHARGING" { - status = api.StatusC + status = api.StatusCharging } } diff --git a/vehicle/skoda/provider.go b/vehicle/skoda/provider.go index 920ac8ac2a..cd94ca429e 100644 --- a/vehicle/skoda/provider.go +++ b/vehicle/skoda/provider.go @@ -53,15 +53,15 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.chargerG() if err == nil { if res.Plug.ConnectionState == "Connected" { - status = api.StatusB + status = api.StatusConnected } if res.Charging.State == "Charging" { - status = api.StatusC + status = api.StatusCharging } } diff --git a/vehicle/smart/hello/provider.go b/vehicle/smart/hello/provider.go index 115aad4fa8..f9ebb21fee 100644 --- a/vehicle/smart/hello/provider.go +++ b/vehicle/smart/hello/provider.go @@ -37,11 +37,11 @@ func (v *Provider) Status() (api.ChargeStatus, error) { res, err := v.statusG() switch res.AdditionalVehicleStatus.ElectricVehicleStatus.ChargerState { case 1, 3: - return api.StatusB, err + return api.StatusConnected, err case 2: - return api.StatusC, err + return api.StatusCharging, err default: - return api.StatusA, err + return api.StatusDisconnected, err } } diff --git a/vehicle/smart/provider.go b/vehicle/smart/provider.go index 20a1e77645..b92cb0df98 100644 --- a/vehicle/smart/provider.go +++ b/vehicle/smart/provider.go @@ -56,12 +56,12 @@ var _ api.ChargeState = (*Provider)(nil) func (v *Provider) Status() (api.ChargeStatus, error) { res, err := v.statusG() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } cs := res.PreCond.Data.ChargingStatus if cs.Status != 0 { - return api.StatusNone, fmt.Errorf("unknown status/value: %d/%d", cs.Status, cs.Value) + return api.StatusUnknown, fmt.Errorf("unknown status/value: %d/%d", cs.Status, cs.Value) } // confirmed status/value/active combinations (https://github.com/evcc-io/evcc/discussions/5596#discussioncomment-4556035) @@ -71,15 +71,15 @@ func (v *Provider) Status() (api.ChargeStatus, error) { switch cs.Value { case 0: if res.PreCond.Data.ChargingActive.Value { - return api.StatusC, nil + return api.StatusCharging, nil } - return api.StatusB, nil + return api.StatusConnected, nil case 1, 2: - return api.StatusB, nil + return api.StatusConnected, nil case 3: - return api.StatusA, nil + return api.StatusDisconnected, nil default: - return api.StatusNone, fmt.Errorf("unknown status/value: %d/%d", cs.Status, cs.Value) + return api.StatusUnknown, fmt.Errorf("unknown status/value: %d/%d", cs.Status, cs.Value) } } diff --git a/vehicle/tesla/provider.go b/vehicle/tesla/provider.go index df4916676d..7c8ed3450f 100644 --- a/vehicle/tesla/provider.go +++ b/vehicle/tesla/provider.go @@ -40,7 +40,7 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.dataG() if err != nil { return status, err @@ -48,9 +48,9 @@ func (v *Provider) Status() (api.ChargeStatus, error) { switch res.Response.ChargeState.ChargingState { case "Stopped", "NoPower", "Complete": - status = api.StatusB + status = api.StatusConnected case "Charging": - status = api.StatusC + status = api.StatusCharging } return status, nil diff --git a/vehicle/tronity.go b/vehicle/tronity.go index 323f4c510d..a7c5e147eb 100644 --- a/vehicle/tronity.go +++ b/vehicle/tronity.go @@ -188,7 +188,7 @@ func (v *Tronity) Soc() (float64, error) { // status implements the api.ChargeState interface func (v *Tronity) status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.bulkG() if err != nil { return status, err @@ -196,9 +196,9 @@ func (v *Tronity) status() (api.ChargeStatus, error) { switch { case res.Charging == "Charging": - status = api.StatusC + status = api.StatusCharging case res.Plugged: - status = api.StatusB + status = api.StatusConnected } return status, nil diff --git a/vehicle/vehicle.go b/vehicle/vehicle.go index 4342fb4517..233380f39a 100644 --- a/vehicle/vehicle.go +++ b/vehicle/vehicle.go @@ -72,7 +72,7 @@ func NewConfigurableFromConfig(ctx context.Context, other map[string]interface{} status = func() (api.ChargeStatus, error) { s, err := get() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } return api.ChargeStatusString(s) } diff --git a/vehicle/volvo.go b/vehicle/volvo.go index fd4b9400d2..016fa3ce61 100644 --- a/vehicle/volvo.go +++ b/vehicle/volvo.go @@ -122,15 +122,15 @@ func (v *Volvo) Status() (api.ChargeStatus, error) { if err == nil { switch res.HvBattery.HvBatteryChargeStatusDerived { case "CableNotPluggedInCar": - return api.StatusA, nil + return api.StatusDisconnected, nil case "CablePluggedInCar", "CablePluggedInCar_FullyCharged", "CablePluggedInCar_ChargingPaused": - return api.StatusB, nil + return api.StatusConnected, nil case "Charging", "CablePluggedInCar_Charging": - return api.StatusC, nil + return api.StatusCharging, nil } } - return api.StatusNone, err + return api.StatusUnknown, err } var _ api.VehicleRange = (*Volvo)(nil) diff --git a/vehicle/volvo/connected/provider.go b/vehicle/volvo/connected/provider.go index 2a2b9d7bbe..074ca683ba 100644 --- a/vehicle/volvo/connected/provider.go +++ b/vehicle/volvo/connected/provider.go @@ -30,7 +30,7 @@ func (v *Provider) Soc() (float64, error) { // Range implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.statusG() if err != nil { @@ -39,13 +39,13 @@ func (v *Provider) Status() (api.ChargeStatus, error) { switch res.Data.ChargingConnectionStatus.Value { case "CONNECTION_STATUS_DISCONNECTED": - status = api.StatusA + status = api.StatusDisconnected case "CONNECTION_STATUS_CONNECTED_AC", "CONNECTION_STATUS_CONNECTED_DC": - status = api.StatusB + status = api.StatusConnected } if res.Data.ChargingSystemStatus.Value == "CHARGING_SYSTEM_CHARGING" { - status = api.StatusC + status = api.StatusCharging } return status, err diff --git a/vehicle/vw/id/provider.go b/vehicle/vw/id/provider.go index cf0156feb4..321f2d5a75 100644 --- a/vehicle/vw/id/provider.go +++ b/vehicle/vw/id/provider.go @@ -55,13 +55,13 @@ func (v *Provider) Status() (api.ChargeStatus, error) { err = errors.New("missing charging status") } - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected if err == nil { if res.Charging.PlugStatus.Value.PlugConnectionState == "connected" { - status = api.StatusB + status = api.StatusConnected } if res.Charging.ChargingStatus.Value.ChargingState == "charging" { - status = api.StatusC + status = api.StatusCharging } } diff --git a/vehicle/vw/provider.go b/vehicle/vw/provider.go index 64faf06180..79c734c373 100644 --- a/vehicle/vw/provider.go +++ b/vehicle/vw/provider.go @@ -65,15 +65,15 @@ var _ api.ChargeState = (*Provider)(nil) // Status implements the api.ChargeState interface func (v *Provider) Status() (api.ChargeStatus, error) { - status := api.StatusA // disconnected + status := api.StatusDisconnected // disconnected res, err := v.chargerG() if err == nil { if res.Charger.Status.PlugStatusData.PlugState.Content == "connected" { - status = api.StatusB + status = api.StatusConnected } if res.Charger.Status.ChargingStatusData.ChargingState.Content == "charging" { - status = api.StatusC + status = api.StatusCharging } } diff --git a/vehicle/zero/provider.go b/vehicle/zero/provider.go index 05fba1e2b2..ff02999400 100644 --- a/vehicle/zero/provider.go +++ b/vehicle/zero/provider.go @@ -37,15 +37,15 @@ var _ api.ChargeState = (*Provider)(nil) func (v *Provider) Status() (api.ChargeStatus, error) { res, err := v.status.Get() if err != nil { - return api.StatusNone, err + return api.StatusUnknown, err } - status := api.StatusA + status := api.StatusDisconnected if res.Pluggedin != 0 { - status = api.StatusB + status = api.StatusConnected } if res.Charging != 0 { - status = api.StatusC + status = api.StatusCharging } return status, nil