SinricPro Library
SinricProDimSwitch.h
1 /*
2  * Copyright (c) 2019 Sinric. All rights reserved.
3  * Licensed under Creative Commons Attribution-Share Alike (CC BY-SA)
4  *
5  * This file is part of the Sinric Pro (https://github.com/sinricpro/)
6  */
7 
8 #ifndef _SINRICDIMSWITCH_H_
9 #define _SINRICDIMSWITCH_H_
10 
11 #include "SinricProDevice.h"
12 
18  public:
19  SinricProDimSwitch(const DeviceId &deviceId);
20  String getProductType() { return SinricProDevice::getProductType() + String("DIMMABLE_SWITCH"); }
21  // callbacks
36  typedef std::function<bool(const String&, int&)> SetPowerLevelCallback;
37 
52  typedef std::function<bool(const String&, int&)> AdjustPowerLevelCallback;
53 
56 
57  // event
58  bool sendPowerLevelEvent(int powerLevel, String cause = "PHYSICAL_INTERACTION");
59  // handle
60  bool handleRequest(const DeviceId &deviceId, const char* action, JsonObject &request_value, JsonObject &response_value) override;
61  private:
62  SetPowerLevelCallback setPowerLevelCallback;
63  AdjustPowerLevelCallback adjustPowerLevelCallback;
64 };
65 
66 SinricProDimSwitch::SinricProDimSwitch(const DeviceId &deviceId) : SinricProDevice(deviceId),
67  setPowerLevelCallback(nullptr),
68  adjustPowerLevelCallback(nullptr) {}
69 
70 bool SinricProDimSwitch::handleRequest(const DeviceId &deviceId, const char* action, JsonObject &request_value, JsonObject &response_value) {
71  if (deviceId != this->deviceId) return false;
72  if (SinricProDevice::handleRequest(deviceId, action, request_value, response_value)) return true;
73 
74  bool success = false;
75  String actionString = String(action);
76 
77  if (setPowerLevelCallback && actionString == "setPowerLevel") {
78  int powerLevel = request_value["powerLevel"];
79  success = setPowerLevelCallback(deviceId, powerLevel);
80  response_value["powerLevel"] = limitValue(powerLevel, 0, 100);
81  }
82 
83  if (adjustPowerLevelCallback && actionString == "adjustPowerLevel") {
84  int powerLevelDelta = request_value["powerLevelDelta"];
85  success = adjustPowerLevelCallback(deviceId, powerLevelDelta);
86  response_value["powerLevel"] = limitValue(powerLevelDelta, 0, 100);
87  }
88  return success;
89 }
90 
98  setPowerLevelCallback = cb;
99 }
100 
108  adjustPowerLevelCallback = cb;
109 }
110 
120 bool SinricProDimSwitch::sendPowerLevelEvent(int powerLevel, String cause) {
121  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "setPowerLevel", cause.c_str());
122  JsonObject event_value = eventMessage["payload"]["value"];
123  event_value["powerLevel"] = powerLevel;
124  return sendEvent(eventMessage);
125 }
126 
127 #endif
128 
SinricProDimSwitch::sendPowerLevelEvent
bool sendPowerLevelEvent(int powerLevel, String cause="PHYSICAL_INTERACTION")
Send setPowerLevel event to SinricPro Server indicating actual power level.
Definition: SinricProDimSwitch.h:120
SinricProDimSwitch::onPowerLevel
void onPowerLevel(SetPowerLevelCallback cb)
Set callback function for setPowerLevel request.
Definition: SinricProDimSwitch.h:97
SinricProDimSwitch::AdjustPowerLevelCallback
std::function< bool(const String &, int &)> AdjustPowerLevelCallback
Definition for onAdjustPowerLevel callback.
Definition: SinricProDimSwitch.h:52
SinricProDimSwitch::SetPowerLevelCallback
std::function< bool(const String &, int &)> SetPowerLevelCallback
Definition for setPowerLevel callback.
Definition: SinricProDimSwitch.h:36
SinricProDimSwitch::onAdjustPowerLevel
void onAdjustPowerLevel(AdjustPowerLevelCallback cb)
Set callback function for adjustPowerLevel request.
Definition: SinricProDimSwitch.h:107
SinricProDevice
Base class for all device types.
Definition: SinricProDevice.h:24
SinricProDimSwitch
Device which supports on / off and dimming commands.
Definition: SinricProDimSwitch.h:17