3 #include "../EventLimiter.h"
4 #include "../SinricProStrings.h"
6 #include "../SinricProNamespace.h"
7 namespace SINRICPRO_NAMESPACE {
9 FSTR(POWERSENSOR, powerUsage);
10 FSTR(POWERSENSOR, startTime);
11 FSTR(POWERSENSOR, voltage);
12 FSTR(POWERSENSOR, current);
13 FSTR(POWERSENSOR, power);
14 FSTR(POWERSENSOR, apparentPower);
15 FSTR(POWERSENSOR, reactivePower);
16 FSTR(POWERSENSOR, factor);
17 FSTR(POWERSENSOR, wattHours);
27 bool sendPowerSensorEvent(
float voltage,
float current,
float power = -1.0f,
float apparentPower = -1.0f,
float reactivePower = -1.0f,
float factor = -1.0f, String cause = FSTR_SINRICPRO_PERIODIC_POLL);
30 EventLimiter event_limiter;
31 unsigned long startTime = 0;
32 unsigned long lastPower = 0;
33 float getWattHours(
unsigned long currentTimestamp);
38 : event_limiter(EVENT_LIMIT_SENSOR_VALUE) {}
55 if (event_limiter)
return false;
56 T* device =
static_cast<T*
>(
this);
58 JsonDocument eventMessage = device->prepareEvent(FSTR_POWERSENSOR_powerUsage, cause.c_str());
59 JsonObject event_value = eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_value];
61 power = voltage * current;
62 if (apparentPower != -1)
63 factor = power / apparentPower;
65 unsigned long currentTimestamp = device->getTimestamp();
67 event_value[FSTR_POWERSENSOR_startTime] = startTime;
68 event_value[FSTR_POWERSENSOR_voltage] = voltage;
69 event_value[FSTR_POWERSENSOR_current] = current;
70 event_value[FSTR_POWERSENSOR_power] = power;
71 event_value[FSTR_POWERSENSOR_apparentPower] = apparentPower;
72 event_value[FSTR_POWERSENSOR_reactivePower] = reactivePower;
73 event_value[FSTR_POWERSENSOR_factor] = factor;
74 event_value[FSTR_POWERSENSOR_wattHours] = getWattHours(currentTimestamp);
76 startTime = currentTimestamp;
78 return device->sendEvent(eventMessage);
84 return (currentTimestamp - startTime) * lastPower / 3600.0f;
91 using PowerSensor = SINRICPRO_NAMESPACE::PowerSensor<T>;
PowerSensor.
Definition: PowerSensor.h:24
bool sendPowerSensorEvent(float voltage, float current, float power=-1.0f, float apparentPower=-1.0f, float reactivePower=-1.0f, float factor=-1.0f, String cause=FSTR_SINRICPRO_PERIODIC_POLL)
Send PowerSensor event to SinricPro Server.
Definition: PowerSensor.h:54