SinricPro Library
ThermostatController.h
1 #ifndef _THERMOSTATCONTROLLER_H_
2 #define _THERMOSTATCONTROLLER_H_
3 
4 #include "SinricProRequest.h"
5 
10 template <typename T>
12  public:
13  ThermostatController() { static_cast<T &>(*this).requestHandlers.push_back(std::bind(&ThermostatController<T>::handleThermostatController, this, std::placeholders::_1)); }
28  using ThermostatModeCallback = std::function<bool(const String &, String &)>;
29 
44  using SetTargetTemperatureCallback = std::function<bool(const String &, float &)>;
45 
60  using AdjustTargetTemperatureCallback = std::function<bool(const String &, float &)>;
61 
65 
66  bool sendThermostatModeEvent(String thermostatMode, String cause = "PHYSICAL_INTERACTION");
67  bool sendTargetTemperatureEvent(float temperature, String cause = "PHYSICAL_INTERACTION");
68 
69  protected:
70  bool handleThermostatController(SinricProRequest &request);
71 
72  private:
73  ThermostatModeCallback thermostatModeCallback;
74  SetTargetTemperatureCallback targetTemperatureCallback;
75  AdjustTargetTemperatureCallback adjustTargetTemperatureCallback;
76 };
77 
85 template <typename T>
87  thermostatModeCallback = cb;
88 }
89 
97 template <typename T>
99  targetTemperatureCallback = cb;
100 }
101 
109 template <typename T>
111  adjustTargetTemperatureCallback = cb;
112 }
113 
123 template <typename T>
124 bool ThermostatController<T>::sendThermostatModeEvent(String thermostatMode, String cause) {
125  T &device = static_cast<T &>(*this);
126 
127  DynamicJsonDocument eventMessage = device.prepareEvent("setThermostatMode", cause.c_str());
128  JsonObject event_value = eventMessage["payload"]["value"];
129  event_value["thermostatMode"] = thermostatMode;
130  return device.sendEvent(eventMessage);
131 }
132 
142 template <typename T>
143 bool ThermostatController<T>::sendTargetTemperatureEvent(float temperature, String cause) {
144  T& device = static_cast<T&>(*this);
145 
146  DynamicJsonDocument eventMessage = device.prepareEvent("targetTemperature", cause.c_str());
147  JsonObject event_value = eventMessage["payload"]["value"];
148  event_value["temperature"] = roundf(temperature * 10) / 10.0;
149  return device.sendEvent(eventMessage);
150 }
151 
152 template <typename T>
153 bool ThermostatController<T>::handleThermostatController(SinricProRequest &request) {
154  T &device = static_cast<T &>(*this);
155 
156  bool success = false;
157 
158  if (request.action == "targetTemperature" && targetTemperatureCallback) {
159  float temperature;
160  if (request.request_value.containsKey("temperature")) {
161  temperature = request.request_value["temperature"];
162  } else {
163  temperature = 1;
164  }
165  success = targetTemperatureCallback(device.deviceId, temperature);
166  request.response_value["temperature"] = temperature;
167  return success;
168  }
169 
170  if (request.action == "adjustTargetTemperature" && adjustTargetTemperatureCallback) {
171  float temperatureDelta = request.request_value["temperature"];
172  success = adjustTargetTemperatureCallback(device.deviceId, temperatureDelta);
173  request.response_value["temperature"] = temperatureDelta;
174  return success;
175  }
176 
177  if (request.action == "setThermostatMode" && thermostatModeCallback) {
178  String thermostatMode = request.request_value["thermostatMode"] | "";
179  success = thermostatModeCallback(device.deviceId, thermostatMode);
180  request.response_value["thermostatMode"] = thermostatMode;
181  return success;
182  }
183 
184  return success;
185 }
186 
187 #endif
ThermostatController.
Definition: ThermostatController.h:11
bool sendTargetTemperatureEvent(float temperature, String cause="PHYSICAL_INTERACTION")
Send targetTemperature event to report target temperature change.
Definition: ThermostatController.h:143
void onTargetTemperature(SetTargetTemperatureCallback cb)
Set callback function for targetTemperature request.
Definition: ThermostatController.h:98
void onThermostatMode(ThermostatModeCallback cb)
Set callback function for setThermostatMode request.
Definition: ThermostatController.h:86
std::function< bool(const String &, float &)> SetTargetTemperatureCallback
Callback definition for onTargetTemperature function.
Definition: ThermostatController.h:44
std::function< bool(const String &, String &)> ThermostatModeCallback
Callback definition for onThermostatMode function.
Definition: ThermostatController.h:28
std::function< bool(const String &, float &)> AdjustTargetTemperatureCallback
Callback definition for onAdjustTargetTemperature function.
Definition: ThermostatController.h:60
void onAdjustTargetTemperature(AdjustTargetTemperatureCallback cb)
Set callback function for adjustTargetTemperature request.
Definition: ThermostatController.h:110
bool sendThermostatModeEvent(String thermostatMode, String cause="PHYSICAL_INTERACTION")
Send thermostatMode event to report a the new mode the device has been set to.
Definition: ThermostatController.h:124