Browse Source

Add 2 percent rule

pull/1155/head
DanielR92 2 years ago
parent
commit
c6d7101340
  1. 25
      src/app.cpp
  2. 11
      src/config/settings.h
  3. 1
      src/web/RestApi.h
  4. 8
      src/web/html/setup.html
  5. 1
      src/web/web.h

25
src/app.cpp

@ -450,6 +450,10 @@ void app::tickSend(void) {
} }
#endif #endif
} }
#if defined(ESP32)
if(mConfig->nrf.enabled || mConfig->cmt.enabled) zeroexport();
#endif
} }
} else { } else {
if (mConfig->serial.debug) if (mConfig->serial.debug)
@ -458,10 +462,6 @@ void app::tickSend(void) {
yield(); yield();
updateLed(); updateLed();
#if defined(ESP32)
zeroexport();
#endif
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -593,22 +593,29 @@ void app::updateLed(void) {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#if defined(ESP32) #if defined(ESP32)
void app::zeroexport() { void app::zeroexport() {
if (!mConfig->plugin.zexport.enabled) return; if (!mConfig->plugin.zexport.enabled &&
if (!mConfig->plugin.zexport.rdytoSend) return; !mConfig->plugin.zexport.rdytoSend) return; // check if plugin is enabled && indicate to send new value
Inverter<> *iv = mSys.getInverterByPos(mConfig->plugin.zexport.Iv);
DynamicJsonDocument doc(512); DynamicJsonDocument doc(512);
JsonObject object = doc.to<JsonObject>(); JsonObject object = doc.to<JsonObject>();
double nValue = round(mzExport.getPowertoSetnewValue());
double twoPerVal = nValue <= (iv->getMaxPower() / 100 * 2 );
if(mConfig->plugin.zexport.two_percent && (nValue <= twoPerVal)) {
object["val"] = twoPerVal;
} else {
object["val"] = nValue;
}
object["path"] = "ctrl";
object["id"] = mConfig->plugin.zexport.Iv; object["id"] = mConfig->plugin.zexport.Iv;
object["val"] = round(mzExport.getPowertoSetnewValue()); object["path"] = "ctrl";
object["cmd"] = "limit_nonpersistent_absolute"; object["cmd"] = "limit_nonpersistent_absolute";
String data; String data;
serializeJsonPretty(object, data); serializeJsonPretty(object, data);
DPRINTLN(DBG_INFO, data); DPRINTLN(DBG_INFO, data);
mApi.ctrlRequest(object); mApi.ctrlRequest(object);
} }
#endif #endif

11
src/config/settings.h

@ -147,6 +147,8 @@ typedef struct {
float power_avg; float power_avg;
uint8_t count_avg; uint8_t count_avg;
double total_power; double total_power;
bool two_percent; // ask if not go lower then 2%
} cfgzeroExport_t; } cfgzeroExport_t;
#endif #endif
@ -460,6 +462,7 @@ class settings {
mCfg.plugin.zexport.power_avg = 10; mCfg.plugin.zexport.power_avg = 10;
mCfg.plugin.zexport.device = 0; mCfg.plugin.zexport.device = 0;
mCfg.plugin.zexport.Iv = 0; mCfg.plugin.zexport.Iv = 0;
mCfg.plugin.zexport.two_percent = true;
#endif #endif
mCfg.inst.rstYieldMidNight = false; mCfg.inst.rstYieldMidNight = false;
@ -662,14 +665,20 @@ class settings {
obj[F("power_avg")] = mCfg.plugin.zexport.power_avg; obj[F("power_avg")] = mCfg.plugin.zexport.power_avg;
obj[F("count_avg")] = mCfg.plugin.zexport.count_avg; obj[F("count_avg")] = mCfg.plugin.zexport.count_avg;
obj[F("total_power")] = mCfg.plugin.zexport.total_power; obj[F("total_power")] = mCfg.plugin.zexport.total_power;
obj[F("two_percent")] = mCfg.plugin.zexport.two_percent;
} }
else else
{ {
getVal<bool>(obj, F("en_zeroexport"), &mCfg.plugin.zexport.enabled); getVal<bool>(obj, F("en_zeroexport"), &mCfg.plugin.zexport.enabled);
getVal<bool>(obj, F("two_percent"), &mCfg.plugin.zexport.two_percent);
getChar(obj, F("monitor_ipAddr"), mCfg.plugin.zexport.monitor_ip, ZEXPORT_ADDR_LEN); getChar(obj, F("monitor_ipAddr"), mCfg.plugin.zexport.monitor_ip, ZEXPORT_ADDR_LEN);
getVal<uint8_t>(obj, F("Iv"), &mCfg.plugin.zexport.Iv); getVal<uint8_t>(obj, F("Iv"), &mCfg.plugin.zexport.Iv);
getVal<float>(obj, F("power_avg"), &mCfg.plugin.zexport.power_avg);
getVal<uint8_t>(obj, F("count_avg"), &mCfg.plugin.zexport.count_avg); getVal<uint8_t>(obj, F("count_avg"), &mCfg.plugin.zexport.count_avg);
getVal<float>(obj, F("power_avg"), &mCfg.plugin.zexport.power_avg);
getVal<double>(obj, F("total_power"), &mCfg.plugin.zexport.total_power); getVal<double>(obj, F("total_power"), &mCfg.plugin.zexport.total_power);
} }
} }

