#pragma once #include "sdkconfig.h" #include #define MAX_TEMPERATURE_ENTRIES_PER_DAY 24U #define RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY (CONFIG_TEMP_RETURN_FLOW_LOWER_LIMIT_DAY / 10.0f) #define RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT (CONFIG_TEMP_RETURN_FLOW_LOWER_LIMIT_NIGHT / 10.0f) #define CHAMBER_TEMPERATURE_TARGET (CONFIG_TEMP_CHAMBER_TARGET / 10.0f) #define CHAMBER_TEMPERATURE_THRESHOLD (CONFIG_TEMP_CHAMBER_THRESHOLD / 10.0f) #define SUMMER_MODE_TEMPERATURE_THRESHOLD_HIGH (CONFIG_TEMP_SUMMER_MODE_HIGH / 10.0f) #define SUMMER_MODE_TEMPERATURE_THRESHOLD_LOW (CONFIG_TEMP_SUMMER_MODE_LOW / 10.0f) #define CIRCULATION_PUMP_TEMPERATURE_THRESHOLD (CONFIG_TEMP_CIRCULATION_PUMP_THRESHOLD / 10.0f) #define BURNER_FAULT_DETECTION_THRESHOLD CONFIG_BURNER_FAULT_DETECTION_SECONDS typedef enum _ControlState { CONTROL_STARTING, CONTROL_HEATING, CONTROL_OUTDOOR_TOO_WARM, CONTROL_RETURN_FLOW_TOO_WARM, CONTROL_FAULT_BURNER, CONTROL_FAULT_SAFETY, CONTROL_FAULT_SNTP, } eControlState; typedef enum _BurnerState { BURNER_UNKNOWN, // Burner is disabled or state after enabling is still unkown BURNER_FIRED, // Burner fired successfully BURNER_FAULT // Burner was unable to fire successfully } eBurnerState; typedef enum _ControlWeekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY, } eControlWeekday; typedef struct _ControlTimestamp { uint8_t hour; uint8_t minute; } sControlTimestamp; typedef struct _ControlTemperatureEntry { sControlTimestamp timestamp; float fReturnFlowTemperature; float fChamberTemperature; } sControlTemperatureEntry; typedef struct _ControlDay { eControlWeekday day; size_t entryCount; // number of entries for each day sControlTemperatureEntry aTemperatureEntries[MAX_TEMPERATURE_ENTRIES_PER_DAY]; } sControlDay; void initControl(void); eControlState getControlState(void); eControlWeekday getControlCurrentWeekday(void); sControlTemperatureEntry getControlCurrentTemperatureEntry(void);