Browse Source

first dry run

pull/1155/head
DanielR92 2 years ago
parent
commit
23844f945c
  1. 19
      src/app.cpp
  2. 1
      src/app.h
  3. 25
      src/plugins/zeroExport/zeroExport.h
  4. 4
      src/web/RestApi.h
  5. 8
      src/web/html/setup.html

19
src/app.cpp

@ -490,6 +490,7 @@ void app::tickSend(void) {
yield();
updateLed();
zeroexport();
}
//-----------------------------------------------------------------------------
@ -609,3 +610,21 @@ void app::updateLed(void) {
}
}
}
//-----------------------------------------------------------------------------
void app::zeroexport() {
if (!mConfig->plugin.zexport.enabled) return;
DynamicJsonDocument doc(512);
JsonObject object = doc.to<JsonObject>();
object["path"] = "ctrl";
object["id"] = 0;
object["val"] = round(mzExport.sum());
object["cmd"] = "limit_nonpersistent_absolute";
/*String data;
serializeJsonPretty(object, data);
DPRINTLN(DBG_INFO, data);*/
mApi.ctrlRequest(object);
}

1
src/app.h

@ -282,6 +282,7 @@ class app : public IApp, public ah::Scheduler {
void setupLed();
void updateLed();
void zeroexport();
void tickReboot(void) {
DPRINTLN(DBG_INFO, F("Rebooting..."));

25
src/plugins/zeroExport/zeroExport.h

@ -30,9 +30,25 @@ class ZeroExport {
}
}
uint8_t sum(int a, int b, int c)
double sum()
{
return a + b + c;
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;
}
}
private:
@ -43,12 +59,15 @@ class ZeroExport {
char msgBuffer[256] = {'\0'};
const String serverIp = "192.168.5.30";
static char msg[50];
void loop() { }
void zero() {
sendReq(0);
sendReq(1);
sendReq(2);
}
// TODO: change int to u_short
@ -72,7 +91,7 @@ class ZeroExport {
String raw = getData();
deserializeJson(json, raw);
DPRINTLN(DBG_INFO, raw);
//DPRINTLN(DBG_INFO, raw);
mCfg->PHASE[index].power = json[F("power")];
mCfg->PHASE[index].pf = json[F("pf")];

4
src/web/RestApi.h

@ -60,9 +60,9 @@ class RestApi {
}
void ctrlRequest(JsonObject obj) {
/*char out[128];
char out[128];
serializeJson(obj, out, 128);
DPRINTLN(DBG_INFO, "RestApi: " + String(out));*/
DPRINTLN(DBG_INFO, "RestApi: " + String(out));
DynamicJsonDocument json(128);
JsonObject dummy = json.as<JsonObject>();
if(obj[F("path")] == "ctrl")

8
src/web/html/setup.html

@ -331,6 +331,9 @@
<div class="col-12 col-sm-3 my-2">Shelly EM3 IP: </div>
<div class="col-12 col-sm-9"><input type="text" name="monitor_ipAddr" maxlength="15"></div>
</div>
<p name="phase_0">L1: n/a</p>
<p name="phase_1">L2: n/a</p>
<p name="phase_2">L3: n/a</p>
</fieldset>
</div>
@ -925,11 +928,14 @@
}
function parsezeroExport(obj) {
for(var i of [["monitor_ipAddr", "monitor_ipAddr"],["phase_1", "phase_1"],["phase_2", "phase_2"],["phase_3", "phase_3"],["sum", "sum"]])
for(var i of [["monitor_ipAddr", "monitor_ipAddr"]])
if(null != obj[i[1]])
document.getElementsByName(i[0])[0].value = obj[i[1]];
document.getElementsByName("en_zeroexport")[0].checked = obj["en_zeroexport"];
document.getElementsByName("phase_0")[0].innerHTML = "L1: " + obj["phase_0"]["power"].toFixed(2) + "W";
document.getElementsByName("phase_1")[0].innerHTML = "L2: " + obj["phase_1"]["power"].toFixed(2) + "W";
document.getElementsByName("phase_2")[0].innerHTML = "L3: " + obj["phase_2"]["power"].toFixed(2) + "W";
}
function parse(root) {

Loading…
Cancel
Save