diff --git a/pkg/temperature/ds18b20.go b/pkg/temperature/ds18b20.go index 9d02b51..779f745 100644 --- a/pkg/temperature/ds18b20.go +++ b/pkg/temperature/ds18b20.go @@ -104,8 +104,6 @@ func PollSensors(ctx context.Context, wg *sync.WaitGroup, readingInterval time.D break } - accErrTrigger = 0 - // Ensure that we wait for sensors to convert data. deltaSleep := sensorConversionTime - time.Since(start) if deltaSleep > 0 { @@ -116,19 +114,10 @@ func PollSensors(ctx context.Context, wg *sync.WaitGroup, readingInterval time.D goto poll_bus case BulkReadReady: - readSensors(hub) - } - - if accErrTrigger > 60 { - select { - case RequestReset <- true: - log.Print("Thermal bulk read failed 60 times in a row -- bus reset") - - // Reset counter to allow 60 more reads + if !readSensors(hub) { + accErrTrigger++ + } else { accErrTrigger = 0 - - default: - log.Fatal("Thermal bulk read failed 60 times in a row -- terminating") } } @@ -138,10 +127,23 @@ func PollSensors(ctx context.Context, wg *sync.WaitGroup, readingInterval time.D case <-ctx.Done(): return } + + if accErrTrigger > 60 { + select { + case RequestReset <- true: + log.Print("Thermal bulk read failed 60 times in a row -- bus reset") + + // Reset counter to allow 60 more reads + accErrTrigger = 0 + + default: + log.Fatal("Thermal bulk read failed 60 times in a row -- terminating") + } + } } } -func readSensors(hub *sentry.Hub) { +func readSensors(hub *sentry.Hub) bool { r := TemperatureReading{ Time: time.Now(), Ambient: NaN, @@ -187,7 +189,7 @@ func readSensors(hub *sentry.Hub) { // Throw away reading if any sensor failed if hasReadFailure { - return + return false } select { @@ -199,6 +201,8 @@ func readSensors(hub *sentry.Hub) { hub.CaptureException(err) log.Fatal(err) } + + return true } func triggerBulkRead() error {