sys: clean-up system-specific functions
- shrink utils source file, move heartbeat and boot management into system
- improvise with 'heartbeat' functionality. include scheduler implementation that will
manage the per-module heartbeat callbacks with individual 'mode' and
'interval' settings. current ones are mqtt (including relays, lights, thermostat), debug and
influxdb. preserve heartbeat NONE, ONCE and REPEAT, REPEAT_STATUS is effectively a hbReport & status bit.
- mqtt heartbeat is managed through mqttHeartbeat() callbacks
- tweak mqtt callbacks to use lists instead of the vector, slighly reducing the size of the .bin
- update WebUI, include report setting and update hbMode values
- make sure general.h settings include new heartbeat,
move constant definitions outside of the header
- correctly include dependencies through the .cpp, avoid leaking
internal details.
- as a side-effect, base headers are no longer included recursively
3 years ago |
|
- /*
-
- THERMOSTAT MODULE
-
- Copyright (C) 2017 by Dmitry Blinov <dblinov76 at gmail dot com>
-
- */
-
- #pragma once
-
- #include "espurna.h"
-
- #define ASK_TEMP_RANGE_INTERVAL_INITIAL 15000 // ask initially once per every 15 seconds
- #define ASK_TEMP_RANGE_INTERVAL_REGULAR 60000 // ask every minute to be sure
- #define MILLIS_IN_SEC 1000
- #define MILLIS_IN_MIN 60000
- #define THERMOSTAT_STATE_UPDATE_INTERVAL 60000 // 1 min
- #define THERMOSTAT_RELAY 0 // use relay 0
- #define THERMOSTAT_TEMP_RANGE_MIN 10 // grad. Celsius
- #define THERMOSTAT_TEMP_RANGE_MIN_MIN 3 // grad. Celsius
- #define THERMOSTAT_TEMP_RANGE_MIN_MAX 30 // grad. Celsius
- #define THERMOSTAT_TEMP_RANGE_MAX 20 // grad. Celsius
- #define THERMOSTAT_TEMP_RANGE_MAX_MIN 8 // grad. Celsius
- #define THERMOSTAT_TEMP_RANGE_MAX_MAX 35 // grad. Celsius
- #define THERMOSTAT_ALONE_ON_TIME 5 // 5 min
- #define THERMOSTAT_ALONE_OFF_TIME 55 // 55 min
- #define THERMOSTAT_MAX_ON_TIME 30 // 30 min
- #define THERMOSTAT_MIN_OFF_TIME 10 // 10 min
- #define THERMOSTAT_ENABLED_BY_DEFAULT true
- #define THERMOSTAT_MODE_COOLER_BY_DEFAULT false
-
- #define MQTT_TOPIC_HOLD_TEMP "hold_temp"
- #define MQTT_TOPIC_HOLD_TEMP_MIN "min"
- #define MQTT_TOPIC_HOLD_TEMP_MAX "max"
- #define MQTT_TOPIC_REMOTE_TEMP "remote_temp"
- #define MQTT_TOPIC_ASK_TEMP_RANGE "ask_temp_range"
- #define MQTT_TOPIC_NOTIFY_TEMP_RANGE_MIN "notify_temp_range_min"
- #define MQTT_TOPIC_NOTIFY_TEMP_RANGE_MAX "notify_temp_range_max"
-
- struct temp_t {
- float temp;
- unsigned long last_update = 0;
- bool need_display_update = false;
- };
-
- struct temp_range_t {
- int min = THERMOSTAT_TEMP_RANGE_MIN;
- int max = THERMOSTAT_TEMP_RANGE_MAX;
- unsigned long last_update = 0;
- unsigned long ask_time = 0;
- unsigned long ask_interval = ASK_TEMP_RANGE_INTERVAL_INITIAL;
- bool need_display_update = true;
- };
-
- using thermostat_callback_f = std::function<void(bool state)>;
- void thermostatRegister(thermostat_callback_f callback);
-
- const temp_t& thermostatRemoteTemp();
- const temp_range_t& thermostatRange();
-
- void thermostatEnabled(bool enabled);
- bool thermostatEnabled();
-
- void thermostatModeCooler(bool cooler);
- bool thermostatModeCooler();
-
- void thermostatSetup();
|