3 #include "../SinricProRequest.h"
4 #include "../EventLimiter.h"
5 #include "../SinricProStrings.h"
7 #include "../SinricProNamespace.h"
8 namespace SINRICPRO_NAMESPACE {
10 FSTR(THERMOSTAT, setThermostatMode);
11 FSTR(THERMOSTAT, thermostatMode);
12 FSTR(THERMOSTAT, targetTemperature);
13 FSTR(THERMOSTAT, temperature);
14 FSTR(THERMOSTAT, adjustTargetTemperature);
82 bool handleThermostatController(SinricProRequest &request);
85 EventLimiter event_limiter_thermostatMode;
86 EventLimiter event_limiter_targetTemperature;
94 : event_limiter_thermostatMode(EVENT_LIMIT_STATE)
95 , event_limiter_targetTemperature(EVENT_LIMIT_STATE) {
96 T* device =
static_cast<T*
>(
this);
107 template <
typename T>
109 thermostatModeCallback = cb;
119 template <
typename T>
121 targetTemperatureCallback = cb;
131 template <
typename T>
133 adjustTargetTemperatureCallback = cb;
145 template <
typename T>
147 if (event_limiter_thermostatMode)
return false;
148 T* device =
static_cast<T*
>(
this);
150 JsonDocument eventMessage = device->prepareEvent(FSTR_THERMOSTAT_setThermostatMode, cause.c_str());
151 JsonObject event_value = eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_value];
152 event_value[FSTR_THERMOSTAT_thermostatMode] = thermostatMode;
153 return device->sendEvent(eventMessage);
165 template <
typename T>
167 if (event_limiter_targetTemperature)
return false;
168 T* device =
static_cast<T*
>(
this);
170 JsonDocument eventMessage = device->prepareEvent(FSTR_THERMOSTAT_targetTemperature, cause.c_str());
171 JsonObject event_value = eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_value];
172 event_value[FSTR_THERMOSTAT_temperature] = roundf(temperature * 10) / 10.0;
173 return device->sendEvent(eventMessage);
176 template <
typename T>
178 T* device =
static_cast<T*
>(
this);
180 bool success =
false;
182 if (request.action == FSTR_THERMOSTAT_targetTemperature && targetTemperatureCallback) {
184 if (request.request_value.containsKey(FSTR_THERMOSTAT_temperature)) {
185 temperature = request.request_value[FSTR_THERMOSTAT_temperature];
189 success = targetTemperatureCallback(device->deviceId, temperature);
190 request.response_value[FSTR_THERMOSTAT_temperature] = temperature;
194 if (request.action == FSTR_THERMOSTAT_adjustTargetTemperature && adjustTargetTemperatureCallback) {
195 float temperatureDelta = request.request_value[FSTR_THERMOSTAT_temperature];
196 success = adjustTargetTemperatureCallback(device->deviceId, temperatureDelta);
197 request.response_value[FSTR_THERMOSTAT_temperature] = temperatureDelta;
201 if (request.action == FSTR_THERMOSTAT_setThermostatMode && thermostatModeCallback) {
202 String thermostatMode = request.request_value[FSTR_THERMOSTAT_thermostatMode] |
"";
203 success = thermostatModeCallback(device->deviceId, thermostatMode);
204 request.response_value[FSTR_THERMOSTAT_thermostatMode] = thermostatMode;
213 template <
typename T>
214 using ThermostatController = SINRICPRO_NAMESPACE::ThermostatController<T>;
ThermostatController.
Definition: ThermostatController.h:70
void onTargetTemperature(SetTargetTemperatureCallback cb)
Set callback function for targetTemperature request.
Definition: ThermostatController.h:120
void onThermostatMode(ThermostatModeCallback cb)
Set callback function for setThermostatMode request.
Definition: ThermostatController.h:108
bool sendTargetTemperatureEvent(float temperature, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send targetTemperature event to report target temperature change.
Definition: ThermostatController.h:166
void onAdjustTargetTemperature(AdjustTargetTemperatureCallback cb)
Set callback function for adjustTargetTemperature request.
Definition: ThermostatController.h:132
bool sendThermostatModeEvent(String thermostatMode, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send thermostatMode event to report a the new mode the device has been set to.
Definition: ThermostatController.h:146
std::function< bool(const String &, float &)> SetTargetTemperatureCallback
Callback definition for onTargetTemperature function.
Definition: ThermostatController.h:46
std::function< bool(const String &, String &)> ThermostatModeCallback
Callback definition for onThermostatMode function.
Definition: ThermostatController.h:30
std::function< bool(const String &, float &)> AdjustTargetTemperatureCallback
Callback definition for onAdjustTargetTemperature function.
Definition: ThermostatController.h:62