diff --git a/charger/sungrow.go b/charger/sungrow.go index 5e45be942..53bde214c 100644 --- a/charger/sungrow.go +++ b/charger/sungrow.go @@ -21,6 +21,7 @@ import ( "context" "encoding/binary" "fmt" + "time" "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/util" @@ -95,9 +96,24 @@ func NewSungrow(ctx context.Context, uri, device, comset string, baudrate int, p curr: 60, } + go wb.heartbeat(ctx) + return wb, nil } +func (wb *Sungrow) heartbeat(ctx context.Context) { + for tick := time.Tick(30 * time.Second); ; { + select { + case <-tick: + case <-ctx.Done(): + return + } + if _, err := wb.conn.ReadInputRegisters(sgRegState, 1); err != nil { + wb.log.ERROR.Println("heartbeat:", err) + } + } +} + // getPhaseValues returns 3 non-sequential register values func (wb *Sungrow) getPhaseValues(regs []uint16, divider float64) (float64, float64, float64, error) { var res [3]float64