SinricPro Library
ColorTemperatureController.h
1 #pragma once
2 
3 #include "../SinricProRequest.h"
4 #include "../EventLimiter.h"
5 #include "../SinricProStrings.h"
6 
7 #include "../SinricProNamespace.h"
8 namespace SINRICPRO_NAMESPACE {
9 
10 FSTR(COLORTEMPERATURE, colorTemperature); // "colorTemperature"
11 FSTR(COLORTEMPERATURE, setColorTemperature); // "setColorTemperature"
12 FSTR(COLORTEMPERATURE, increaseColorTemperature); // "increaseColorTemperature"
13 FSTR(COLORTEMPERATURE, decreaseColorTemperature); // "decreaseColorTemperature"
14 
28 using ColorTemperatureCallback = std::function<bool(const String &, int &)>;
29 
43 using IncreaseColorTemperatureCallback = std::function<bool(const String &, int &)>;
44 
58 using DecreaseColorTemperatureCallback = std::function<bool(const String &, int &)>;
59 
60 
65 template <typename T>
67  public:
69 
73 
74  bool sendColorTemperatureEvent(int colorTemperature, String cause = FSTR_SINRICPRO_PHYSICAL_INTERACTION);
75 
76  protected:
77  bool handleColorTemperatureController(SinricProRequest &request);
78 
79  private:
80  EventLimiter event_limiter;
81 // SinricProDeviceInterface *device;
82  ColorTemperatureCallback colorTemperatureCallback;
83  IncreaseColorTemperatureCallback increaseColorTemperatureCallback;
84  DecreaseColorTemperatureCallback decreaseColorTemperatureCallback;
85 };
86 
87 template <typename T>
89 : event_limiter(EVENT_LIMIT_STATE) {
90  T* device = static_cast<T*>(this);
91  device->registerRequestHandler(std::bind(&ColorTemperatureController<T>::handleColorTemperatureController, this, std::placeholders::_1));
92 }
93 
101 template <typename T>
103  colorTemperatureCallback = cb;
104 }
105 
113 template <typename T>
115  increaseColorTemperatureCallback = cb;
116 }
117 
125 template <typename T>
127  decreaseColorTemperatureCallback = cb;
128 }
129 
139 template <typename T>
140 bool ColorTemperatureController<T>::sendColorTemperatureEvent(int colorTemperature, String cause) {
141  if (event_limiter) return false;
142  T* device = static_cast<T*>(this);
143 
144  JsonDocument eventMessage = device->prepareEvent(FSTR_COLORTEMPERATURE_setColorTemperature, cause.c_str());
145  JsonObject event_value = eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_value];
146  event_value[FSTR_COLORTEMPERATURE_colorTemperature] = colorTemperature;
147  return device->sendEvent(eventMessage);
148 }
149 
150 template <typename T>
152  T* device = static_cast<T*>(this);
153 
154  bool success = false;
155 
156  if (colorTemperatureCallback && request.action == FSTR_COLORTEMPERATURE_setColorTemperature) {
157  int colorTemperature = request.request_value[FSTR_COLORTEMPERATURE_colorTemperature];
158  success = colorTemperatureCallback(device->deviceId, colorTemperature);
159  request.response_value[FSTR_COLORTEMPERATURE_colorTemperature] = colorTemperature;
160  }
161 
162  if (increaseColorTemperatureCallback && request.action == FSTR_COLORTEMPERATURE_increaseColorTemperature) {
163  int colorTemperature = 1;
164  success = increaseColorTemperatureCallback(device->deviceId, colorTemperature);
165  request.response_value[FSTR_COLORTEMPERATURE_colorTemperature] = colorTemperature;
166  }
167 
168  if (decreaseColorTemperatureCallback && request.action == FSTR_COLORTEMPERATURE_decreaseColorTemperature) {
169  int colorTemperature = -1;
170  success = decreaseColorTemperatureCallback(device->deviceId, colorTemperature);
171  request.response_value[FSTR_COLORTEMPERATURE_colorTemperature] = colorTemperature;
172  }
173 
174  return success;
175 }
176 
177 } // SINRICPRO_NAMESPACE
178 
179 template <typename T>
180 using ColorTemperatureController = SINRICPRO_NAMESPACE::ColorTemperatureController<T>;
ColorTemperatureController.
Definition: ColorTemperatureController.h:66
bool sendColorTemperatureEvent(int colorTemperature, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send setColorTemperature event to SinricPro Server indicating actual color temperature.
Definition: ColorTemperatureController.h:140
void onDecreaseColorTemperature(DecreaseColorTemperatureCallback cb)
Set callback function for decreaseColorTemperature request.
Definition: ColorTemperatureController.h:126
void onIncreaseColorTemperature(IncreaseColorTemperatureCallback cb)
Set callback function for increaseColorTemperature request.
Definition: ColorTemperatureController.h:114
void onColorTemperature(ColorTemperatureCallback cb)
Set callback function for setColorTemperature request.
Definition: ColorTemperatureController.h:102
std::function< bool(const String &, int &)> ColorTemperatureCallback
Callback definition for onColorTemperature function.
Definition: ColorTemperatureController.h:28
std::function< bool(const String &, int &)> DecreaseColorTemperatureCallback
Callback definition for onDecreaseColorTemperature function.
Definition: ColorTemperatureController.h:58
std::function< bool(const String &, int &)> IncreaseColorTemperatureCallback
Callback definition for onIncreaseColorTemperature function.
Definition: ColorTemperatureController.h:43