diff --git a/charger/mypv.go b/charger/mypv.go index dd9eb41a1..e4ff2a77e 100644 --- a/charger/mypv.go +++ b/charger/mypv.go @@ -47,6 +47,7 @@ const ( elwaRegSetPower = 1000 elwaRegTempLimit = 1002 elwaRegStatus = 1003 + elwaRegLoadState = 1059 elwaRegPower = 1000 // https://github.com/evcc-io/evcc/issues/18020#issuecomment-2585300804 ) @@ -152,13 +153,30 @@ func (wb *MyPv) heartbeat(ctx context.Context, timeout time.Duration) { // Status implements the api.Charger interface func (wb *MyPv) Status() (api.ChargeStatus, error) { - b, err := wb.conn.ReadHoldingRegisters(elwaRegStatus, 1) + b, err := wb.conn.ReadHoldingRegisters(elwaRegLoadState, 1) if err != nil { return api.StatusNone, err } + // all loads detached + if binary.BigEndian.Uint16(b) == 0 { + return api.StatusA, nil + } + res := api.StatusB - if binary.BigEndian.Uint16(b) == wb.statusC { + + b, err = wb.conn.ReadHoldingRegisters(elwaRegStatus, 1) + if err != nil { + return api.StatusNone, err + } + + c, err := wb.conn.ReadHoldingRegisters(elwaRegPower, 1) + if err != nil { + return api.StatusNone, err + } + + // ignore standby power + if binary.BigEndian.Uint16(b) == wb.statusC && binary.BigEndian.Uint16(c) > 10 { res = api.StatusC }