diff --git a/esp32/include/ControllerConfiguration.h b/esp32/include/ControllerConfiguration.h index c9db4b3..2d71e1a 100644 --- a/esp32/include/ControllerConfiguration.h +++ b/esp32/include/ControllerConfiguration.h @@ -107,6 +107,9 @@ #define TEMPERATUR_TIMEOUT 3000 /**< 3 Seconds timeout for the temperatur sensors */ #define DS18B20_RESOLUTION 9 /**< 9bit temperature resolution -> 0.5°C steps */ +#define UTC_OFFSET_DE 3600 /* UTC offset in seconds for Germany */ +#define UTF_OFFSET_DE_DST 3600 /* offset in seconds if daylight saving time is active */ + /* @} */ #endif \ No newline at end of file diff --git a/esp32/include/LogDefines.h b/esp32/include/LogDefines.h index 867ce44..923ba80 100644 --- a/esp32/include/LogDefines.h +++ b/esp32/include/LogDefines.h @@ -24,6 +24,6 @@ #define LOG_PUMP_INEFFECTIVE -4 #define LOG_DEBUG_CODE 1001 -#define LOG_NOPUMP_LOWLIGHT 100 -#define LOG_NOPUMPS 101 +#define LOG_SLEEP_NIGHT 100 +#define LOG_SLEEP_DAY 101 #define LOG_MISSING_PUMP -4 \ No newline at end of file diff --git a/esp32/src/main.cpp b/esp32/src/main.cpp index 162ee2e..39e041c 100644 --- a/esp32/src/main.cpp +++ b/esp32/src/main.cpp @@ -66,7 +66,6 @@ bool determineTimedLightState(bool lowLight); * NON VOLATILE VARIABLES in DEEP SLEEP ******************************************************************************/ -RTC_DATA_ATTR long lastWaterValue = 0; /**< to calculate the used water per plant */ #if defined(TIMED_LIGHT_PIN) RTC_DATA_ATTR bool timedLightOn = false; /**< allow fast recovery after poweron */ RTC_DATA_ATTR bool timedLightLowVoltageTriggered = false; /**remember if it was shut down due to voltage level */ @@ -91,6 +90,12 @@ RunningMedian waterRawSensor = RunningMedian(5); float mSolarVoltage = 0.0f; /**< Voltage from solar panels */ unsigned long setupFinishedTimestamp; +bool pumpStarted = false; +long pumpTarget = -1; +#ifdef FLOWMETER +long pumpTargetMl = -1; +#endif + /*************************** Hardware abstraction *****************************/ OneWire oneWire(SENSOR_ONEWIRE); @@ -154,12 +159,12 @@ void espDeepSleep() if (mSolarVoltage < SOLAR_CHARGE_MIN_VOLTAGE) { - log(LOG_LEVEL_INFO, String(String(mSolarVoltage) + "V! No pumps to activate and low light, deepSleepNight"), LOG_NOPUMP_LOWLIGHT); - secondsToSleep = deepSleepTime.get(); + log(LOG_LEVEL_INFO, String(String(mSolarVoltage) + "V! Low light -> deepSleepNight"), LOG_SLEEP_NIGHT); + secondsToSleep = deepSleepNightTime.get(); } else { - log(LOG_LEVEL_INFO, "No pumps to activate, deepSleep", LOG_NOPUMPS); + log(LOG_LEVEL_INFO, "Sunny -> deepSleep", LOG_SLEEP_DAY); secondsToSleep = deepSleepTime.get(); } @@ -374,7 +379,7 @@ void onHomieEvent(const HomieEvent &event) } mSensorsRead = true; // MQTT is working, deactivate timeout logic - configTime(3600, 3600, ntpServer.get()); + configTime(UTC_OFFSET_DE, UTF_OFFSET_DE_DST, ntpServer.get()); { getTopic(TEST_TOPIC, testopic) @@ -586,14 +591,10 @@ bool switch7(const HomieRange &range, const String &value) return mPlants[6].switchHandler(range, value); } -bool pumpStarted = false; -long pumpTarget = -1; -#ifdef FLOWMETER -long pumpTargetMl = -1; -#endif void pumpActiveLoop() { + bool targetReached = false; if (!pumpStarted) { @@ -612,7 +613,6 @@ void pumpActiveLoop() pumpStarted = true; } - bool targetReached = false; #ifdef FLOWMETER long pumped = //readFlowMeterCounter * ratio; if(pumped >= pumpTargetMl)) @@ -620,12 +620,12 @@ void pumpActiveLoop() targetReached = true; } mPlants[pumpToRun].setProperty("waterusage").send(String(pumped)); -#endif - +#else if (millis() > pumpTarget) { targetReached = true; } +#endif if (targetReached) { @@ -922,8 +922,7 @@ void plantcontrol() readOneWireSensors(); Serial << "W : " << waterRawSensor.getAverage() << " cm (" << String(waterLevelMax.get() - waterRawSensor.getAverage()) << "%)" << endl; - lastWaterValue = waterRawSensor.getAverage(); - + float batteryVoltage = battery.getVoltage(BATTSENSOR_INDEX_BATTERY); float chipTemp = battery.getTemperature(); Serial << "Chip Temperatur " << chipTemp << " °C " << endl; @@ -956,7 +955,7 @@ void plantcontrol() } bool isLowLight = (mSolarVoltage < SOLAR_CHARGE_MIN_VOLTAGE); - bool hasWater = true; //FIXMEmWaterGone > waterLevelMin.get(); + bool hasWater = true; //FIXME remaining > waterLevelMin.get(); //FIXME no water warning message pumpToRun = determineNextPump(isLowLight); //early aborts