formatting

This commit is contained in:
2025-11-01 17:46:33 +01:00
parent d992218a7d
commit b6150ad452

View File

@ -92,7 +92,8 @@ static sControlTemperatureEntry currentControlEntry =
void taskControl(void *pvParameters);
void findControlCurrentTemperatureEntry(void);
void initControl(void) {
void initControl(void)
{
BaseType_t taskCreated =
xTaskCreate(taskControl, // Function to implement the task
"taskControl", // Task name
@ -102,27 +103,34 @@ void initControl(void) {
NULL // Task handle (optional)
);
if (taskCreated == pdPASS) {
if (taskCreated == pdPASS)
{
ESP_LOGI(TAG, "Task created successfully!");
} else {
}
else
{
ESP_LOGE(TAG, "Failed to create task");
}
}
void taskControl(void *pvParameters) {
void taskControl(void *pvParameters)
{
bool bHeatingInAction = false;
bool bSummerMode = false;
eBurnerState eBurnerState = BURNER_UNKNOWN;
int64_t i64BurnerEnableTimestamp = esp_timer_get_time();
while (1) {
while (1)
{
vTaskDelay(PERIODIC_INTERVAL * 1000U / portTICK_PERIOD_MS);
// Check for safety faults
if (getSafetyState() != SAFETY_NO_ERROR) {
if (getSafetyState() != SAFETY_NO_ERROR)
{
ESP_LOGW(TAG, "Control not possible due to safety fault!");
sControlState = CONTROL_FAULT_SAFETY;
if (bHeatingInAction) {
if (bHeatingInAction)
{
ESP_LOGW(TAG, "Disabling burner due to safety fault");
bHeatingInAction = false;
setBurnerState(DISABLED);
@ -132,10 +140,12 @@ void taskControl(void *pvParameters) {
}
// Check for SNTP faults
if (getSntpState() != SYNC_SUCCESSFUL) {
if (getSntpState() != SYNC_SUCCESSFUL)
{
ESP_LOGW(TAG, "Control not possible due to SNTP fault!");
sControlState = CONTROL_FAULT_SNTP;
if (bHeatingInAction) {
if (bHeatingInAction)
{
ESP_LOGW(TAG, "Disabling burner due to SNTP fault");
bHeatingInAction = false;
setBurnerState(DISABLED);
@ -149,25 +159,32 @@ void taskControl(void *pvParameters) {
getControlCurrentTemperatureEntry();
if (getOutdoorTemperature().fDampedValue >=
SUMMER_MODE_TEMPERATURE_THRESHOLD_HIGH) {
SUMMER_MODE_TEMPERATURE_THRESHOLD_HIGH)
{
bSummerMode = true;
} else if (getOutdoorTemperature().fDampedValue <=
SUMMER_MODE_TEMPERATURE_THRESHOLD_LOW) {
}
else if (getOutdoorTemperature().fDampedValue <=
SUMMER_MODE_TEMPERATURE_THRESHOLD_LOW)
{
bSummerMode = false;
}
// Enable burner if outdoor temperature is low and return flow temperature
// is cooled down
if (!bHeatingInAction && (eBurnerState != BURNER_FAULT)) {
if (bSummerMode) {
if (!bHeatingInAction && (eBurnerState != BURNER_FAULT))
{
if (bSummerMode)
{
// ESP_LOGI(TAG, "Outdoor temperature too warm: Disabling heating");
setBurnerState(DISABLED);
setSafetyControlState(DISABLED);
sControlState = CONTROL_OUTDOOR_TOO_WARM;
} else if ((getReturnFlowTemperature().average60s.fValue <=
}
else if ((getReturnFlowTemperature().average60s.fValue <=
currentControlEntry.fReturnFlowTemperature) &&
(getChamberTemperature().fCurrentValue <=
CHAMBER_TEMPERATURE_THRESHOLD)) {
CHAMBER_TEMPERATURE_THRESHOLD))
{
ESP_LOGI(TAG,
"Enabling burner: Return flow temperature target reached");
eBurnerState = BURNER_UNKNOWN;
@ -176,33 +193,43 @@ void taskControl(void *pvParameters) {
setSafetyControlState(ENABLED);
i64BurnerEnableTimestamp = esp_timer_get_time();
sControlState = CONTROL_HEATING;
} else {
}
else
{
// ESP_LOGI(TAG, "Return flow temperature too warm: Disabling heating");
sControlState = CONTROL_RETURN_FLOW_TOO_WARM;
}
}
// Disable burner if target temperature is reached or a fault occurred
if (bHeatingInAction) {
if (bHeatingInAction)
{
if ((getChamberTemperature().fCurrentValue >=
currentControlEntry.fChamberTemperature) ||
(getChamberTemperature().predict60s.fValue >=
currentControlEntry.fChamberTemperature)) {
currentControlEntry.fChamberTemperature))
{
ESP_LOGI(TAG, "Chamber target temperature reached: Disabling burner");
bHeatingInAction = false;
setBurnerState(DISABLED);
setSafetyControlState(ENABLED);
} else if (esp_timer_get_time() - i64BurnerEnableTimestamp >=
BURNER_FAULT_DETECTION_THRESHOLD * 1000000U) {
if (eBurnerState == BURNER_UNKNOWN) {
if (getBurnerError() == FAULT) {
}
else if (esp_timer_get_time() - i64BurnerEnableTimestamp >=
BURNER_FAULT_DETECTION_THRESHOLD * 1000000U)
{
if (eBurnerState == BURNER_UNKNOWN)
{
if (getBurnerError() == FAULT)
{
// ESP_LOGW(TAG, "Burner fault detected: Disabling burner");
bHeatingInAction = false;
eBurnerState = BURNER_FAULT;
sControlState = CONTROL_FAULT_BURNER;
setBurnerState(DISABLED);
setSafetyControlState(ENABLED);
} else {
}
else
{
// ESP_LOGI(TAG, "No burner fault detected: Marking burner as
// fired");
eBurnerState = BURNER_FIRED;
@ -213,10 +240,13 @@ void taskControl(void *pvParameters) {
// Manage circulation pump
if (getChamberTemperature().fCurrentValue <=
CIRCULATION_PUMP_TEMPERATURE_THRESHOLD) {
CIRCULATION_PUMP_TEMPERATURE_THRESHOLD)
{
// ESP_LOGI(TAG, "Burner cooled down: Disabling circulation pump");
setCirculationPumpState(DISABLED);
} else {
}
else
{
// ESP_LOGI(TAG, "Burner heated: Enabling circulation pump");
setCirculationPumpState(ENABLED);
}
@ -225,7 +255,8 @@ void taskControl(void *pvParameters) {
eControlState getControlState(void) { return sControlState; }
eControlWeekday getControlCurrentWeekday(void) {
eControlWeekday getControlCurrentWeekday(void)
{
time_t now;
struct tm *timeinfo;
@ -250,7 +281,8 @@ eControlWeekday getControlCurrentWeekday(void) {
* that should be active at the current date/time. Falls back to the
* last entry in the week if no suitable entry is found.
*/
void findControlCurrentTemperatureEntry(void) {
void findControlCurrentTemperatureEntry(void)
{
eControlWeekday currentDay = getControlCurrentWeekday();
// Get current time
@ -262,14 +294,16 @@ void findControlCurrentTemperatureEntry(void) {
int currentHour = timeinfo.tm_hour;
int currentMinute = timeinfo.tm_min;
//ESP_LOGI(TAG, "Searching for control entry - Day: %d, Time: %02d:%02d", currentDay, currentHour, currentMinute);
// ESP_LOGI(TAG, "Searching for control entry - Day: %d, Time: %02d:%02d", currentDay, currentHour, currentMinute);
// Search through all days and entries
for (int dayIndex = 0; dayIndex < 7; dayIndex++) {
const sControlDay* day = &aControlTable[dayIndex];
for (int dayIndex = 0; dayIndex < 7; dayIndex++)
{
const sControlDay *day = &aControlTable[dayIndex];
for (int entryIndex = 0; entryIndex < day->entryCount; entryIndex++) {
const sControlTemperatureEntry* entry = &day->aTemperatureEntries[entryIndex];
for (int entryIndex = 0; entryIndex < day->entryCount; entryIndex++)
{
const sControlTemperatureEntry *entry = &day->aTemperatureEntries[entryIndex];
// Check if this entry is in the future (next active entry)
bool isFutureDay = (day->day > currentDay);
@ -278,18 +312,24 @@ void findControlCurrentTemperatureEntry(void) {
(entry->timestamp.hour == currentHour &&
entry->timestamp.minute > currentMinute));
if (isFutureDay || isTodayFutureTime) {
if (isFutureDay || isTodayFutureTime)
{
// Found next scheduled entry, so determine the previous (active) one
if (entryIndex > 0) {
if (entryIndex > 0)
{
// Use previous entry from same day
currentControlEntry = day->aTemperatureEntries[entryIndex - 1];
} else if (dayIndex > 0) {
}
else if (dayIndex > 0)
{
// Use last entry from previous day
const sControlDay* previousDay = &aControlTable[dayIndex - 1];
const sControlDay *previousDay = &aControlTable[dayIndex - 1];
currentControlEntry = previousDay->aTemperatureEntries[previousDay->entryCount - 1];
} else {
}
else
{
// First entry of the week - wrap to last entry of Sunday
const sControlDay* sunday = &aControlTable[6];
const sControlDay *sunday = &aControlTable[6];
currentControlEntry = sunday->aTemperatureEntries[sunday->entryCount - 1];
}
/*
@ -307,14 +347,13 @@ void findControlCurrentTemperatureEntry(void) {
// If we reached here, current time is after all entries this week
// Use the last entry (Sunday evening)
const sControlDay* sunday = &aControlTable[6];
const sControlDay *sunday = &aControlTable[6];
currentControlEntry = sunday->aTemperatureEntries[sunday->entryCount - 1];
ESP_LOGI(TAG, "Using last entry of week - Time: %02d:%02d",
currentControlEntry.timestamp.hour,
currentControlEntry.timestamp.minute);
// ESP_LOGI(TAG, "Using last entry of week - Time: %02d:%02d", currentControlEntry.timestamp.hour, currentControlEntry.timestamp.minute);
}
sControlTemperatureEntry getControlCurrentTemperatureEntry(void) {
sControlTemperatureEntry getControlCurrentTemperatureEntry(void)
{
return currentControlEntry;
}