SinricPro Library
Loading...
Searching...
No Matches
ThermostatController.h
1#pragma once
2
3#include "../SinricProRequest.h"
4#include "../EventLimiter.h"
5#include "../SinricProStrings.h"
6
7#include "../SinricProNamespace.h"
8namespace SINRICPRO_NAMESPACE {
9
10FSTR(THERMOSTAT, setThermostatMode); // "setThermostatMode"
11FSTR(THERMOSTAT, thermostatMode); // "thermostatMode"
12FSTR(THERMOSTAT, targetTemperature); // "targetTemperature"
13FSTR(THERMOSTAT, temperature); // "temperature"
14FSTR(THERMOSTAT, adjustTargetTemperature); // "adjustTargetTemperature"
15
30using ThermostatModeCallback = std::function<bool(const String &, String &)>;
31
46using SetTargetTemperatureCallback = std::function<bool(const String &, float &)>;
47
62using AdjustTargetTemperatureCallback = std::function<bool(const String &, float &)>;
63
64
69template <typename T>
71 public:
73
77
80
81 protected:
82 bool handleThermostatController(SinricProRequest &request);
83
84 private:
85 EventLimiter event_limiter_thermostatMode;
86 EventLimiter event_limiter_targetTemperature;
87 ThermostatModeCallback thermostatModeCallback;
88 SetTargetTemperatureCallback targetTemperatureCallback;
89 AdjustTargetTemperatureCallback adjustTargetTemperatureCallback;
90};
91
92template <typename T>
94: event_limiter_thermostatMode(EVENT_LIMIT_STATE)
95, event_limiter_targetTemperature(EVENT_LIMIT_STATE) {
96 T* device = static_cast<T*>(this);
97 device->registerRequestHandler(std::bind(&ThermostatController<T>::handleThermostatController, this, std::placeholders::_1));
98}
99
107template <typename T>
111
119template <typename T>
123
131template <typename T>
135
145template <typename T>
147 if (event_limiter_thermostatMode) return false;
148 T* device = static_cast<T*>(this);
149
153 return device->sendEvent(eventMessage);
154}
155
165template <typename T>
167 if (event_limiter_targetTemperature) return false;
168 T* device = static_cast<T*>(this);
169
173 return device->sendEvent(eventMessage);
174}
175
176template <typename T>
178 T* device = static_cast<T*>(this);
179
180 bool success = false;
181
182 if (request.action == FSTR_THERMOSTAT_targetTemperature && targetTemperatureCallback) {
183 float temperature;
184 if (request.request_value[FSTR_THERMOSTAT_temperature].is<float>()) {
186 } else {
187 temperature = 1;
188 }
189 success = targetTemperatureCallback(device->deviceId, temperature);
190 request.response_value[FSTR_THERMOSTAT_temperature] = temperature;
191 return success;
192 }
193
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;
198 return success;
199 }
200
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;
205 return success;
206 }
207
208 return success;
209}
210
211} // SINRICPRO_NAMESPACE
212
213template <typename T>
214using ThermostatController = SINRICPRO_NAMESPACE::ThermostatController<T>;
AirQuality.
Definition AirQualitySensor.h:19
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