SinricPro Library
SinricProFanUS.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 _SINRICFANUS_H_
9 #define _SINRICFANUS_H_
10 
11 #include "SinricProDevice.h"
12 
18  public:
19  SinricProFanUS(const char* deviceId, unsigned long eventWaitTime=100);
20  // callback
21 
36  typedef std::function<bool(const String&, int&)> SetRangeValueCallback;
37 
52  typedef std::function<bool(const String&, int&)> AdjustRangeValueCallback;
53 
55 
57 
58  // event
59  bool sendRangeValueEvent(int rangeValue, String cause = "PHYSICAL_INTERACTION");
60 
61  // handle
62  bool handleRequest(const char* deviceId, const char* action, JsonObject &request_value, JsonObject &response_value) override;
63  private:
64  SetRangeValueCallback setRangeValueCallback;
65  AdjustRangeValueCallback adjustRangeValueCallback;
66 };
67 
68 SinricProFanUS::SinricProFanUS(const char* deviceId, unsigned long eventWaitTime) : SinricProDevice(deviceId, eventWaitTime),
69  setRangeValueCallback(nullptr) {}
70 
71 bool SinricProFanUS::handleRequest(const char* deviceId, const char* action, JsonObject &request_value, JsonObject &response_value) {
72  if (strcmp(deviceId, this->deviceId) != 0) return false;
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 (actionString == "setRangeValue" && setRangeValueCallback) {
79  int rangeValue = request_value["rangeValue"] | 0;
80  success = setRangeValueCallback(String(deviceId), rangeValue);
81  response_value["rangeValue"] = rangeValue;
82  return success;
83  }
84 
85  if (actionString == "adjustRangeValue" && adjustRangeValueCallback) {
86  int rangeValueDelta = request_value["rangeValueDelta"] | 0;
87  success = adjustRangeValueCallback(String(deviceId), rangeValueDelta);
88  response_value["rangeValue"] = rangeValueDelta;
89  return success;
90  }
91 
92  return success;
93 }
94 
102  setRangeValueCallback = cb;
103 }
104 
112  adjustRangeValueCallback = cb;
113 }
114 
124 bool SinricProFanUS::sendRangeValueEvent(int rangeValue, String cause) {
125  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "setRangeValue", cause.c_str());
126  JsonObject event_value = eventMessage["payload"]["value"];
127  event_value["rangeValue"] = rangeValue;
128  return sendEvent(eventMessage);
129 }
130 
131 #endif
132 
SinricProFanUS::SetRangeValueCallback
std::function< bool(const String &, int &)> SetRangeValueCallback
Callback definition for onRangeValue function.
Definition: SinricProFanUS.h:36
SinricProFanUS::onRangeValue
void onRangeValue(SetRangeValueCallback cb)
Set callback function for setRangeValue request.
Definition: SinricProFanUS.h:101
SinricProFanUS::onAdjustRangeValue
void onAdjustRangeValue(AdjustRangeValueCallback cb)
Set callback function for adjustRangeValue request.
Definition: SinricProFanUS.h:111
SinricProFanUS::sendRangeValueEvent
bool sendRangeValueEvent(int rangeValue, String cause="PHYSICAL_INTERACTION")
Send rangeValue event to report curent rangeValue to SinricPro server.
Definition: SinricProFanUS.h:124
SinricProFanUS
Device to control a fan with on / off commands and its speed by a range value.
Definition: SinricProFanUS.h:17
SinricProFanUS::AdjustRangeValueCallback
std::function< bool(const String &, int &)> AdjustRangeValueCallback
Callback definition for onAdjustRangeValue function.
Definition: SinricProFanUS.h:52
SinricProDevice
Base class for all device types.
Definition: SinricProDevice.h:23