3 #include "../SinricProRequest.h"
4 #include "../EventLimiter.h"
5 #include "../SinricProStrings.h"
7 #include "../SinricProNamespace.h"
8 namespace SINRICPRO_NAMESPACE {
10 FSTR(TOGGLE, setToggleState);
42 bool sendToggleStateEvent(
const String &instance,
bool state, String cause = FSTR_SINRICPRO_PHYSICAL_INTERACTION);
45 bool handleToggleController(SinricProRequest &request);
48 std::map<String, EventLimiter> event_limiter;
49 std::map<String, GenericToggleStateCallback> genericToggleStateCallback;
54 T* device =
static_cast<T*
>(
this);
68 genericToggleStateCallback[instance] = cb;
83 if (event_limiter.find(instance) == event_limiter.end()) event_limiter[instance] = EventLimiter(EVENT_LIMIT_STATE);
84 if (event_limiter[instance])
return false;
86 T* device =
static_cast<T*
>(
this);
88 JsonDocument eventMessage = device->prepareEvent(FSTR_TOGGLE_setToggleState, cause.c_str());
89 eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_instanceId] = instance;
90 JsonObject event_value = eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_value];
91 event_value[FSTR_TOGGLE_state] = state ? FSTR_TOGGLE_On : FSTR_TOGGLE_Off;
92 return device->sendEvent(eventMessage);
97 T* device =
static_cast<T*
>(
this);
101 if (request.action == FSTR_TOGGLE_setToggleState) {
102 bool powerState = request.request_value[FSTR_TOGGLE_state] == FSTR_TOGGLE_On ? true :
false;
103 if (genericToggleStateCallback.find(request.instance) != genericToggleStateCallback.end())
104 success = genericToggleStateCallback[request.instance](device->deviceId, request.instance, powerState);
105 request.response_value[FSTR_TOGGLE_state] = powerState ? FSTR_TOGGLE_On : FSTR_TOGGLE_Off;
113 template <
typename T>
114 using ToggleController = SINRICPRO_NAMESPACE::ToggleController<T>;
ToggleController.
Definition: ToggleController.h:37
std::function< bool(const String &, const String &, bool &)> GenericToggleStateCallback
Callback definition for onToggleState function.
Definition: ToggleController.h:29