Smart Oil Heating Control System
ESP32-based control system for oil-fired central heating with schedule-based temperature management, safety monitoring, and Prometheus metrics export.
Features
- Schedule Control: Day/night temperature targets per weekday
- Summer Mode: Automatic heating disable based on outdoor temperature
- Safety Monitoring: Sensor sanity checks with automatic safe-state fallback
- Prometheus Metrics: HTTP endpoint at port 9100
System Overview
Prometheus Metrics
curl http://X.X.X.X:9100/metrics
Example
Status Encoding
Digital Themperatur Sensor DS10B20
- chamber_temperature_state
- outdoor_temperature_state
- inlet_flow_temperature_state
- return_flow_temperature_state
| Enum eSensorErrorState in safety.h |
Value |
Description |
| SENSOR_NO_ERROR |
0 |
|
| SENSOR_TOO_HIGH |
1 |
Sanity check failed |
| SENSOR_TOO_LOW |
2 |
Sanity check failed |
| SENSOR_UNCHANGED |
3 |
Sanity check failed |
| SENSOR_NOT_FOUND |
4 |
No Communication |
Safety Loop
| Enum eSafetyState in safety.h |
Value |
Description |
| SAFETY_NO_ERROR |
0 |
|
| SAFETY_SENSOR_ERROR |
1 |
At least one sensor failed |
| SAFETY_INTERNAL_ERROR |
2 |
Internal error |
Control Loop
| Enum eControlState in control.h |
Value |
Description |
| CONTROL_STARTING |
0 |
|
| CONTROL_HEATING |
1 |
Burner running |
| CONTROL_OUTDOOR_TOO_WARM |
2 |
Heating not needed |
| CONTROL_RETURN_FLOW_TOO_WARM |
3 |
Heating not needed |
| CONTROL_FAULT_BURNER |
4 |
Burner reported fault after threshold is reached |
| CONTROL_FAULT_SAFETY |
5 |
Unable to control due safety fault |
| CONTROL_FAULT_SNTP |
6 |
Unable to control due SNTP fault |
SNTP Client
| Enum eSntpState in sntp.h |
Value |
Description |
| SYNC_SUCCESSFUL |
0 |
|
| SYNC_NOT_STARTED |
1 |
|
| SYNC_FAILED |
2 |
|
Hardware
| Function |
ESP32 |
PLC ES32C14 |
| Output CirculationPump |
IO27 |
Relay 1 NC1 |
| Output Burner Fire Signal |
IO14 |
Relay 2 NC2 |
| Output Safety Contact (powers Burner) |
IO12 |
Relay 3 NC2 |
| Input Burner Fault |
IO19 |
Digital Input IN1 |
| Input Temperature DS10B20 |
IO04 |
1-Wire |
Configuration
All parameters configurable via idf.py menuconfig:
- WiFi credentials and static IP
- GPIO pin assignments
- 1-Wire sensor addresses
- Temperature thresholds and limits
- Heating schedule (day/night per weekday)
- Damping factors
Building