add timer only mode, more sane default config
This commit is contained in:
parent
5dedc76727
commit
662d7bc853
@ -45,6 +45,8 @@ static const char *SENSOR_STRING[] = {
|
|||||||
#define MISSING_SENSOR -2
|
#define MISSING_SENSOR -2
|
||||||
//plant uses only cooldown and duration, moisture is measured but ignored, allowedHours is ignored (eg. make a 30min on 30min off cycle)
|
//plant uses only cooldown and duration, moisture is measured but ignored, allowedHours is ignored (eg. make a 30min on 30min off cycle)
|
||||||
#define HYDROPONIC_MODE -3
|
#define HYDROPONIC_MODE -3
|
||||||
|
//plant uses cooldown and duration and workhours, moisture is measured but ignored
|
||||||
|
#define TIMER_ONLY -4
|
||||||
|
|
||||||
typedef struct PlantSettings_t
|
typedef struct PlantSettings_t
|
||||||
{
|
{
|
||||||
|
@ -75,6 +75,12 @@ public:
|
|||||||
return SENSOR_STRING[mode];
|
return SENSOR_STRING[mode];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isTimerOnly()
|
||||||
|
{
|
||||||
|
long current = this->mSetting->pSensorDry->get();
|
||||||
|
return equalish(current, TIMER_ONLY);
|
||||||
|
}
|
||||||
|
|
||||||
bool isHydroponic()
|
bool isHydroponic()
|
||||||
{
|
{
|
||||||
long current = this->mSetting->pSensorDry->get();
|
long current = this->mSetting->pSensorDry->get();
|
||||||
@ -94,7 +100,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool isPumpRequired()
|
bool isPumpRequired()
|
||||||
{
|
{
|
||||||
if (isHydroponic())
|
if (isHydroponic() || isTimerOnly())
|
||||||
{
|
{
|
||||||
// hydroponic only uses timer based controll
|
// hydroponic only uses timer based controll
|
||||||
return true;
|
return true;
|
||||||
|
@ -15,11 +15,11 @@ framework = arduino
|
|||||||
build_flags = -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
|
build_flags = -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
|
||||||
-DPLANT0_SENSORTYPE=ANALOG_RESISTANCE_PROBE
|
-DPLANT0_SENSORTYPE=ANALOG_RESISTANCE_PROBE
|
||||||
-DPLANT1_SENSORTYPE=ANALOG_RESISTANCE_PROBE
|
-DPLANT1_SENSORTYPE=ANALOG_RESISTANCE_PROBE
|
||||||
-DPLANT2_SENSORTYPE=CAPACITIVE_FREQUENCY
|
-DPLANT2_SENSORTYPE=ANALOG_RESISTANCE_PROBE
|
||||||
-DPLANT3_SENSORTYPE=CAPACITIVE_FREQUENCY
|
-DPLANT3_SENSORTYPE=ANALOG_RESISTANCE_PROBE
|
||||||
-DPLANT4_SENSORTYPE=CAPACITIVE_FREQUENCY
|
-DPLANT4_SENSORTYPE=ANALOG_RESISTANCE_PROBE
|
||||||
-DPLANT5_SENSORTYPE=CAPACITIVE_FREQUENCY
|
-DPLANT5_SENSORTYPE=ANALOG_RESISTANCE_PROBE
|
||||||
-DPLANT6_SENSORTYPE=CAPACITIVE_FREQUENCY
|
-DPLANT6_SENSORTYPE=ANALOG_RESISTANCE_PROBE
|
||||||
board_build.partitions = defaultWithSmallerSpiffs.csv
|
board_build.partitions = defaultWithSmallerSpiffs.csv
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ void Plant::init(void)
|
|||||||
/* Initialize Home Settings validator */
|
/* Initialize Home Settings validator */
|
||||||
this->mSetting->pSensorDry->setDefaultValue(DEACTIVATED_PLANT);
|
this->mSetting->pSensorDry->setDefaultValue(DEACTIVATED_PLANT);
|
||||||
this->mSetting->pSensorDry->setValidator([](long candidate)
|
this->mSetting->pSensorDry->setValidator([](long candidate)
|
||||||
{ return (((candidate >= 0.0) && (candidate <= 100.0)) || equalish(candidate, DEACTIVATED_PLANT) || equalish(candidate, HYDROPONIC_MODE)); });
|
{ return (((candidate >= 0.0) && (candidate <= 100.0)) || equalish(candidate, DEACTIVATED_PLANT) || equalish(candidate, HYDROPONIC_MODE) || equalish(candidate, TIMER_ONLY)); });
|
||||||
|
|
||||||
this->mSetting->pPumpAllowedHourRangeStart->setDefaultValue(8); // start at 8:00
|
this->mSetting->pPumpAllowedHourRangeStart->setDefaultValue(8); // start at 8:00
|
||||||
this->mSetting->pPumpAllowedHourRangeStart->setValidator([](long candidate)
|
this->mSetting->pPumpAllowedHourRangeStart->setValidator([](long candidate)
|
||||||
|
@ -460,7 +460,7 @@ int determineNextPump(bool isLowLight)
|
|||||||
log(LOG_LEVEL_DEBUG, String(String(i) + " No pump required: due to light"), LOG_DEBUG_CODE);
|
log(LOG_LEVEL_DEBUG, String(String(i) + " No pump required: due to light"), LOG_DEBUG_CODE);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!plant.isHydroponic())
|
if (! (plant.isHydroponic() || plant.isTimerOnly()))
|
||||||
{
|
{
|
||||||
if (equalish(plant.getCurrentMoistureRaw(), MISSING_SENSOR))
|
if (equalish(plant.getCurrentMoistureRaw(), MISSING_SENSOR))
|
||||||
{
|
{
|
||||||
@ -497,7 +497,7 @@ int determineNextPump(bool isLowLight)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!plant.isHydroponic())
|
if (! (plant.isHydroponic() || plant.isTimerOnly()))
|
||||||
{
|
{
|
||||||
consecutiveWateringPlant[i]++;
|
consecutiveWateringPlant[i]++;
|
||||||
}
|
}
|
||||||
@ -1137,9 +1137,11 @@ bool determineTimedLightState(bool lowLight)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int curHour = getCurrentHour();
|
int curHour = getCurrentHour();
|
||||||
|
|
||||||
bool condition1 = ((hoursStart > hoursEnd) &&
|
bool condition1 = ((hoursStart > hoursEnd) &&
|
||||||
(curHour >= hoursStart || curHour <= hoursEnd));
|
(curHour >= hoursStart || curHour <= hoursEnd));
|
||||||
bool condition2 = /* Handle e.g. start = 8, end = 21 */
|
bool condition2 = /* Handle e.g. start = 8, end = 21 */
|
||||||
|
|
||||||
((hoursStart < hoursEnd) &&
|
((hoursStart < hoursEnd) &&
|
||||||
(curHour >= hoursStart && curHour <= hoursEnd));
|
(curHour >= hoursStart && curHour <= hoursEnd));
|
||||||
timedLightNode.setProperty("debug").send(String(curHour) + " " + String(hoursStart) + " " + String(hoursEnd) + " " + String(condition1) + " " + String(condition2));
|
timedLightNode.setProperty("debug").send(String(curHour) + " " + String(hoursStart) + " " + String(hoursEnd) + " " + String(condition1) + " " + String(condition2));
|
||||||
|
Loading…
Reference in New Issue
Block a user