SinricPro Library
ColorController.h
1 #ifndef _COLORCONTROLLER_H_
2 #define _COLORCONTROLLER_H_
3 
4 #include "SinricProRequest.h"
5 
10 template <typename T>
12  public:
13  ColorController() { static_cast<T &>(*this).requestHandlers.push_back(std::bind(&ColorController<T>::handleColorController, this, std::placeholders::_1)); }
31  using ColorCallback = std::function<bool(const String &, byte &, byte &, byte &)>;
32 
34  bool sendColorEvent(byte r, byte g, byte b, String cause = "PHYSICAL_INTERACTION");
35 
36  protected:
37  bool handleColorController(SinricProRequest &request);
38 
39  private:
40  ColorCallback colorCallback;
41 };
42 
43 
51 template <typename T>
53  colorCallback = cb;
54 }
55 
67 template <typename T>
68 bool ColorController<T>::sendColorEvent(byte r, byte g, byte b, String cause) {
69  T& device = static_cast<T&>(*this);
70 
71  DynamicJsonDocument eventMessage = device.prepareEvent("setColor", cause.c_str());
72  JsonObject event_color = eventMessage["payload"]["value"].createNestedObject("color");
73  event_color["r"] = r;
74  event_color["g"] = g;
75  event_color["b"] = b;
76  return device.sendEvent(eventMessage);
77 }
78 
79 template <typename T>
80 bool ColorController<T>::handleColorController(SinricProRequest &request) {
81  T &device = static_cast<T &>(*this);
82 
83  bool success = false;
84 
85  if (colorCallback && request.action == "setColor") {
86  unsigned char r, g, b;
87  r = request.request_value["color"]["r"];
88  g = request.request_value["color"]["g"];
89  b = request.request_value["color"]["b"];
90  success = colorCallback(device.deviceId, r, g, b);
91  request.response_value.createNestedObject("color");
92  request.response_value["color"]["r"] = r;
93  request.response_value["color"]["g"] = g;
94  request.response_value["color"]["b"] = b;
95  }
96 
97  return success;
98 }
99 
100 #endif
ColorController.
Definition: ColorController.h:11
void onColor(ColorCallback cb)
Set callback function for setColor request.
Definition: ColorController.h:52
bool sendColorEvent(byte r, byte g, byte b, String cause="PHYSICAL_INTERACTION")
Send setColor event to SinricPro Server indicating actual color.
Definition: ColorController.h:68
std::function< bool(const String &, byte &, byte &, byte &)> ColorCallback
Callback definition for onColor function.
Definition: ColorController.h:31