mirror of
https://github.com/lumapu/ahoy.git
synced 2025-06-05 20:21:38 +02:00
0.8.910011-zero
This commit is contained in:
parent
35901be33e
commit
40ad725bab
6 changed files with 91 additions and 19 deletions
|
@ -188,6 +188,7 @@ typedef struct {
|
||||||
// Plugin ZeroExport
|
// Plugin ZeroExport
|
||||||
#if defined(PLUGIN_ZEROEXPORT)
|
#if defined(PLUGIN_ZEROEXPORT)
|
||||||
|
|
||||||
|
#define ZEROEXPORT_DEV_POWERMETER
|
||||||
#define ZEROEXPORT_MAX_GROUPS 6
|
#define ZEROEXPORT_MAX_GROUPS 6
|
||||||
#define ZEROEXPORT_GROUP_MAX_LEN_NAME 25
|
#define ZEROEXPORT_GROUP_MAX_LEN_NAME 25
|
||||||
#define ZEROEXPORT_GROUP_MAX_LEN_PM_URL 100
|
#define ZEROEXPORT_GROUP_MAX_LEN_PM_URL 100
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 8
|
#define VERSION_MINOR 8
|
||||||
#define VERSION_PATCH 910010
|
#define VERSION_PATCH 910011
|
||||||
|
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -46,7 +46,6 @@ class ZeroExport {
|
||||||
mApi = api;
|
mApi = api;
|
||||||
mMqtt = mqtt;
|
mMqtt = mqtt;
|
||||||
|
|
||||||
// mIsInitialized = true;
|
|
||||||
// TODO: Sicherheitsreturn weil noch Sicherheitsfunktionen fehlen.
|
// TODO: Sicherheitsreturn weil noch Sicherheitsfunktionen fehlen.
|
||||||
mIsInitialized = false;
|
mIsInitialized = false;
|
||||||
}
|
}
|
||||||
|
@ -67,6 +66,10 @@ class ZeroExport {
|
||||||
switch (mCfg->groups[group].state) {
|
switch (mCfg->groups[group].state) {
|
||||||
case zeroExportState::INIT:
|
case zeroExportState::INIT:
|
||||||
if (groupInit(group)) sendLog();
|
if (groupInit(group)) sendLog();
|
||||||
|
//#if defined(ZEROEXPORT_DEV_POWERMETER)
|
||||||
|
//mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
||||||
|
//mCfg->groups[group].stateNext = zeroExportState::WAITREFRESH;
|
||||||
|
//#endif
|
||||||
break;
|
break;
|
||||||
case zeroExportState::WAIT:
|
case zeroExportState::WAIT:
|
||||||
if (groupWait(group)) sendLog();
|
if (groupWait(group)) sendLog();
|
||||||
|
@ -85,6 +88,11 @@ class ZeroExport {
|
||||||
break;
|
break;
|
||||||
case zeroExportState::GETPOWERMETER:
|
case zeroExportState::GETPOWERMETER:
|
||||||
if (groupGetPowermeter(group)) sendLog();
|
if (groupGetPowermeter(group)) sendLog();
|
||||||
|
#if defined(ZEROEXPORT_DEV_POWERMETER)
|
||||||
|
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
||||||
|
mCfg->groups[group].stateNext = zeroExportState::WAITREFRESH;
|
||||||
|
mCfg->groups[group].lastRefresh = millis();;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case zeroExportState::CONTROLLER:
|
case zeroExportState::CONTROLLER:
|
||||||
if (groupController(group)) sendLog();
|
if (groupController(group)) sendLog();
|
||||||
|
@ -100,9 +108,17 @@ class ZeroExport {
|
||||||
break;
|
break;
|
||||||
case zeroExportState::SETPOWER:
|
case zeroExportState::SETPOWER:
|
||||||
if (groupSetPower(group)) sendLog();
|
if (groupSetPower(group)) sendLog();
|
||||||
|
// waitForAck fehlt noch
|
||||||
|
mCfg->groups[group].state = zeroExportState::WAIT;
|
||||||
|
mCfg->groups[group].stateNext = zeroExportState::WAIT;
|
||||||
|
mCfg->groups[group].lastRefresh = millis();;
|
||||||
break;
|
break;
|
||||||
case zeroExportState::SETREBOOT:
|
case zeroExportState::SETREBOOT:
|
||||||
if (groupSetReboot(group)) sendLog();
|
if (groupSetReboot(group)) sendLog();
|
||||||
|
// waitForAck fehlt noch
|
||||||
|
mCfg->groups[group].lastRefresh = millis();;
|
||||||
|
mCfg->groups[group].state = zeroExportState::WAIT;
|
||||||
|
mCfg->groups[group].stateNext = zeroExportState::WAIT;
|
||||||
break;
|
break;
|
||||||
case zeroExportState::FINISH:
|
case zeroExportState::FINISH:
|
||||||
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
||||||
|
@ -110,9 +126,6 @@ class ZeroExport {
|
||||||
mCfg->groups[group].lastRefresh = millis();;
|
mCfg->groups[group].lastRefresh = millis();;
|
||||||
break;
|
break;
|
||||||
case zeroExportState::ERROR:
|
case zeroExportState::ERROR:
|
||||||
mCfg->groups[group].state = zeroExportState::INIT;
|
|
||||||
mCfg->groups[group].stateNext = zeroExportState::INIT;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
mCfg->groups[group].state = zeroExportState::INIT;
|
mCfg->groups[group].state = zeroExportState::INIT;
|
||||||
mCfg->groups[group].stateNext = zeroExportState::INIT;
|
mCfg->groups[group].stateNext = zeroExportState::INIT;
|
||||||
|
@ -258,6 +271,7 @@ mCfg->groups[group].lastRefresh = millis();;
|
||||||
mLog["E"] = eTsp;
|
mLog["E"] = eTsp;
|
||||||
mLog["D"] = eTsp - bTsp;
|
mLog["D"] = eTsp - bTsp;
|
||||||
mCfg->groups[group].lastRun = eTsp;
|
mCfg->groups[group].lastRun = eTsp;
|
||||||
|
mCfg->groups[group].lastRefresh = eTsp;
|
||||||
return doLog;
|
return doLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,6 +310,7 @@ mCfg->groups[group].lastRefresh = millis();;
|
||||||
mLog["E"] = eTsp;
|
mLog["E"] = eTsp;
|
||||||
mLog["D"] = eTsp - bTsp;
|
mLog["D"] = eTsp - bTsp;
|
||||||
mCfg->groups[group].lastRun = eTsp;
|
mCfg->groups[group].lastRun = eTsp;
|
||||||
|
mCfg->groups[group].lastRefresh = eTsp;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,7 +327,7 @@ mCfg->groups[group].lastRefresh = millis();;
|
||||||
mLog["B"] = bTsp;
|
mLog["B"] = bTsp;
|
||||||
|
|
||||||
// Wait Refreshtime
|
// Wait Refreshtime
|
||||||
if (mCfg->groups[group].lastRefresh >= (bTsp - (mCfg->groups[group].refresh * 1000UL))) {
|
if (mCfg->groups[group].lastRefresh + (mCfg->groups[group].refresh * 1000UL) >= bTsp) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -321,14 +336,18 @@ mCfg->groups[group].lastRefresh = millis();;
|
||||||
result = true;
|
result = true;
|
||||||
|
|
||||||
// Next
|
// Next
|
||||||
|
#if defined(ZEROEXPORT_DEV_POWERMETER)
|
||||||
|
mCfg->groups[group].state = zeroExportState::GETPOWERMETER;
|
||||||
|
mCfg->groups[group].stateNext = zeroExportState::GETPOWERMETER;
|
||||||
|
#else
|
||||||
mCfg->groups[group].state = zeroExportState::GETINVERTERACKS;
|
mCfg->groups[group].state = zeroExportState::GETINVERTERACKS;
|
||||||
mCfg->groups[group].stateNext = zeroExportState::GETINVERTERACKS;
|
mCfg->groups[group].stateNext = zeroExportState::GETINVERTERACKS;
|
||||||
mLog["next"] = "GETINVERTERACKS";
|
mLog["next"] = "GETINVERTERACKS";
|
||||||
|
#endif
|
||||||
|
|
||||||
unsigned long eTsp = millis();
|
unsigned long eTsp = millis();
|
||||||
mLog["E"] = eTsp;
|
mLog["E"] = eTsp;
|
||||||
mLog["D"] = eTsp - bTsp;
|
mLog["D"] = eTsp - bTsp;
|
||||||
// mCfg->groups[group].lastRefresh = eTsp;
|
|
||||||
mCfg->groups[group].lastRun = eTsp;
|
mCfg->groups[group].lastRun = eTsp;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -393,11 +412,11 @@ mCfg->groups[group].lastRefresh = millis();;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wait) {
|
// if (wait) {
|
||||||
if (mCfg->groups[group].lastRun > (millis() - 30000UL)) {
|
// if (mCfg->groups[group].lastRun > (millis() - 30000UL)) {
|
||||||
wait = false;
|
// wait = false;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
mLog["wait"] = wait;
|
mLog["wait"] = wait;
|
||||||
|
|
||||||
|
@ -446,6 +465,11 @@ mCfg->groups[group].lastRefresh = millis();;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mIv[group][inv]->isAvailable())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Get Pac
|
// Get Pac
|
||||||
record_t<> *rec;
|
record_t<> *rec;
|
||||||
rec = mIv[group][inv]->getRecordStruct(RealTimeRunData_Debug);
|
rec = mIv[group][inv]->getRecordStruct(RealTimeRunData_Debug);
|
||||||
|
@ -479,6 +503,8 @@ mCfg->groups[group].lastRefresh = millis();;
|
||||||
mLog["B"] = bTsp;
|
mLog["B"] = bTsp;
|
||||||
|
|
||||||
mCfg->groups[group].stateLast = zeroExportState::BATTERYPROTECTION;
|
mCfg->groups[group].stateLast = zeroExportState::BATTERYPROTECTION;
|
||||||
|
mCfg->groups[group].state = zeroExportState::GETPOWERMETER;
|
||||||
|
mCfg->groups[group].stateNext = zeroExportState::GETPOWERMETER;
|
||||||
|
|
||||||
doLog = true;
|
doLog = true;
|
||||||
|
|
||||||
|
@ -521,6 +547,15 @@ mCfg->groups[group].lastRefresh = millis();;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mIv[group][inv]->isAvailable()) {
|
||||||
|
if (U > 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
U = 0;
|
||||||
|
id = cfgGroupInv->id;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Get U
|
// Get U
|
||||||
record_t<> *rec;
|
record_t<> *rec;
|
||||||
rec = mIv[group][inv]->getRecordStruct(RealTimeRunData_Debug);
|
rec = mIv[group][inv]->getRecordStruct(RealTimeRunData_Debug);
|
||||||
|
@ -542,12 +577,16 @@ mCfg->groups[group].lastRefresh = millis();;
|
||||||
if (U > mCfg->groups[group].battVoltageOn) {
|
if (U > mCfg->groups[group].battVoltageOn) {
|
||||||
mCfg->groups[group].battSwitch = true;
|
mCfg->groups[group].battSwitch = true;
|
||||||
mLog["action"] = "On";
|
mLog["action"] = "On";
|
||||||
|
mCfg->groups[group].state = zeroExportState::SETPOWER;
|
||||||
|
mCfg->groups[group].stateNext = zeroExportState::SETPOWER;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Switch to OFF
|
// Switch to OFF
|
||||||
if (U < mCfg->groups[group].battVoltageOff) {
|
if (U < mCfg->groups[group].battVoltageOff) {
|
||||||
mCfg->groups[group].battSwitch = false;
|
mCfg->groups[group].battSwitch = false;
|
||||||
mLog["action"] = "Off";
|
mLog["action"] = "Off";
|
||||||
|
mCfg->groups[group].state = zeroExportState::SETPOWER;
|
||||||
|
mCfg->groups[group].stateNext = zeroExportState::SETPOWER;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mLog["en"] = false;
|
mLog["en"] = false;
|
||||||
|
@ -557,9 +596,9 @@ mCfg->groups[group].lastRefresh = millis();;
|
||||||
|
|
||||||
mLog["sw"] = mCfg->groups[group].battSwitch;
|
mLog["sw"] = mCfg->groups[group].battSwitch;
|
||||||
|
|
||||||
// Next
|
// // Next
|
||||||
mCfg->groups[group].state = zeroExportState::GETPOWERMETER;
|
// mCfg->groups[group].state = zeroExportState::GETPOWERMETER;
|
||||||
mCfg->groups[group].stateNext = zeroExportState::GETPOWERMETER;
|
// mCfg->groups[group].stateNext = zeroExportState::GETPOWERMETER;
|
||||||
|
|
||||||
unsigned long eTsp = millis();
|
unsigned long eTsp = millis();
|
||||||
mLog["E"] = eTsp;
|
mLog["E"] = eTsp;
|
||||||
|
@ -1424,9 +1463,6 @@ result = true;
|
||||||
http.end();
|
http.end();
|
||||||
|
|
||||||
long int eTsp = millis();
|
long int eTsp = millis();
|
||||||
logObj["b"] = bTsp;
|
|
||||||
logObj["e"] = eTsp;
|
|
||||||
logObj["d"] = eTsp - bTsp;
|
|
||||||
logObj["P"] = mCfg->groups[group].pmPower;
|
logObj["P"] = mCfg->groups[group].pmPower;
|
||||||
logObj["P1"] = mCfg->groups[group].pmPowerL1;
|
logObj["P1"] = mCfg->groups[group].pmPowerL1;
|
||||||
logObj["P2"] = mCfg->groups[group].pmPowerL2;
|
logObj["P2"] = mCfg->groups[group].pmPowerL2;
|
||||||
|
|
|
@ -992,6 +992,15 @@ class RestApi {
|
||||||
}
|
}
|
||||||
// Plugin ZeroExport
|
// Plugin ZeroExport
|
||||||
#if defined(PLUGIN_ZEROEXPORT)
|
#if defined(PLUGIN_ZEROEXPORT)
|
||||||
|
else if(F("ze_batt_onff") == jsonIn[F("cmd")]) {
|
||||||
|
uint8_t group = jsonIn[F("id")];
|
||||||
|
// if (mConfig->plugin.zeroExport.groups[group].battSwitch) {
|
||||||
|
// mConfig->plugin.zeroExport.groups[group].battSwitch = false;
|
||||||
|
// } else {
|
||||||
|
mConfig->plugin.zeroExport.groups[group].battSwitch = true;
|
||||||
|
// }
|
||||||
|
// mConfig->plugin.zeroExport.groups[group].battSwitch = jsonIn[F("battSwitch")];
|
||||||
|
}
|
||||||
else if(F("ze_save_group") == jsonIn[F("cmd")]) {
|
else if(F("ze_save_group") == jsonIn[F("cmd")]) {
|
||||||
// General
|
// General
|
||||||
uint8_t group = jsonIn[F("id")];
|
uint8_t group = jsonIn[F("id")];
|
||||||
|
|
|
@ -1266,6 +1266,22 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/*IF_PLUGIN_ZEROEXPORT*/
|
/*IF_PLUGIN_ZEROEXPORT*/
|
||||||
|
function apiCbBattOnOff(obj) {
|
||||||
|
// var e = document.getElementById("battSwitch");
|
||||||
|
// e.value = "88";
|
||||||
|
// selDelAllOpt(e);
|
||||||
|
// if(obj["success"])
|
||||||
|
// e.appendChild(opt("-1", "{#NETWORK_SCANNING}"))
|
||||||
|
// else
|
||||||
|
// e.appendChild(opt("-1", "{#ERROR} " + obj["error"]));
|
||||||
|
}
|
||||||
|
|
||||||
|
function battOnOff() {
|
||||||
|
var obj = {cmd: "ze_batt_onff", token: "*"}
|
||||||
|
getAjax("/api/setup", apiCbBattOnOff, "POST", JSON.stringify(obj));
|
||||||
|
// setTimeout(function() {getAjax('/api/setup/networks', listNetworks)}, 5000);
|
||||||
|
}
|
||||||
|
|
||||||
function ZeroExportGroup_Modal(obj, ivObj) {
|
function ZeroExportGroup_Modal(obj, ivObj) {
|
||||||
|
|
||||||
// Tab_General
|
// Tab_General
|
||||||
|
@ -1371,7 +1387,7 @@
|
||||||
divRow("{#ZE_GROUP_TAB_BATTERY_BATTENABLED}", cb_battEnabled),
|
divRow("{#ZE_GROUP_TAB_BATTERY_BATTENABLED}", cb_battEnabled),
|
||||||
divRow("{#ZE_GROUP_TAB_BATTERY_BATTVOLTAGEON}", ml("input", {name: "battVoltageOn", class: "text", type: "number", min: "0", max: "100", step: "0.1", value: obj.battVoltageOn}, null)),
|
divRow("{#ZE_GROUP_TAB_BATTERY_BATTVOLTAGEON}", ml("input", {name: "battVoltageOn", class: "text", type: "number", min: "0", max: "100", step: "0.1", value: obj.battVoltageOn}, null)),
|
||||||
divRow("{#ZE_GROUP_TAB_BATTERY_BATTVOLTAGEOFF}", ml("input", {name: "battVoltageOff", class: "text", type: "number", min: "0", max: "100", step: "0.1", value: obj.battVoltageOff}, null)),
|
divRow("{#ZE_GROUP_TAB_BATTERY_BATTVOLTAGEOFF}", ml("input", {name: "battVoltageOff", class: "text", type: "number", min: "0", max: "100", step: "0.1", value: obj.battVoltageOff}, null)),
|
||||||
// TODO: Hier muss ein Button hin, mit dem Switch ein/ausgeschaltet werden kann.
|
divRow("{#ZE_GROUP_TAB_BATTERY_ONOFF}", ml("input", {name: "battSwitch", id: "battSwitch", class: "btn", type: "button", value: "{#BTN_ONOFF}", onclick: battOnOff()}, null)),
|
||||||
]),
|
]),
|
||||||
// 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"}, [
|
||||||
|
|
|
@ -923,6 +923,16 @@
|
||||||
"en": "Voltage off (Volt):",
|
"en": "Voltage off (Volt):",
|
||||||
"de": "Spannung Aus (Volt):"
|
"de": "Spannung Aus (Volt):"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"token": "ZE_GROUP_TAB_BATTERY_ONOFF",
|
||||||
|
"en": "Power:",
|
||||||
|
"de": "Power:"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"token": "BTN_ONOFF",
|
||||||
|
"en": "On",
|
||||||
|
"de": "Ein"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"token": "ZE_GROUP_TAB_ADVANCED",
|
"token": "ZE_GROUP_TAB_ADVANCED",
|
||||||
"en": "Advanced",
|
"en": "Advanced",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue