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 
25  public:
26  SinricProWindowAC(const char* deviceId, unsigned long eventWaitTime=30000);
27  String getProductType() { return SinricProDevice::getProductType() + String("AC_UNIT"); }
28  // callback
29 
44  typedef std::function<bool(const String&, int&)> SetRangeValueCallback;
45 
60  typedef std::function<bool(const String&, int&)> AdjustRangeValueCallback;
61 
76  typedef std::function<bool(const String&, float&)> SetTargetTemperatureCallback;
77 
92  typedef std::function<bool(const String&, float&)> AdjustTargetTemperatureCallback;
93 
108  typedef std::function<bool(const String&, String&)> ThermostatModeCallback;
109 
115  // event
116  bool sendRangeValueEvent(int rangeValue, String cause = "PHYSICAL_INTERACTION");
117  bool sendTemperatureEvent(float temperature, float humidity = -1, String cause = "PERIODIC_POLL");
118  bool sendTargetTemperatureEvent(float temperature, String cause = "PHYSICAL_INTERACTION");
119  bool sendThermostatModeEvent(String thermostatMode, String cause = "PHYSICAL_INTERACTION");
120 
121  // handle
122  bool handleRequest(const char* deviceId, const char* action, JsonObject &request_value, JsonObject &response_value) override;
123  private:
124  SetRangeValueCallback rangeValueCallback;
125  AdjustRangeValueCallback adjustRangeValueCallback;
126  SetTargetTemperatureCallback targetTemperatureCallback;
127  AdjustTargetTemperatureCallback adjustTargetTemperatureCallback;
128  ThermostatModeCallback thermostatModeCallback;
129 
130 };
131 
132 SinricProWindowAC::SinricProWindowAC(const char* deviceId, unsigned long eventWaitTime) : SinricProDevice(deviceId, eventWaitTime),
133  rangeValueCallback(nullptr),
134  adjustRangeValueCallback(nullptr),
135  targetTemperatureCallback(nullptr),
136  adjustTargetTemperatureCallback(nullptr),
137  thermostatModeCallback(nullptr) {}
138 
139 bool SinricProWindowAC::handleRequest(const char* deviceId, const char* action, JsonObject &request_value, JsonObject &response_value) {
140  if (strcmp(deviceId, this->deviceId) != 0) return false;
141  if (SinricProDevice::handleRequest(deviceId, action, request_value, response_value)) return true;
142 
143  bool success = false;
144  String actionString = String(action);
145 
146  if (actionString == "setRangeValue" && rangeValueCallback) {
147  int rangeValue = request_value["rangeValue"] | 0;
148  success = rangeValueCallback(String(deviceId), rangeValue);
149  response_value["rangeValue"] = rangeValue;
150  return success;
151  }
152 
153  if (actionString == "adjustRangeValue" && adjustRangeValueCallback) {
154  int rangeValueDelta = request_value["rangeValueDelta"] | 0;
155  success = adjustRangeValueCallback(String(deviceId), rangeValueDelta);
156  response_value["rangeValue"] = rangeValueDelta;
157  return success;
158  }
159 
160  if (actionString == "targetTemperature" && targetTemperatureCallback) {
161  float temperature;
162  if (request_value.containsKey("temperature")) {
163  temperature = request_value["temperature"];
164  } else {
165  temperature = 1;
166  }
167  success = targetTemperatureCallback(String(deviceId), temperature);
168  response_value["temperature"] = temperature;
169  return success;
170  }
171 
172  if (actionString == "adjustTargetTemperature" && adjustTargetTemperatureCallback) {
173  float temperatureDelta = request_value["temperature"];
174  success = adjustTargetTemperatureCallback(String(deviceId), temperatureDelta);
175  response_value["temperature"] = temperatureDelta;
176  return success;
177  }
178 
179  if (actionString == "setThermostatMode" && thermostatModeCallback) {
180  String thermostatMode = request_value["thermostatMode"] | "";
181  success = thermostatModeCallback(String(deviceId), thermostatMode);
182  response_value["thermostatMode"] = thermostatMode;
183  return success;
184  }
185 
186  return success;
187 }
188 
195 void SinricProWindowAC::onRangeValue(SetRangeValueCallback cb) { rangeValueCallback = cb; }
196 
203 void SinricProWindowAC::onAdjustRangeValue(AdjustRangeValueCallback cb) { adjustRangeValueCallback = cb; }
204 
212 void SinricProWindowAC::onTargetTemperature(SetTargetTemperatureCallback cb) { targetTemperatureCallback = cb; }
213 
221 void SinricProWindowAC::onAdjustTargetTemperature(AdjustTargetTemperatureCallback cb) { adjustTargetTemperatureCallback = cb; }
222 
230 void SinricProWindowAC::onThermostatMode(ThermostatModeCallback cb) { thermostatModeCallback = cb; }
231 
241 bool SinricProWindowAC::sendRangeValueEvent(int rangeValue, String cause) {
242  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "setRangeValue", cause.c_str());
243  JsonObject event_value = eventMessage["payload"]["value"];
244  event_value["rangeValue"] = rangeValue;
245  return sendEvent(eventMessage);
246 }
247 
258 bool SinricProWindowAC::sendTemperatureEvent(float temperature, float humidity, String cause) {
259  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "currentTemperature", cause.c_str());
260  JsonObject event_value = eventMessage["payload"]["value"];
261  event_value["humidity"] = humidity;
262  event_value["temperature"] = roundf(temperature * 10) / 10.0;
263  return sendEvent(eventMessage);
264 }
265 
275 bool SinricProWindowAC::sendTargetTemperatureEvent(float temperature, String cause) {
276  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "targetTemperature", cause.c_str());
277  JsonObject event_value = eventMessage["payload"]["value"];
278  event_value["temperature"] = roundf(temperature*10) / 10.0;
279  return sendEvent(eventMessage);
280 }
281 
291 bool SinricProWindowAC::sendThermostatModeEvent(String thermostatMode, String cause) {
292  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "setThermostatMode", cause.c_str());
293  JsonObject event_value = eventMessage["payload"]["value"];
294  event_value["thermostatMode"] = thermostatMode;
295  return sendEvent(eventMessage);
296 }
297 
298 #endif
SinricProWindowAC::onAdjustTargetTemperature
void onAdjustTargetTemperature(AdjustTargetTemperatureCallback cb)
Set callback function for adjustTargetTemperature request.
Definition: SinricProWindowAC.h:221
SinricProWindowAC
Device to control Window Air Conditioner.
Definition: SinricProWindowAC.h:24
SinricProWindowAC::onTargetTemperature
void onTargetTemperature(SetTargetTemperatureCallback cb)
Set callback function for targetTemperature request.
Definition: SinricProWindowAC.h:212
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:291
SinricProWindowAC::AdjustRangeValueCallback
std::function< bool(const String &, int &)> AdjustRangeValueCallback
Callback definition for onAdjustRangeValue function.
Definition: SinricProWindowAC.h:60
SinricProWindowAC::sendTargetTemperatureEvent
bool sendTargetTemperatureEvent(float temperature, String cause="PHYSICAL_INTERACTION")
Send targetTemperature event to report target temperature change.
Definition: SinricProWindowAC.h:275
SinricProWindowAC::SetTargetTemperatureCallback
std::function< bool(const String &, float &)> SetTargetTemperatureCallback
Callback definition for onTargetTemperature function.
Definition: SinricProWindowAC.h:76
SinricProWindowAC::ThermostatModeCallback
std::function< bool(const String &, String &)> ThermostatModeCallback
Callback definition for onThermostatMode function.
Definition: SinricProWindowAC.h:108
SinricProWindowAC::onRangeValue
void onRangeValue(SetRangeValueCallback cb)
Set callback function for setRangeValue request.
Definition: SinricProWindowAC.h:195
SinricProWindowAC::onThermostatMode
void onThermostatMode(ThermostatModeCallback cb)
Set callback function for setThermostatMode request.
Definition: SinricProWindowAC.h:230
SinricProWindowAC::onAdjustRangeValue
void onAdjustRangeValue(AdjustRangeValueCallback cb)
Set callback function for adjustRangeValue request.
Definition: SinricProWindowAC.h:203
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:258
SinricProDevice
Base class for all device types.
Definition: SinricProDevice.h:23
SinricProWindowAC::AdjustTargetTemperatureCallback
std::function< bool(const String &, float &)> AdjustTargetTemperatureCallback
Callback definition for onAdjustTargetTemperature function.
Definition: SinricProWindowAC.h:92
SinricProWindowAC::SetRangeValueCallback
std::function< bool(const String &, int &)> SetRangeValueCallback
Callback definition for onRangeValue function.
Definition: SinricProWindowAC.h:44
SinricProWindowAC::sendRangeValueEvent
bool sendRangeValueEvent(int rangeValue, String cause="PHYSICAL_INTERACTION")
Send rangeValue event to report curent rangeValue to SinricPro server.
Definition: SinricProWindowAC.h:241