Browse Source

Merge pull request #1478 from tictrick/zero-export

zeroExport - Korrektur der Settings
pull/1521/head
Lukas Pusch 7 months ago
committed by GitHub
parent
commit
121558a45b
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      src/app.cpp
  2. 21
      src/config/settings.h
  3. 2
      src/defines.h
  4. 817
      src/plugins/zeroExport/zeroExport.h
  5. 6
      src/web/RestApi.h
  6. 17
      src/web/html/setup.html
  7. 11
      src/web/lang.json

2
src/app.cpp

@ -126,7 +126,7 @@ void app::setup() {
#if defined(PLUGIN_ZEROEXPORT) #if defined(PLUGIN_ZEROEXPORT)
// TODO: aufräumen // TODO: aufräumen
// if (mConfig->plugin.zeroExport.enabled) { // if (mConfig->plugin.zeroExport.enabled) {
mZeroExport.setup(&mConfig->plugin.zeroExport, &mSys, mConfig); mZeroExport.setup(&mConfig->plugin.zeroExport, &mSys, mConfig, &mApi);
// } // }
#endif #endif
// Plugin ZeroExport - Ende // Plugin ZeroExport - Ende

21
src/config/settings.h

@ -198,7 +198,7 @@ typedef struct {
#if defined(PLUGIN_ZEROEXPORT) #if defined(PLUGIN_ZEROEXPORT)
enum class zeroExportState : uint8_t { enum class zeroExportState : uint8_t {
RESET, GETPOWERMETER, GETINVERTERPOWER, FINISH RESET, GETPOWERMETER, GETINVERTERDATA, BATTERYPROTECTION, CONTROL, SETCONTROL, WAITACCEPT, FINISH
}; };
typedef enum { typedef enum {
@ -239,12 +239,14 @@ typedef struct {
bool enabled; bool enabled;
int8_t id; int8_t id;
int8_t target; int8_t target;
bool twoPercent; uint16_t powerMin;
uint16_t powerMax; uint16_t powerMax;
float power; float power;
uint16_t limit; uint16_t limit;
uint16_t limitNew;
unsigned long limitTsp;
bool limitAck; bool limitAck;
float dcVoltage; float dcVoltage;
// uint16_t waitingTime; // uint16_t waitingTime;
@ -267,6 +269,7 @@ typedef struct {
float battVoltageOn; float battVoltageOn;
float battVoltageOff; float battVoltageOff;
// Advanced // Advanced
uint16_t setPoint;
uint8_t refresh; uint8_t refresh;
uint8_t powerTolerance; uint8_t powerTolerance;
uint16_t powerMax; uint16_t powerMax;
@ -278,6 +281,7 @@ typedef struct {
float pmPowerL1; float pmPowerL1;
float pmPowerL2; float pmPowerL2;
float pmPowerL3; float pmPowerL3;
bool battSwitch;
// uint16_t power; // Aktueller Verbrauch // uint16_t power; // Aktueller Verbrauch
// uint16_t powerLimitAkt; // Aktuelles Limit // uint16_t powerLimitAkt; // Aktuelles Limit
// uint16_t powerHyst; // Hysterese // uint16_t powerHyst; // Hysterese
@ -626,7 +630,7 @@ class settings {
mCfg.plugin.zeroExport.groups[group].inverters[inv].enabled = false; mCfg.plugin.zeroExport.groups[group].inverters[inv].enabled = false;
mCfg.plugin.zeroExport.groups[group].inverters[inv].id = -1; mCfg.plugin.zeroExport.groups[group].inverters[inv].id = -1;
mCfg.plugin.zeroExport.groups[group].inverters[inv].target = -1; mCfg.plugin.zeroExport.groups[group].inverters[inv].target = -1;
mCfg.plugin.zeroExport.groups[group].inverters[inv].twoPercent = false; mCfg.plugin.zeroExport.groups[group].inverters[inv].powerMin = 10;
mCfg.plugin.zeroExport.groups[group].inverters[inv].powerMax = 600; mCfg.plugin.zeroExport.groups[group].inverters[inv].powerMax = 600;
} }
// Battery // Battery
@ -634,6 +638,7 @@ class settings {
mCfg.plugin.zeroExport.groups[group].battVoltageOn = 0; mCfg.plugin.zeroExport.groups[group].battVoltageOn = 0;
mCfg.plugin.zeroExport.groups[group].battVoltageOff = 0; mCfg.plugin.zeroExport.groups[group].battVoltageOff = 0;
// Advanced // Advanced
mCfg.plugin.zeroExport.groups[group].setPoint = 0;
mCfg.plugin.zeroExport.groups[group].refresh = 10; mCfg.plugin.zeroExport.groups[group].refresh = 10;
mCfg.plugin.zeroExport.groups[group].powerTolerance = 10; mCfg.plugin.zeroExport.groups[group].powerTolerance = 10;
mCfg.plugin.zeroExport.groups[group].powerMax = 600; mCfg.plugin.zeroExport.groups[group].powerMax = 600;
@ -645,6 +650,7 @@ class settings {
mCfg.plugin.zeroExport.groups[group].pmPowerL2 = 0; mCfg.plugin.zeroExport.groups[group].pmPowerL2 = 0;
mCfg.plugin.zeroExport.groups[group].pmPowerL3 = 0; mCfg.plugin.zeroExport.groups[group].pmPowerL3 = 0;
mCfg.plugin.zeroExport.groups[group].battSwitch = false;
} }
// snprintf(mCfg.plugin.zeroExport.monitor_url, ZEXPORT_ADDR_LEN, "%s", DEF_ZEXPORT); // snprintf(mCfg.plugin.zeroExport.monitor_url, ZEXPORT_ADDR_LEN, "%s", DEF_ZEXPORT);
// snprintf(mCfg.plugin.zeroExport.tibber_pw, ZEXPORT_ADDR_LEN, "%s", DEF_ZEXPORT); // snprintf(mCfg.plugin.zeroExport.tibber_pw, ZEXPORT_ADDR_LEN, "%s", DEF_ZEXPORT);
@ -916,7 +922,7 @@ class settings {
obj[F("enabled")] = mCfg.plugin.zeroExport.groups[group].inverters[inv].enabled; obj[F("enabled")] = mCfg.plugin.zeroExport.groups[group].inverters[inv].enabled;
obj[F("id")] = mCfg.plugin.zeroExport.groups[group].inverters[inv].id; obj[F("id")] = mCfg.plugin.zeroExport.groups[group].inverters[inv].id;
obj[F("target")] = mCfg.plugin.zeroExport.groups[group].inverters[inv].target; obj[F("target")] = mCfg.plugin.zeroExport.groups[group].inverters[inv].target;
obj[F("twoPercent")] = mCfg.plugin.zeroExport.groups[group].inverters[inv].twoPercent; obj[F("powerMin")] = mCfg.plugin.zeroExport.groups[group].inverters[inv].powerMin;
obj[F("powerMax")] = mCfg.plugin.zeroExport.groups[group].inverters[inv].powerMax; obj[F("powerMax")] = mCfg.plugin.zeroExport.groups[group].inverters[inv].powerMax;
} else { } else {
if (obj.containsKey(F("enabled"))) if (obj.containsKey(F("enabled")))
@ -925,8 +931,8 @@ class settings {
getVal<int8_t>(obj, F("id"), &mCfg.plugin.zeroExport.groups[group].inverters[inv].id); getVal<int8_t>(obj, F("id"), &mCfg.plugin.zeroExport.groups[group].inverters[inv].id);
if (obj.containsKey(F("target"))) if (obj.containsKey(F("target")))
getVal<int8_t>(obj, F("target"), &mCfg.plugin.zeroExport.groups[group].inverters[inv].target); getVal<int8_t>(obj, F("target"), &mCfg.plugin.zeroExport.groups[group].inverters[inv].target);
if (obj.containsKey(F("twoPercent"))) if (obj.containsKey(F("powerMin")))
getVal<bool>(obj, F("twoPercent"), &mCfg.plugin.zeroExport.groups[group].inverters[inv].twoPercent); getVal<uint16_t>(obj, F("powerMin"), &mCfg.plugin.zeroExport.groups[group].inverters[inv].powerMin);
if (obj.containsKey(F("powerMax"))) if (obj.containsKey(F("powerMax")))
getVal<uint16_t>(obj, F("powerMax"), &mCfg.plugin.zeroExport.groups[group].inverters[inv].powerMax); getVal<uint16_t>(obj, F("powerMax"), &mCfg.plugin.zeroExport.groups[group].inverters[inv].powerMax);
} }
@ -953,6 +959,7 @@ class settings {
obj[F("battVoltageOn")] = mCfg.plugin.zeroExport.groups[group].battVoltageOn; obj[F("battVoltageOn")] = mCfg.plugin.zeroExport.groups[group].battVoltageOn;
obj[F("battVoltageOff")] = mCfg.plugin.zeroExport.groups[group].battVoltageOff; obj[F("battVoltageOff")] = mCfg.plugin.zeroExport.groups[group].battVoltageOff;
// Advanced // Advanced
obj[F("setPoint")] = mCfg.plugin.zeroExport.groups[group].setPoint;
obj[F("refresh")] = mCfg.plugin.zeroExport.groups[group].refresh; obj[F("refresh")] = mCfg.plugin.zeroExport.groups[group].refresh;
obj[F("powerTolerance")] = mCfg.plugin.zeroExport.groups[group].powerTolerance; obj[F("powerTolerance")] = mCfg.plugin.zeroExport.groups[group].powerTolerance;
obj[F("powerMax")] = mCfg.plugin.zeroExport.groups[group].powerMax; obj[F("powerMax")] = mCfg.plugin.zeroExport.groups[group].powerMax;
@ -987,6 +994,8 @@ class settings {
if (obj.containsKey(F("battVoltageOff"))) if (obj.containsKey(F("battVoltageOff")))
getVal<float>(obj, F("battVoltageOff"), &mCfg.plugin.zeroExport.groups[group].battVoltageOff); getVal<float>(obj, F("battVoltageOff"), &mCfg.plugin.zeroExport.groups[group].battVoltageOff);
// Advanced // Advanced
if (obj.containsKey(F("setPoint")))
getVal<uint16_t>(obj, F("setPoint"), &mCfg.plugin.zeroExport.groups[group].setPoint);
if (obj.containsKey(F("refresh"))) if (obj.containsKey(F("refresh")))
getVal<uint8_t>(obj, F("refresh"), &mCfg.plugin.zeroExport.groups[group].refresh); getVal<uint8_t>(obj, F("refresh"), &mCfg.plugin.zeroExport.groups[group].refresh);
if (obj.containsKey(F("powerTolerance"))) if (obj.containsKey(F("powerTolerance")))

2
src/defines.h

@ -13,7 +13,7 @@
//------------------------------------- //-------------------------------------
#define VERSION_MAJOR 0 #define VERSION_MAJOR 0
#define VERSION_MINOR 8 #define VERSION_MINOR 8
#define VERSION_PATCH 89 #define VERSION_PATCH 890001
//------------------------------------- //-------------------------------------
typedef struct { typedef struct {

817
src/plugins/zeroExport/zeroExport.h

File diff suppressed because it is too large

6
src/web/RestApi.h

@ -741,7 +741,7 @@ class RestApi {
objGroupInv[F("enabled")] = (bool)mConfig->plugin.zeroExport.groups[group].inverters[inv].enabled; objGroupInv[F("enabled")] = (bool)mConfig->plugin.zeroExport.groups[group].inverters[inv].enabled;
objGroupInv[F("id")] = (int8_t)mConfig->plugin.zeroExport.groups[group].inverters[inv].id; objGroupInv[F("id")] = (int8_t)mConfig->plugin.zeroExport.groups[group].inverters[inv].id;
objGroupInv[F("target")] = (int8_t)mConfig->plugin.zeroExport.groups[group].inverters[inv].target; objGroupInv[F("target")] = (int8_t)mConfig->plugin.zeroExport.groups[group].inverters[inv].target;
objGroupInv[F("twoPercent")] = (bool)mConfig->plugin.zeroExport.groups[group].inverters[inv].twoPercent; objGroupInv[F("powerMin")] = (uint16_t)mConfig->plugin.zeroExport.groups[group].inverters[inv].powerMin;
objGroupInv[F("powerMax")] = (uint16_t)mConfig->plugin.zeroExport.groups[group].inverters[inv].powerMax; objGroupInv[F("powerMax")] = (uint16_t)mConfig->plugin.zeroExport.groups[group].inverters[inv].powerMax;
} }
// Battery // Battery
@ -749,6 +749,7 @@ class RestApi {
objGroup[F("battVoltageOn")] = ah::round3((float)mConfig->plugin.zeroExport.groups[group].battVoltageOn); objGroup[F("battVoltageOn")] = ah::round3((float)mConfig->plugin.zeroExport.groups[group].battVoltageOn);
objGroup[F("battVoltageOff")] = ah::round3((float)mConfig->plugin.zeroExport.groups[group].battVoltageOff); objGroup[F("battVoltageOff")] = ah::round3((float)mConfig->plugin.zeroExport.groups[group].battVoltageOff);
// Advanced // Advanced
objGroup[F("setPoint")] = (uint16_t)mConfig->plugin.zeroExport.groups[group].setPoint;
objGroup[F("refresh")] = (uint8_t)mConfig->plugin.zeroExport.groups[group].refresh; objGroup[F("refresh")] = (uint8_t)mConfig->plugin.zeroExport.groups[group].refresh;
objGroup[F("powerTolerance")] = (uint8_t)mConfig->plugin.zeroExport.groups[group].powerTolerance; objGroup[F("powerTolerance")] = (uint8_t)mConfig->plugin.zeroExport.groups[group].powerTolerance;
objGroup[F("powerMax")] = (uint16_t)mConfig->plugin.zeroExport.groups[group].powerMax; objGroup[F("powerMax")] = (uint16_t)mConfig->plugin.zeroExport.groups[group].powerMax;
@ -1002,7 +1003,7 @@ class RestApi {
mConfig->plugin.zeroExport.groups[group].inverters[inv].enabled = jsonIn[F("inverters")][inv][F("enabled")]; mConfig->plugin.zeroExport.groups[group].inverters[inv].enabled = jsonIn[F("inverters")][inv][F("enabled")];
mConfig->plugin.zeroExport.groups[group].inverters[inv].id = jsonIn[F("inverters")][inv][F("id")]; mConfig->plugin.zeroExport.groups[group].inverters[inv].id = jsonIn[F("inverters")][inv][F("id")];
mConfig->plugin.zeroExport.groups[group].inverters[inv].target = jsonIn[F("inverters")][inv][F("target")]; mConfig->plugin.zeroExport.groups[group].inverters[inv].target = jsonIn[F("inverters")][inv][F("target")];
mConfig->plugin.zeroExport.groups[group].inverters[inv].twoPercent = jsonIn[F("inverters")][inv][F("twoPercent")]; mConfig->plugin.zeroExport.groups[group].inverters[inv].powerMin = jsonIn[F("inverters")][inv][F("powerMin")];
mConfig->plugin.zeroExport.groups[group].inverters[inv].powerMax = jsonIn[F("inverters")][inv][F("powerMax")]; mConfig->plugin.zeroExport.groups[group].inverters[inv].powerMax = jsonIn[F("inverters")][inv][F("powerMax")];
} }
// Battery // Battery
@ -1010,6 +1011,7 @@ class RestApi {
mConfig->plugin.zeroExport.groups[group].battVoltageOn = jsonIn[F("battVoltageOn")]; mConfig->plugin.zeroExport.groups[group].battVoltageOn = jsonIn[F("battVoltageOn")];
mConfig->plugin.zeroExport.groups[group].battVoltageOff = jsonIn[F("battVoltageOff")]; mConfig->plugin.zeroExport.groups[group].battVoltageOff = jsonIn[F("battVoltageOff")];
// Advanced // Advanced
mConfig->plugin.zeroExport.groups[group].setPoint = jsonIn[F("setPoint")];
mConfig->plugin.zeroExport.groups[group].refresh = jsonIn[F("refresh")]; mConfig->plugin.zeroExport.groups[group].refresh = jsonIn[F("refresh")];
mConfig->plugin.zeroExport.groups[group].powerTolerance = jsonIn[F("powerTolerance")]; mConfig->plugin.zeroExport.groups[group].powerTolerance = jsonIn[F("powerTolerance")];
mConfig->plugin.zeroExport.groups[group].powerMax = jsonIn[F("powerMax")]; mConfig->plugin.zeroExport.groups[group].powerMax = jsonIn[F("powerMax")];

17
src/web/html/setup.html

@ -1191,7 +1191,7 @@
ml("th", {style: "width: 10%;"}, "{#ZE_GROUP_TAB_INVERTER_ENABLED}"), ml("th", {style: "width: 10%;"}, "{#ZE_GROUP_TAB_INVERTER_ENABLED}"),
ml("th", {}, "{#ZE_GROUP_TAB_INVERTER_NAME}"), ml("th", {}, "{#ZE_GROUP_TAB_INVERTER_NAME}"),
ml("th", {}, "{#ZE_GROUP_TAB_INVERTER_SUM}"), ml("th", {}, "{#ZE_GROUP_TAB_INVERTER_SUM}"),
ml("th", {style: "width: 10%;"}, "{#ZE_GROUP_TAB_INVERTER_TWOPERCENT}"), ml("th", {style: "width: 15%;"}, "{#ZE_GROUP_TAB_INVERTER_POWERMIN}"),
ml("th", {style: "width: 15%;"}, "{#ZE_GROUP_TAB_INVERTER_POWERMAX}"), ml("th", {style: "width: 15%;"}, "{#ZE_GROUP_TAB_INVERTER_POWERMAX}"),
])); ]));
@ -1215,7 +1215,7 @@
), ),
ml("td", {}, ml("td", {},
ml("div", {}, [ ml("div", {}, [
ml("input", {name: "invTwoPercent"+inv, class: "text", id: "invTwoPercent"+inv, type: "checkbox"}, null) ml("input", {name: "invPowerMin"+inv, class: "text", id: "invPowerMin"+inv, type: "number", min: "0", max: "65535"}, null)
]), ]),
), ),
ml("td", {}, ml("td", {},
@ -1281,6 +1281,7 @@
]), ]),
// Advanced // Advanced
ml("div", {id: "div{#ZE_GROUP_TAB_ADVANCED}", class: "tab-content hide"}, [ ml("div", {id: "div{#ZE_GROUP_TAB_ADVANCED}", class: "tab-content hide"}, [
divRow("{#ZE_GROUP_TAB_ADVANCED_SETPOINT}", ml("input", {name: "setPoint", class: "text", type: "number", min: "0", max: "65535", value: obj.setPoint}, null)),
divRow("{#ZE_GROUP_TAB_ADVANCED_REFRESH}", ml("input", {name: "refresh", class: "text", type: "number", min: "0", max: "255", value: obj.refresh}, null)), divRow("{#ZE_GROUP_TAB_ADVANCED_REFRESH}", ml("input", {name: "refresh", class: "text", type: "number", min: "0", max: "255", value: obj.refresh}, null)),
divRow("{#ZE_GROUP_TAB_ADVANCED_POWERTOLERANCE}", ml("input", {name: "powerTolerance", class: "text", type: "number", min: "0", max: "255", value: obj.powerTolerance}, null)), divRow("{#ZE_GROUP_TAB_ADVANCED_POWERTOLERANCE}", ml("input", {name: "powerTolerance", class: "text", type: "number", min: "0", max: "255", value: obj.powerTolerance}, null)),
divRow("{#ZE_GROUP_TAB_ADVANCED_POWERMAX}", ml("input", {name: "powerMax", class: "text", type: "number", min: "0", max: "65535", value: obj.powerMax}, null)), divRow("{#ZE_GROUP_TAB_ADVANCED_POWERMAX}", ml("input", {name: "powerMax", class: "text", type: "number", min: "0", max: "65535", value: obj.powerMax}, null)),
@ -1350,10 +1351,10 @@
} }
} }
} }
// - twoPercent // - powerMin
for (var inv = 0; inv < maxInv; inv++) { for (var inv = 0; inv < maxInv; inv++) {
var e = document.getElementById("invTwoPercent"+inv); var e = document.getElementById("invPowerMin"+inv);
e.checked = (obj.inverters[inv].twoPercent); e.value = (obj.inverters[inv].powerMin);
} }
// - powerMax // - powerMax
for (var inv = 0; inv < maxInv; inv++) { for (var inv = 0; inv < maxInv; inv++) {
@ -1387,7 +1388,7 @@
q.id = e.options[e.selectedIndex].value; q.id = e.options[e.selectedIndex].value;
var e = document.getElementById("invTarget"+inv); var e = document.getElementById("invTarget"+inv);
q.target = e.options[e.selectedIndex].value; q.target = e.options[e.selectedIndex].value;
q.twoPercent = document.getElementById("invTwoPercent"+inv).checked; q.powerMin = document.getElementById("invPowerMin"+inv).value;
q.powerMax = document.getElementById("invPowerMax"+inv).value; q.powerMax = document.getElementById("invPowerMax"+inv).value;
o.inverters.push(q); o.inverters.push(q);
} }
@ -1396,6 +1397,7 @@
o.battVoltageOn = document.getElementsByName("battVoltageOn")[0].value; o.battVoltageOn = document.getElementsByName("battVoltageOn")[0].value;
o.battVoltageOff = document.getElementsByName("battVoltageOff")[0].value; o.battVoltageOff = document.getElementsByName("battVoltageOff")[0].value;
// Advanced // Advanced
o.setPoint = document.getElementsByName("setPoint")[0].value;
o.refresh = document.getElementsByName("refresh")[0].value; o.refresh = document.getElementsByName("refresh")[0].value;
o.powerTolerance = document.getElementsByName("powerTolerance")[0].value; o.powerTolerance = document.getElementsByName("powerTolerance")[0].value;
o.powerMax = document.getElementsByName("powerMax")[0].value; o.powerMax = document.getElementsByName("powerMax")[0].value;
@ -1446,7 +1448,7 @@
q.id = -1; q.id = -1;
var e = document.getElementById("invTarget"+inv); var e = document.getElementById("invTarget"+inv);
q.target = -1; q.target = -1;
q.twoPercent = false; q.powerMin = 0;
q.powerMax = 0; q.powerMax = 0;
o.inverters.push(q); o.inverters.push(q);
} }
@ -1455,6 +1457,7 @@
o.battVoltageOn = 0; o.battVoltageOn = 0;
o.battVoltageOff = 0; o.battVoltageOff = 0;
// Advanced // Advanced
o.setPoint = 0;
o.refresh = 10; o.refresh = 10;
o.powerTolerance = 10; o.powerTolerance = 10;
o.powerMax = 600; o.powerMax = 600;

11
src/web/lang.json

@ -884,9 +884,9 @@
"de": "Gesamt" "de": "Gesamt"
}, },
{ {
"token": "ZE_GROUP_TAB_INVERTER_TWOPERCENT", "token": "ZE_GROUP_TAB_INVERTER_POWERMIN",
"en": "2%", "en": "Power (Min)",
"de": "2%" "de": "Leistung (Min)"
}, },
{ {
"token": "ZE_GROUP_TAB_INVERTER_POWERMAX", "token": "ZE_GROUP_TAB_INVERTER_POWERMAX",
@ -918,6 +918,11 @@
"en": "Advanced", "en": "Advanced",
"de": "Erweitert" "de": "Erweitert"
}, },
{
"token": "ZE_GROUP_TAB_ADVANCED_SETPOINT",
"en": "SetPoint (Watt):",
"de": "Zielpunkt (Watt):"
},
{ {
"token": "ZE_GROUP_TAB_ADVANCED_REFRESH", "token": "ZE_GROUP_TAB_ADVANCED_REFRESH",
"en": "Refresh rate (sec):", "en": "Refresh rate (sec):",

Loading…
Cancel
Save