mirror of
https://github.com/Laxilef/OTGateway.git
synced 2026-03-20 17:28:37 +05:00
refactor: optimization of wired sensors
This commit is contained in:
@@ -51,27 +51,23 @@ protected:
|
|||||||
class SensorsTask : public LeanTask {
|
class SensorsTask : public LeanTask {
|
||||||
public:
|
public:
|
||||||
SensorsTask(bool _enabled = false, unsigned long _interval = 0) : LeanTask(_enabled, _interval) {
|
SensorsTask(bool _enabled = false, unsigned long _interval = 0) : LeanTask(_enabled, _interval) {
|
||||||
|
this->gpioLastPollingTime.reserve(2);
|
||||||
|
|
||||||
// OneWire
|
// OneWire
|
||||||
this->owInstances.reserve(2);
|
this->owInstances.reserve(2);
|
||||||
this->dallasInstances.reserve(2);
|
this->dallasInstances.reserve(2);
|
||||||
this->dallasSearchTime.reserve(2);
|
this->dallasSearchTime.reserve(2);
|
||||||
this->dallasPolling.reserve(2);
|
this->dallasPolling.reserve(2);
|
||||||
this->dallasLastPollingTime.reserve(2);
|
|
||||||
|
|
||||||
// DHT
|
|
||||||
this->dhtLastPollingTime.reserve(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~SensorsTask() {
|
~SensorsTask() {
|
||||||
|
this->gpioLastPollingTime.clear();
|
||||||
|
|
||||||
// OneWire
|
// OneWire
|
||||||
this->dallasInstances.clear();
|
this->dallasInstances.clear();
|
||||||
this->owInstances.clear();
|
this->owInstances.clear();
|
||||||
this->dallasSearchTime.clear();
|
this->dallasSearchTime.clear();
|
||||||
this->dallasPolling.clear();
|
this->dallasPolling.clear();
|
||||||
this->dallasLastPollingTime.clear();
|
|
||||||
|
|
||||||
// DHT
|
|
||||||
this->dhtLastPollingTime.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -85,17 +81,17 @@ protected:
|
|||||||
const unsigned int bleSetDtInterval = 7200000;
|
const unsigned int bleSetDtInterval = 7200000;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
std::unordered_map<uint8_t, unsigned long> gpioLastPollingTime;
|
||||||
|
|
||||||
// OneWire
|
// OneWire
|
||||||
std::unordered_map<uint8_t, OneWire> owInstances;
|
std::unordered_map<uint8_t, OneWire> owInstances;
|
||||||
std::unordered_map<uint8_t, DallasTemperature> dallasInstances;
|
std::unordered_map<uint8_t, DallasTemperature> dallasInstances;
|
||||||
std::unordered_map<uint8_t, unsigned long> dallasSearchTime;
|
std::unordered_map<uint8_t, unsigned long> dallasSearchTime;
|
||||||
std::unordered_map<uint8_t, bool> dallasPolling;
|
std::unordered_map<uint8_t, bool> dallasPolling;
|
||||||
std::unordered_map<uint8_t, unsigned long> dallasLastPollingTime;
|
|
||||||
|
|
||||||
// DHT
|
// DHT
|
||||||
DHT dhtInstance;
|
DHT dhtInstance;
|
||||||
bool dhtIsPolling = false;
|
bool dhtIsPolling = false;
|
||||||
std::unordered_map<uint8_t, unsigned long> dhtLastPollingTime;
|
|
||||||
|
|
||||||
#if USE_BLE
|
#if USE_BLE
|
||||||
// Bluetooth
|
// Bluetooth
|
||||||
@@ -194,7 +190,7 @@ protected:
|
|||||||
|
|
||||||
this->dallasSearchTime[sSensor.gpio] = 0;
|
this->dallasSearchTime[sSensor.gpio] = 0;
|
||||||
this->dallasPolling[sSensor.gpio] = false;
|
this->dallasPolling[sSensor.gpio] = false;
|
||||||
this->dallasLastPollingTime[sSensor.gpio] = 0;
|
this->gpioLastPollingTime[sSensor.gpio] = 0;
|
||||||
|
|
||||||
auto& instance = this->dallasInstances[sSensor.gpio];
|
auto& instance = this->dallasInstances[sSensor.gpio];
|
||||||
instance.setOneWire(&owInstance);
|
instance.setOneWire(&owInstance);
|
||||||
@@ -229,7 +225,7 @@ protected:
|
|||||||
this->owInstances.erase(gpio);
|
this->owInstances.erase(gpio);
|
||||||
this->dallasSearchTime.erase(gpio);
|
this->dallasSearchTime.erase(gpio);
|
||||||
this->dallasPolling.erase(gpio);
|
this->dallasPolling.erase(gpio);
|
||||||
this->dallasLastPollingTime.erase(gpio);
|
this->gpioLastPollingTime.erase(gpio);
|
||||||
|
|
||||||
Log.sinfoln(FPSTR(L_SENSORS_DALLAS), F("Stopped on GPIO %hhu"), gpio);
|
Log.sinfoln(FPSTR(L_SENSORS_DALLAS), F("Stopped on GPIO %hhu"), gpio);
|
||||||
continue;
|
continue;
|
||||||
@@ -350,7 +346,7 @@ protected:
|
|||||||
|
|
||||||
if (this->dallasPolling[gpio]) {
|
if (this->dallasPolling[gpio]) {
|
||||||
unsigned long minPollingTime = instance.millisToWaitForConversion(12) * 2;
|
unsigned long minPollingTime = instance.millisToWaitForConversion(12) * 2;
|
||||||
unsigned long estimatePollingTime = ts - this->dallasLastPollingTime[gpio];
|
unsigned long estimatePollingTime = ts - this->gpioLastPollingTime[gpio];
|
||||||
|
|
||||||
// check conversion time
|
// check conversion time
|
||||||
// isConversionComplete does not work with chinese clones!
|
// isConversionComplete does not work with chinese clones!
|
||||||
@@ -402,7 +398,7 @@ protected:
|
|||||||
this->dallasPolling[gpio] = false;
|
this->dallasPolling[gpio] = false;
|
||||||
|
|
||||||
} else if (newPolling) {
|
} else if (newPolling) {
|
||||||
auto estimateLastPollingTime = ts - this->dallasLastPollingTime[gpio];
|
auto estimateLastPollingTime = ts - this->gpioLastPollingTime[gpio];
|
||||||
|
|
||||||
// check last polling time
|
// check last polling time
|
||||||
if (estimateLastPollingTime < this->dallasPollingInterval) {
|
if (estimateLastPollingTime < this->dallasPollingInterval) {
|
||||||
@@ -413,7 +409,7 @@ protected:
|
|||||||
instance.setResolution(12);
|
instance.setResolution(12);
|
||||||
instance.requestTemperatures();
|
instance.requestTemperatures();
|
||||||
this->dallasPolling[gpio] = true;
|
this->dallasPolling[gpio] = true;
|
||||||
this->dallasLastPollingTime[gpio] = ts;
|
this->gpioLastPollingTime[gpio] = ts;
|
||||||
|
|
||||||
Log.straceln(FPSTR(L_SENSORS_DALLAS), F("GPIO %hhu, polling..."), gpio);
|
Log.straceln(FPSTR(L_SENSORS_DALLAS), F("GPIO %hhu, polling..."), gpio);
|
||||||
}
|
}
|
||||||
@@ -437,7 +433,7 @@ protected:
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->dhtLastPollingTime.count(sSensor.gpio) && millis() - this->dhtLastPollingTime[sSensor.gpio] < this->dhtPollingInterval) {
|
if (this->gpioLastPollingTime.count(sSensor.gpio) && millis() - this->gpioLastPollingTime[sSensor.gpio] < this->dhtPollingInterval) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -463,7 +459,7 @@ protected:
|
|||||||
rSensor.signalQuality++;
|
rSensor.signalQuality++;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->dhtLastPollingTime[sSensor.gpio] = millis();
|
this->gpioLastPollingTime[sSensor.gpio] = millis();
|
||||||
this->dhtIsPolling = false;
|
this->dhtIsPolling = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -480,7 +476,7 @@ protected:
|
|||||||
rSensor.signalQuality--;
|
rSensor.signalQuality--;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->dhtLastPollingTime[sSensor.gpio] = millis();
|
this->gpioLastPollingTime[sSensor.gpio] = millis();
|
||||||
this->dhtIsPolling = false;
|
this->dhtIsPolling = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user