SinricPro Library
Loading...
Searching...
No Matches
ColorController.h
1#pragma once
2
3#include "../SinricProRequest.h"
4#include "../EventLimiter.h"
5#include "../SinricProStrings.h"
6
7#include "../SinricProNamespace.h"
8namespace SINRICPRO_NAMESPACE {
9
10FSTR(COLOR, setColor); // "setColor"
11FSTR(COLOR, color); // "color"
12FSTR(COLOR, r); // "r"
13FSTR(COLOR, g); // "g"
14FSTR(COLOR, b); // "b"
15
33using ColorCallback = std::function<bool(const String &, byte &, byte &, byte &)>;
34
39template <typename T>
41 public:
43
45 bool sendColorEvent(byte r, byte g, byte b, String cause = FSTR_SINRICPRO_PHYSICAL_INTERACTION);
46
47 protected:
48 bool handleColorController(SinricProRequest &request);
49
50 private:
51 EventLimiter event_limiter;
52 ColorCallback colorCallback;
53};
54
55template <typename T>
57: event_limiter(EVENT_LIMIT_STATE) {
58 T* device = static_cast<T*>(this);
59 device->registerRequestHandler(std::bind(&ColorController<T>::handleColorController, this, std::placeholders::_1));
60}
61
62
70template <typename T>
72 colorCallback = cb;
73}
74
86template <typename T>
87bool ColorController<T>::sendColorEvent(byte r, byte g, byte b, String cause) {
88 if (event_limiter) return false;
89 T* device = static_cast<T*>(this);
90
96 return device->sendEvent(eventMessage);
97}
98
99template <typename T>
101 T* device = static_cast<T*>(this);
102
103 bool success = false;
104
105 if (colorCallback && request.action == FSTR_COLOR_setColor) {
106 unsigned char r, g, b;
107 r = request.request_value[FSTR_COLOR_color][FSTR_COLOR_r];
108 g = request.request_value[FSTR_COLOR_color][FSTR_COLOR_g];
109 b = request.request_value[FSTR_COLOR_color][FSTR_COLOR_b];
110 success = colorCallback(device->deviceId, r, g, b);
111 request.response_value[FSTR_COLOR_color].to<JsonObject>();
112 request.response_value[FSTR_COLOR_color][FSTR_COLOR_r] = r;
113 request.response_value[FSTR_COLOR_color][FSTR_COLOR_g] = g;
114 request.response_value[FSTR_COLOR_color][FSTR_COLOR_b] = b;
115 }
116
117 return success;
118}
119
120} // SINRICPRO_NAMESPACE
121
122template <typename T>
123using ColorController = SINRICPRO_NAMESPACE::ColorController<T>;
AirQuality.
Definition AirQualitySensor.h:19
ColorController.
Definition ColorController.h:40
void onColor(ColorCallback cb)
Set callback function for setColor request.
Definition ColorController.h:71
bool sendColorEvent(byte r, byte g, byte b, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send setColor event to SinricPro Server indicating actual color.
Definition ColorController.h:87
std::function< bool(const String &, byte &, byte &, byte &)> ColorCallback
Callback definition for onColor function.
Definition ColorController.h:33