mirror of
https://github.com/lumapu/ahoy.git
synced 2025-06-09 06:01:37 +02:00
0.8.910008-zero
This commit is contained in:
parent
1c4a83dfd0
commit
3dfbee82c7
8 changed files with 1204 additions and 716 deletions
35
src/app.cpp
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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
//-------------------------------------
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 8
|
||||
#define VERSION_PATCH 910007
|
||||
#define VERSION_PATCH 910008
|
||||
|
||||
//-------------------------------------
|
||||
typedef struct {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -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"));
|
||||
|
|
|
@ -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"];
|
||||
|
||||
|
|
|
@ -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:",
|
||||
|
|
|
@ -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…
Add table
Add a link
Reference in a new issue