diff --git a/pkg/app/websocket_handlers.go b/pkg/app/websocket_handlers.go index eba4039..c3b0d09 100644 --- a/pkg/app/websocket_handlers.go +++ b/pkg/app/websocket_handlers.go @@ -14,10 +14,21 @@ func processSensorData(babyUID string, sensorData []*client.SensorData, stateMan stateUpdate := baby.State{} for _, sensorDataSet := range sensorData { if *sensorDataSet.SensorType == client.SensorType_TEMPERATURE { - stateUpdate.SetTemperatureMilli(*sensorDataSet.ValueMilli) + // Nanit occasionally reports -1000000 (-1000 °C) as an invalid-reading + // sentinel. Ignore physically impossible values (valid room range + // -20..60 °C) so we don't publish garbage to MQTT. + if v := *sensorDataSet.ValueMilli; v > -20000 && v < 60000 { + stateUpdate.SetTemperatureMilli(v) + } else { + log.Warn().Int32("valueMilli", v).Str("babyUID", babyUID).Msg("Ignoring out-of-range temperature reading") + } } if *sensorDataSet.SensorType == client.SensorType_HUMIDITY { - stateUpdate.SetHumidityMilli(*sensorDataSet.ValueMilli) + if v := *sensorDataSet.ValueMilli; v >= 0 && v <= 100000 { + stateUpdate.SetHumidityMilli(v) + } else { + log.Warn().Int32("valueMilli", v).Str("babyUID", babyUID).Msg("Ignoring out-of-range humidity reading") + } } if *sensorDataSet.SensorType == client.SensorType_NIGHT { stateUpdate.SetIsNight(*sensorDataSet.Value == 1)