SinricPro Library
PowerSensorController.h
1 #ifndef _POWERSENSORCONTROLLER_H_
2 #define _POWERSENSORCONTROLLER_H_
3 
4 #include "./../SinricProDeviceInterface.h"
5 
11  public:
12  PowerSensorController(SinricProDeviceInterface *device);
13  bool sendPowerSensorEvent(float voltage, float current, float power = -1.0f, float apparentPower = -1.0f, float reactivePower = -1.0f, float factor = -1.0f, String cause = "PERIODIC_POLL");
14 
15  protected:
16  private:
17  SinricProDeviceInterface *device;
18  unsigned long startTime = 0;
19  unsigned long lastPower = 0;
20  float getWattHours(unsigned long currentTimestamp);
21 };
22 
23 PowerSensorController::PowerSensorController(SinricProDeviceInterface *device) : device(device) {}
24 
38 bool PowerSensorController::sendPowerSensorEvent(float voltage, float current, float power, float apparentPower, float reactivePower, float factor, String cause) {
39  DynamicJsonDocument eventMessage = device->prepareEvent("powerUsage", cause.c_str());
40  JsonObject event_value = eventMessage["payload"]["value"];
41  if (power == -1)
42  power = voltage * current;
43  if (apparentPower != -1)
44  factor = power / apparentPower;
45 
46  unsigned long currentTimestamp = device->getTimestamp();
47 
48  event_value["startTime"] = startTime;
49  event_value["voltage"] = voltage;
50  event_value["current"] = current;
51  event_value["power"] = power;
52  event_value["apparentPower"] = apparentPower;
53  event_value["reactivePower"] = reactivePower;
54  event_value["factor"] = factor;
55  event_value["wattHours"] = getWattHours(currentTimestamp);
56 
57  startTime = currentTimestamp;
58  lastPower = power;
59  return device->sendEvent(eventMessage);
60 }
61 
62 float PowerSensorController::getWattHours(unsigned long currentTimestamp) {
63  if (startTime)
64  return (currentTimestamp - startTime) * lastPower / 3600.0f;
65  return 0;
66 }
67 
68 #endif
PowerSensorController
PowerSensorController.
Definition: PowerSensorController.h:10
PowerSensorController::sendPowerSensorEvent
bool sendPowerSensorEvent(float voltage, float current, float power=-1.0f, float apparentPower=-1.0f, float reactivePower=-1.0f, float factor=-1.0f, String cause="PERIODIC_POLL")
Send PowerSensor event to SinricPro Server.
Definition: PowerSensorController.h:38