SinricPro Library
BrightnessController.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(BRIGHTNESS, setBrightness); // "setBrightness"
11 FSTR(BRIGHTNESS, brightness); // "brightness"
12 FSTR(BRIGHTNESS, adjustBrightness); // "adjustBrightness"
13 FSTR(BRIGHTNESS, brightnessDelta); // "brightnessDelta"
14 
28 using BrightnessCallback = std::function<bool(const String &, int &)>;
29 
43 using AdjustBrightnessCallback = std::function<bool(const String &, int &)>;
44 
49 template <typename T>
51  public:
53 
56 
57  bool sendBrightnessEvent(int brightness, String cause = FSTR_SINRICPRO_PHYSICAL_INTERACTION);
58  protected:
59  bool handleBrightnessController(SinricProRequest &request);
60 
61  private:
62  EventLimiter event_limiter;
63  BrightnessCallback brightnessCallback;
64  AdjustBrightnessCallback adjustBrightnessCallback;
65 };
66 
67 template <typename T>
69 : event_limiter (EVENT_LIMIT_STATE) {
70  T* device = static_cast<T*>(this);
71  device->registerRequestHandler(std::bind(&BrightnessController<T>::handleBrightnessController, this, std::placeholders::_1));
72 }
73 
81 template <typename T>
83  brightnessCallback = cb;
84 }
85 
93 template <typename T>
95  adjustBrightnessCallback = cb;
96 }
97 
107 template <typename T>
108 bool BrightnessController<T>::sendBrightnessEvent(int brightness, String cause) {
109  if (event_limiter) return false;
110  T* device = static_cast<T*>(this);
111 
112  JsonDocument eventMessage = device->prepareEvent(FSTR_BRIGHTNESS_setBrightness, cause.c_str());
113  JsonObject event_value = eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_value];
114  event_value[FSTR_BRIGHTNESS_brightness] = brightness;
115  return device->sendEvent(eventMessage);
116 }
117 
118 template <typename T>
119 bool BrightnessController<T>::handleBrightnessController(SinricProRequest &request) {
120  T* device = static_cast<T*>(this);
121  bool success = false;
122 
123  if (brightnessCallback && request.action == FSTR_BRIGHTNESS_setBrightness) {
124  int brightness = request.request_value[FSTR_BRIGHTNESS_brightness];
125  success = brightnessCallback(device->deviceId, brightness);
126  request.response_value[FSTR_BRIGHTNESS_brightness] = brightness;
127  }
128 
129  if (adjustBrightnessCallback && request.action == FSTR_BRIGHTNESS_adjustBrightness) {
130  int brightnessDelta = request.request_value[FSTR_BRIGHTNESS_brightnessDelta];
131  success = adjustBrightnessCallback(device->deviceId, brightnessDelta);
132  request.response_value[FSTR_BRIGHTNESS_brightness] = brightnessDelta;
133  }
134 
135  return success;
136 }
137 
138 } // SINRICPRO_NAMESPACE
139 
140 template <typename T>
141 using BrightnessController = SINRICPRO_NAMESPACE::BrightnessController<T>;
BrightnessController.
Definition: BrightnessController.h:50
void onAdjustBrightness(AdjustBrightnessCallback cb)
Set callback function for adjustBrightness request.
Definition: BrightnessController.h:94
bool sendBrightnessEvent(int brightness, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send setBrightness event to SinricPro Server indicating actual brightness.
Definition: BrightnessController.h:108
void onBrightness(BrightnessCallback cb)
Set callback function for setBrightness request.
Definition: BrightnessController.h:82
std::function< bool(const String &, int &)> AdjustBrightnessCallback
Callback definition for onAdjustBrightness function.
Definition: BrightnessController.h:43
std::function< bool(const String &, int &)> BrightnessCallback
Callback definition for onBrightness function.
Definition: BrightnessController.h:28