1 #ifndef _MODECONTROLLER_H_
2 #define _MODECONTROLLER_H_
4 #include "SinricProRequest.h"
28 using ModeCallback = std::function<bool(
const String &, String &)>;
51 bool sendModeEvent(String instance, String mode, String cause =
"PHYSICAL_INTERACTION");
54 bool handleModeController(SinricProRequest &request);
58 std::map<String, GenericModeCallback> genericModeCallback;
81 genericModeCallback[instance] = cb;
95 T& device =
static_cast<T&
>(*this);
97 DynamicJsonDocument eventMessage = device.prepareEvent(
"setMode", cause.c_str());
98 JsonObject event_value = eventMessage[
"payload"][
"value"];
99 event_value[
"mode"] = mode;
100 return device.sendEvent(eventMessage);
113 template <
typename T>
115 T &device =
static_cast<T &
>(*this);
117 DynamicJsonDocument eventMessage = device.prepareEvent(
"setMode", cause.c_str());
118 eventMessage[
"payload"][
"instanceId"] = instance;
119 JsonObject event_value = eventMessage[
"payload"][
"value"];
120 event_value[
"mode"] = mode;
121 return device.sendEvent(eventMessage);
124 template <
typename T>
126 T &device =
static_cast<T &
>(*this);
128 bool success =
false;
129 if (request.action !=
"setMode")
return false;
130 String mode = request.request_value[
"mode"] |
"";
132 if (request.instance !=
"") {
133 if (genericModeCallback.find(request.instance) != genericModeCallback.end()) {
134 success = genericModeCallback[request.instance](device.deviceId, request.instance, mode);
135 request.response_value[
"mode"] = mode;
139 if (setModeCallback) {
140 success = setModeCallback(device.deviceId, mode);
141 request.response_value[
"mode"] = mode;
ModeController.
Definition: ModeController.h:11
bool sendModeEvent(String instance, String mode, String cause="PHYSICAL_INTERACTION")
Send setMode event to SinricPro Server indicating the mode on a specific instance has changed.
Definition: ModeController.h:114
void onSetMode(const String &instance, GenericModeCallback cb)
Set callback function for setMode request on a specific instance.
Definition: ModeController.h:80
bool sendModeEvent(String mode, String cause="PHYSICAL_INTERACTION")
Send setMode event to SinricPro Server indicating the mode has changed.
Definition: ModeController.h:94
std::function< bool(const String &, String &)> ModeCallback
Callback definition for onSetMode function.
Definition: ModeController.h:28
std::function< bool(const String &, const String &, String &)> GenericModeCallback
Callback definition for onSetMode function for a specific instance.
Definition: ModeController.h:45
void onSetMode(ModeCallback cb)
Set callback function for setMode request.
Definition: ModeController.h:69