1 #ifndef _POWERSENSORCONTROLLER_H_
2 #define _POWERSENSORCONTROLLER_H_
4 #include "./../SinricProDeviceInterface.h"
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");
17 SinricProDeviceInterface *device;
18 unsigned long startTime = 0;
19 unsigned long lastPower = 0;
20 float getWattHours(
unsigned long currentTimestamp);
23 PowerSensorController::PowerSensorController(SinricProDeviceInterface *device) : device(device) {}
39 DynamicJsonDocument eventMessage = device->prepareEvent(
"powerUsage", cause.c_str());
40 JsonObject event_value = eventMessage[
"payload"][
"value"];
42 power = voltage * current;
43 if (apparentPower != -1)
44 factor = power / apparentPower;
46 unsigned long currentTimestamp = device->getTimestamp();
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);
57 startTime = currentTimestamp;
59 return device->sendEvent(eventMessage);
62 float PowerSensorController::getWattHours(
unsigned long currentTimestamp) {
64 return (currentTimestamp - startTime) * lastPower / 3600.0f;