SinricPro Library
BandsController.h
1 #ifndef _BANDSCONTROLLER_H_
2 #define _BANDSCONTROLLER_H_
3 
8 template <typename T>
10 {
11 public:
28  using SetBandsCallback = std::function<bool(const String &, const String &, int &)>;
29 
46  using AdjustBandsCallback = std::function<bool(const String &, const String &, int &)>;
47 
63  using ResetBandsCallback = std::function<bool(const String &, const String &, int &)>;
64 
68 
69  bool sendBandsEvent(String bands, int level, String cause = "PHYSICAL_INTERACTION");
70 
71 protected:
72  bool handleBandsController(const String &action, JsonObject &request_value, JsonObject &response_value);
73 
74 private:
75  SetBandsCallback setBandsCallback;
76  AdjustBandsCallback adjustBandsCallback;
77  ResetBandsCallback resetBandsCallback;
78 };
79 
87 template <typename T>
88 void BandsController<T>::onSetBands(SetBandsCallback cb) { setBandsCallback = cb; }
89 
97 template <typename T>
98 void BandsController<T>::onAdjustBands(AdjustBandsCallback cb) { adjustBandsCallback = cb; }
99 
107 template <typename T>
108 void BandsController<T>::onResetBands(ResetBandsCallback cb) { resetBandsCallback = cb; }
109 
120 template <typename T>
121 bool BandsController<T>::sendBandsEvent(String bands, int level, String cause) {
122  T& device = static_cast<T&>(*this);
123 
124  DynamicJsonDocument eventMessage = device.prepareEvent("setBands", cause.c_str());
125  JsonObject event_value = eventMessage["payload"]["value"];
126  JsonArray event_value_bands = event_value.createNestedArray("bands");
127  JsonObject event_bands = event_value_bands.createNestedObject();
128  event_bands["name"] = bands;
129  event_bands["value"] = level;
130  return device.sendEvent(eventMessage);
131 }
132 
133 template <typename T>
134 bool BandsController<T>::handleBandsController(const String &action, JsonObject &request_value, JsonObject &response_value)
135 {
136  T &device = static_cast<T &>(*this);
137  bool success = false;
138 
139  if (setBandsCallback && action == "setBands") {
140  JsonArray bands_array = request_value["bands"];
141  JsonArray response_value_bands = response_value.createNestedArray("bands");
142 
143  for (size_t i = 0; i < bands_array.size(); i++) {
144  int level = bands_array[i]["level"] | 0;
145  String bandsName = bands_array[i]["name"] | "";
146  success = setBandsCallback(device.getDeviceId(), bandsName, level);
147  JsonObject response_value_bands_i = response_value_bands.createNestedObject();
148  response_value_bands_i["name"] = bandsName;
149  response_value_bands_i["level"] = level;
150  }
151  return success;
152  }
153 
154  if (adjustBandsCallback && action == "adjustBands") {
155  JsonArray bands_array = request_value["bands"];
156  JsonArray response_value_bands = response_value.createNestedArray("bands");
157 
158  for (size_t i = 0; i < bands_array.size(); i++) {
159  int levelDelta = bands_array[i]["levelDelta"] | 1;
160  String direction = bands_array[i]["levelDirection"];
161  if (direction == "DOWN")
162  levelDelta *= -1;
163  String bandsName = bands_array[i]["name"] | "";
164  success = adjustBandsCallback(device.getDeviceId(), bandsName, levelDelta);
165  JsonObject response_value_bands_i = response_value_bands.createNestedObject();
166  response_value_bands_i["name"] = bandsName;
167  response_value_bands_i["level"] = levelDelta;
168  }
169  return success;
170  }
171 
172  if (resetBandsCallback && action == "resetBands") {
173  JsonArray bands_array = request_value["bands"];
174  JsonArray response_value_bands = response_value.createNestedArray("bands");
175 
176  for (size_t i = 0; i < bands_array.size(); i++) {
177  int level = 0;
178  String bandsName = bands_array[i]["name"] | "";
179  success = adjustBandsCallback(device.getDeviceId(), bandsName, level);
180  JsonObject response_value_bands_i = response_value_bands.createNestedObject();
181  response_value_bands_i["name"] = bandsName;
182  response_value_bands_i["level"] = level;
183  }
184  return success;
185  }
186 
187  return success;
188 }
189 
190 #endif
BandsController.
Definition: BandsController.h:10
std::function< bool(const String &, const String &, int &)> AdjustBandsCallback
Callback definition for onAdjustBands function.
Definition: BandsController.h:46
void onAdjustBands(AdjustBandsCallback cb)
Set callback function for adjustBands request.
Definition: BandsController.h:98
void onSetBands(SetBandsCallback cb)
Set callback function for setBands request.
Definition: BandsController.h:88
bool sendBandsEvent(String bands, int level, String cause="PHYSICAL_INTERACTION")
Send setBands event to SinricPro Server indicating bands level has changed.
Definition: BandsController.h:121
void onResetBands(ResetBandsCallback cb)
Set callback function for resetBands request.
Definition: BandsController.h:108
std::function< bool(const String &, const String &, int &)> ResetBandsCallback
Callback definition for onResetBands function.
Definition: BandsController.h:63
std::function< bool(const String &, const String &, int &)> SetBandsCallback
Callback definition for onSetBands function.
Definition: BandsController.h:28