/*
|
|
|
|
THERMOSTAT MODULE
|
|
|
|
Copyright (C) 2017 by Dmitry Blinov <dblinov76 at gmail dot com>
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "espurna.h"
|
|
|
|
#include <ArduinoJson.h>
|
|
#include <float.h>
|
|
|
|
#if THERMOSTAT_DISPLAY_SUPPORT
|
|
#include <SSD1306.h> // alias for `#include "SSD1306Wire.h"`
|
|
#endif
|
|
|
|
#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
|
|
|
|
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();
|