feat: added signal quality for DALLAS sensors

This commit is contained in:
Yurii
2024-11-13 00:57:01 +03:00
parent b91266063b
commit 861db33765
2 changed files with 27 additions and 1 deletions

View File

@@ -70,7 +70,7 @@ public:
typedef struct { typedef struct {
bool connected = false; bool connected = false;
unsigned long activityTime = 0; unsigned long activityTime = 0;
uint8_t signalQuality = 0; uint8_t signalQuality = 100;
//float raw[4] = {0.0f, 0.0f, 0.0f, 0.0f}; //float raw[4] = {0.0f, 0.0f, 0.0f, 0.0f};
float values[4] = {0.0f, 0.0f, 0.0f, 0.0f}; float values[4] = {0.0f, 0.0f, 0.0f, 0.0f};
} Result; } Result;

View File

@@ -302,6 +302,7 @@ protected:
continue; continue;
} }
auto& rSensor = Sensors::results[sensorId];
float value = instance.getTempC(sSensor.address); float value = instance.getTempC(sSensor.address);
if (value == DEVICE_DISCONNECTED_C) { if (value == DEVICE_DISCONNECTED_C) {
Log.swarningln( Log.swarningln(
@@ -309,6 +310,10 @@ protected:
sSensor.gpio, sensorId, sSensor.name sSensor.gpio, sensorId, sSensor.name
); );
if (rSensor.signalQuality > 0) {
rSensor.signalQuality--;
}
continue; continue;
} }
@@ -317,6 +322,10 @@ protected:
sSensor.gpio, sensorId, sSensor.name, value sSensor.gpio, sensorId, sSensor.name, value
); );
if (rSensor.signalQuality < 100) {
rSensor.signalQuality++;
}
// set sensor value // set sensor value
Sensors::setValueById(sensorId, value, Sensors::ValueType::TEMPERATURE, true, true); Sensors::setValueById(sensorId, value, Sensors::ValueType::TEMPERATURE, true, true);
} }
@@ -334,6 +343,23 @@ protected:
// check sensors on bus // check sensors on bus
if (!instance.getDeviceCount()) { 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; continue;
} }