8 #ifndef _SINRICSPEAKER_H_
9 #define _SINRICSPEAKER_H_
11 #include "SinricProDevice.h"
153 typedef std::function<bool(
const String&, String&)>
ModeCallback;
179 bool sendVolumeEvent(
int volume, String cause =
"PHYSICAL_INTERACTION");
180 bool sendMuteEvent(
bool mute, String cause =
"PHYSICAL_INTERACTION");
182 bool sendBandsEvent(String bands,
int level, String cause =
"PHYSICAL_INTERACTION");
183 bool sendModeEvent(String mode, String cause =
"PHYSICAL_INTERACTION");
185 bool handleRequest(
const char* deviceId,
const char* action, JsonObject &request_value, JsonObject &response_value)
override;
198 SinricProSpeaker::SinricProSpeaker(
const char* deviceId,
unsigned long eventWaitTime) :
SinricProDevice(deviceId, eventWaitTime),
199 volumeCallback(nullptr),
200 adjustVolumeCallback(nullptr),
201 muteCallback(nullptr),
202 mediaControlCallback(nullptr),
203 setBandsCallback(nullptr),
204 adjustBandsCallback(nullptr),
205 resetBandsCallback(nullptr),
206 setModeCallback(nullptr) {
209 bool SinricProSpeaker::handleRequest(
const char* deviceId,
const char* action, JsonObject &request_value, JsonObject &response_value) {
210 if (strcmp(deviceId, this->deviceId) != 0)
return false;
211 if (SinricProDevice::handleRequest(deviceId, action, request_value, response_value))
return true;
213 bool success =
false;
214 String actionString = String(action);
216 if (volumeCallback && actionString ==
"setVolume") {
217 int volume = request_value[
"volume"];
218 success = volumeCallback(String(deviceId), volume);
219 response_value[
"volume"] = volume;
223 if (adjustVolumeCallback && actionString ==
"adjustVolume") {
224 int volume = request_value[
"volume"];
225 success = adjustVolumeCallback(String(deviceId), volume);
226 response_value[
"volume"] = volume;
230 if (muteCallback && actionString ==
"setMute") {
231 bool mute = request_value[
"mute"];
232 success = muteCallback(String(deviceId), mute);
233 response_value[
"mute"] = mute;
237 if (setModeCallback && actionString ==
"setMode") {
238 String mode = request_value[
"mode"] |
"";
239 success = setModeCallback(String(deviceId), mode);
240 response_value[
"mode"] = mode;
244 if (mediaControlCallback && actionString ==
"mediaControl") {
245 String mediaControl = request_value[
"control"];
246 success = mediaControlCallback(String(deviceId), mediaControl);
247 response_value[
"control"] = mediaControl;
251 if (setBandsCallback && actionString ==
"setBands") {
252 JsonArray bands_array = request_value[
"bands"];
253 JsonArray response_value_bands = response_value.createNestedArray(
"bands");
255 for (
size_t i=0; i<bands_array.size(); i++) {
256 int level = bands_array[i][
"level"] | 0;
257 String bandsName = bands_array[i][
"name"] |
"";
258 success = setBandsCallback(deviceId, bandsName, level);
259 JsonObject response_value_bands_i = response_value_bands.createNestedObject();
260 response_value_bands_i[
"name"] = bandsName;
261 response_value_bands_i[
"level"] = level;
266 if (setBandsCallback && actionString ==
"adjustBands") {
267 JsonArray bands_array = request_value[
"bands"];
268 JsonArray response_value_bands = response_value.createNestedArray(
"bands");
270 for (
size_t i=0; i<bands_array.size(); i++) {
271 int levelDelta = bands_array[i][
"levelDelta"] | 1;
272 String direction = bands_array[i][
"levelDirection"];
273 if (direction==
"DOWN") levelDelta *= -1;
274 String bandsName = bands_array[i][
"name"] |
"";
275 success = adjustBandsCallback(deviceId, bandsName, levelDelta);
276 JsonObject response_value_bands_i = response_value_bands.createNestedObject();
277 response_value_bands_i[
"name"] = bandsName;
278 response_value_bands_i[
"level"] = levelDelta;
283 if (resetBandsCallback && actionString ==
"resetBands") {
284 JsonArray bands_array = request_value[
"bands"];
285 JsonArray response_value_bands = response_value.createNestedArray(
"bands");
287 for (
size_t i=0; i<bands_array.size(); i++) {
289 String bandsName = bands_array[i][
"name"] |
"";
290 success = adjustBandsCallback(deviceId, bandsName, level);
291 JsonObject response_value_bands_i = response_value_bands.createNestedObject();
292 response_value_bands_i[
"name"] = bandsName;
293 response_value_bands_i[
"level"] = level;
383 DynamicJsonDocument eventMessage = prepareEvent(deviceId,
"setVolume", cause.c_str());
384 JsonObject event_value = eventMessage[
"payload"][
"value"];
385 event_value[
"volume"] = volume;
386 return sendEvent(eventMessage);
399 DynamicJsonDocument eventMessage = prepareEvent(deviceId,
"setMute", cause.c_str());
400 JsonObject event_value = eventMessage[
"payload"][
"value"];
401 event_value[
"mute"] = mute;
402 return sendEvent(eventMessage);
415 DynamicJsonDocument eventMessage = prepareEvent(deviceId,
"mediaControl", cause.c_str());
416 JsonObject event_value = eventMessage[
"payload"][
"value"];
417 event_value[
"control"] = mediaControl;
418 return sendEvent(eventMessage);
431 DynamicJsonDocument eventMessage = prepareEvent(deviceId,
"setMode", cause.c_str());
432 JsonObject event_value = eventMessage[
"payload"][
"value"];
433 event_value[
"mode"] = mode;
434 return sendEvent(eventMessage);
448 DynamicJsonDocument eventMessage = prepareEvent(deviceId,
"setBands", cause.c_str());
449 JsonObject event_value = eventMessage[
"payload"][
"value"];
450 JsonArray event_value_bands = event_value.createNestedArray(
"bands");
451 JsonObject event_bands = event_value_bands.createNestedObject();
452 event_bands[
"name"] = bands;
453 event_bands[
"value"] = level;
454 return sendEvent(eventMessage);