3 #include "../SinricProRequest.h"
4 #include "../EventLimiter.h"
5 #include "../SinricProStrings.h"
7 #include "../SinricProNamespace.h"
8 namespace SINRICPRO_NAMESPACE {
10 FSTR(POWERSTATE, state);
12 FSTR(POWERSTATE, Off);
13 FSTR(POWERSTATE, setPowerState);
44 bool handlePowerStateController(SinricProRequest &request);
47 EventLimiter event_limiter;
53 : event_limiter(EVENT_LIMIT_STATE) {
54 T* device =
static_cast<T*
>(
this);
67 powerStateCallback = cb;
81 if (event_limiter)
return false;
82 T* device =
static_cast<T*
>(
this);
84 JsonDocument eventMessage = device->prepareEvent(FSTR_POWERSTATE_setPowerState, cause.c_str());
85 JsonObject event_value = eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_value];
86 event_value[FSTR_POWERSTATE_state] = state ? FSTR_POWERSTATE_On : FSTR_POWERSTATE_Off;
87 return device->sendEvent(eventMessage);
92 T* device =
static_cast<T*
>(
this);
96 if (request.action == FSTR_POWERSTATE_setPowerState && powerStateCallback) {
97 bool powerState = request.request_value[FSTR_POWERSTATE_state] == FSTR_POWERSTATE_On ? true :
false;
98 success = powerStateCallback(device->deviceId, powerState);
99 request.response_value[FSTR_POWERSTATE_state] = powerState ? FSTR_POWERSTATE_On : FSTR_POWERSTATE_Off;
107 template <
typename T>
108 using PowerStateController = SINRICPRO_NAMESPACE::PowerStateController<T>;
PowerStateController.
Definition: PowerStateController.h:36
void onPowerState(PowerStateCallback cb)
Set callback function for powerState request.
Definition: PowerStateController.h:66
bool sendPowerStateEvent(bool state, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send setPowerState event to SinricPro Server indicating actual power state.
Definition: PowerStateController.h:80
std::function< bool(const String &, bool &)> PowerStateCallback
Callback definition for onPowerState function.
Definition: PowerStateController.h:28