mirror of
https://github.com/Laxilef/OTGateway.git
synced 2026-02-03 08:07:44 +05:00
refactor: additional checks when initializing sensors
This commit is contained in:
@@ -17,9 +17,11 @@ public:
|
|||||||
SensorsTask(bool _enabled = false, unsigned long _interval = 0) : LeanTask(_enabled, _interval) {
|
SensorsTask(bool _enabled = false, unsigned long _interval = 0) : LeanTask(_enabled, _interval) {
|
||||||
this->oneWireOutdoorSensor = new OneWire();
|
this->oneWireOutdoorSensor = new OneWire();
|
||||||
this->outdoorSensor = new DallasTemperature(this->oneWireOutdoorSensor);
|
this->outdoorSensor = new DallasTemperature(this->oneWireOutdoorSensor);
|
||||||
|
this->outdoorSensor->setWaitForConversion(false);
|
||||||
|
|
||||||
this->oneWireIndoorSensor = new OneWire();
|
this->oneWireIndoorSensor = new OneWire();
|
||||||
this->indoorSensor = new DallasTemperature(this->oneWireIndoorSensor);
|
this->indoorSensor = new DallasTemperature(this->oneWireIndoorSensor);
|
||||||
|
this->indoorSensor->setWaitForConversion(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
~SensorsTask() {
|
~SensorsTask() {
|
||||||
@@ -144,14 +146,29 @@ protected:
|
|||||||
|
|
||||||
void outdoorTemperatureSensor() {
|
void outdoorTemperatureSensor() {
|
||||||
if (!this->initOutdoorSensor) {
|
if (!this->initOutdoorSensor) {
|
||||||
|
Log.sinfoln(FPSTR(L_SENSORS_OUTDOOR), F("Starting on gpio %hhu..."), settings.sensors.outdoor.pin);
|
||||||
|
|
||||||
this->oneWireOutdoorSensor->begin(settings.sensors.outdoor.pin);
|
this->oneWireOutdoorSensor->begin(settings.sensors.outdoor.pin);
|
||||||
this->outdoorSensor->begin();
|
this->outdoorSensor->begin();
|
||||||
this->outdoorSensor->setResolution(12);
|
|
||||||
this->outdoorSensor->setWaitForConversion(false);
|
|
||||||
this->outdoorSensor->requestTemperatures();
|
|
||||||
this->startOutdoorConversionTime = millis();
|
|
||||||
|
|
||||||
this->initOutdoorSensor = true;
|
Log.straceln(
|
||||||
|
FPSTR(L_SENSORS_OUTDOOR),
|
||||||
|
F("Devices on bus: %hhu, DS18* devices: %hhu"),
|
||||||
|
this->outdoorSensor->getDeviceCount(),
|
||||||
|
this->outdoorSensor->getDS18Count()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (this->outdoorSensor->getDeviceCount() > 0) {
|
||||||
|
this->initOutdoorSensor = true;
|
||||||
|
this->outdoorSensor->setResolution(12);
|
||||||
|
this->outdoorSensor->requestTemperatures();
|
||||||
|
this->startOutdoorConversionTime = millis();
|
||||||
|
|
||||||
|
Log.sinfoln(FPSTR(L_SENSORS_OUTDOOR), F("Started"));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long estimateConversionTime = millis() - this->startOutdoorConversionTime;
|
unsigned long estimateConversionTime = millis() - this->startOutdoorConversionTime;
|
||||||
@@ -161,9 +178,7 @@ protected:
|
|||||||
|
|
||||||
bool completed = this->outdoorSensor->isConversionComplete();
|
bool completed = this->outdoorSensor->isConversionComplete();
|
||||||
if (!completed && estimateConversionTime >= 1000) {
|
if (!completed && estimateConversionTime >= 1000) {
|
||||||
// fail, retry
|
this->initOutdoorSensor = false;
|
||||||
this->outdoorSensor->requestTemperatures();
|
|
||||||
this->startOutdoorConversionTime = millis();
|
|
||||||
|
|
||||||
Log.serrorln(FPSTR(L_SENSORS_OUTDOOR), F("Could not read temperature data (no response)"));
|
Log.serrorln(FPSTR(L_SENSORS_OUTDOOR), F("Could not read temperature data (no response)"));
|
||||||
}
|
}
|
||||||
@@ -174,6 +189,8 @@ protected:
|
|||||||
|
|
||||||
float rawTemp = this->outdoorSensor->getTempCByIndex(0);
|
float rawTemp = this->outdoorSensor->getTempCByIndex(0);
|
||||||
if (rawTemp == DEVICE_DISCONNECTED_C) {
|
if (rawTemp == DEVICE_DISCONNECTED_C) {
|
||||||
|
this->initOutdoorSensor = false;
|
||||||
|
|
||||||
Log.serrorln(FPSTR(L_SENSORS_OUTDOOR), F("Could not read temperature data (not connected)"));
|
Log.serrorln(FPSTR(L_SENSORS_OUTDOOR), F("Could not read temperature data (not connected)"));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -193,22 +210,37 @@ protected:
|
|||||||
vars.temperatures.outdoor = this->filteredOutdoorTemp + settings.sensors.outdoor.offset;
|
vars.temperatures.outdoor = this->filteredOutdoorTemp + settings.sensors.outdoor.offset;
|
||||||
Log.sinfoln(FPSTR(L_SENSORS_OUTDOOR), F("New temp: %f"), this->filteredOutdoorTemp);
|
Log.sinfoln(FPSTR(L_SENSORS_OUTDOOR), F("New temp: %f"), this->filteredOutdoorTemp);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
this->outdoorSensor->requestTemperatures();
|
this->outdoorSensor->requestTemperatures();
|
||||||
this->startOutdoorConversionTime = millis();
|
this->startOutdoorConversionTime = millis();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void indoorTemperatureSensor() {
|
void indoorTemperatureSensor() {
|
||||||
if (!this->initIndoorSensor) {
|
if (!this->initIndoorSensor) {
|
||||||
|
Log.sinfoln(FPSTR(L_SENSORS_INDOOR), F("Starting on gpio %hhu..."), settings.sensors.indoor.pin);
|
||||||
|
|
||||||
this->oneWireIndoorSensor->begin(settings.sensors.indoor.pin);
|
this->oneWireIndoorSensor->begin(settings.sensors.indoor.pin);
|
||||||
this->indoorSensor->begin();
|
this->indoorSensor->begin();
|
||||||
this->indoorSensor->setResolution(12);
|
|
||||||
this->indoorSensor->setWaitForConversion(false);
|
|
||||||
this->indoorSensor->requestTemperatures();
|
|
||||||
this->startIndoorConversionTime = millis();
|
|
||||||
|
|
||||||
this->initIndoorSensor = true;
|
Log.straceln(
|
||||||
|
FPSTR(L_SENSORS_INDOOR),
|
||||||
|
F("Devices on bus: %hhu, DS18* devices: %hhu"),
|
||||||
|
this->indoorSensor->getDeviceCount(),
|
||||||
|
this->indoorSensor->getDS18Count()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (this->indoorSensor->getDeviceCount() > 0) {
|
||||||
|
this->initIndoorSensor = true;
|
||||||
|
this->indoorSensor->setResolution(12);
|
||||||
|
this->indoorSensor->requestTemperatures();
|
||||||
|
this->startIndoorConversionTime = millis();
|
||||||
|
|
||||||
|
Log.sinfoln(FPSTR(L_SENSORS_INDOOR), F("Started"));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long estimateConversionTime = millis() - this->startIndoorConversionTime;
|
unsigned long estimateConversionTime = millis() - this->startIndoorConversionTime;
|
||||||
@@ -218,10 +250,8 @@ protected:
|
|||||||
|
|
||||||
bool completed = this->indoorSensor->isConversionComplete();
|
bool completed = this->indoorSensor->isConversionComplete();
|
||||||
if (!completed && estimateConversionTime >= 1000) {
|
if (!completed && estimateConversionTime >= 1000) {
|
||||||
// fail, retry
|
this->initIndoorSensor = false;
|
||||||
this->indoorSensor->requestTemperatures();
|
|
||||||
this->startIndoorConversionTime = millis();
|
|
||||||
|
|
||||||
Log.serrorln(FPSTR(L_SENSORS_INDOOR), F("Could not read temperature data (no response)"));
|
Log.serrorln(FPSTR(L_SENSORS_INDOOR), F("Could not read temperature data (no response)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,6 +261,8 @@ protected:
|
|||||||
|
|
||||||
float rawTemp = this->indoorSensor->getTempCByIndex(0);
|
float rawTemp = this->indoorSensor->getTempCByIndex(0);
|
||||||
if (rawTemp == DEVICE_DISCONNECTED_C) {
|
if (rawTemp == DEVICE_DISCONNECTED_C) {
|
||||||
|
this->initIndoorSensor = false;
|
||||||
|
|
||||||
Log.serrorln(FPSTR(L_SENSORS_INDOOR), F("Could not read temperature data (not connected)"));
|
Log.serrorln(FPSTR(L_SENSORS_INDOOR), F("Could not read temperature data (not connected)"));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -250,9 +282,9 @@ protected:
|
|||||||
vars.temperatures.indoor = this->filteredIndoorTemp + settings.sensors.indoor.offset;
|
vars.temperatures.indoor = this->filteredIndoorTemp + settings.sensors.indoor.offset;
|
||||||
Log.sinfoln(FPSTR(L_SENSORS_INDOOR), F("New temp: %f"), this->filteredIndoorTemp);
|
Log.sinfoln(FPSTR(L_SENSORS_INDOOR), F("New temp: %f"), this->filteredIndoorTemp);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
this->indoorSensor->requestTemperatures();
|
this->indoorSensor->requestTemperatures();
|
||||||
this->startIndoorConversionTime = millis();
|
this->startIndoorConversionTime = millis();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user