1
src/web/RestApi.h

@ -484,6 +484,7 @@ class RestApi {
#if defined(ESP32) #if defined(ESP32)
void getzeroExport(JsonObject obj) { void getzeroExport(JsonObject obj) {
obj[F("en_zeroexport")] = (bool) mConfig->plugin.zexport.enabled; obj[F("en_zeroexport")] = (bool) mConfig->plugin.zexport.enabled;
obj[F("two_percent")] = (bool) mConfig->plugin.zexport.two_percent;
obj[F("monitor_ipAddr")] = String(mConfig->plugin.zexport.monitor_ip); obj[F("monitor_ipAddr")] = String(mConfig->plugin.zexport.monitor_ip);
obj[F("count_avg")] = (uint8_t)mConfig->plugin.zexport.count_avg; obj[F("count_avg")] = (uint8_t)mConfig->plugin.zexport.count_avg;
obj[F("Iv")] = (uint8_t)mConfig->plugin.zexport.Iv; obj[F("Iv")] = (uint8_t)mConfig->plugin.zexport.Iv;

8
src/web/html/setup.html

@ -332,6 +332,12 @@
<div class="col-12 col-sm-9"><input type="text" name="monitor_ipAddr" maxlength="15"></div> <div class="col-12 col-sm-9"><input type="text" name="monitor_ipAddr" maxlength="15"></div>
<div class="col-12 col-sm-3 my-2">Prio Inverter</div> <div class="col-12 col-sm-3 my-2">Prio Inverter</div>
<div class="col-12 col-sm-9"><select name="iv" id="Inv_ID"></select></div> <div class="col-12 col-sm-9"><select name="iv" id="Inv_ID"></select></div>
<div class="row mb-3">
<div class="col-8 col-sm-3">2% protection: </div>
<div class="col-4 col-sm-9"><input type="checkbox" name="two_percent"/></div>
</div>
<div class="col-12 col-sm-3 my-2">Refresh rate (sec.)<input type="number" name="count_avg" min="0" max="255"></div> <div class="col-12 col-sm-3 my-2">Refresh rate (sec.)<input type="number" name="count_avg" min="0" max="255"></div>
<div class="col-12 col-sm-3 my-2">Power tolerances (Watt)<input type="number" name="power_avg" min="0" max="255"></div> <div class="col-12 col-sm-3 my-2">Power tolerances (Watt)<input type="number" name="power_avg" min="0" max="255"></div>
</div> </div>
@ -959,6 +965,8 @@
} }
document.getElementsByName("en_zeroexport")[0].checked = obj["en_zeroexport"]; document.getElementsByName("en_zeroexport")[0].checked = obj["en_zeroexport"];
document.getElementsByName("two_percent")[0].checked = obj["two_percent"];
getAjax("/api/inverter/list", parseZeroIv); getAjax("/api/inverter/list", parseZeroIv);
for(var i of [["monitor_ipAddr", "monitor_ipAddr"], ["power_avg", "power_avg"], ["count_avg", "count_avg"]]) for(var i of [["monitor_ipAddr", "monitor_ipAddr"], ["power_avg", "power_avg"], ["count_avg", "count_avg"]])

1
src/web/web.h

@ -604,6 +604,7 @@ class Web {
// zero-export // zero-export
#if defined(ESP32) #if defined(ESP32)
mConfig->plugin.zexport.enabled = (request->arg("en_zeroexport") == "on"); mConfig->plugin.zexport.enabled = (request->arg("en_zeroexport") == "on");
mConfig->plugin.zexport.two_percent = (request->arg("two_percent") == "on");
mConfig->plugin.zexport.Iv = request->arg("Iv").toInt(); mConfig->plugin.zexport.Iv = request->arg("Iv").toInt();
mConfig->plugin.zexport.count_avg = request->arg("count_avg").toInt(); mConfig->plugin.zexport.count_avg = request->arg("count_avg").toInt();
mConfig->plugin.zexport.power_avg = request->arg("power_avg").toFloat(); mConfig->plugin.zexport.power_avg = request->arg("power_avg").toFloat();

Loading…
Cancel
Save