8 #ifndef _SINRICPOWERSENSOR_H_
9 #define _SINRICPOWERSENSOR_H_
11 #include "SinricProDevice.h"
20 String getProductType() {
return SinricProDevice::getProductType() + String(
"POWER_SENSOR"); }
23 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");
25 unsigned long startTime = 0;
26 unsigned long lastPower = 0;
28 float getWattHours(
unsigned long currentTimestamp);
31 SinricProPowerSensor::SinricProPowerSensor(
const DeviceId &deviceId) :
SinricProDevice(deviceId) {}
47 DynamicJsonDocument eventMessage = prepareEvent(deviceId,
"powerUsage", cause.c_str());
48 JsonObject event_value = eventMessage[
"payload"][
"value"];
49 if (power == -1) power = voltage * current;
50 if (apparentPower != -1) factor = power / apparentPower;
52 unsigned long currentTimestamp = getTimestamp();
54 event_value[
"startTime"] = startTime;
55 event_value[
"voltage"] = voltage;
56 event_value[
"current"] = current;
57 event_value[
"power"] = power;
58 event_value[
"apparentPower"] = apparentPower;
59 event_value[
"reactivePower"] = reactivePower;
60 event_value[
"factor"] = factor;
61 event_value[
"wattHours"] = getWattHours(currentTimestamp);
63 startTime = currentTimestamp;
65 return sendEvent(eventMessage);
68 float SinricProPowerSensor::getWattHours(
unsigned long currentTimestamp) {
69 if (startTime)
return (currentTimestamp-startTime) * lastPower / 3600.0f;