MyPV: fix status mapping (#21983)

This commit is contained in:
docolli 2025-06-30 10:38:52 +02:00 • committed by GitHub
parent f016a1f269
commit 8047238a3d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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
}