SinricPro Library
SinricProLight.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 _SINRICLIGHT_H_
9 #define _SINRICLIGHT_H_
10 
11 #include "SinricProDevice.h"
12 
24  public:
25  SinricProLight(const char* deviceId, unsigned long eventWaitTime=100);
26  String getProductType() { return SinricProDevice::getProductType() + String("LIGHT"); }
27  // callback
28 
42  typedef std::function<bool(const String&, int&)> BrightnessCallback;
43 
57  typedef std::function<bool(const String&, int&)> AdjustBrightnessCallback;
58 
76  typedef std::function<bool(const String&, byte&, byte&, byte&)> ColorCallback;
77 
91  typedef std::function<bool(const String&, int&)> ColorTemperatureCallback;
92 
106  typedef std::function<bool(const String&, int&)> IncreaseColorTemperatureCallback;
107 
121  typedef std::function<bool(const String&, int&)> DecreaseColorTemperatureCallback;
122 
125  void onColor(ColorCallback cb);
129 
130  // event
131  bool sendBrightnessEvent(int brightness, String cause = "PHYSICAL_INTERACTION");
132  bool sendColorEvent(byte r, byte g, byte b, String cause = "PHYSICAL_INTERACTION");
133  bool sendColorTemperatureEvent(int colorTemperature, String cause = "PHYSICAL_INTERACTION");
134  // handle
135  bool handleRequest(const char* deviceId, const char* action, JsonObject &request_value, JsonObject &response_value) override;
136  private:
137  BrightnessCallback brightnessCallback;
138  AdjustBrightnessCallback adjustBrightnessCallback;
139  ColorCallback colorCallback;
140  ColorTemperatureCallback colorTemperatureCallback;
141  IncreaseColorTemperatureCallback increaseColorTemperatureCallback;
142  DecreaseColorTemperatureCallback decreaseColorTemperatureCallback;
143 };
144 
145 SinricProLight::SinricProLight(const char* deviceId, unsigned long eventWaitTime) : SinricProDevice(deviceId, eventWaitTime),
146  brightnessCallback(nullptr),
147  adjustBrightnessCallback(nullptr),
148  colorCallback(nullptr),
149  colorTemperatureCallback(nullptr),
150  increaseColorTemperatureCallback(nullptr),
151  decreaseColorTemperatureCallback(nullptr) {}
152 
153 bool SinricProLight::handleRequest(const char* deviceId, const char* action, JsonObject &request_value, JsonObject &response_value) {
154  if (strcmp(deviceId, this->deviceId) != 0) return false;
155  if (SinricProDevice::handleRequest(deviceId, action, request_value, response_value)) return true;
156 
157  bool success = false;
158  String actionString = String(action);
159 
160  if (brightnessCallback && actionString == "setBrightness") {
161  int brightness = request_value["brightness"];
162  success = brightnessCallback(String(deviceId), brightness);
163  response_value["brightness"] = limitValue(brightness, 0, 100);
164  }
165 
166  if (adjustBrightnessCallback && actionString == "adjustBrightness") {
167  int brightnessDelta = request_value["brightnessDelta"];
168  success = adjustBrightnessCallback(String(deviceId), brightnessDelta);
169  response_value["brightness"] = limitValue(brightnessDelta, 0, 100);
170  }
171 
172  if (colorCallback && actionString == "setColor") {
173  unsigned char r, g, b;
174  r = request_value["color"]["r"];
175  g = request_value["color"]["g"];
176  b = request_value["color"]["b"];
177  success = colorCallback(String(deviceId), r, g, b);
178  response_value.createNestedObject("color");
179  response_value["color"]["r"] = r;
180  response_value["color"]["g"] = g;
181  response_value["color"]["b"] = b;
182  }
183 
184  if (colorTemperatureCallback && actionString == "setColorTemperature") {
185  int colorTemperature = request_value["colorTemperature"];
186  success = colorTemperatureCallback(String(deviceId), colorTemperature);
187  response_value["colorTemperature"] = colorTemperature;
188  }
189 
190  if (increaseColorTemperatureCallback && actionString == "increaseColorTemperature") {
191  int colorTemperature = 1;
192  success = increaseColorTemperatureCallback(String(deviceId), colorTemperature);
193  response_value["colorTemperature"] = colorTemperature;
194  }
195 
196  if (decreaseColorTemperatureCallback && actionString == "decreaseColorTemperature") {
197  int colorTemperature = -1;
198  success = decreaseColorTemperatureCallback(String(deviceId), colorTemperature);
199  response_value["colorTemperature"] = colorTemperature;
200  }
201 
202  return success;
203 }
204 
213  brightnessCallback = cb;
214 }
215 
224  adjustBrightnessCallback = cb;
225 }
226 
235  colorCallback = cb;
236 }
237 
246  colorTemperatureCallback = cb;
247 }
248 
257  increaseColorTemperatureCallback = cb;
258 }
259 
268  decreaseColorTemperatureCallback = cb;
269 }
270 
280 bool SinricProLight::sendBrightnessEvent(int brightness, String cause) {
281  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "setBrightness", cause.c_str());
282  JsonObject event_value = eventMessage["payload"]["value"];
283  event_value["brightness"] = brightness;
284  return sendEvent(eventMessage);
285 }
286 
298 bool SinricProLight::sendColorEvent(byte r, byte g, byte b, String cause) {
299  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "setColor", cause.c_str());
300  JsonObject event_color = eventMessage["payload"]["value"].createNestedObject("color");
301  event_color["r"] = r;
302  event_color["g"] = g;
303  event_color["b"] = b;
304  return sendEvent(eventMessage);
305 }
306 
316 bool SinricProLight::sendColorTemperatureEvent(int colorTemperature, String cause) {
317  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "setColorTemperature", cause.c_str());
318  JsonObject event_value = eventMessage["payload"]["value"];
319  event_value["colorTemperature"] = colorTemperature;
320  return sendEvent(eventMessage);
321 }
322 
323 
324 #endif
325 
SinricProLight::onIncreaseColorTemperature
void onIncreaseColorTemperature(IncreaseColorTemperatureCallback cb)
Set callback function for increaseColorTemperature request.
Definition: SinricProLight.h:256
SinricProLight::BrightnessCallback
std::function< bool(const String &, int &)> BrightnessCallback
Callback definition for onBrightness function.
Definition: SinricProLight.h:42
SinricProLight::ColorCallback
std::function< bool(const String &, byte &, byte &, byte &)> ColorCallback
Callback definition for onColor function.
Definition: SinricProLight.h:76
SinricProLight::ColorTemperatureCallback
std::function< bool(const String &, int &)> ColorTemperatureCallback
Callback definition for onColorTemperature function.
Definition: SinricProLight.h:91
SinricProLight::AdjustBrightnessCallback
std::function< bool(const String &, int &)> AdjustBrightnessCallback
Callback definition for onAdjustBrightness function.
Definition: SinricProLight.h:57
SinricProLight
Device to control a light.
Definition: SinricProLight.h:23
SinricProLight::onDecreaseColorTemperature
void onDecreaseColorTemperature(DecreaseColorTemperatureCallback cb)
Set callback function for decreaseColorTemperature request.
Definition: SinricProLight.h:267
SinricProLight::sendColorEvent
bool sendColorEvent(byte r, byte g, byte b, String cause="PHYSICAL_INTERACTION")
Send setColor event to SinricPro Server indicating actual color.
Definition: SinricProLight.h:298
SinricProLight::sendColorTemperatureEvent
bool sendColorTemperatureEvent(int colorTemperature, String cause="PHYSICAL_INTERACTION")
Send setColorTemperature event to SinricPro Server indicating actual color temperature.
Definition: SinricProLight.h:316
SinricProLight::DecreaseColorTemperatureCallback
std::function< bool(const String &, int &)> DecreaseColorTemperatureCallback
Callback definition for onDecreaseColorTemperature function.
Definition: SinricProLight.h:121
SinricProLight::onColorTemperature
void onColorTemperature(ColorTemperatureCallback cb)
Set callback function for setColorTemperature request.
Definition: SinricProLight.h:245
SinricProLight::onColor
void onColor(ColorCallback cb)
Set callback function for setColor request.
Definition: SinricProLight.h:234
SinricProLight::onAdjustBrightness
void onAdjustBrightness(AdjustBrightnessCallback cb)
Set callback function for adjustBrightness request.
Definition: SinricProLight.h:223
SinricProLight::sendBrightnessEvent
bool sendBrightnessEvent(int brightness, String cause="PHYSICAL_INTERACTION")
Send setBrightness event to SinricPro Server indicating actual brightness.
Definition: SinricProLight.h:280
SinricProDevice
Base class for all device types.
Definition: SinricProDevice.h:23
SinricProLight::onBrightness
void onBrightness(BrightnessCallback cb)
Set callback function for setBrightness request.
Definition: SinricProLight.h:212
SinricProLight::IncreaseColorTemperatureCallback
std::function< bool(const String &, int &)> IncreaseColorTemperatureCallback
Callback definition for onIncreaseColorTemperature function.
Definition: SinricProLight.h:106