10#include "SinricProRequest.h"
11#include "SinricProStrings.h"
12#include "SinricProNamespace.h"
13#include "SinricProDebug.h"
14#include "Capabilities/SettingController.h"
16namespace SINRICPRO_NAMESPACE {
18FSTR(OTA, otaUpdateAvailable);
24FSTR(OTA, forceUpdate);
25FSTR(SETTINGS, setSetting);
28FSTR(INSIGHTS, health);
29FSTR(INSIGHTS, report);
31using OTAUpdateCallbackHandler = std::function<bool(
const String& url,
int major,
int minor,
int patch,
bool forceUpdate)>;
35class SinricProModuleCommandHandler {
37 SinricProModuleCommandHandler();
38 ~SinricProModuleCommandHandler();
40 bool handleRequest(SinricProRequest &request);
41 void onOTAUpdate(OTAUpdateCallbackHandler callback);
42 void onSetSetting(SetSettingCallbackHandler callback);
43 void onReportHealth(ReportHealthCallbackHandler callback);
51SinricProModuleCommandHandler::SinricProModuleCommandHandler()
52 : _otaUpdateCallbackHandler(nullptr),
53 _setSettingCallbackHandler(nullptr),
54 _reportHealthCallbackHandler(nullptr) {}
56SinricProModuleCommandHandler::~SinricProModuleCommandHandler() {}
58void SinricProModuleCommandHandler::onOTAUpdate(OTAUpdateCallbackHandler callback) {
59 _otaUpdateCallbackHandler = callback;
62void SinricProModuleCommandHandler::onSetSetting(SetSettingCallbackHandler callback) {
63 _setSettingCallbackHandler = callback;
66void SinricProModuleCommandHandler::onReportHealth(ReportHealthCallbackHandler callback) {
67 _reportHealthCallbackHandler = callback;
70bool SinricProModuleCommandHandler::handleRequest(SinricProRequest &request) {
71 if (strcmp(FSTR_OTA_otaUpdateAvailable, request.action.c_str()) == 0 && _otaUpdateCallbackHandler) {
72 String url = request.request_value[FSTR_OTA_url];
73 int major = request.request_value[FSTR_OTA_version][FSTR_OTA_major];
74 int minor = request.request_value[FSTR_OTA_version][FSTR_OTA_minor];
75 int patch = request.request_value[FSTR_OTA_version][FSTR_OTA_patch];
76 bool forceUpdate = request.request_value[FSTR_OTA_forceUpdate] |
false;
77 return _otaUpdateCallbackHandler(url, major, minor, patch, forceUpdate);
79 else if (strcmp(FSTR_SETTINGS_setSetting, request.action.c_str()) == 0 && _setSettingCallbackHandler) {
80 String
id = request.request_value[FSTR_SETTINGS_id];
81 JsonVariant valueVariant = request.request_value[FSTR_SETTINGS_value];
83 SettingValue settingValue;
85 if (valueVariant.is<
bool>()) {
86 settingValue = valueVariant.as<
bool>();
87 }
else if (valueVariant.is<
float>()) {
88 settingValue = valueVariant.as<
float>();
89 }
else if (valueVariant.is<
int>()) {
90 settingValue = valueVariant.as<
int>();
91 }
else if (valueVariant.is<JsonObject>()) {
93 serializeJson(valueVariant, jsonString);
94 settingValue = jsonString;
95 }
else if (valueVariant.is<
const char*>()) {
96 settingValue = String(valueVariant.as<
const char*>());
99 bool success = _setSettingCallbackHandler(
id, settingValue);
101 request.response_value[FSTR_SETTINGS_id] = id;
103 if (valueVariant.is<JsonObject>()) {
104 request.response_value[FSTR_SETTINGS_value] = valueVariant;
105 }
else if (std::holds_alternative<int>(settingValue)) {
106 request.response_value[FSTR_SETTINGS_value] = std::get<int>(settingValue);
107 }
else if (std::holds_alternative<float>(settingValue)) {
108 request.response_value[FSTR_SETTINGS_value] = std::get<float>(settingValue);
109 }
else if (std::holds_alternative<bool>(settingValue)) {
110 request.response_value[FSTR_SETTINGS_value] = std::get<bool>(settingValue);
111 }
else if (std::holds_alternative<String>(settingValue)) {
112 request.response_value[FSTR_SETTINGS_value] = std::get<String>(settingValue);
117 else if (strcmp(FSTR_INSIGHTS_health, request.action.c_str()) == 0 && _reportHealthCallbackHandler) {
118 String healthReport =
"";
119 bool success = _reportHealthCallbackHandler(healthReport);
121 request.response_value[FSTR_INSIGHTS_report] = healthReport;
126 DEBUG_SINRIC(
"[SinricProModuleCommandHandler:handleRequest]: action: %s not supported!\r\n", request.action.c_str());
std::function< bool(const String &url, int major, int minor, int patch, bool enforce)> OTAUpdateCallbackHandler
Function signature for OTA update callback.
Definition SinricPro.h:54
std::function< bool(String &healthReport)> ReportHealthCallbackHandler
Defines a function type for reporting device health status.
Definition SinricPro.h:80
std::function< bool(const String &id, SettingValue &value)> SetSettingCallbackHandler
Function signature for setting a module setting.
Definition SinricPro.h:65