Browse Source

0.8.910008-zero

pull/1521/head
Patrick Amrhein 1 year ago
parent
commit
3dfbee82c7
  1. 35
      src/app.cpp
  2. 46
      src/config/settings.h
  3. 2
      src/defines.h
  4. 2064
      src/plugins/zeroExport/zeroExport.h
  5. 2
      src/web/RestApi.h
  6. 11
      src/web/html/setup.html
  7. 10
      src/web/lang.json
  8. 2
      src/web/web.h

35
src/app.cpp

@ -73,9 +73,16 @@ void app::setup() {
mCommunication.setup(&mTimestamp, &mConfig->serial.debug, &mConfig->serial.privacyLog, &mConfig->serial.printWholeTrace);
mCommunication.addPayloadListener(std::bind(&app::payloadEventListener, this, std::placeholders::_1, std::placeholders::_2));
#if defined(ENABLE_MQTT)
mCommunication.addPowerLimitAckListener([this] (Inverter<> *iv) { mMqtt.setPowerLimitAck(iv); });
#endif
#if defined(PLUGIN_ZEROEXPORT) || defined(ENABLE_MQTT)
mCommunication.addPowerLimitAckListener([this] (Inverter<> *iv) {
#if defined(PLUGIN_ZEROEXPORT)
mZeroExport.resetWaitLimitAck(iv);
#endif /*PLUGIN_ZEROEXPORT*/
#if defined(ENABLE_MQTT)
mMqtt.setPowerLimitAck(iv);
#endif
});
#endif /*defined(PLUGIN_ZEROEXPORT) || defined(ENABLE_MQTT)*/
mSys.setup(&mTimestamp, &mConfig->inst, this);
for (uint8_t i = 0; i < MAX_NUM_INVERTERS; i++) {
initInverter(i);
@ -124,10 +131,7 @@ void app::setup() {
// Plugin ZeroExport
#if defined(PLUGIN_ZEROEXPORT)
// TODO: aufräumen
// if (mConfig->plugin.zeroExport.enabled) {
mZeroExport.setup(&mConfig->plugin.zeroExport, &mSys, mConfig, &mApi, &mMqtt);
// }
mZeroExport.setup(&mConfig->plugin.zeroExport, &mSys, mConfig, &mApi, &mMqtt);
#endif
// Plugin ZeroExport - Ende
@ -216,10 +220,7 @@ void app::regularTickers(void) {
// Plugin ZeroExport
#if defined(PLUGIN_ZEROEXPORT)
// TODO: aufräumen
// if (mConfig->plugin.zeroExport.enabled) {
everySec(std::bind(&ZeroExportType::tickerSecond, &mZeroExport), "ZeroExport");
// }
everySec(std::bind(&ZeroExportType::tickerSecond, &mZeroExport), "ZeroExport");
#endif
// Plugin ZeroExport - Ende
@ -479,13 +480,13 @@ void app::tickSend(void) {
});
// Plugin ZeroExport
#if defined(PLUGIN_ZEROEXPORT)
// #if defined(PLUGIN_ZEROEXPORT)
// TODO: aufräumen
if(mConfig->nrf.enabled || mConfig->cmt.enabled) {
mZeroExport.loop();
// if(mConfig->nrf.enabled || mConfig->cmt.enabled) {
// mZeroExport.loop();
// zeroexport();
}
#endif
// }
// #endif
// Plugin ZeroExport - Ende
}
}
@ -548,7 +549,7 @@ void app:: zeroIvValues(bool checkAvail, bool skipYieldDay) {
//-----------------------------------------------------------------------------
void app::resetSystem(void) {
#if defined(PLUGIN_ZEROEXPORT)
snprintf(mVersion, sizeof(mVersion), "zero-%d.%d.%d", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH);
snprintf(mVersion, sizeof(mVersion), "%d.%d.%d-zero", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH);
#else
snprintf(mVersion, sizeof(mVersion), "%d.%d.%d", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH);
#endif

46
src/config/settings.h

@ -186,6 +186,8 @@ typedef struct {
#endif
// Plugin ZeroExport
#if defined(PLUGIN_ZEROEXPORT)
#define ZEROEXPORT_MAX_GROUPS 6
#define ZEROEXPORT_GROUP_MAX_LEN_NAME 25
#define ZEROEXPORT_GROUP_MAX_LEN_PM_URL 100
@ -196,9 +198,22 @@ typedef struct {
#define ZEROEXPORT_POWERMETER_MAX_ERRORS 5
#define ZEROEXPORT_DEF_INV_WAITINGTIME_MS 10000
#if defined(PLUGIN_ZEROEXPORT)
enum class zeroExportState : uint8_t {
RESET, GETPOWERMETER, GETINVERTERDATA, BATTERYPROTECTION, CONTROL, SETCONTROL, FINISH
INIT,
WAIT,
WAITREFRESH,
GETINVERTERACKS,
GETINVERTERDATA,
BATTERYPROTECTION,
GETPOWERMETER,
CONTROLLER,
PROGNOSE,
AUFTEILEN,
SETLIMIT,
SETPOWER,
SETREBOOT,
FINISH,
ERROR
};
typedef enum {
@ -246,6 +261,9 @@ typedef struct {
float power;
uint16_t limit;
uint16_t limitNew;
bool waitLimitAck;
bool waitPowerAck;
bool waitRebootAck;
unsigned long limitTsp;
float dcVoltage;
bool state;
@ -274,9 +292,13 @@ typedef struct {
uint16_t powerMax;
//
zeroExportState stateLast;
zeroExportState state;
zeroExportState stateNext;
unsigned long lastRun;
unsigned long lastRefresh;
// bool waitForAck;
float pmPower;
float pmPowerL1;
float pmPowerL2;
@ -298,6 +320,8 @@ typedef struct {
typedef struct {
bool enabled;
bool log_over_webserial;
bool log_over_mqtt;
zeroExportGroup_t groups[ZEROEXPORT_MAX_GROUPS];
@ -314,6 +338,7 @@ typedef struct {
// double max_power;
// bool two_percent; // ask if not go lower then 2%
} zeroExport_t;
#endif
// Plugin ZeroExport - Ende
@ -624,6 +649,8 @@ class settings {
// Plugin ZeroExport
#if defined(PLUGIN_ZEROEXPORT)
mCfg.plugin.zeroExport.enabled = false;
mCfg.plugin.zeroExport.log_over_webserial = false;
mCfg.plugin.zeroExport.log_over_mqtt = false;
for(uint8_t group = 0; group < ZEROEXPORT_MAX_GROUPS; group++) {
// General
mCfg.plugin.zeroExport.groups[group].enabled = false;
@ -641,6 +668,10 @@ class settings {
mCfg.plugin.zeroExport.groups[group].inverters[inv].target = -1;
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].waitLimitAck = false;
mCfg.plugin.zeroExport.groups[group].inverters[inv].waitPowerAck = false;
mCfg.plugin.zeroExport.groups[group].inverters[inv].waitRebootAck = false;
}
// Battery
mCfg.plugin.zeroExport.groups[group].battEnabled = false;
@ -651,9 +682,10 @@ class settings {
mCfg.plugin.zeroExport.groups[group].refresh = 10;
mCfg.plugin.zeroExport.groups[group].powerTolerance = 10;
mCfg.plugin.zeroExport.groups[group].powerMax = 600;
//
mCfg.plugin.zeroExport.groups[group].state = zeroExportState::RESET;
//
mCfg.plugin.zeroExport.groups[group].state = zeroExportState::INIT;
mCfg.plugin.zeroExport.groups[group].lastRun = 0;
mCfg.plugin.zeroExport.groups[group].lastRefresh = 0;
mCfg.plugin.zeroExport.groups[group].pmPower = 0;
mCfg.plugin.zeroExport.groups[group].pmPowerL1 = 0;
mCfg.plugin.zeroExport.groups[group].pmPowerL2 = 0;
@ -1017,6 +1049,8 @@ class settings {
void jsonZeroExport(JsonObject obj, bool set = false) {
if(set) {
obj[F("enabled")] = mCfg.plugin.zeroExport.enabled;
obj[F("log_over_webserial")] = mCfg.plugin.zeroExport.log_over_webserial;
obj[F("log_over_mqtt")] = mCfg.plugin.zeroExport.log_over_mqtt;
JsonArray grpArr = obj.createNestedArray(F("groups"));
for(uint8_t group = 0; group < ZEROEXPORT_MAX_GROUPS; group++) {
jsonZeroExportGroup(grpArr.createNestedObject(), group, set);
@ -1026,6 +1060,10 @@ class settings {
{
if (obj.containsKey(F("enabled")))
getVal<bool>(obj, F("enabled"), &mCfg.plugin.zeroExport.enabled);
if (obj.containsKey(F("log_over_webserial")))
getVal<bool>(obj, F("log_over_webserial"), &mCfg.plugin.zeroExport.log_over_webserial);
if (obj.containsKey(F("log_over_mqtt")))
getVal<bool>(obj, F("log_over_mqtt"), &mCfg.plugin.zeroExport.log_over_mqtt);
if (obj.containsKey(F("groups"))) {
for(uint8_t group = 0; group < ZEROEXPORT_MAX_GROUPS; group++) {
jsonZeroExportGroup(obj[F("groups")][group], group, set);

2
src/defines.h

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

2064
src/plugins/zeroExport/zeroExport.h

File diff suppressed because it is too large

2
src/web/RestApi.h

@ -718,6 +718,8 @@ class RestApi {
#if defined(PLUGIN_ZEROEXPORT)
void getZeroExport(JsonObject obj) {
obj[F("enabled")] = (bool) mConfig->plugin.zeroExport.enabled;
obj[F("log_over_webserial")] = (bool) mConfig->plugin.zeroExport.log_over_webserial;
obj[F("log_over_mqtt")] = (bool) mConfig->plugin.zeroExport.log_over_mqtt;
// Groups
obj[F("max_groups")] = ZEROEXPORT_MAX_GROUPS;
JsonArray arrGroup = obj.createNestedArray(F("groups"));

11
src/web/html/setup.html

@ -314,6 +314,10 @@
<div class="row mb-3">
<div class="col-12 col-sm-3 my-2">{#ZE_ENABLED}</div>
<div class="col-12 col-sm-9"><input type="checkbox" name="ze_enabled"/></div>
<div class="col-12 col-sm-3 my-2">{#ZE_LOG_OVER_WEBSERIAL}</div>
<div class="col-12 col-sm-9"><input type="checkbox" name="ze_log_over_webserial"/></div>
<div class="col-12 col-sm-3 my-2">{#ZE_LOG_OVER_MQTT}</div>
<div class="col-12 col-sm-9"><input type="checkbox" name="ze_log_over_mqtt"/></div>
</div>
<div id="ze_groups"></div>
</fieldset>
@ -1563,7 +1567,6 @@
}
}
/*ENDIF_PLUGIN_ZEROEXPORT*/
function parseZeroExport(obj, type) {
@ -1573,6 +1576,12 @@
// enabled
document.getElementsByName("ze_enabled")[0].checked = obj["enabled"];
// log_over_webserial
document.getElementsByName("ze_log_over_webserial")[0].checked = obj["log_over_webserial"];
// log_over_mqtt
document.getElementsByName("ze_log_over_mqtt")[0].checked = obj["log_over_mqtt"];
// groups
maxGroups = obj["max_groups"];

10
src/web/lang.json

@ -778,6 +778,16 @@
"en": "Enabled",
"de": "Aktiviert"
},
{
"token": "ZE_LOG_OVER_WEBSERIAL",
"en": "Log over Webserial",
"de": "Log in Webserial"
},
{
"token": "ZE_LOG_OVER_MQTT",
"en": "Log over MQTT",
"de": "Log in MQTT"
},
{
"token": "ZE_GROUP_ENABLED",
"en": "State:",

2
src/web/web.h

@ -589,6 +589,8 @@ class Web {
// Plugin ZeroExport
#if defined(PLUGIN_ZEROEXPORT)
mConfig->plugin.zeroExport.enabled = (request->arg("ze_enabled") == "on");
mConfig->plugin.zeroExport.log_over_webserial = (request->arg("ze_log_over_webserial") == "on");
mConfig->plugin.zeroExport.log_over_mqtt = (request->arg("ze_log_over_mqtt") == "on");
// TODO: sortieren
// mConfig->plugin.zeroExport.enabled = (request->arg("en_zeroexport") == "on");
// mConfig->plugin.zeroExport.two_percent = (request->arg("two_percent") == "on");

Loading…
Cancel
Save