fixed compile errors
This commit is contained in:
		@@ -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 */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user