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 char* deviceId, unsigned long eventWaitTime=100);
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 char* 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 char* deviceId, unsigned long eventWaitTime) : SinricProDevice(deviceId, eventWaitTime),
67  setPowerLevelCallback(nullptr),
68  adjustPowerLevelCallback(nullptr) {}
69 
70 bool SinricProDimSwitch::handleRequest(const char* deviceId, const char* action, JsonObject &request_value, JsonObject &response_value) {
71  if (strcmp(deviceId, this->deviceId) != 0) return false;
72 
73  if (SinricProDevice::handleRequest(deviceId, action, request_value, response_value)) return true;
74 
75  bool success = false;
76  String actionString = String(action);
77 
78  if (setPowerLevelCallback && actionString == "setPowerLevel") {
79  int powerLevel = request_value["powerLevel"];
80  success = setPowerLevelCallback(String(deviceId), powerLevel);
81  response_value["powerLevel"] = limitValue(powerLevel, 0, 100);
82  }
83 
84  if (adjustPowerLevelCallback && actionString == "adjustPowerLevel") {
85  int powerLevelDelta = request_value["powerLevelDelta"];
86  success = adjustPowerLevelCallback(String(deviceId), powerLevelDelta);
87  response_value["powerLevel"] = limitValue(powerLevelDelta, 0, 100);
88  }
89  return success;
90 }
91 
99  setPowerLevelCallback = cb;
100 }
101 
109  adjustPowerLevelCallback = cb;
110 }
111 
121 bool SinricProDimSwitch::sendPowerLevelEvent(int powerLevel, String cause) {
122  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "setPowerLevel", cause.c_str());
123  JsonObject event_value = eventMessage["payload"]["value"];
124  event_value["powerLevel"] = powerLevel;
125  return sendEvent(eventMessage);
126 }
127 
128 #endif
129 
SinricProDimSwitch::sendPowerLevelEvent
bool sendPowerLevelEvent(int powerLevel, String cause="PHYSICAL_INTERACTION")
Send setPowerLevel event to SinricPro Server indicating actual power level.
Definition: SinricProDimSwitch.h:121
SinricProDimSwitch::onPowerLevel
void onPowerLevel(SetPowerLevelCallback cb)
Set callback function for setPowerLevel request.
Definition: SinricProDimSwitch.h:98
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:108
SinricProDevice
Base class for all device types.
Definition: SinricProDevice.h:23
SinricProDimSwitch
Device which supports on / off and dimming commands.
Definition: SinricProDimSwitch.h:17