fixed compile errors
This commit is contained in:
parent
2f8e26b48d
commit
b0829cba6b
@ -17,15 +17,15 @@
|
|||||||
class Plant {
|
class Plant {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int mPinSensor=0; /**< Pin of the moist sensor */
|
|
||||||
int mPinPump=0; /**< Pin of the pump */
|
|
||||||
|
|
||||||
int mValue = 0; /**< Value of the moist sensor */
|
int mValue = 0; /**< Value of the moist sensor */
|
||||||
|
|
||||||
int mAnalogValue=0; /**< moist sensor values, used for a calculation */
|
int mAnalogValue=0; /**< moist sensor values, used for a calculation */
|
||||||
HomieNode* mPlant = NULL;
|
HomieNode* mPlant = NULL;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//FIXME visibility
|
||||||
|
int mPinSensor=0; /**< Pin of the moist sensor */
|
||||||
|
int mPinPump=0; /**< Pin of the pump */
|
||||||
PlantSettings_t* mSetting;
|
PlantSettings_t* mSetting;
|
||||||
/**
|
/**
|
||||||
* @brief Construct a new Plant object
|
* @brief Construct a new Plant object
|
||||||
|
@ -95,6 +95,83 @@ void readSystemSensors() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int determineNextPump();
|
||||||
|
void setLastActivationForPump(int pumpId, long time);
|
||||||
|
|
||||||
|
|
||||||
|
//FIXME real impl
|
||||||
|
long getCurrentTime(){
|
||||||
|
return 1337;
|
||||||
|
}
|
||||||
|
|
||||||
|
//wait till homie flushed mqtt ect.
|
||||||
|
void prepareSleep() {
|
||||||
|
//FIXME wait till pending mqtt is done, then start sleep via event or whatever
|
||||||
|
//Homie.prepareToSleep();
|
||||||
|
}
|
||||||
|
|
||||||
|
void mode2MQTT(){
|
||||||
|
if (deepSleepTime.get()) {
|
||||||
|
Serial << "HOMIE | Setup sleeping for " << deepSleepTime.get() << " ms" << endl;
|
||||||
|
}
|
||||||
|
/* Publish default values */
|
||||||
|
|
||||||
|
if(lastPumpRunning != -1){
|
||||||
|
long waterDiff = mWaterGone-lastWaterValue;
|
||||||
|
//TODO attribute used water in ml to plantid
|
||||||
|
}
|
||||||
|
sensorWater.setProperty("remaining").send(String(waterLevelMax.get() - mWaterGone ));
|
||||||
|
Serial << "Water : " << mWaterGone << " cm (" << String(waterLevelMax.get() - mWaterGone ) << "%)" << endl;
|
||||||
|
lastWaterValue = mWaterGone;
|
||||||
|
|
||||||
|
if (mWaterGone <= waterLevelMin.get()) {
|
||||||
|
/* let the ESP sleep qickly, as nothing must be done */
|
||||||
|
if ((millis() >= (MIN_TIME_RUNNING * MS_TO_S)) && (deepSleepTime.get() > 0)) {
|
||||||
|
Serial << "No Water for pumps" << endl;
|
||||||
|
t.after(50, prepareSleep);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sensorLipo.setProperty("percent").send( String(100 * lipoSenor / 4095) );
|
||||||
|
sensorLipo.setProperty("volt").send( String(ADC_5V_TO_3V3(lipoSenor)) );
|
||||||
|
sensorSolar.setProperty("percent").send(String((100 * solarSensor ) / 4095));
|
||||||
|
sensorSolar.setProperty("volt").send( String(SOLAR_VOLT(solarSensor)) );
|
||||||
|
|
||||||
|
float temp[2] = { TEMP_INIT_VALUE, TEMP_INIT_VALUE };
|
||||||
|
float* pFloat = temp;
|
||||||
|
int devices = dallas.readAllTemperatures(pFloat, 2);
|
||||||
|
if (devices < 2) {
|
||||||
|
if ((pFloat[0] > TEMP_INIT_VALUE) && (pFloat[0] < TEMP_MAX_VALUE) ) {
|
||||||
|
sensorTemp.setProperty("control").send( String(pFloat[0]));
|
||||||
|
}
|
||||||
|
} else if (devices >= 2) {
|
||||||
|
if ((pFloat[0] > TEMP_INIT_VALUE) && (pFloat[0] < TEMP_MAX_VALUE) ) {
|
||||||
|
sensorTemp.setProperty("temp").send( String(pFloat[0]));
|
||||||
|
}
|
||||||
|
if ((pFloat[1] > TEMP_INIT_VALUE) && (pFloat[1] < TEMP_MAX_VALUE) ) {
|
||||||
|
sensorTemp.setProperty("control").send( String(pFloat[1]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool lipoTempWarning = abs(temp[1] - temp[2]) > 5;
|
||||||
|
if(lipoTempWarning){
|
||||||
|
t.after(50, prepareSleep);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
digitalWrite(OUTPUT_PUMP, LOW);
|
||||||
|
for(int i=0; i < MAX_PLANTS; i++) {
|
||||||
|
digitalWrite(mPlants[i].mPinPump, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
lastPumpRunning = determineNextPump();
|
||||||
|
if(lastPumpRunning != -1){
|
||||||
|
setLastActivationForPump(lastPumpRunning, getCurrentTime());
|
||||||
|
digitalWrite(mPlants[lastPumpRunning].mPinPump, HIGH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void setMoistureTrigger(int plantId, long value){
|
void setMoistureTrigger(int plantId, long value){
|
||||||
if(plantId == 0){
|
if(plantId == 0){
|
||||||
rtcMoistureTrigger0 = value;
|
rtcMoistureTrigger0 = value;
|
||||||
@ -143,27 +220,27 @@ void setLastActivationForPump(int plantId, long value){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void getLastActivationForPump(int plantId){
|
long getLastActivationForPump(int plantId){
|
||||||
if(plantId == 0){
|
if(plantId == 0){
|
||||||
return rtcLastActive0
|
return rtcLastActive0;
|
||||||
}
|
}
|
||||||
if(plantId == 1){
|
if(plantId == 1){
|
||||||
return rtcLastActive1
|
return rtcLastActive1;
|
||||||
}
|
}
|
||||||
if(plantId == 2){
|
if(plantId == 2){
|
||||||
return rtcLastActive2
|
return rtcLastActive2;
|
||||||
}
|
}
|
||||||
if(plantId == 3){
|
if(plantId == 3){
|
||||||
return rtcLastActive4
|
return rtcLastActive3;
|
||||||
}
|
}
|
||||||
if(plantId == 4){
|
if(plantId == 4){
|
||||||
return rtcLastActive4
|
return rtcLastActive4;
|
||||||
}
|
}
|
||||||
if(plantId == 5){
|
if(plantId == 5){
|
||||||
return rtcLastActive5
|
return rtcLastActive5;
|
||||||
}
|
}
|
||||||
if(plantId == 6){
|
if(plantId == 6){
|
||||||
return rtcLastActive6
|
return rtcLastActive6;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -223,15 +300,8 @@ void readSensors() {
|
|||||||
digitalWrite(OUTPUT_SENSOR, LOW);
|
digitalWrite(OUTPUT_SENSOR, LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
//wait till homie flushed mqtt ect.
|
|
||||||
void prepareSleep() {
|
|
||||||
Homie.prepareToSleep();
|
|
||||||
}
|
|
||||||
|
|
||||||
//FIXME real impl
|
|
||||||
long getCurrentTime(){
|
|
||||||
return 1337;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Homie.getMqttClient().disconnect();
|
//Homie.getMqttClient().disconnect();
|
||||||
|
|
||||||
@ -261,7 +331,7 @@ void onHomieEvent(const HomieEvent& event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int determineNextPump(){
|
int determineNextPump(){
|
||||||
float solarValue = solarRawSensor.getMedian()
|
float solarValue = solarRawSensor.getMedian();
|
||||||
bool isLowLight =(ADC_5V_TO_3V3(solarValue) > SOLAR_CHARGE_MIN_VOLTAGE || ADC_5V_TO_3V3(solarValue) < SOLAR_CHARGE_MAX_VOLTAGE);
|
bool isLowLight =(ADC_5V_TO_3V3(solarValue) > SOLAR_CHARGE_MIN_VOLTAGE || ADC_5V_TO_3V3(solarValue) < SOLAR_CHARGE_MAX_VOLTAGE);
|
||||||
|
|
||||||
|
|
||||||
@ -274,12 +344,12 @@ int determineNextPump(){
|
|||||||
long lastActivation = getLastActivationForPump(i);
|
long lastActivation = getLastActivationForPump(i);
|
||||||
long sinceLastActivation = getCurrentTime()-lastActivation;
|
long sinceLastActivation = getCurrentTime()-lastActivation;
|
||||||
//this pump is in cooldown skip it and disable low power mode trigger for it
|
//this pump is in cooldown skip it and disable low power mode trigger for it
|
||||||
if(mPlants[i].mSetting->pPumpCooldownInHours > sinceLastActivation * ){
|
if(mPlants[i].mSetting->pPumpCooldownInHours->get() > sinceLastActivation / 3600 / 1000){
|
||||||
setMoistureTrigger(i, DEACTIVATED_PLANT)
|
setMoistureTrigger(i, DEACTIVATED_PLANT);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//skip as it is not low light
|
//skip as it is not low light
|
||||||
if(!isLowLight && mPlants[i].mSetting->pPumpOnlyWhenLowLight.get()){
|
if(!isLowLight && mPlants[i].mSetting->pPumpOnlyWhenLowLight->get()){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,68 +360,6 @@ int determineNextPump(){
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mode2MQTT(){
|
|
||||||
if (deepSleepTime.get()) {
|
|
||||||
Serial << "HOMIE | Setup sleeping for " << deepSleepTime.get() << " ms" << endl;
|
|
||||||
}
|
|
||||||
/* Publish default values */
|
|
||||||
|
|
||||||
if(lastPumpRunning != -1){
|
|
||||||
long waterDiff = mWaterGone-lastWaterValue
|
|
||||||
//TODO attribute used water in ml to plantid
|
|
||||||
}
|
|
||||||
sensorWater.setProperty("remaining").send(String(waterLevelMax.get() - mWaterGone ));
|
|
||||||
Serial << "Water : " << mWaterGone << " cm (" << String(waterLevelMax.get() - mWaterGone ) << "%)" << endl;
|
|
||||||
lastWaterValue = mWaterGone
|
|
||||||
|
|
||||||
if (mWaterGone <= waterLevelMin.get()) {
|
|
||||||
/* let the ESP sleep qickly, as nothing must be done */
|
|
||||||
if ((millis() >= (MIN_TIME_RUNNING * MS_TO_S)) && (deepSleepTime.get() > 0)) {
|
|
||||||
Serial << "No Water for pumps" << endl;
|
|
||||||
t.after(50, prepareSleep);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sensorLipo.setProperty("percent").send( String(100 * lipoSenor / 4095) );
|
|
||||||
sensorLipo.setProperty("volt").send( String(ADC_5V_TO_3V3(lipoSenor)) );
|
|
||||||
sensorSolar.setProperty("percent").send(String((100 * solarSensor ) / 4095));
|
|
||||||
sensorSolar.setProperty("volt").send( String(SOLAR_VOLT(solarSensor)) );
|
|
||||||
|
|
||||||
float temp[2] = { TEMP_INIT_VALUE, TEMP_INIT_VALUE };
|
|
||||||
float* pFloat = temp;
|
|
||||||
int devices = dallas.readAllTemperatures(pFloat, 2);
|
|
||||||
if (devices < 2) {
|
|
||||||
if ((pFloat[0] > TEMP_INIT_VALUE) && (pFloat[0] < TEMP_MAX_VALUE) ) {
|
|
||||||
sensorTemp.setProperty("control").send( String(pFloat[0]));
|
|
||||||
}
|
|
||||||
} else if (devices >= 2) {
|
|
||||||
if ((pFloat[0] > TEMP_INIT_VALUE) && (pFloat[0] < TEMP_MAX_VALUE) ) {
|
|
||||||
sensorTemp.setProperty("temp").send( String(pFloat[0]));
|
|
||||||
}
|
|
||||||
if ((pFloat[1] > TEMP_INIT_VALUE) && (pFloat[1] < TEMP_MAX_VALUE) ) {
|
|
||||||
sensorTemp.setProperty("control").send( String(pFloat[1]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool lipoTempWarning = math.abs(temp[1] - temp[2]) > 5;
|
|
||||||
if(lipoTempWarning){
|
|
||||||
t.after(50, prepareSleep);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
digitalWrite(OUTPUT_PUMP, LOW);
|
|
||||||
for(int i=0; i < MAX_PLANTS; i++) {
|
|
||||||
digitalWrite(mPlants[pumpOrNegative].mPinPump, LOW);
|
|
||||||
}
|
|
||||||
|
|
||||||
lastPumpRunning = determineNextPump()
|
|
||||||
if(pumpOrNegative != -1){
|
|
||||||
setLastActivationForPump(pumpOrNegative, getCurrentTime())
|
|
||||||
digitalWrite(mPlants[pumpOrNegative].mPinPump, HIGH);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool switchGeneralPumpHandler(const int pump, const HomieRange& range, const String& value) {
|
bool switchGeneralPumpHandler(const int pump, const HomieRange& range, const String& value) {
|
||||||
if (range.isRange) return false; // only one switch is present
|
if (range.isRange) return false; // only one switch is present
|
||||||
@ -453,8 +461,6 @@ void systemInit(){
|
|||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
|
|
||||||
Homie_setFirmware("PlantControl", FIRMWARE_VERSION);
|
Homie_setFirmware("PlantControl", FIRMWARE_VERSION);
|
||||||
Homie.setLoopFunction(loopHandler);
|
|
||||||
|
|
||||||
|
|
||||||
// Set default values
|
// Set default values
|
||||||
deepSleepTime.setDefaultValue(300000); /* 5 minutes in milliseconds */
|
deepSleepTime.setDefaultValue(300000); /* 5 minutes in milliseconds */
|
||||||
|
Loading…
Reference in New Issue
Block a user