From c3909950a777e7745dc7b571d9dbbfdfe173b28f Mon Sep 17 00:00:00 2001 From: DanielR92 Date: Fri, 22 Sep 2023 19:41:50 +0200 Subject: [PATCH] edit func sum() and add new properties --- src/config/settings.h | 4 +++ src/plugins/zeroExport/zeroExport.h | 45 ++++++++++++++--------------- src/web/RestApi.h | 2 ++ src/web/web.h | 3 ++ 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/src/config/settings.h b/src/config/settings.h index e48ffbb2..7c236d3d 100644 --- a/src/config/settings.h +++ b/src/config/settings.h @@ -150,6 +150,8 @@ typedef struct { typedef struct { char monitor_ip[ZEXPORT_ADDR_LEN]; bool enabled; + float power_avg; + uint8_t count_avg; cfgShellyEM3_t PHASE[3]; } cfgzeroExport_t; #endif @@ -657,6 +659,8 @@ class settings { if(set) { obj[F("en_zeroexport")] = (bool) mCfg.plugin.zexport.enabled; obj[F("monitor_ipAddr")] = mCfg.plugin.zexport.monitor_ip; + obj[F("power_avg")] = mCfg.plugin.zexport.power_avg; + obj[F("count_avg")] = mCfg.plugin.zexport.count_avg; if(!mCfg.plugin.zexport.PHASE) return; for (size_t i = 0; i < sizeof(mCfg.plugin.zexport.PHASE); i++) diff --git a/src/plugins/zeroExport/zeroExport.h b/src/plugins/zeroExport/zeroExport.h index d08d8654..0f45da38 100644 --- a/src/plugins/zeroExport/zeroExport.h +++ b/src/plugins/zeroExport/zeroExport.h @@ -32,30 +32,27 @@ class ZeroExport { } } + // 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() { - double val = mCfg->PHASE[0].power + mCfg->PHASE[1].power + mCfg->PHASE[2].power; - if (val > 0) { - return val; - } else { - float totalPower = 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; - totalPower += iv->getChannelFieldValue(CH0, FLD_PAC, rec); - } - - return totalPower - val; + 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; - //char msgBuffer[256] = {'\0'}; void loop() { } void zero() { @@ -73,13 +70,13 @@ class ZeroExport { { DynamicJsonDocument json(128); deserializeJson(json, getData()); - mCfg->PHASE[index].power = json[F("power")]; - mCfg->PHASE[index].pf = json[F("pf")]; - mCfg->PHASE[index].current = json[F("current")]; - mCfg->PHASE[index].voltage = json[F("voltage")]; - mCfg->PHASE[index].is_valid = json[F("is_valid")]; - mCfg->PHASE[index].total = json[F("total")]; - mCfg->PHASE[index].total_returned = json[F("total_returned")]; + 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")]; + mCfg->PHASE[index].is_valid = (bool)json[F("is_valid")]; + mCfg->PHASE[index].total = (int)json[F("total")]; + mCfg->PHASE[index].total_returned = (int)json[F("total_returned")]; } else { diff --git a/src/web/RestApi.h b/src/web/RestApi.h index 076fb4f0..7791a825 100644 --- a/src/web/RestApi.h +++ b/src/web/RestApi.h @@ -485,6 +485,8 @@ class RestApi { void getzeroExport(JsonObject obj) { obj[F("en_zeroexport")] = (bool) mConfig->plugin.zexport.enabled; obj[F("monitor_ipAddr")] = String(mConfig->plugin.zexport.monitor_ip); + obj[F("count_avg")] = (uint8_t)mConfig->plugin.zexport.count_avg; + obj[F("power_avg")] = (float)mConfig->plugin.zexport.power_avg; for (size_t i = 0; i < 3; i++) { char str[10]; diff --git a/src/web/web.h b/src/web/web.h index 4112ec23..fcec71a8 100644 --- a/src/web/web.h +++ b/src/web/web.h @@ -604,6 +604,9 @@ class Web { // zero-export #if defined(ESP32) mConfig->plugin.zexport.enabled = (request->arg("en_zeroexport") == "on"); + mConfig->plugin.zexport.count_avg = request->arg("count_avg").toInt(); + mConfig->plugin.zexport.power_avg = request->arg("power_avg").toFloat(); + if (request->arg("monitor_ipAddr") != "") { String addr = request->arg("monitor_ipAddr"); addr.trim();