implement config
This commit is contained in:
@ -1,22 +1,391 @@
|
||||
menu "Smart Oil Heating Control System"
|
||||
|
||||
config SSID
|
||||
string "SSID"
|
||||
default "my WiFi SSID"
|
||||
config WIFI_PASSWORD
|
||||
string "WIFI_PASSWORD"
|
||||
default "my WIFI Password"
|
||||
config STATIC_IP_ADDR
|
||||
string "Static IPv4 address"
|
||||
default "192.168.0.42"
|
||||
config STATIC_IP_NETMASK
|
||||
string "Static IPv4 netmask"
|
||||
default "255.255.0.0"
|
||||
config STATIC_GATEWAY_IP_ADDR
|
||||
string "Static IPv4 gateway address"
|
||||
default "192.168.0.1"
|
||||
config SNTP_SERVER_IP_ADDR
|
||||
string "SNTP IPv4 server address"
|
||||
default "192.168.0.1"
|
||||
menu "WiFi Configuration"
|
||||
config SSID
|
||||
string "WiFi SSID"
|
||||
default "my WiFi SSID"
|
||||
help
|
||||
The SSID of the WiFi network to connect to.
|
||||
|
||||
config WIFI_PASSWORD
|
||||
string "WiFi Password"
|
||||
default "my WIFI Password"
|
||||
help
|
||||
The password for the WiFi network.
|
||||
|
||||
config STATIC_IP_ADDR
|
||||
string "Static IPv4 address"
|
||||
default "192.168.0.42"
|
||||
help
|
||||
Static IP address for the ESP32.
|
||||
|
||||
config STATIC_IP_NETMASK
|
||||
string "Static IPv4 netmask"
|
||||
default "255.255.0.0"
|
||||
help
|
||||
Network mask for the static IP configuration.
|
||||
|
||||
config STATIC_GATEWAY_IP_ADDR
|
||||
string "Static IPv4 gateway address"
|
||||
default "192.168.0.1"
|
||||
help
|
||||
Gateway IP address for network routing.
|
||||
|
||||
config SNTP_SERVER_IP_ADDR
|
||||
string "SNTP server address"
|
||||
default "192.168.0.1"
|
||||
help
|
||||
NTP server address for time synchronization.
|
||||
endmenu
|
||||
|
||||
menu "GPIO Configuration"
|
||||
menu "Input GPIOs"
|
||||
config GPIO_BURNER_FAULT
|
||||
int "Burner fault input GPIO"
|
||||
range 0 39
|
||||
default 19
|
||||
help
|
||||
GPIO pin connected to the burner fault signal.
|
||||
|
||||
config GPIO_DS18B20_ONEWIRE
|
||||
int "DS18B20 1-Wire bus GPIO"
|
||||
range 0 39
|
||||
default 4
|
||||
help
|
||||
GPIO pin for the 1-Wire bus (DS18B20 temperature sensors).
|
||||
endmenu
|
||||
|
||||
menu "Output GPIOs"
|
||||
config GPIO_CIRCULATION_PUMP
|
||||
int "Circulation pump output GPIO"
|
||||
range 0 39
|
||||
default 27
|
||||
help
|
||||
GPIO pin to control the circulation pump relay.
|
||||
|
||||
config GPIO_BURNER
|
||||
int "Burner control output GPIO"
|
||||
range 0 39
|
||||
default 14
|
||||
help
|
||||
GPIO pin to control the burner relay.
|
||||
|
||||
config GPIO_SAFETY_CONTACT
|
||||
int "Safety contact output GPIO"
|
||||
range 0 39
|
||||
default 12
|
||||
help
|
||||
GPIO pin for the safety contact relay (main power to burner).
|
||||
endmenu
|
||||
endmenu
|
||||
|
||||
menu "1-Wire Sensor Addresses"
|
||||
config ONEWIRE_ADDR_CHAMBER_TEMP
|
||||
hex "Chamber temperature sensor address"
|
||||
default 0xd00000108cd01d28
|
||||
help
|
||||
64-bit 1-Wire address of the chamber temperature sensor.
|
||||
|
||||
config ONEWIRE_ADDR_OUTDOOR_TEMP
|
||||
hex "Outdoor temperature sensor address"
|
||||
default 0xd70000108a9b9128
|
||||
help
|
||||
64-bit 1-Wire address of the outdoor temperature sensor.
|
||||
|
||||
config ONEWIRE_ADDR_INLET_FLOW_TEMP
|
||||
hex "Inlet flow temperature sensor address"
|
||||
default 0x410000108b8c0628
|
||||
help
|
||||
64-bit 1-Wire address of the inlet flow temperature sensor.
|
||||
|
||||
config ONEWIRE_ADDR_RETURN_FLOW_TEMP
|
||||
hex "Return flow temperature sensor address"
|
||||
default 0x90000108cc77c28
|
||||
help
|
||||
64-bit 1-Wire address of the return flow temperature sensor.
|
||||
endmenu
|
||||
|
||||
menu "Temperature Control Settings"
|
||||
menu "Target Temperatures"
|
||||
config TEMP_RETURN_FLOW_LOWER_LIMIT_DAY
|
||||
int "Return flow lower limit (day) [°C x 10]"
|
||||
range 150 500
|
||||
default 300
|
||||
help
|
||||
Minimum return flow temperature during day mode in 0.1°C units.
|
||||
Example: 300 = 30.0°C
|
||||
|
||||
config TEMP_RETURN_FLOW_LOWER_LIMIT_NIGHT
|
||||
int "Return flow lower limit (night) [°C x 10]"
|
||||
range 150 500
|
||||
default 250
|
||||
help
|
||||
Minimum return flow temperature during night mode in 0.1°C units.
|
||||
Example: 250 = 25.0°C
|
||||
|
||||
config TEMP_CHAMBER_TARGET
|
||||
int "Chamber target temperature [°C x 10]"
|
||||
range 500 950
|
||||
default 800
|
||||
help
|
||||
Maximum chamber temperature target in 0.1°C units.
|
||||
Example: 800 = 80.0°C
|
||||
|
||||
config TEMP_CHAMBER_THRESHOLD
|
||||
int "Chamber temperature threshold [°C x 10]"
|
||||
range 300 700
|
||||
default 450
|
||||
help
|
||||
Minimum chamber temperature to enable burner in 0.1°C units.
|
||||
Example: 450 = 45.0°C
|
||||
|
||||
config TEMP_CIRCULATION_PUMP_THRESHOLD
|
||||
int "Circulation pump threshold [°C x 10]"
|
||||
range 200 500
|
||||
default 300
|
||||
help
|
||||
Minimum chamber temperature to enable circulation pump in 0.1°C units.
|
||||
Example: 300 = 30.0°C
|
||||
endmenu
|
||||
|
||||
menu "Summer Mode Settings"
|
||||
config TEMP_SUMMER_MODE_HIGH
|
||||
int "Summer mode activation threshold [°C x 10]"
|
||||
range 150 300
|
||||
default 200
|
||||
help
|
||||
Outdoor temperature above which summer mode activates in 0.1°C units.
|
||||
Example: 200 = 20.0°C
|
||||
|
||||
config TEMP_SUMMER_MODE_LOW
|
||||
int "Summer mode deactivation threshold [°C x 10]"
|
||||
range 100 250
|
||||
default 150
|
||||
help
|
||||
Outdoor temperature below which summer mode deactivates in 0.1°C units.
|
||||
Example: 150 = 15.0°C
|
||||
endmenu
|
||||
|
||||
config BURNER_FAULT_DETECTION_SECONDS
|
||||
int "Burner fault detection timeout (seconds)"
|
||||
range 60 600
|
||||
default 240
|
||||
help
|
||||
Time in seconds to wait before checking for burner fault after enabling.
|
||||
endmenu
|
||||
|
||||
menu "Sensor Limits"
|
||||
menu "Chamber Temperature Limits"
|
||||
config SENSOR_LIMIT_CHAMBER_MAX
|
||||
int "Chamber sensor maximum [°C x 10]"
|
||||
range 500 1200
|
||||
default 950
|
||||
help
|
||||
Maximum valid chamber temperature reading in 0.1°C units.
|
||||
|
||||
config SENSOR_LIMIT_CHAMBER_MIN
|
||||
int "Chamber sensor minimum [°C x 10]"
|
||||
range -400 100
|
||||
default -100
|
||||
help
|
||||
Minimum valid chamber temperature reading in 0.1°C units.
|
||||
endmenu
|
||||
|
||||
menu "Outdoor Temperature Limits"
|
||||
config SENSOR_LIMIT_OUTDOOR_MAX
|
||||
int "Outdoor sensor maximum [°C x 10]"
|
||||
range 300 600
|
||||
default 450
|
||||
help
|
||||
Maximum valid outdoor temperature reading in 0.1°C units.
|
||||
|
||||
config SENSOR_LIMIT_OUTDOOR_MIN
|
||||
int "Outdoor sensor minimum [°C x 10]"
|
||||
range -500 0
|
||||
default -200
|
||||
help
|
||||
Minimum valid outdoor temperature reading in 0.1°C units.
|
||||
endmenu
|
||||
|
||||
menu "Inlet Flow Temperature Limits"
|
||||
config SENSOR_LIMIT_INLET_MAX
|
||||
int "Inlet flow sensor maximum [°C x 10]"
|
||||
range 500 1200
|
||||
default 950
|
||||
help
|
||||
Maximum valid inlet flow temperature reading in 0.1°C units.
|
||||
|
||||
config SENSOR_LIMIT_INLET_MIN
|
||||
int "Inlet flow sensor minimum [°C x 10]"
|
||||
range -400 100
|
||||
default -100
|
||||
help
|
||||
Minimum valid inlet flow temperature reading in 0.1°C units.
|
||||
endmenu
|
||||
|
||||
menu "Return Flow Temperature Limits"
|
||||
config SENSOR_LIMIT_RETURN_MAX
|
||||
int "Return flow sensor maximum [°C x 10]"
|
||||
range 500 1200
|
||||
default 950
|
||||
help
|
||||
Maximum valid return flow temperature reading in 0.1°C units.
|
||||
|
||||
config SENSOR_LIMIT_RETURN_MIN
|
||||
int "Return flow sensor minimum [°C x 10]"
|
||||
range -400 100
|
||||
default -100
|
||||
help
|
||||
Minimum valid return flow temperature reading in 0.1°C units.
|
||||
endmenu
|
||||
|
||||
config SENSOR_GRACE_PERIOD_MINUTES
|
||||
int "Sensor unchanged grace period (minutes)"
|
||||
range 1 120
|
||||
default 30
|
||||
help
|
||||
Maximum time in minutes a sensor can report unchanged values
|
||||
before being flagged as faulty.
|
||||
endmenu
|
||||
|
||||
menu "Damping Factors"
|
||||
config DAMPING_FACTOR_WARMER
|
||||
int "Damping factor warmer [x 0.00001]"
|
||||
range 1 100
|
||||
default 1
|
||||
help
|
||||
Damping factor for rising temperatures in units of 0.00001.
|
||||
Example: 1 = 0.00001 (0.001%)
|
||||
|
||||
config DAMPING_FACTOR_COLDER
|
||||
int "Damping factor colder [x 0.00001]"
|
||||
range 1 100
|
||||
default 5
|
||||
help
|
||||
Damping factor for falling temperatures in units of 0.00001.
|
||||
Example: 5 = 0.00005 (0.005%)
|
||||
endmenu
|
||||
|
||||
menu "Heating Schedule"
|
||||
menu "Weekday Schedule (Monday-Thursday)"
|
||||
config SCHEDULE_WEEKDAY_DAY_START_HOUR
|
||||
int "Day mode start hour"
|
||||
range 0 23
|
||||
default 4
|
||||
help
|
||||
Hour when day mode starts on weekdays (24h format).
|
||||
|
||||
config SCHEDULE_WEEKDAY_DAY_START_MINUTE
|
||||
int "Day mode start minute"
|
||||
range 0 59
|
||||
default 45
|
||||
help
|
||||
Minute when day mode starts on weekdays.
|
||||
|
||||
config SCHEDULE_WEEKDAY_NIGHT_START_HOUR
|
||||
int "Night mode start hour"
|
||||
range 0 23
|
||||
default 22
|
||||
help
|
||||
Hour when night mode starts on weekdays (24h format).
|
||||
|
||||
config SCHEDULE_WEEKDAY_NIGHT_START_MINUTE
|
||||
int "Night mode start minute"
|
||||
range 0 59
|
||||
default 0
|
||||
help
|
||||
Minute when night mode starts on weekdays.
|
||||
endmenu
|
||||
|
||||
menu "Friday Schedule"
|
||||
config SCHEDULE_FRIDAY_DAY_START_HOUR
|
||||
int "Day mode start hour"
|
||||
range 0 23
|
||||
default 4
|
||||
help
|
||||
Hour when day mode starts on Friday (24h format).
|
||||
|
||||
config SCHEDULE_FRIDAY_DAY_START_MINUTE
|
||||
int "Day mode start minute"
|
||||
range 0 59
|
||||
default 45
|
||||
help
|
||||
Minute when day mode starts on Friday.
|
||||
|
||||
config SCHEDULE_FRIDAY_NIGHT_START_HOUR
|
||||
int "Night mode start hour"
|
||||
range 0 23
|
||||
default 23
|
||||
help
|
||||
Hour when night mode starts on Friday (24h format).
|
||||
|
||||
config SCHEDULE_FRIDAY_NIGHT_START_MINUTE
|
||||
int "Night mode start minute"
|
||||
range 0 59
|
||||
default 0
|
||||
help
|
||||
Minute when night mode starts on Friday.
|
||||
endmenu
|
||||
|
||||
menu "Saturday Schedule"
|
||||
config SCHEDULE_SATURDAY_DAY_START_HOUR
|
||||
int "Day mode start hour"
|
||||
range 0 23
|
||||
default 6
|
||||
help
|
||||
Hour when day mode starts on Saturday (24h format).
|
||||
|
||||
config SCHEDULE_SATURDAY_DAY_START_MINUTE
|
||||
int "Day mode start minute"
|
||||
range 0 59
|
||||
default 45
|
||||
help
|
||||
Minute when day mode starts on Saturday.
|
||||
|
||||
config SCHEDULE_SATURDAY_NIGHT_START_HOUR
|
||||
int "Night mode start hour"
|
||||
range 0 23
|
||||
default 23
|
||||
help
|
||||
Hour when night mode starts on Saturday (24h format).
|
||||
|
||||
config SCHEDULE_SATURDAY_NIGHT_START_MINUTE
|
||||
int "Night mode start minute"
|
||||
range 0 59
|
||||
default 30
|
||||
help
|
||||
Minute when night mode starts on Saturday.
|
||||
endmenu
|
||||
|
||||
menu "Sunday Schedule"
|
||||
config SCHEDULE_SUNDAY_DAY_START_HOUR
|
||||
int "Day mode start hour"
|
||||
range 0 23
|
||||
default 6
|
||||
help
|
||||
Hour when day mode starts on Sunday (24h format).
|
||||
|
||||
config SCHEDULE_SUNDAY_DAY_START_MINUTE
|
||||
int "Day mode start minute"
|
||||
range 0 59
|
||||
default 45
|
||||
help
|
||||
Minute when day mode starts on Sunday.
|
||||
|
||||
config SCHEDULE_SUNDAY_NIGHT_START_HOUR
|
||||
int "Night mode start hour"
|
||||
range 0 23
|
||||
default 22
|
||||
help
|
||||
Hour when night mode starts on Sunday (24h format).
|
||||
|
||||
config SCHEDULE_SUNDAY_NIGHT_START_MINUTE
|
||||
int "Night mode start minute"
|
||||
range 0 59
|
||||
default 30
|
||||
help
|
||||
Minute when night mode starts on Sunday.
|
||||
endmenu
|
||||
endmenu
|
||||
|
||||
endmenu
|
||||
|
||||
@ -1,28 +1,15 @@
|
||||
#include "control.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_timer.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "inputs.h"
|
||||
#include "outputs.h"
|
||||
#include "safety.h"
|
||||
#include "sntp.h"
|
||||
|
||||
#define PERIODIC_INTERVAL 1U // Run control loop every 1 second
|
||||
#include "esp_log.h"
|
||||
#include "esp_timer.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
|
||||
// Temperature thresholds
|
||||
#define RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY 30.0f
|
||||
#define RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT 25.0f
|
||||
#define CHAMBER_TEMPERATURE_TARGET 80.0f // Max cutoff temperature
|
||||
#define CHAMBER_TEMPERATURE_THRESHOLD 45.0f // Min threshold for burner enable
|
||||
#define SUMMER_MODE_TEMPERATURE_THRESHOLD_HIGH \
|
||||
20.0f // Summer mode will be activated
|
||||
#define SUMMER_MODE_TEMPERATURE_THRESHOLD_LOW \
|
||||
15.0f // Summer mode will be deactivated --> Heating starts
|
||||
#define CIRCULATION_PUMP_TEMPERATURE_THRESHOLD \
|
||||
30.0f // Min threshold of chamber for circulation pump enable
|
||||
#define BURNER_FAULT_DETECTION_THRESHOLD \
|
||||
(60U * 4U) // Burner fault detection after 4 minutes
|
||||
#define PERIODIC_INTERVAL 1U // Run control loop every 1 second
|
||||
|
||||
static const char *TAG = "smart-oil-heater-control-system-control";
|
||||
static eControlState gControlState = CONTROL_STARTING;
|
||||
@ -30,58 +17,58 @@ static eControlState gControlState = CONTROL_STARTING;
|
||||
static const sControlDay gControlTable[] = {
|
||||
{MONDAY,
|
||||
2U,
|
||||
{{{4, 45},
|
||||
{{{CONFIG_SCHEDULE_WEEKDAY_DAY_START_HOUR, CONFIG_SCHEDULE_WEEKDAY_DAY_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY,
|
||||
CHAMBER_TEMPERATURE_TARGET},
|
||||
{{22, 0},
|
||||
{{CONFIG_SCHEDULE_WEEKDAY_NIGHT_START_HOUR, CONFIG_SCHEDULE_WEEKDAY_NIGHT_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT,
|
||||
CHAMBER_TEMPERATURE_TARGET}}},
|
||||
{TUESDAY,
|
||||
2U,
|
||||
{{{4, 45},
|
||||
{{{CONFIG_SCHEDULE_WEEKDAY_DAY_START_HOUR, CONFIG_SCHEDULE_WEEKDAY_DAY_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY,
|
||||
CHAMBER_TEMPERATURE_TARGET},
|
||||
{{22, 0},
|
||||
{{CONFIG_SCHEDULE_WEEKDAY_NIGHT_START_HOUR, CONFIG_SCHEDULE_WEEKDAY_NIGHT_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT,
|
||||
CHAMBER_TEMPERATURE_TARGET}}},
|
||||
{WEDNESDAY,
|
||||
2U,
|
||||
{{{4, 45},
|
||||
{{{CONFIG_SCHEDULE_WEEKDAY_DAY_START_HOUR, CONFIG_SCHEDULE_WEEKDAY_DAY_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY,
|
||||
CHAMBER_TEMPERATURE_TARGET},
|
||||
{{22, 0},
|
||||
{{CONFIG_SCHEDULE_WEEKDAY_NIGHT_START_HOUR, CONFIG_SCHEDULE_WEEKDAY_NIGHT_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT,
|
||||
CHAMBER_TEMPERATURE_TARGET}}},
|
||||
{THURSDAY,
|
||||
2U,
|
||||
{{{4, 45},
|
||||
{{{CONFIG_SCHEDULE_WEEKDAY_DAY_START_HOUR, CONFIG_SCHEDULE_WEEKDAY_DAY_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY,
|
||||
CHAMBER_TEMPERATURE_TARGET},
|
||||
{{22, 0},
|
||||
{{CONFIG_SCHEDULE_WEEKDAY_NIGHT_START_HOUR, CONFIG_SCHEDULE_WEEKDAY_NIGHT_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT,
|
||||
CHAMBER_TEMPERATURE_TARGET}}},
|
||||
{FRIDAY,
|
||||
2U,
|
||||
{{{4, 45},
|
||||
{{{CONFIG_SCHEDULE_FRIDAY_DAY_START_HOUR, CONFIG_SCHEDULE_FRIDAY_DAY_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY,
|
||||
CHAMBER_TEMPERATURE_TARGET},
|
||||
{{23, 0},
|
||||
{{CONFIG_SCHEDULE_FRIDAY_NIGHT_START_HOUR, CONFIG_SCHEDULE_FRIDAY_NIGHT_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT,
|
||||
CHAMBER_TEMPERATURE_TARGET}}},
|
||||
{SATURDAY,
|
||||
2U,
|
||||
{{{6, 45},
|
||||
{{{CONFIG_SCHEDULE_SATURDAY_DAY_START_HOUR, CONFIG_SCHEDULE_SATURDAY_DAY_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY,
|
||||
CHAMBER_TEMPERATURE_TARGET},
|
||||
{{23, 30},
|
||||
{{CONFIG_SCHEDULE_SATURDAY_NIGHT_START_HOUR, CONFIG_SCHEDULE_SATURDAY_NIGHT_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT,
|
||||
CHAMBER_TEMPERATURE_TARGET}}},
|
||||
{SUNDAY,
|
||||
2U,
|
||||
{{{6, 45},
|
||||
{{{CONFIG_SCHEDULE_SUNDAY_DAY_START_HOUR, CONFIG_SCHEDULE_SUNDAY_DAY_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_DAY,
|
||||
CHAMBER_TEMPERATURE_TARGET},
|
||||
{{22, 30},
|
||||
{{CONFIG_SCHEDULE_SUNDAY_NIGHT_START_HOUR, CONFIG_SCHEDULE_SUNDAY_NIGHT_START_MINUTE},
|
||||
RETURN_FLOW_TEMPERATURE_LOWER_LIMIT_NIGHT,
|
||||
CHAMBER_TEMPERATURE_TARGET}}},
|
||||
};
|
||||
@ -377,10 +364,10 @@ void findControlCurrentTemperatureEntry(void)
|
||||
/*
|
||||
ESP_LOGI(TAG, "Active entry found - Time: %02d:%02d, "
|
||||
"Return Temp: %lf, Chamber Temp: %lf",
|
||||
gCurrentControlEntry.timestamp.hour,
|
||||
gCurrentControlEntry.timestamp.minute,
|
||||
gCurrentControlEntry.fReturnFlowTemperature,
|
||||
gCurrentControlEntry.fChamberTemperature);
|
||||
gCurrentControlEntry.timestamp.hour,
|
||||
gCurrentControlEntry.timestamp.minute,
|
||||
gCurrentControlEntry.fReturnFlowTemperature,
|
||||
gCurrentControlEntry.fChamberTemperature);
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1,8 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include "sdkconfig.h"
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#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,
|
||||
|
||||
@ -1,25 +1,26 @@
|
||||
#include "inputs.h"
|
||||
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "driver/gpio.h"
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include "esp_log.h"
|
||||
#include <ds18x20.h>
|
||||
|
||||
#include "inputs.h"
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#define MAX_DN18B20_SENSORS 4U
|
||||
#define ONE_WIRE_LOOPS 4U // try to read the 1-Wire sensors that often
|
||||
#define PERIODIC_INTERVAL 1U // read and compute the inputs every 1sec
|
||||
|
||||
static const char *TAG = "smart-oil-heater-control-system-inputs";
|
||||
const uint8_t uBurnerFaultPin = 19U;
|
||||
const uint8_t uDS18B20Pin = 4U;
|
||||
const uint8_t uBurnerFaultPin = CONFIG_GPIO_BURNER_FAULT;
|
||||
const uint8_t uDS18B20Pin = CONFIG_GPIO_DS18B20_ONEWIRE;
|
||||
|
||||
const onewire_addr_t uChamperTempSensorAddr = 0xd00000108cd01d28;
|
||||
const onewire_addr_t uOutdoorTempSensorAddr = 0xd70000108a9b9128;
|
||||
const onewire_addr_t uInletFlowTempSensorAddr = 0x410000108b8c0628;
|
||||
const onewire_addr_t uReturnFlowTempSensorAddr = 0x90000108cc77c28;
|
||||
const onewire_addr_t uChamperTempSensorAddr = CONFIG_ONEWIRE_ADDR_CHAMBER_TEMP;
|
||||
const onewire_addr_t uOutdoorTempSensorAddr = CONFIG_ONEWIRE_ADDR_OUTDOOR_TEMP;
|
||||
const onewire_addr_t uInletFlowTempSensorAddr = CONFIG_ONEWIRE_ADDR_INLET_FLOW_TEMP;
|
||||
const onewire_addr_t uReturnFlowTempSensorAddr = CONFIG_ONEWIRE_ADDR_RETURN_FLOW_TEMP;
|
||||
|
||||
onewire_addr_t uOneWireAddresses[MAX_DN18B20_SENSORS];
|
||||
float fDS18B20Temps[MAX_DN18B20_SENSORS];
|
||||
|
||||
@ -1,13 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
#include "sdkconfig.h"
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||
#define INITIALISATION_VALUE 0.0f
|
||||
#define AVG10S_SAMPLE_SIZE 10U
|
||||
#define AVG60S_SAMPLE_SIZE 60U
|
||||
#define AVG24H_SAMPLE_SIZE 24U
|
||||
#define PRED60S_SAMPLE_SIZE 60U
|
||||
#define DAMPING_FACTOR_WARMER 0.00001f // 0.001%
|
||||
#define DAMPING_FACTOR_COLDER 0.00005f // 0.005%
|
||||
#define DAMPING_FACTOR_WARMER (CONFIG_DAMPING_FACTOR_WARMER * 0.00001f)
|
||||
#define DAMPING_FACTOR_COLDER (CONFIG_DAMPING_FACTOR_COLDER * 0.00001f)
|
||||
|
||||
typedef enum _BurnerErrorState
|
||||
{
|
||||
|
||||
@ -1,7 +1,3 @@
|
||||
#include "esp_log.h"
|
||||
#include <esp_system.h>
|
||||
#include "nvs_flash.h"
|
||||
|
||||
#include "safety.h"
|
||||
#include "metrics.h"
|
||||
#include "outputs.h"
|
||||
@ -10,6 +6,10 @@
|
||||
#include "wifi.h"
|
||||
#include "sntp.h"
|
||||
|
||||
#include "esp_log.h"
|
||||
#include "esp_system.h"
|
||||
#include "nvs_flash.h"
|
||||
|
||||
static const char *TAG = "smart-oil-heater-control-system";
|
||||
|
||||
void app_main(void)
|
||||
|
||||
@ -1,12 +1,3 @@
|
||||
#include <string.h>
|
||||
#include "esp_timer.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_log.h"
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "metrics.h"
|
||||
#include "outputs.h"
|
||||
#include "inputs.h"
|
||||
@ -14,6 +5,16 @@
|
||||
#include "sntp.h"
|
||||
#include "control.h"
|
||||
|
||||
#include "esp_timer.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
static const char *TAG = "smart-oil-heater-control-system-metrics";
|
||||
|
||||
char caHtmlResponse[HTML_RESPONSE_SIZE];
|
||||
|
||||
@ -1,14 +1,15 @@
|
||||
#include "outputs.h"
|
||||
|
||||
#include "sdkconfig.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
#include "outputs.h"
|
||||
|
||||
static const char *TAG = "smart-oil-heater-control-system-outputs";
|
||||
const uint8_t uCirculationPumpGpioPin = 27U;
|
||||
const uint8_t uBurnerGpioPin = 14U;
|
||||
const uint8_t uSafetyContactGpioPin = 12U;
|
||||
const uint8_t uCirculationPumpGpioPin = CONFIG_GPIO_CIRCULATION_PUMP;
|
||||
const uint8_t uBurnerGpioPin = CONFIG_GPIO_BURNER;
|
||||
const uint8_t uSafetyContactGpioPin = CONFIG_GPIO_SAFETY_CONTACT;
|
||||
|
||||
static SemaphoreHandle_t xMutexAccessOutputs = NULL;
|
||||
static eOutput sCirculationPumpState;
|
||||
|
||||
@ -1,21 +1,22 @@
|
||||
#include "safety.h"
|
||||
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include "safety.h"
|
||||
|
||||
#define PERIODIC_INTERVAL 1U // run safety checks every 1sec
|
||||
#define SENSOR_GRACE_PERIOD (60U * 30U) // period that a sensor can report the same reading in seconds
|
||||
#define PERIODIC_INTERVAL 1U // run safety checks every 1sec
|
||||
#define SENSOR_GRACE_PERIOD (CONFIG_SENSOR_GRACE_PERIOD_MINUTES * 60U) // period that a sensor can report the same reading in seconds
|
||||
#define FLOAT_EPSILON 0.0001f
|
||||
|
||||
static const char *TAG = "smart-oil-heater-control-system-safety";
|
||||
static SemaphoreHandle_t xMutexAccessSafety = NULL;
|
||||
static sSensorSanityCheck sanityChecks[NUMBER_OF_SENSOR_SANITY_CHECKS] = {
|
||||
{SENSOR_NO_ERROR, "chamber_temperature", {95.0f, -10.0f}, 0.0f, 0U, getChamberTemperature},
|
||||
{SENSOR_NO_ERROR, "outdoor_temperature", {45.0f, -20.0f}, 0.0f, 0U, getOutdoorTemperature},
|
||||
{SENSOR_NO_ERROR, "inlet_flow_temperature", {95.0f, -10.0f}, 0.0f, 0U, getInletFlowTemperature},
|
||||
{SENSOR_NO_ERROR, "return_flow_temperature", {95.0f, -10.0f}, 0.0f, 0U, getReturnFlowTemperature}};
|
||||
{SENSOR_NO_ERROR, "chamber_temperature", {SENSOR_LIMIT_CHAMBER_MAX, SENSOR_LIMIT_CHAMBER_MIN}, 0.0f, 0U, getChamberTemperature},
|
||||
{SENSOR_NO_ERROR, "outdoor_temperature", {SENSOR_LIMIT_OUTDOOR_MAX, SENSOR_LIMIT_OUTDOOR_MIN}, 0.0f, 0U, getOutdoorTemperature},
|
||||
{SENSOR_NO_ERROR, "inlet_flow_temperature", {SENSOR_LIMIT_INLET_MAX, SENSOR_LIMIT_INLET_MIN}, 0.0f, 0U, getInletFlowTemperature},
|
||||
{SENSOR_NO_ERROR, "return_flow_temperature", {SENSOR_LIMIT_RETURN_MAX, SENSOR_LIMIT_RETURN_MIN}, 0.0f, 0U, getReturnFlowTemperature}};
|
||||
static eSafetyState sSafetyState = SAFETY_NO_ERROR;
|
||||
|
||||
void taskSafety(void *pvParameters);
|
||||
|
||||
@ -3,9 +3,22 @@
|
||||
#include "outputs.h"
|
||||
#include "inputs.h"
|
||||
|
||||
#include "sdkconfig.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define MAX_ERROR_STRING_SIZE 64U
|
||||
#define NUMBER_OF_SENSOR_SANITY_CHECKS 4U
|
||||
|
||||
#define SENSOR_LIMIT_CHAMBER_MAX (CONFIG_SENSOR_LIMIT_CHAMBER_MAX / 10.0f)
|
||||
#define SENSOR_LIMIT_CHAMBER_MIN (CONFIG_SENSOR_LIMIT_CHAMBER_MIN / 10.0f)
|
||||
#define SENSOR_LIMIT_OUTDOOR_MAX (CONFIG_SENSOR_LIMIT_OUTDOOR_MAX / 10.0f)
|
||||
#define SENSOR_LIMIT_OUTDOOR_MIN (CONFIG_SENSOR_LIMIT_OUTDOOR_MIN / 10.0f)
|
||||
#define SENSOR_LIMIT_INLET_MAX (CONFIG_SENSOR_LIMIT_INLET_MAX / 10.0f)
|
||||
#define SENSOR_LIMIT_INLET_MIN (CONFIG_SENSOR_LIMIT_INLET_MIN / 10.0f)
|
||||
#define SENSOR_LIMIT_RETURN_MAX (CONFIG_SENSOR_LIMIT_RETURN_MAX / 10.0f)
|
||||
#define SENSOR_LIMIT_RETURN_MIN (CONFIG_SENSOR_LIMIT_RETURN_MIN / 10.0f)
|
||||
|
||||
typedef enum _SensorErrorState
|
||||
{
|
||||
SENSOR_NO_ERROR,
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <esp_sntp.h>
|
||||
#include "sntp.h"
|
||||
|
||||
#include "esp_sntp.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
#include "sntp.h"
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
static const char *TAG = "smart-oil-heater-control-system-sntp";
|
||||
static volatile eSntpState sntpState = SYNC_NOT_STARTED;
|
||||
|
||||
@ -1,15 +1,16 @@
|
||||
#include <string.h>
|
||||
#include "wifi.h"
|
||||
|
||||
#include "esp_timer.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "freertos/event_groups.h"
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_event.h"
|
||||
#include "freertos/event_groups.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_netif.h"
|
||||
#include <lwip/sockets.h>
|
||||
|
||||
#include "wifi.h"
|
||||
#include <string.h>
|
||||
|
||||
#define WIFI_CONNECTED_BIT BIT0
|
||||
#define WIFI_FAIL_BIT BIT1
|
||||
|
||||
Reference in New Issue
Block a user