/* THERMOSTAT MODULE Copyright (C) 2017 by Dmitry Blinov */ #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 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();