From cacdfab1556b9f58a6fd25cdc8b4a44838e95bef Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 22 Feb 2026 12:51:50 +0100 Subject: [PATCH] chore: align tickers --- charger/ocpp/connector.go | 3 +-- charger/pulsatrix.go | 7 ++----- charger/semp.go | 7 ++----- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/charger/ocpp/connector.go b/charger/ocpp/connector.go index bcd312fb3..4d45751d6 100644 --- a/charger/ocpp/connector.go +++ b/charger/ocpp/connector.go @@ -111,8 +111,7 @@ func (conn *Connector) GetScheduleLimit(duration int) (float64, error) { // WatchDog triggers meter values messages if older than timeout. // Must be wrapped in a goroutine. func (conn *Connector) WatchDog(ctx context.Context, timeout time.Duration) { - tick := time.NewTicker(2 * time.Second) - for { + for tick := time.NewTicker(2 * time.Second); ; { conn.mu.Lock() update := conn.clock.Since(conn.meterUpdated) > timeout conn.mu.Unlock() diff --git a/charger/pulsatrix.go b/charger/pulsatrix.go index 9b6063f89..b38bf6836 100644 --- a/charger/pulsatrix.go +++ b/charger/pulsatrix.go @@ -328,14 +328,11 @@ func (c *Pulsatrix) parseMessage(messageType websocket.MessageType, message []by func (c *Pulsatrix) heartbeat(ctx context.Context) { defer c.wg.Done() - ticker := time.NewTicker(heartbeatInterval) - defer ticker.Stop() - - for { + for tick := time.NewTicker(heartbeatInterval); ; { select { case <-ctx.Done(): return - case <-ticker.C: + case <-tick.C: enabled := atomic.LoadInt32(&c.enabled) != 0 if err := c.Enable(enabled); err != nil { atomic.AddInt32(&c.consecutiveHeartbeatErrors, 1) diff --git a/charger/semp.go b/charger/semp.go index 42d9d6d96..305065ffe 100644 --- a/charger/semp.go +++ b/charger/semp.go @@ -156,12 +156,9 @@ func NewSEMP(ctx context.Context, uri, deviceID string, cache time.Duration) (ap // heartbeat ensures that device control updates are sent at least once per minute func (wb *SEMP) heartbeat(ctx context.Context) { - ticker := time.NewTicker(time.Second) - defer ticker.Stop() - - for { + for tick := time.NewTicker(time.Second); ; { select { - case <-ticker.C: + case <-tick.C: // Check if we need to send an update if time.Since(wb.conn.Updated()) >= time.Minute { if err := wb.conn.SendDeviceControl(wb.deviceID, wb.calcPower(wb.enabled, wb.current, wb.phases)); err != nil {