#ifndef SENSOR2_DALLAS_SENSOR_H #define SENSOR2_DALLAS_SENSOR_H #include "base.h" #include "Dallas.h" #include "wifi.h" #include "mqtt.h" #include "data.h" class DallasSensor { private: Dallas &sensors; uint64_t address; const char *name; const double valueThreshold; const time_t timeoutSec; const time_t minIntervalSec; double lastValue = NAN; time_t lastTimestamp = 0; double lastValidValue = NAN; time_t lastValidTimestamp = 0; public: DallasSensor(Dallas &sensors, const uint64_t address, const char *name, const double valueThreshold, const time_t timeoutSec, const time_t minIntervalSec) : sensors(sensors), address(address), name(name), valueThreshold(valueThreshold), timeoutSec(timeoutSec), minIntervalSec(minIntervalSec) { // - } void loop() { const time_t now = getTime(); if (now - lastTimestamp > timeoutSec) { lastTimestamp = 0; lastValue = NAN; } if (sensors.isConverted()) { const double value = sensors.read(address); const time_t timestamp = sensors.getTimestamp(); const bool doPublish = !isnan(value) && (abs(lastValue - value) >= valueThreshold || now - lastTimestamp >= minIntervalSec); if (doPublish) { dataAdd(name, timestamp, value); } lastValue = value; lastTimestamp = timestamp; if (!isnan(value)) { lastValidValue = value; lastValidTimestamp = timestamp; } } } const char *getName() const { return name; } double getLastValue() const { return lastValue; } time_t getLastTimestamp() const { return lastTimestamp; } double getLastValidValue() const { return lastValidValue; } time_t getLastValidTimestamp() const { return lastValidTimestamp; } }; #endif