mirror of https://github.com/lumapu/ahoy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.8 KiB
106 lines
2.8 KiB
#if defined(ESP32)
|
|
|
|
#ifndef __ZEROEXPORT__
|
|
#define __ZEROEXPORT__
|
|
|
|
#include <HTTPClient.h>
|
|
#include <string.h>
|
|
#include "AsyncJson.h"
|
|
|
|
template <class HMSYSTEM>
|
|
|
|
class ZeroExport {
|
|
public:
|
|
ZeroExport() { }
|
|
float mililine;
|
|
|
|
void setup(cfgzeroExport_t *cfg, HMSYSTEM *sys, settings_t *config) {
|
|
mCfg = cfg;
|
|
mSys = sys;
|
|
mConfig = config;
|
|
}
|
|
|
|
void payloadEventListener(uint8_t cmd) {
|
|
mNewPayload = true;
|
|
}
|
|
|
|
void tickerSecond() {
|
|
if (mNewPayload || ((++mLoopCnt % 10) == 0)) {
|
|
mNewPayload = false;
|
|
mLoopCnt = 0;
|
|
zero();
|
|
}
|
|
}
|
|
|
|
// Sums up the power values of all phases and returns them.
|
|
// If the value is negative, all power values from the inverter are taken into account
|
|
double sum()
|
|
{
|
|
float ivPower = 0;
|
|
Inverter<> *iv;
|
|
record_t<> *rec;
|
|
for (uint8_t i = 0; i < mSys->getNumInverters(); i++) {
|
|
iv = mSys->getInverterByPos(i);
|
|
rec = iv->getRecordStruct(RealTimeRunData_Debug);
|
|
if (iv == NULL)
|
|
continue;
|
|
ivPower += iv->getChannelFieldValue(CH0, FLD_PAC, rec);
|
|
}
|
|
|
|
double em3_power = mCfg->PHASE[0].power + mCfg->PHASE[1].power + mCfg->PHASE[2].power;
|
|
return ((unsigned)(em3_power - mCfg->power_avg) >= mCfg->power_avg) ? ivPower + em3_power : ivPower - em3_power;
|
|
}
|
|
|
|
private:
|
|
HTTPClient http;
|
|
|
|
void loop() { }
|
|
void zero() {
|
|
sendReq(0);
|
|
sendReq(1);
|
|
sendReq(2);
|
|
}
|
|
|
|
void sendReq(int index)
|
|
{
|
|
http.begin(String(mCfg->monitor_ip), 80, "/emeter/" + String(index));
|
|
|
|
int httpResponseCode = http.GET();
|
|
if (httpResponseCode > 0)
|
|
{
|
|
DynamicJsonDocument json(128);
|
|
deserializeJson(json, getData());
|
|
mCfg->PHASE[index].power = (float)json[F("power")];
|
|
mCfg->PHASE[index].pf = (float)json[F("pf")];
|
|
mCfg->PHASE[index].current = (float)json[F("current")];
|
|
mCfg->PHASE[index].voltage = (float)json[F("voltage")];
|
|
}
|
|
else
|
|
{
|
|
DPRINT(DBG_INFO, "Error code: ");
|
|
DPRINTLN(DBG_INFO, String(httpResponseCode));
|
|
}
|
|
|
|
}
|
|
|
|
String getData()
|
|
{
|
|
String payload = http.getString();
|
|
int x = payload.indexOf("{", 0);
|
|
return payload.substring(x, payload.length());
|
|
}
|
|
|
|
// private member variables
|
|
bool mNewPayload;
|
|
uint8_t mLoopCnt;
|
|
const char *mVersion;
|
|
cfgzeroExport_t *mCfg;
|
|
|
|
settings_t *mConfig;
|
|
HMSYSTEM *mSys;
|
|
uint16_t mRefreshCycle;
|
|
};
|
|
|
|
#endif /*__ZEROEXPORT__*/
|
|
|
|
#endif /* #if defined(ESP32) */
|