mirror of
https://github.com/Laxilef/OTGateway.git
synced 2025-12-11 18:54:28 +05:00
fix when using two sensors, str to flash
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
#include <OneWire.h>
|
#include <OneWire.h>
|
||||||
#include <DallasTemperature.h>
|
#include <DallasTemperature.h>
|
||||||
|
|
||||||
|
const char S_SENSORS_OUTDOOR[] PROGMEM = "SENSORS.OUTDOOR";
|
||||||
|
const char S_SENSORS_INDOOR[] PROGMEM = "SENSORS.INDOOR";
|
||||||
|
|
||||||
class SensorsTask : public LeanTask {
|
class SensorsTask : public LeanTask {
|
||||||
public:
|
public:
|
||||||
@@ -14,11 +16,12 @@ protected:
|
|||||||
DallasTemperature* indoorSensor;
|
DallasTemperature* indoorSensor;
|
||||||
|
|
||||||
bool initOutdoorSensor = false;
|
bool initOutdoorSensor = false;
|
||||||
unsigned long startConversionTime = 0;
|
unsigned long startOutdoorConversionTime = 0;
|
||||||
float filteredOutdoorTemp = 0;
|
float filteredOutdoorTemp = 0;
|
||||||
bool emptyOutdoorTemp = true;
|
bool emptyOutdoorTemp = true;
|
||||||
|
|
||||||
bool initIndoorSensor = false;
|
bool initIndoorSensor = false;
|
||||||
|
unsigned long startIndoorConversionTime = 0;
|
||||||
float filteredIndoorTemp = 0;
|
float filteredIndoorTemp = 0;
|
||||||
bool emptyIndoorTemp = true;
|
bool emptyIndoorTemp = true;
|
||||||
|
|
||||||
@@ -45,11 +48,11 @@ protected:
|
|||||||
outdoorSensor->setResolution(12);
|
outdoorSensor->setResolution(12);
|
||||||
outdoorSensor->setWaitForConversion(false);
|
outdoorSensor->setWaitForConversion(false);
|
||||||
outdoorSensor->requestTemperatures();
|
outdoorSensor->requestTemperatures();
|
||||||
startConversionTime = millis();
|
startOutdoorConversionTime = millis();
|
||||||
initOutdoorSensor = true;
|
initOutdoorSensor = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long estimateConversionTime = millis() - startConversionTime;
|
unsigned long estimateConversionTime = millis() - startOutdoorConversionTime;
|
||||||
if (estimateConversionTime < outdoorSensor->millisToWaitForConversion()) {
|
if (estimateConversionTime < outdoorSensor->millisToWaitForConversion()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -58,9 +61,9 @@ protected:
|
|||||||
if (!completed && estimateConversionTime >= 1000) {
|
if (!completed && estimateConversionTime >= 1000) {
|
||||||
// fail, retry
|
// fail, retry
|
||||||
outdoorSensor->requestTemperatures();
|
outdoorSensor->requestTemperatures();
|
||||||
startConversionTime = millis();
|
startOutdoorConversionTime = millis();
|
||||||
|
|
||||||
Log.serrorln("SENSORS.OUTDOOR", PSTR("Could not read temperature data (no response)"));
|
Log.serrorln(FPSTR(S_SENSORS_OUTDOOR), PSTR("Could not read temperature data (no response)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!completed) {
|
if (!completed) {
|
||||||
@@ -69,10 +72,10 @@ protected:
|
|||||||
|
|
||||||
float rawTemp = outdoorSensor->getTempCByIndex(0);
|
float rawTemp = outdoorSensor->getTempCByIndex(0);
|
||||||
if (rawTemp == DEVICE_DISCONNECTED_C) {
|
if (rawTemp == DEVICE_DISCONNECTED_C) {
|
||||||
Log.serrorln("SENSORS.OUTDOOR", PSTR("Could not read temperature data (not connected)"));
|
Log.serrorln(FPSTR(S_SENSORS_OUTDOOR), PSTR("Could not read temperature data (not connected)"));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Log.straceln("SENSORS.OUTDOOR", PSTR("Raw temp: %f"), rawTemp);
|
Log.straceln(FPSTR(S_SENSORS_OUTDOOR), PSTR("Raw temp: %f"), rawTemp);
|
||||||
|
|
||||||
if (emptyOutdoorTemp) {
|
if (emptyOutdoorTemp) {
|
||||||
filteredOutdoorTemp = rawTemp;
|
filteredOutdoorTemp = rawTemp;
|
||||||
@@ -86,12 +89,12 @@ protected:
|
|||||||
|
|
||||||
if (fabs(vars.temperatures.outdoor - filteredOutdoorTemp) > 0.099) {
|
if (fabs(vars.temperatures.outdoor - filteredOutdoorTemp) > 0.099) {
|
||||||
vars.temperatures.outdoor = filteredOutdoorTemp + settings.sensors.outdoor.offset;
|
vars.temperatures.outdoor = filteredOutdoorTemp + settings.sensors.outdoor.offset;
|
||||||
Log.sinfoln("SENSORS.OUTDOOR", PSTR("New temp: %f"), filteredOutdoorTemp);
|
Log.sinfoln(FPSTR(S_SENSORS_OUTDOOR), PSTR("New temp: %f"), filteredOutdoorTemp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
outdoorSensor->requestTemperatures();
|
outdoorSensor->requestTemperatures();
|
||||||
startConversionTime = millis();
|
startOutdoorConversionTime = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
void indoorTemperatureSensor() {
|
void indoorTemperatureSensor() {
|
||||||
@@ -102,11 +105,11 @@ protected:
|
|||||||
indoorSensor->setResolution(12);
|
indoorSensor->setResolution(12);
|
||||||
indoorSensor->setWaitForConversion(false);
|
indoorSensor->setWaitForConversion(false);
|
||||||
indoorSensor->requestTemperatures();
|
indoorSensor->requestTemperatures();
|
||||||
startConversionTime = millis();
|
startIndoorConversionTime = millis();
|
||||||
initIndoorSensor = true;
|
initIndoorSensor = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long estimateConversionTime = millis() - startConversionTime;
|
unsigned long estimateConversionTime = millis() - startIndoorConversionTime;
|
||||||
if (estimateConversionTime < indoorSensor->millisToWaitForConversion()) {
|
if (estimateConversionTime < indoorSensor->millisToWaitForConversion()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -115,9 +118,9 @@ protected:
|
|||||||
if (!completed && estimateConversionTime >= 1000) {
|
if (!completed && estimateConversionTime >= 1000) {
|
||||||
// fail, retry
|
// fail, retry
|
||||||
indoorSensor->requestTemperatures();
|
indoorSensor->requestTemperatures();
|
||||||
startConversionTime = millis();
|
startIndoorConversionTime = millis();
|
||||||
|
|
||||||
Log.serrorln("SENSORS.INDOOR", PSTR("Could not read temperature data (no response)"));
|
Log.serrorln(FPSTR(S_SENSORS_INDOOR), PSTR("Could not read temperature data (no response)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!completed) {
|
if (!completed) {
|
||||||
@@ -126,10 +129,10 @@ protected:
|
|||||||
|
|
||||||
float rawTemp = indoorSensor->getTempCByIndex(0);
|
float rawTemp = indoorSensor->getTempCByIndex(0);
|
||||||
if (rawTemp == DEVICE_DISCONNECTED_C) {
|
if (rawTemp == DEVICE_DISCONNECTED_C) {
|
||||||
Log.serrorln("SENSORS.INDOOR", PSTR("Could not read temperature data (not connected)"));
|
Log.serrorln(FPSTR(S_SENSORS_INDOOR), PSTR("Could not read temperature data (not connected)"));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Log.straceln("SENSORS.INDOOR", PSTR("Raw temp: %f"), rawTemp);
|
Log.straceln(FPSTR(S_SENSORS_INDOOR), PSTR("Raw temp: %f"), rawTemp);
|
||||||
|
|
||||||
if (emptyIndoorTemp) {
|
if (emptyIndoorTemp) {
|
||||||
filteredIndoorTemp = rawTemp;
|
filteredIndoorTemp = rawTemp;
|
||||||
@@ -143,11 +146,11 @@ protected:
|
|||||||
|
|
||||||
if (fabs(vars.temperatures.indoor - filteredIndoorTemp) > 0.099) {
|
if (fabs(vars.temperatures.indoor - filteredIndoorTemp) > 0.099) {
|
||||||
vars.temperatures.indoor = filteredIndoorTemp + settings.sensors.indoor.offset;
|
vars.temperatures.indoor = filteredIndoorTemp + settings.sensors.indoor.offset;
|
||||||
Log.sinfoln("SENSORS.INDOOR", PSTR("New temp: %f"), filteredIndoorTemp);
|
Log.sinfoln(FPSTR(S_SENSORS_INDOOR), PSTR("New temp: %f"), filteredIndoorTemp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
indoorSensor->requestTemperatures();
|
indoorSensor->requestTemperatures();
|
||||||
startConversionTime = millis();
|
startIndoorConversionTime = millis();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user