diff --git a/charger/daheimladen.go b/charger/daheimladen.go index e26abcb9b..032f2fa67 100644 --- a/charger/daheimladen.go +++ b/charger/daheimladen.go @@ -361,31 +361,37 @@ func (wb *DaheimLaden) getPhases() (int, error) { } func (wb *DaheimLaden) checkStation() error { - // first call for fw init - if _, err := wb.conn.ReadHoldingRegisters(dlRegEvseMaxCurrent, 22); err != nil { - return err - } - b, err := wb.conn.ReadHoldingRegisters(dlRegEvseMaxCurrent, 22) - if err != nil { - return api.ErrSponsorRequired - } - // station id starts (dlRegStationId-dlRegEvseMaxCurrent) registers into the block - s, err := utf16BEBytesAsString(b[2*(dlRegStationId-dlRegEvseMaxCurrent):]) - if err != nil || s == "" { - return api.ErrSponsorRequired - } + // map may still be zero right after the wake-up call- poll briefly until populated + for range 5 { + b, err := wb.conn.ReadHoldingRegisters(dlRegEvseMaxCurrent, 22) + if err != nil { + return err + } - for _, r := range s { - if r < 0x20 || r > 0x7e { + s, err := utf16BEBytesAsString(b[2*(dlRegStationId-dlRegEvseMaxCurrent):]) + if err != nil { + return err + } + + if len(s) == 0 { + time.Sleep(200 * time.Millisecond) + continue + } + + if strings.Contains(strings.ToLower(s), "heidelbridge") { return api.ErrSponsorRequired } + + for _, r := range s { + if r < 0x20 || r > 0x7e { + return api.ErrSponsorRequired + } + } + + return nil } - if strings.Contains(strings.ToLower(s), "heidelbridge") { - return api.ErrSponsorRequired - } - - return nil + return api.ErrSponsorRequired } var _ api.Diagnosis = (*DaheimLaden)(nil)