3 #include "../SinricProRequest.h"
4 #include "../EventLimiter.h"
5 #include "../SinricProStrings.h"
7 #include "../SinricProNamespace.h"
8 namespace SINRICPRO_NAMESPACE {
10 FSTR(LOCK, setLockState);
52 bool handleLockController(SinricProRequest &request);
55 EventLimiter event_limiter;
61 : event_limiter(EVENT_LIMIT_STATE) {
62 T* device =
static_cast<T*
>(
this);
75 lockStateCallback = cb;
89 if (event_limiter)
return false;
90 T* device =
static_cast<T*
>(
this);
92 JsonDocument eventMessage = device->prepareEvent(FSTR_LOCK_setLockState, cause.c_str());
93 JsonObject event_value = eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_value];
94 state ? event_value[FSTR_LOCK_state] = FSTR_LOCK_LOCKED : event_value[FSTR_LOCK_state] = FSTR_LOCK_UNLOCKED;
95 return device->sendEvent(eventMessage);
100 T* device =
static_cast<T*
>(
this);
102 bool success =
false;
104 if (request.action == FSTR_LOCK_setLockState && lockStateCallback) {
105 bool lockState = request.request_value[FSTR_LOCK_state] == FSTR_LOCK_lock ? true :
false;
106 success = lockStateCallback(device->deviceId, lockState);
107 request.response_value[FSTR_LOCK_state] = success ? lockState ? FSTR_LOCK_LOCKED : FSTR_LOCK_UNLOCKED : FSTR_LOCK_JAMMED;
115 template <
typename T>
116 using LockController = SINRICPRO_NAMESPACE::LockController<T>;
LockController.
Definition: LockController.h:44
bool sendLockStateEvent(bool state, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send lockState event to SinricPro Server indicating actual lock state.
Definition: LockController.h:88
void onLockState(LockStateCallback cb)
Set callback function for setLockState request.
Definition: LockController.h:74
std::function< bool(const String &, bool &)> LockStateCallback
Callback definition for onLockState function.
Definition: LockController.h:36