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. 39
      src/config/settings.h
  3. 2
      src/defines.h
  4. 895
      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)
// TODO: aufräumen
// if (mConfig->plugin.zeroExport.enabled) {
mZeroExport.setup(&mConfig->plugin.zeroExport, &mSys, mConfig);
mZeroExport.setup(&mConfig->plugin.zeroExport, &mSys, mConfig, &mApi);
// }
#endif
// Plugin ZeroExport - Ende

39
src/config/settings.h

@ -186,19 +186,19 @@ typedef struct {
#endif
// Plugin ZeroExport
#define ZEROEXPORT_MAX_GROUPS 6
#define ZEROEXPORT_GROUP_MAX_LEN_NAME 25
#define ZEROEXPORT_GROUP_MAX_LEN_PM_URL 100
#define ZEROEXPORT_GROUP_MAX_LEN_PM_JSONPATH 100
#define ZEROEXPORT_GROUP_MAX_LEN_PM_USER 25
#define ZEROEXPORT_GROUP_MAX_LEN_PM_PASS 25
#define ZEROEXPORT_GROUP_MAX_INVERTERS 3
#define ZEROEXPORT_POWERMETER_MAX_ERRORS 5
#define ZEROEXPORT_DEF_INV_WAITINGTIME_MS 10000
#define ZEROEXPORT_MAX_GROUPS 6
#define ZEROEXPORT_GROUP_MAX_LEN_NAME 25
#define ZEROEXPORT_GROUP_MAX_LEN_PM_URL 100
#define ZEROEXPORT_GROUP_MAX_LEN_PM_JSONPATH 100
#define ZEROEXPORT_GROUP_MAX_LEN_PM_USER 25
#define ZEROEXPORT_GROUP_MAX_LEN_PM_PASS 25
#define ZEROEXPORT_GROUP_MAX_INVERTERS 3
#define ZEROEXPORT_POWERMETER_MAX_ERRORS 5
#define ZEROEXPORT_DEF_INV_WAITINGTIME_MS 10000
#if defined(PLUGIN_ZEROEXPORT)
enum class zeroExportState : uint8_t {
RESET, GETPOWERMETER, GETINVERTERPOWER, FINISH
RESET, GETPOWERMETER, GETINVERTERDATA, BATTERYPROTECTION, CONTROL, SETCONTROL, WAITACCEPT, FINISH
};
typedef enum {
@ -239,12 +239,14 @@ typedef struct {
bool enabled;
int8_t id;
int8_t target;
bool twoPercent;
uint16_t powerMin;
uint16_t powerMax;
float power;
uint16_t limit;
uint16_t limitNew;
unsigned long limitTsp;
bool limitAck;
float dcVoltage;
// uint16_t waitingTime;
@ -267,6 +269,7 @@ typedef struct {
float battVoltageOn;
float battVoltageOff;
// Advanced
uint16_t setPoint;
uint8_t refresh;
uint8_t powerTolerance;
uint16_t powerMax;
@ -278,6 +281,7 @@ typedef struct {
float pmPowerL1;
float pmPowerL2;
float pmPowerL3;
bool battSwitch;
// uint16_t power; // Aktueller Verbrauch
// uint16_t powerLimitAkt; // Aktuelles Limit
// 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].id = -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;
}
// Battery
@ -634,6 +638,7 @@ class settings {
mCfg.plugin.zeroExport.groups[group].battVoltageOn = 0;
mCfg.plugin.zeroExport.groups[group].battVoltageOff = 0;
// Advanced
mCfg.plugin.zeroExport.groups[group].setPoint = 0;
mCfg.plugin.zeroExport.groups[group].refresh = 10;
mCfg.plugin.zeroExport.groups[group].powerTolerance = 10;
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].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.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("id")] = mCfg.plugin.zeroExport.groups[group].inverters[inv].id;
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;
} else {
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);
if (obj.containsKey(F("target")))
getVal<int8_t>(obj, F("target"), &mCfg.plugin.zeroExport.groups[group].inverters[inv].target);
if (obj.containsKey(F("twoPercent")))
getVal<bool>(obj, F("twoPercent"), &mCfg.plugin.zeroExport.groups[group].inverters[inv].twoPercent);
if (obj.containsKey(F("powerMin")))
getVal<uint16_t>(obj, F("powerMin"), &mCfg.plugin.zeroExport.groups[group].inverters[inv].powerMin);
if (obj.containsKey(F("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("battVoltageOff")] = mCfg.plugin.zeroExport.groups[group].battVoltageOff;
// Advanced
obj[F("setPoint")] = mCfg.plugin.zeroExport.groups[group].setPoint;
obj[F("refresh")] = mCfg.plugin.zeroExport.groups[group].refresh;
obj[F("powerTolerance")] = mCfg.plugin.zeroExport.groups[group].powerTolerance;
obj[F("powerMax")] = mCfg.plugin.zeroExport.groups[group].powerMax;
@ -987,6 +994,8 @@ class settings {
if (obj.containsKey(F("battVoltageOff")))
getVal<float>(obj, F("battVoltageOff"), &mCfg.plugin.zeroExport.groups[group].battVoltageOff);
// Advanced
if (obj.containsKey(F("setPoint")))
getVal<uint16_t>(obj, F("setPoint"), &mCfg.plugin.zeroExport.groups[group].setPoint);
if (obj.containsKey(F("refresh")))
getVal<uint8_t>(obj, F("refresh"), &mCfg.plugin.zeroExport.groups[group].refresh);
if (obj.containsKey(F("powerTolerance")))

2
src/defines.h

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

895
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("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("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;
}
// Battery
@ -749,6 +749,7 @@ class RestApi {
objGroup[F("battVoltageOn")] = ah::round3((float)mConfig->plugin.zeroExport.groups[group].battVoltageOn);
objGroup[F("battVoltageOff")] = ah::round3((float)mConfig->plugin.zeroExport.groups[group].battVoltageOff);
// 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("powerTolerance")] = (uint8_t)mConfig->plugin.zeroExport.groups[group].powerTolerance;
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].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].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")];
}
// Battery
@ -1010,6 +1011,7 @@ class RestApi {
mConfig->plugin.zeroExport.groups[group].battVoltageOn = jsonIn[F("battVoltageOn")];
mConfig->plugin.zeroExport.groups[group].battVoltageOff = jsonIn[F("battVoltageOff")];
// Advanced
mConfig->plugin.zeroExport.groups[group].setPoint = jsonIn[F("setPoint")];
mConfig->plugin.zeroExport.groups[group].refresh = jsonIn[F("refresh")];
mConfig->plugin.zeroExport.groups[group].powerTolerance = jsonIn[F("powerTolerance")];
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", {}, "{#ZE_GROUP_TAB_INVERTER_NAME}"),
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}"),
]));
@ -1215,7 +1215,7 @@
),
ml("td", {},
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", {},
@ -1281,6 +1281,7 @@
]),
// Advanced
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_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)),
@ -1350,10 +1351,10 @@
}
}
}
// - twoPercent
// - powerMin
for (var inv = 0; inv < maxInv; inv++) {
var e = document.getElementById("invTwoPercent"+inv);
e.checked = (obj.inverters[inv].twoPercent);
var e = document.getElementById("invPowerMin"+inv);
e.value = (obj.inverters[inv].powerMin);
}
// - powerMax
for (var inv = 0; inv < maxInv; inv++) {
@ -1387,7 +1388,7 @@
q.id = e.options[e.selectedIndex].value;
var e = document.getElementById("invTarget"+inv);
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;
o.inverters.push(q);
}
@ -1396,6 +1397,7 @@
o.battVoltageOn = document.getElementsByName("battVoltageOn")[0].value;
o.battVoltageOff = document.getElementsByName("battVoltageOff")[0].value;
// Advanced
o.setPoint = document.getElementsByName("setPoint")[0].value;
o.refresh = document.getElementsByName("refresh")[0].value;
o.powerTolerance = document.getElementsByName("powerTolerance")[0].value;
o.powerMax = document.getElementsByName("powerMax")[0].value;
@ -1446,7 +1448,7 @@
q.id = -1;
var e = document.getElementById("invTarget"+inv);
q.target = -1;
q.twoPercent = false;
q.powerMin = 0;
q.powerMax = 0;
o.inverters.push(q);
}
@ -1455,6 +1457,7 @@
o.battVoltageOn = 0;
o.battVoltageOff = 0;
// Advanced
o.setPoint = 0;
o.refresh = 10;
o.powerTolerance = 10;
o.powerMax = 600;

11
src/web/lang.json

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

Loading…
Cancel
Save