mirror of
https://github.com/lumapu/ahoy.git
synced 2025-06-05 20:21:38 +02:00
Merge pull request #1478 from tictrick/zero-export
zeroExport - Korrektur der Settings
This commit is contained in:
commit
121558a45b
7 changed files with 690 additions and 302 deletions
|
@ -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
|
||||
|
|
|
@ -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")))
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
//-------------------------------------
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 8
|
||||
#define VERSION_PATCH 89
|
||||
#define VERSION_PATCH 890001
|
||||
|
||||
//-------------------------------------
|
||||
typedef struct {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -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")];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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…
Add table
Add a link
Reference in a new issue