Fixed one-wire library with an hammer
This commit is contained in:
parent
46ab832624
commit
2fc835f396
@ -14,7 +14,8 @@
|
|||||||
"streambuf": "cpp",
|
"streambuf": "cpp",
|
||||||
"functional": "cpp",
|
"functional": "cpp",
|
||||||
"string": "cpp",
|
"string": "cpp",
|
||||||
"typeinfo": "cpp"
|
"typeinfo": "cpp",
|
||||||
|
"cmath": "cpp"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,8 @@
|
|||||||
|
|
||||||
#define PANIK_MODE_DEEPSLEEP (60 * 60 * 5U) /**< 5 hours in usecond */
|
#define PANIK_MODE_DEEPSLEEP (60 * 60 * 5U) /**< 5 hours in usecond */
|
||||||
#define PANIK_MODE_DEEPSLEEP_US (PANIK_MODE_DEEPSLEEP * 1000 * 1000)
|
#define PANIK_MODE_DEEPSLEEP_US (PANIK_MODE_DEEPSLEEP * 1000 * 1000)
|
||||||
|
#define LIPO_MAX_TEMPERATUR 85
|
||||||
|
#define LIPO_MAX_TEMPERATUR_DIFF 10
|
||||||
|
|
||||||
#define TEMPERATURE_DELTA_TRIGGER_IN_C 1.0f
|
#define TEMPERATURE_DELTA_TRIGGER_IN_C 1.0f
|
||||||
#define MOIST_DELTA_TRIGGER_ADC 10
|
#define MOIST_DELTA_TRIGGER_ADC 10
|
||||||
|
@ -24,5 +24,4 @@
|
|||||||
#define WAKEUP_REASON_MOIST_CHANGE 20 /**< <code>20-26</code> for plant0 to plant9 */
|
#define WAKEUP_REASON_MOIST_CHANGE 20 /**< <code>20-26</code> for plant0 to plant9 */
|
||||||
#define WAKEUP_REASON_PLANT_DRY 30 /**< <code>30-36</code> for plant0 to plant9 */
|
#define WAKEUP_REASON_PLANT_DRY 30 /**< <code>30-36</code> for plant0 to plant9 */
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -53,6 +53,7 @@ typedef struct
|
|||||||
|
|
||||||
int determineNextPump();
|
int determineNextPump();
|
||||||
void setLastActivationForPump(int pumpId, long time);
|
void setLastActivationForPump(int pumpId, long time);
|
||||||
|
int readTemp();
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* NON VOLATILE VARIABLES in DEEP SLEEP
|
* NON VOLATILE VARIABLES in DEEP SLEEP
|
||||||
@ -301,29 +302,69 @@ void mode2MQTT()
|
|||||||
rtcWaterTempIndex = waterSensorIndex.get();
|
rtcWaterTempIndex = waterSensorIndex.get();
|
||||||
|
|
||||||
float lipoTempCurrent = lipoTempSensor.getMedian();
|
float lipoTempCurrent = lipoTempSensor.getMedian();
|
||||||
|
float t2 = NAN;
|
||||||
if (! isnan(lipoTempCurrent))
|
if (! isnan(lipoTempCurrent))
|
||||||
{
|
{
|
||||||
sensorTemp.setProperty(TEMPERATUR_SENSOR_LIPO).send(String(lipoTempCurrent));
|
sensorTemp.setProperty(TEMPERATUR_SENSOR_LIPO).send(String(lipoTempCurrent));
|
||||||
Serial << "Lipo Temperatur " << lipoTempCurrent << " °C " << endl;
|
Serial << "Lipo Temperatur " << lipoTempCurrent << " °C " << endl;
|
||||||
|
|
||||||
|
t2 = waterTempSensor.getMedian();
|
||||||
|
if (! isnan(t2))
|
||||||
|
{
|
||||||
|
sensorTemp.setProperty(TEMPERATUR_SENSOR_WATER).send(String(t2));
|
||||||
|
Serial << "Water Temperatur " << lipoTempCurrent << " °C " << endl;
|
||||||
|
}
|
||||||
|
//give mqtt time, use via publish callback instead?
|
||||||
|
delay(100);
|
||||||
|
} else {
|
||||||
|
int j=0;
|
||||||
|
/* Activate the Sensors and measure the temperature again */
|
||||||
|
/* activate all sensors */
|
||||||
|
pinMode(OUTPUT_SENSOR, OUTPUT);
|
||||||
|
digitalWrite(OUTPUT_SENSOR, HIGH);
|
||||||
|
|
||||||
|
delay(100);
|
||||||
|
sensors.begin();
|
||||||
|
|
||||||
|
for(j=0; j < TEMP_SENSOR_MEASURE_SERIES && sensors.getDeviceCount() == 0; j++) {
|
||||||
|
delay(100);
|
||||||
|
sensors.begin();
|
||||||
|
Serial << "Reset 1-Wire Bus" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(j=0; j < TEMP_SENSOR_MEASURE_SERIES && isnan(lipoTempCurrent); j++) {
|
||||||
|
delay(200);
|
||||||
|
readTemp();
|
||||||
|
lipoTempCurrent = lipoTempSensor.getMedian();
|
||||||
|
t2 = waterTempSensor.getMedian();
|
||||||
|
Serial << "Temperatur Lipo:" << lipoTempCurrent << " °C Water : " << t2 << " °C" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! isnan(lipoTempCurrent))
|
||||||
|
{
|
||||||
|
sensorTemp.setProperty(TEMPERATUR_SENSOR_LIPO).send(String(lipoTempCurrent));
|
||||||
|
Serial << "Lipo Temperatur " << lipoTempCurrent << " °C " << endl;
|
||||||
|
|
||||||
|
t2 = waterTempSensor.getMedian();
|
||||||
|
if (! isnan(t2))
|
||||||
|
{
|
||||||
|
sensorTemp.setProperty(TEMPERATUR_SENSOR_WATER).send(String(t2));
|
||||||
|
Serial << "Water Temperatur " << lipoTempCurrent << " °C " << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* deactivate the sensors */
|
||||||
|
digitalWrite(OUTPUT_SENSOR, LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
float t2 = waterTempSensor.getMedian();
|
if (! isnan(lipoTempCurrent) && ! isnan(t2)) {
|
||||||
if (! isnan(t2))
|
bool lipoTempWarning = (lipoTempCurrent != LIPO_MAX_TEMPERATUR) && abs(lipoTempCurrent - t2) > LIPO_MAX_TEMPERATUR_DIFF;
|
||||||
{
|
if (lipoTempWarning)
|
||||||
sensorTemp.setProperty(TEMPERATUR_SENSOR_WATER).send(String(t2));
|
{
|
||||||
Serial << "Water Temperatur " << lipoTempCurrent << " °C " << endl;
|
Serial.println("Lipo temp incorrect, panic mode deepsleep TODO");
|
||||||
}
|
//espDeepSleepFor(PANIK_MODE_DEEPSLEEP);
|
||||||
|
//return;
|
||||||
//give mqtt time, use via publish callback instead?
|
}
|
||||||
delay(100);
|
|
||||||
|
|
||||||
bool lipoTempWarning = lipoTempCurrent != 85 && abs(lipoTempCurrent - t2) > 10;
|
|
||||||
if (lipoTempWarning)
|
|
||||||
{
|
|
||||||
Serial.println("Lipo temp incorrect, panic mode deepsleep TODO");
|
|
||||||
//espDeepSleepFor(PANIK_MODE_DEEPSLEEP);
|
|
||||||
//return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < MAX_PLANTS; i++)
|
for (int i = 0; i < MAX_PLANTS; i++)
|
||||||
@ -443,8 +484,9 @@ void readDistance()
|
|||||||
*/
|
*/
|
||||||
int readTemp() {
|
int readTemp() {
|
||||||
int readAgain = TEMP_SENSOR_MEASURE_SERIES;
|
int readAgain = TEMP_SENSOR_MEASURE_SERIES;
|
||||||
int sensorCount = 0;
|
int sensorCount = sensors.getDeviceCount();
|
||||||
int leaveMode1 = 0;
|
int leaveMode1 = 0;
|
||||||
|
|
||||||
while (readAgain > 0)
|
while (readAgain > 0)
|
||||||
{
|
{
|
||||||
sensors.requestTemperatures();
|
sensors.requestTemperatures();
|
||||||
@ -463,7 +505,11 @@ int readTemp() {
|
|||||||
readAgain = 0;
|
readAgain = 0;
|
||||||
wakeUpReason = WAKEUP_REASON_RTC_MISSING;
|
wakeUpReason = WAKEUP_REASON_RTC_MISSING;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Serial << "No Sensors detected" << endl;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sensorCount > 1 && rtcWaterTempIndex != -1)
|
if (sensorCount > 1 && rtcWaterTempIndex != -1)
|
||||||
{
|
{
|
||||||
float temp2Raw = sensors.getTempCByIndex(rtcWaterTempIndex);
|
float temp2Raw = sensors.getTempCByIndex(rtcWaterTempIndex);
|
||||||
@ -545,6 +591,7 @@ bool readSensors()
|
|||||||
Serial << "Waitloop: One wire count: " << sensorCount << endl;
|
Serial << "Waitloop: One wire count: " << sensorCount << endl;
|
||||||
delay(200);
|
delay(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
Serial << "One wire count: " << sensorCount << endl;
|
Serial << "One wire count: " << sensorCount << endl;
|
||||||
/* Measure temperature */
|
/* Measure temperature */
|
||||||
if (sensorCount > 0)
|
if (sensorCount > 0)
|
||||||
@ -555,22 +602,27 @@ bool readSensors()
|
|||||||
/* Read the distance and give the temperature sensors some time */
|
/* Read the distance and give the temperature sensors some time */
|
||||||
readDistance();
|
readDistance();
|
||||||
Serial << "Distance sensor " << waterRawSensor.getAverage() << " cm" << endl;
|
Serial << "Distance sensor " << waterRawSensor.getAverage() << " cm" << endl;
|
||||||
leaveMode1 |= readTemp();
|
|
||||||
|
|
||||||
for (int i = 0; i < sensorCount; i++)
|
/* Retreive temperatures */
|
||||||
|
if (sensorCount > 0)
|
||||||
{
|
{
|
||||||
Serial << "OnwWire sensor " << i << " has value " << sensors.getTempCByIndex(i) << endl;
|
leaveMode1 |= readTemp();
|
||||||
}
|
|
||||||
|
|
||||||
if (abs(lipoTempSensor.getAverage() - rtcLastLipoTemp) > TEMPERATURE_DELTA_TRIGGER_IN_C)
|
for (int i = 0; i < sensorCount; i++)
|
||||||
{
|
{
|
||||||
leaveMode1 = true;
|
Serial << "OnwWire sensor " << i << " has value " << sensors.getTempCByIndex(i) << endl;
|
||||||
wakeUpReason = WAKEUP_REASON_TEMP1_CHANGE;
|
}
|
||||||
}
|
|
||||||
if (abs(waterTempSensor.getAverage() - rtcLastWaterTemp) > TEMPERATURE_DELTA_TRIGGER_IN_C)
|
if (abs(lipoTempSensor.getAverage() - rtcLastLipoTemp) > TEMPERATURE_DELTA_TRIGGER_IN_C)
|
||||||
{
|
{
|
||||||
wakeUpReason = WAKEUP_REASON_TEMP2_CHANGE;
|
leaveMode1 = true;
|
||||||
leaveMode1 = true;
|
wakeUpReason = WAKEUP_REASON_TEMP1_CHANGE;
|
||||||
|
}
|
||||||
|
if (abs(waterTempSensor.getAverage() - rtcLastWaterTemp) > TEMPERATURE_DELTA_TRIGGER_IN_C)
|
||||||
|
{
|
||||||
|
wakeUpReason = WAKEUP_REASON_TEMP2_CHANGE;
|
||||||
|
leaveMode1 = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* deactivate the sensors */
|
/* deactivate the sensors */
|
||||||
|
Loading…
Reference in New Issue
Block a user