From 861db33765fec139eab232bc891d1f9db00ad061 Mon Sep 17 00:00:00 2001 From: Yurii Date: Wed, 13 Nov 2024 00:57:01 +0300 Subject: [PATCH] feat: added signal quality for DALLAS sensors --- src/Sensors.h | 2 +- src/SensorsTask.h | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/Sensors.h b/src/Sensors.h index 5fdf4cf..97e3112 100644 --- a/src/Sensors.h +++ b/src/Sensors.h @@ -70,7 +70,7 @@ public: typedef struct { bool connected = false; unsigned long activityTime = 0; - uint8_t signalQuality = 0; + uint8_t signalQuality = 100; //float raw[4] = {0.0f, 0.0f, 0.0f, 0.0f}; float values[4] = {0.0f, 0.0f, 0.0f, 0.0f}; } Result; diff --git a/src/SensorsTask.h b/src/SensorsTask.h index cfc1452..675401f 100644 --- a/src/SensorsTask.h +++ b/src/SensorsTask.h @@ -302,6 +302,7 @@ protected: continue; } + auto& rSensor = Sensors::results[sensorId]; float value = instance.getTempC(sSensor.address); if (value == DEVICE_DISCONNECTED_C) { Log.swarningln( @@ -309,6 +310,10 @@ protected: sSensor.gpio, sensorId, sSensor.name ); + if (rSensor.signalQuality > 0) { + rSensor.signalQuality--; + } + continue; } @@ -317,6 +322,10 @@ protected: sSensor.gpio, sensorId, sSensor.name, value ); + if (rSensor.signalQuality < 100) { + rSensor.signalQuality++; + } + // set sensor value Sensors::setValueById(sensorId, value, Sensors::ValueType::TEMPERATURE, true, true); } @@ -334,6 +343,23 @@ protected: // check sensors on bus if (!instance.getDeviceCount()) { + for (uint8_t sensorId = 0; sensorId <= Sensors::getMaxSensorId(); sensorId++) { + auto& sSensor = Sensors::settings[sensorId]; + + // only target & valid sensors + if (!sSensor.enabled || sSensor.type != Sensors::Type::DALLAS_TEMP || sSensor.purpose == Sensors::Purpose::NOT_CONFIGURED) { + continue; + + } else if (sSensor.gpio != gpio || isEmptyAddress(sSensor.address)) { + continue; + } + + auto& rSensor = Sensors::results[sensorId]; + if (rSensor.signalQuality > 0) { + rSensor.signalQuality--; + } + } + continue; }