diff --git a/main/control.c b/main/control.c index 29a6295..387c953 100644 --- a/main/control.c +++ b/main/control.c @@ -10,9 +10,11 @@ #define PERIODIC_INTERVAL 1U // run control loop every 1sec -#define RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY 30.0 -#define RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT 25.0 -#define CHAMPER_TEMPERATURE_TARGET 80.0 +#define RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY 30.0f +#define RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT 25.0f +#define CHAMPER_TEMPERATURE_TARGET 80.0f // Max cut off temperature, burner will stop if chamber is even or higher +#define CHAMPER_TEMPERATURE_THRESHOLD 45.0f // Min threshold temperature for enabling burner, burner will only start if chamber is even or lower +#define OUTDOOR_TEMPERATURE_THRESHOLD 15.0f // Min threshold temperature for enabling burner, burner will only start if outdoor is even or lower #define BURNER_FAULT_DETECTION_THRESHOLD (60U * 3U) // Detect burner fault if after 3 minutes no burner start detected static const char *TAG = "smart-oil-heater-control-system-control"; @@ -132,15 +134,26 @@ void taskControl(void *pvParameters) if ((bHeatingInAction == false) && (bBurnerFaultDetected == false)) { - if ((getReturnFlowTemperature().average60s.fValue <= currentControlEntry.fReturnFlowTemperature) && (getChamberTemperature().fCurrentValue <= 45.0)) + if ((getReturnFlowTemperature().average60s.fValue <= currentControlEntry.fReturnFlowTemperature) && (getChamberTemperature().fCurrentValue <= CHAMPER_TEMPERATURE_THRESHOLD)) { - ESP_LOGI(TAG, "Return Flow Target Temperature reached: Enable Burner"); - bHeatingInAction = true; - setCirculationPumpState(ENABLED); - setBurnerState(ENABLED); - setSafetyControlState(ENABLED); - i64BurnerEnableTimestamp = esp_timer_get_time(); - sControlState = CONTROL_HEATING; + if (getOutdoorTemperature().average60s.fValue >= OUTDOOR_TEMPERATURE_THRESHOLD) + { + ESP_LOGI(TAG, "Outdoor temperature too warm: Waiting for winter."); + setCirculationPumpState(DISABLED); + setBurnerState(DISABLED); + setSafetyControlState(DISABLED); + sControlState = CONTROL_OUTDOOR_TOO_WARM; + } + else + { + ESP_LOGI(TAG, "Return Flow Target Temperature reached: Enable Burner"); + bHeatingInAction = true; + setCirculationPumpState(ENABLED); + setBurnerState(ENABLED); + setSafetyControlState(ENABLED); + i64BurnerEnableTimestamp = esp_timer_get_time(); + sControlState = CONTROL_HEATING; + } } else {