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  if (rangeValue < 1) rangeValue = 1;
82  if (rangeValue > 3) rangeValue = 3;
83  response_value["rangeValue"] = rangeValue;
84  return success;
85  }
86 
87  if (actionString == "adjustRangeValue" && adjustRangeValueCallback) {
88  int rangeValueDelta = request_value["rangeValueDelta"] | 0;
89  success = adjustRangeValueCallback(String(deviceId), rangeValueDelta);
90  if (rangeValueDelta < 1) rangeValueDelta = 1;
91  if (rangeValueDelta > 3) rangeValueDelta = 3;
92  response_value["rangeValue"] = rangeValueDelta;
93  return success;
94  }
95 
96  return success;
97 }
98 
106  setRangeValueCallback = cb;
107 }
108 
116  adjustRangeValueCallback = cb;
117 }
118 
128 bool SinricProFanUS::sendRangeValueEvent(int rangeValue, String cause) {
129  DynamicJsonDocument eventMessage = prepareEvent(deviceId, "setRangeValue", cause.c_str());
130  JsonObject event_value = eventMessage["payload"]["value"];
131  event_value["rangeValue"] = rangeValue;
132  return sendEvent(eventMessage);
133 }
134 
135 #endif
136 
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:105
SinricProFanUS::onAdjustRangeValue
void onAdjustRangeValue(AdjustRangeValueCallback cb)
Set callback function for adjustRangeValue request.
Definition: SinricProFanUS.h:115
SinricProFanUS::sendRangeValueEvent
bool sendRangeValueEvent(int rangeValue, String cause="PHYSICAL_INTERACTION")
Send rangeValue event to report curent rangeValue to SinricPro server.
Definition: SinricProFanUS.h:128
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