8 #ifndef _SINRICPOWERSENSOR_H_
9 #define _SINRICPOWERSENSOR_H_
11 #include "SinricProDevice.h"
21 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");
23 unsigned long startTime = 0;
24 unsigned long lastPower = 0;
26 float getWattHours(
unsigned long currentTimestamp);
29 SinricProPowerSensor::SinricProPowerSensor(
const char* deviceId,
unsigned long eventWaitTime) :
SinricProDevice(deviceId, eventWaitTime) {}
45 DynamicJsonDocument eventMessage = prepareEvent(deviceId,
"powerUsage", cause.c_str());
46 JsonObject event_value = eventMessage[
"payload"][
"value"];
47 if (power == -1) power = voltage * current;
48 if (apparentPower != -1) factor = power / apparentPower;
50 unsigned long currentTimestamp = getTimestamp();
52 event_value[
"startTime"] = startTime;
53 event_value[
"voltage"] = voltage;
54 event_value[
"current"] = current;
55 event_value[
"power"] = power;
56 event_value[
"apparentPower"] = apparentPower;
57 event_value[
"reactivePower"] = reactivePower;
58 event_value[
"factor"] = factor;
59 event_value[
"wattHours"] = getWattHours(currentTimestamp);
61 startTime = currentTimestamp;
63 return sendEvent(eventMessage);
66 float SinricProPowerSensor::getWattHours(
unsigned long currentTimestamp) {
67 if (startTime)
return (currentTimestamp-startTime) * lastPower / 3600.0f;