SinricPro Library
DoorController.h
1 #ifndef _DOORCONTROLLER_H_
2 #define _DOORCONTROLLER_H_
3 
4 #include "SinricProRequest.h"
5 
10 template <typename T>
12  public:
13  DoorController() { static_cast<T &>(*this).requestHandlers.push_back(std::bind(&DoorController<T>::handleDoorController, this, std::placeholders::_1)); }
14 
28  using DoorCallback = std::function<bool(const String &, bool &)>;
29 
31  bool sendDoorStateEvent(bool state, String cause = "PHYSICAL_INTERACTION");
32 
33  protected:
34  bool handleDoorController(SinricProRequest &request);
35 
36  private:
37  DoorCallback doorCallback;
38 };
39 
47 template <typename T>
48 void DoorController<T>::onDoorState(DoorCallback cb) { doorCallback = cb; }
49 
59 template <typename T>
60 bool DoorController<T>::sendDoorStateEvent(bool state, String cause) {
61  T& device = static_cast<T&>(*this);
62 
63  DynamicJsonDocument eventMessage = device.prepareEvent("setMode", cause.c_str());
64  JsonObject event_value = eventMessage["payload"]["value"];
65  state ? event_value["mode"] = "Close" : event_value["mode"] = "Open";
66  return device.sendEvent(eventMessage);
67 }
68 
69 template <typename T>
70 bool DoorController<T>::handleDoorController(SinricProRequest &request) {
71  T &device = static_cast<T &>(*this);
72 
73  bool success = false;
74  if (request.action == "setMode" && doorCallback) {
75  String mode = request.request_value["mode"] | "";
76  bool state = mode == "Close";
77  success = doorCallback(device.deviceId, state);
78  request.response_value["mode"] = state ? "Close" : "Open";
79  }
80  return success;
81 }
82 
83 #endif
DoorController.
Definition: DoorController.h:11
bool sendDoorStateEvent(bool state, String cause="PHYSICAL_INTERACTION")
Send DoorState event to update actual door state on SinricPro Server.
Definition: DoorController.h:60
void onDoorState(DoorCallback cb)
Set callback function for onDoorState request.
Definition: DoorController.h:48
std::function< bool(const String &, bool &)> DoorCallback
Callback definition for onDoorState function.
Definition: DoorController.h:28