SinricPro Library
Loading...
Searching...
No Matches
PowerLevelController.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(POWERLEVEL, setPowerLevel); // "setPowerLevel"
11FSTR(POWERLEVEL, powerLevel); // "powerLevel"
12FSTR(POWERLEVEL, adjustPowerLevel); // "adjustPowerLevel"
13FSTR(POWERLEVEL, powerLevelDelta); // "powerLevelDelta"
14
30using SetPowerLevelCallback = std::function<bool(const String &, int &)>;
45using AdjustPowerLevelCallback = std::function<bool(const String &, int &)>;
46
47
52template <typename T>
54 public:
56
60
61 protected:
62 bool handlePowerLevelController(SinricProRequest &request);
63
64 private:
65 EventLimiter event_limiter;
66 SetPowerLevelCallback setPowerLevelCallback;
67 AdjustPowerLevelCallback adjustPowerLevelCallback;
68};
69
70template <typename T>
72: event_limiter(EVENT_LIMIT_STATE) {
73 T* device = static_cast<T*>(this);
74 device->registerRequestHandler(std::bind(&PowerLevelController<T>::handlePowerLevelController, this, std::placeholders::_1));
75}
76
83template <typename T>
85 setPowerLevelCallback = cb;
86}
87
94template <typename T>
99
109template <typename T>
111 if (event_limiter) return false;
112 T* device = static_cast<T*>(this);
113
117 return device->sendEvent(eventMessage);
118}
119
120template <typename T>
122 T* device = static_cast<T*>(this);
123
124 bool success = false;
125
126 if (setPowerLevelCallback && request.action == FSTR_POWERLEVEL_setPowerLevel) {
127 int powerLevel = request.request_value[FSTR_POWERLEVEL_powerLevel];
128 success = setPowerLevelCallback(device->deviceId, powerLevel);
130 }
131
132 if (adjustPowerLevelCallback && request.action == FSTR_POWERLEVEL_adjustPowerLevel) {
133 int powerLevelDelta = request.request_value[FSTR_POWERLEVEL_powerLevelDelta];
134 success = adjustPowerLevelCallback(device->deviceId, powerLevelDelta);
135 request.response_value[FSTR_POWERLEVEL_powerLevel] = powerLevelDelta;
136 }
137 return success;
138}
139
140} // SINRICPRO_NAMESPACE
141
142template <typename T>
143using PowerLevelController = SINRICPRO_NAMESPACE::PowerLevelController<T>;
AirQuality.
Definition AirQualitySensor.h:19
PowerLevelController.
Definition PowerLevelController.h:53
void onPowerLevel(SetPowerLevelCallback cb)
Set callback function for setPowerLevel request.
Definition PowerLevelController.h:84
void onAdjustPowerLevel(AdjustPowerLevelCallback cb)
Set callback function for adjustPowerLevel request.
Definition PowerLevelController.h:95
bool sendPowerLevelEvent(int powerLevel, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send setPowerLevel event to SinricPro Server indicating actual power level.
Definition PowerLevelController.h:110
std::function< bool(const String &, int &)> AdjustPowerLevelCallback
Definition for onAdjustPowerLevel callback.
Definition PowerLevelController.h:45
std::function< bool(const String &, int &)> SetPowerLevelCallback
Definition for setPowerLevel callback.
Definition PowerLevelController.h:30