SinricPro Library
PercentageController.h
1 #ifndef _PERCENTAGECONTROLLER_H_
2 #define _PERCENTAGECONTROLLER_H_
3 
4 #include "SinricProRequest.h"
5 
10 template <typename T>
12  public:
13  PercentageController() { static_cast<T &>(*this).requestHandlers.push_back(std::bind(&PercentageController<T>::handlePercentageController, this, std::placeholders::_1)); }
28  using SetPercentageCallback = std::function<bool(const String &, int &)>;
29 
44  using AdjustPercentageCallback = std::function<bool(const String &, int &)>;
45 
48 
49  bool sendSetPercentageEvent(int percentage, String cause = "PHYSICAL_INTERACTION");
50 
51  protected:
52  bool handlePercentageController(SinricProRequest &request);
53 
54  private:
55  SetPercentageCallback percentageCallback;
56  AdjustPercentageCallback adjustPercentageCallback;
57 };
58 
66 template <typename T>
68 
76 template <typename T>
77 void PercentageController<T>::onAdjustPercentage(AdjustPercentageCallback cb) { adjustPercentageCallback = cb; }
78 
88 template <typename T>
89 bool PercentageController<T>::sendSetPercentageEvent(int percentage, String cause) {
90  T& device = static_cast<T&>(*this);
91 
92  DynamicJsonDocument eventMessage = device.prepareEvent("setPercentage", cause.c_str());
93  JsonObject event_value = eventMessage["payload"]["value"];
94  event_value["percentage"] = percentage;
95  return device.sendEvent(eventMessage);
96 }
97 
98 template <typename T>
99 bool PercentageController<T>::handlePercentageController(SinricProRequest &request) {
100  T &device = static_cast<T &>(*this);
101 
102  bool success = false;
103 
104  if (percentageCallback && request.action == "setPercentage") {
105  int percentage = request.request_value["percentage"];
106  success = percentageCallback(device.deviceId, percentage);
107  request.response_value["percentage"] = percentage;
108  return success;
109  }
110 
111  if (adjustPercentageCallback && request.action == "adjustPercentage") {
112  int percentage = request.request_value["percentage"];
113  success = adjustPercentageCallback(device.deviceId, percentage);
114  request.response_value["percentage"] = percentage;
115  return success;
116  }
117  return success;
118 }
119 
120 #endif
PercentageController.
Definition: PercentageController.h:11
std::function< bool(const String &, int &)> AdjustPercentageCallback
Callback definition for onAdjustPercentage function.
Definition: PercentageController.h:44
std::function< bool(const String &, int &)> SetPercentageCallback
Callback definition for onSetPercentage function.
Definition: PercentageController.h:28
void onAdjustPercentage(AdjustPercentageCallback cb)
Set callback function for adjustPercentage request.
Definition: PercentageController.h:77
bool sendSetPercentageEvent(int percentage, String cause="PHYSICAL_INTERACTION")
Send setPercentage event to SinricPro Server indicating actual percentage has changed.
Definition: PercentageController.h:89
void onSetPercentage(SetPercentageCallback cb)
Set callback function for setPercentage request.
Definition: PercentageController.h:67