SinricPro Library
SinricProWindowAC.h
1 /*
2  * Copyright (c) 2019 Sinric. All rights reserved.
3  * Licensed under Creative Commons Attribution-Share Alike (CC BY-SA)
4  *
5  * This file is part of the Sinric Pro (https://github.com/sinricpro/)
6  */
7 
8 #ifndef _SINRICWINDOWAC_H_
9 #define _SINRICWINDOWAC_H_
10 
11 #include "SinricProDevice.h"
12 
26  public:
27  SinricProWindowAC(const DeviceId &deviceId);
28  String getProductType() { return SinricProDevice::getProductType() + String("AC_UNIT"); }
29  // callback
30 
45  typedef std::function<bool(const String&, int&)> SetRangeValueCallback;
46 
61  typedef std::function<bool(const String&, int&)> AdjustRangeValueCallback;
62 
77  typedef std::function<bool(const String&, float&)> SetTargetTemperatureCallback;
78 
93  typedef std::function<bool(const String&, float&)> AdjustTargetTemperatureCallback;
94 
109  typedef std::function<bool(const String&, String&)> ThermostatModeCallback;
110 
116  // event
117  bool sendRangeValueEvent(int rangeValue, String cause = "PHYSICAL_INTERACTION");
118  bool sendTemperatureEvent(float temperature, float humidity = -1, String cause = "PERIODIC_POLL");
119  bool sendTargetTemperatureEvent(float temperature, String cause = "PHYSICAL_INTERACTION");
120  bool sendThermostatModeEvent(String thermostatMode, String cause = "PHYSICAL_INTERACTION");
121 
122  // handle
123  bool handleRequest(const DeviceId &deviceId, const char* action, JsonObject &request_value, JsonObject &response_value) override;
124  private:
125  SetRangeValueCallback rangeValueCallback;
126  AdjustRangeValueCallback adjustRangeValueCallback;
127  SetTargetTemperatureCallback targetTemperatureCallback;
128  AdjustTargetTemperatureCallback adjustTargetTemperatureCallback;
129  ThermostatModeCallback thermostatModeCallback;
130 
131 };
132 
133 SinricProWindowAC::SinricProWindowAC(const DeviceId &deviceId) : SinricProDevice(deviceId),
134  rangeValueCallback(nullptr),
135  adjustRangeValueCallback(nullptr),
136  targetTemperatureCallback(nullptr),
137  adjustTargetTemperatureCallback(nullptr),
138  thermostatModeCallback(nullptr) {}
139 
140 bool SinricProWindowAC::handleRequest(const DeviceId &deviceId, const char* action, JsonObject &request_value, JsonObject &response_value) {
141  if (deviceId != this->deviceId) return false;
142  if (SinricProDevice::handleRequest(deviceId, action, request_value, response_value)) return true;
143 
144  bool success = false;
145  String actionString = String(action);
146 
147  if (actionString == "setRangeValue" && rangeValueCallback) {
148  int rangeValue = request_value["rangeValue"] | 0;
149  success = rangeValueCallback(deviceId, rangeValue);
150  response_value["rangeValue"] = rangeValue;
151  return success;
152  }
153 
154  if (actionString == "adjustRangeValue" && adjustRangeValueCallback) {
155  int rangeValueDelta = request_value["rangeValueDelta"] | 0;
156  success = adjustRangeValueCallback(deviceId, rangeValueDelta);
157  response_value["rangeValue"] = rangeValueDelta;
158  return success;
159  }
160 
161  if (actionString == "targetTemperature" && targetTemperatureCallback) {
162  float temperature;
163  if (request_value.containsKey("temperature")) {
164  temperature = request_value["temperature"];
165  } else {
166  temperature = 1;
167  }
168  success = targetTemperatureCallback(deviceId, temperature);
169  response_value["temperature"] = temperature;
170  return success;
171  }
172 
173  if (actionString == "adjustTargetTemperature" && adjustTargetTemperatureCallback) {
174  float temperatureDelta = request_value["temperature"];
175  success = adjustTargetTemperatureCallback(deviceId, temperatureDelta);
176  response_value["temperature"] = temperatureDelta;
177  return success;
178  }
179 
180  if (actionString == "setThermostatMode" && thermostatModeCallback) {
181  String thermostatMode = request_value["thermostatMode"] | "";
182  success = thermostatModeCallback(deviceId, thermostatMode);
183  response_value["thermostatMode"] = thermostatMode;
184  return success;
185  }
186 
187  return success;
188 }
189 
196 void SinricProWindowAC::onRangeValue(SetRangeValueCallback cb) { rangeValueCallback = cb; }
197 
204 void SinricProWindowAC::onAdjustRangeValue(AdjustRangeValueCallback cb) { adjustRangeValueCallback = cb; }
205 
213 void SinricProWindowAC::onTargetTemperature(SetTargetTemperatureCallback cb) { targetTemperatureCallback = cb; }
214 
222 void SinricProWindowAC::onAdjustTargetTemperature(AdjustTargetTemperatureCallback cb) { adjustTargetTemperatureCallback = cb; }
223 
231 void SinricProWindowAC::onThermostatMode(ThermostatModeCallback cb) { thermostatModeCallback = cb; }
232 
242 bool SinricProWindowAC::sendRangeValueEvent(int rangeValue, String cause) {
243  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "setRangeValue", cause.c_str());
244  JsonObject event_value = eventMessage["payload"]["value"];
245  event_value["rangeValue"] = rangeValue;
246  return sendEvent(eventMessage);
247 }
248 
259 bool SinricProWindowAC::sendTemperatureEvent(float temperature, float humidity, String cause) {
260  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "currentTemperature", cause.c_str());
261  JsonObject event_value = eventMessage["payload"]["value"];
262  event_value["humidity"] = humidity;
263  event_value["temperature"] = roundf(temperature * 10) / 10.0;
264  return sendEvent(eventMessage);
265 }
266 
276 bool SinricProWindowAC::sendTargetTemperatureEvent(float temperature, String cause) {
277  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "targetTemperature", cause.c_str());
278  JsonObject event_value = eventMessage["payload"]["value"];
279  event_value["temperature"] = roundf(temperature*10) / 10.0;
280  return sendEvent(eventMessage);
281 }
282 
292 bool SinricProWindowAC::sendThermostatModeEvent(String thermostatMode, String cause) {
293  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "setThermostatMode", cause.c_str());
294  JsonObject event_value = eventMessage["payload"]["value"];
295  event_value["thermostatMode"] = thermostatMode;
296  return sendEvent(eventMessage);
297 }
298 
299 #endif
SinricProWindowAC::onAdjustTargetTemperature
void onAdjustTargetTemperature(AdjustTargetTemperatureCallback cb)
Set callback function for adjustTargetTemperature request.
Definition: SinricProWindowAC.h:222
SinricProWindowAC
Device to control Window Air Conditioner.
Definition: SinricProWindowAC.h:25
SinricProWindowAC::onTargetTemperature
void onTargetTemperature(SetTargetTemperatureCallback cb)
Set callback function for targetTemperature request.
Definition: SinricProWindowAC.h:213
SinricProWindowAC::sendThermostatModeEvent
bool sendThermostatModeEvent(String thermostatMode, String cause="PHYSICAL_INTERACTION")
Send thermostatMode event to report a the new mode the device has been set to.
Definition: SinricProWindowAC.h:292
SinricProWindowAC::AdjustRangeValueCallback
std::function< bool(const String &, int &)> AdjustRangeValueCallback
Callback definition for onAdjustRangeValue function.
Definition: SinricProWindowAC.h:61
SinricProWindowAC::sendTargetTemperatureEvent
bool sendTargetTemperatureEvent(float temperature, String cause="PHYSICAL_INTERACTION")
Send targetTemperature event to report target temperature change.
Definition: SinricProWindowAC.h:276
SinricProWindowAC::SetTargetTemperatureCallback
std::function< bool(const String &, float &)> SetTargetTemperatureCallback
Callback definition for onTargetTemperature function.
Definition: SinricProWindowAC.h:77
SinricProWindowAC::ThermostatModeCallback
std::function< bool(const String &, String &)> ThermostatModeCallback
Callback definition for onThermostatMode function.
Definition: SinricProWindowAC.h:109
SinricProWindowAC::onRangeValue
void onRangeValue(SetRangeValueCallback cb)
Set callback function for setRangeValue request.
Definition: SinricProWindowAC.h:196
SinricProWindowAC::onThermostatMode
void onThermostatMode(ThermostatModeCallback cb)
Set callback function for setThermostatMode request.
Definition: SinricProWindowAC.h:231
SinricProWindowAC::onAdjustRangeValue
void onAdjustRangeValue(AdjustRangeValueCallback cb)
Set callback function for adjustRangeValue request.
Definition: SinricProWindowAC.h:204
SinricProWindowAC::sendTemperatureEvent
bool sendTemperatureEvent(float temperature, float humidity=-1, String cause="PERIODIC_POLL")
Send currentTemperature event to report actual temperature (measured by a sensor)
Definition: SinricProWindowAC.h:259
SinricProDevice
Base class for all device types.
Definition: SinricProDevice.h:24
SinricProWindowAC::AdjustTargetTemperatureCallback
std::function< bool(const String &, float &)> AdjustTargetTemperatureCallback
Callback definition for onAdjustTargetTemperature function.
Definition: SinricProWindowAC.h:93
SinricProWindowAC::SetRangeValueCallback
std::function< bool(const String &, int &)> SetRangeValueCallback
Callback definition for onRangeValue function.
Definition: SinricProWindowAC.h:45
SinricProWindowAC::sendRangeValueEvent
bool sendRangeValueEvent(int rangeValue, String cause="PHYSICAL_INTERACTION")
Send rangeValue event to report curent rangeValue to SinricPro server.
Definition: SinricProWindowAC.h:242