mirror of
https://github.com/lumapu/ahoy.git
synced 2025-07-30 22:48:27 +02:00
0.8.970008-zero
This commit is contained in:
parent
4a2434f763
commit
8452e5613c
4 changed files with 98 additions and 12 deletions
|
@ -630,6 +630,9 @@ void app::resetSystem(void) {
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void app::mqttSubRxCb(JsonObject obj) {
|
void app::mqttSubRxCb(JsonObject obj) {
|
||||||
mApi.ctrlRequest(obj);
|
mApi.ctrlRequest(obj);
|
||||||
|
#if defined(PLUGIN_ZEROEXPORT)
|
||||||
|
mZeroExport.onMqttMessage(obj);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
|
@ -204,6 +204,7 @@ typedef struct {
|
||||||
enum class zeroExportState : uint8_t {
|
enum class zeroExportState : uint8_t {
|
||||||
INIT,
|
INIT,
|
||||||
WAIT,
|
WAIT,
|
||||||
|
PUBLISH,
|
||||||
WAITREFRESH,
|
WAITREFRESH,
|
||||||
GETINVERTERACKS,
|
GETINVERTERACKS,
|
||||||
GETINVERTERDATA,
|
GETINVERTERDATA,
|
||||||
|
@ -325,6 +326,8 @@ uint8_t pm_iOut = 0;
|
||||||
float pmPowerL1;
|
float pmPowerL1;
|
||||||
float pmPowerL2;
|
float pmPowerL2;
|
||||||
float pmPowerL3;
|
float pmPowerL3;
|
||||||
|
bool publishPower = false;
|
||||||
|
|
||||||
bool battSwitch;
|
bool battSwitch;
|
||||||
float grpPower;
|
float grpPower;
|
||||||
float grpPowerL1;
|
float grpPowerL1;
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 8
|
#define VERSION_MINOR 8
|
||||||
#define VERSION_PATCH 970007
|
#define VERSION_PATCH 970008
|
||||||
|
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -75,6 +75,9 @@ class ZeroExport {
|
||||||
case zeroExportState::WAIT:
|
case zeroExportState::WAIT:
|
||||||
if (groupWait(group)) sendLog();
|
if (groupWait(group)) sendLog();
|
||||||
break;
|
break;
|
||||||
|
case zeroExportState::PUBLISH:
|
||||||
|
if (groupPublish(group)) sendLog();
|
||||||
|
break;
|
||||||
case zeroExportState::WAITREFRESH:
|
case zeroExportState::WAITREFRESH:
|
||||||
if (groupWaitRefresh(group)) sendLog();
|
if (groupWaitRefresh(group)) sendLog();
|
||||||
break;
|
break;
|
||||||
|
@ -288,6 +291,18 @@ class ZeroExport {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** onMqttMessage
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void onMqttMessage(JsonObject obj) {
|
||||||
|
if ((!mIsInitialized) || (!mCfg->enabled)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mLog["MQTT"] = obj;
|
||||||
|
sendLog();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** groupInit
|
/** groupInit
|
||||||
* initialisiert die Gruppe und sucht die ivPointer
|
* initialisiert die Gruppe und sucht die ivPointer
|
||||||
|
@ -414,6 +429,71 @@ class ZeroExport {
|
||||||
return doLog;
|
return doLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** groupPublish
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool groupPublish(uint8_t group) {
|
||||||
|
bool doLog = false;
|
||||||
|
unsigned long bTsp = millis();
|
||||||
|
|
||||||
|
mLog["t"] = "groupPublish";
|
||||||
|
mLog["g"] = group;
|
||||||
|
|
||||||
|
mCfg->groups[group].stateLast = zeroExportState::PUBLISH;
|
||||||
|
|
||||||
|
if (mMqtt->isConnected()) {
|
||||||
|
DynamicJsonDocument doc(512);
|
||||||
|
JsonObject obj = doc.to<JsonObject>();
|
||||||
|
|
||||||
|
doLog = true;
|
||||||
|
|
||||||
|
// Init
|
||||||
|
if (!mIsSubscribed) {
|
||||||
|
mIsSubscribed = true;
|
||||||
|
mMqtt->publish("zero/set/enabled", ((mCfg->enabled) ? dict[STR_TRUE] : dict[STR_FALSE]), false);
|
||||||
|
mMqtt->subscribe("zero/set/enabled", QOS_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
mMqtt->publish("zero/state/enabled", ((mCfg->enabled) ? dict[STR_TRUE] : dict[STR_FALSE]), false);
|
||||||
|
|
||||||
|
// if (mCfg->groups[group].publishPower) {
|
||||||
|
// mCfg->groups[group].publishPower = false;
|
||||||
|
obj["L1"] = mCfg->groups[group].pmPowerL1;
|
||||||
|
obj["L2"] = mCfg->groups[group].pmPowerL2;
|
||||||
|
obj["L2"] = mCfg->groups[group].pmPowerL3;
|
||||||
|
obj["Sum"] = mCfg->groups[group].pmPower;
|
||||||
|
mMqtt->publish("zero/state/powermeter/P", doc.as<std::string>().c_str(), false);
|
||||||
|
doc.clear();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (mCfg->groups[group].pm_Publish_W) {
|
||||||
|
// mCfg->groups[group].pm_Publish_W = false;
|
||||||
|
// obj["todo"] = "true";
|
||||||
|
// obj["L1"] = mCfg->groups[group].pm_P1;
|
||||||
|
// obj["L2"] = mCfg->groups[group].pm_P2;
|
||||||
|
// obj["L2"] = mCfg->groups[group].pm_P3;
|
||||||
|
// obj["Sum"] = mCfg->groups[group].pm_P;
|
||||||
|
// mMqtt->publish("zero/powermeter/W", doc.as<std::string>().c_str(), false);
|
||||||
|
// doc.clear();
|
||||||
|
// }
|
||||||
|
|
||||||
|
for (uint8_t inv = 0; inv < ZEROEXPORT_GROUP_MAX_INVERTERS; inv++) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
||||||
|
mCfg->groups[group].stateNext = zeroExportState::WAITREFRESH;
|
||||||
|
|
||||||
|
unsigned long eTsp = millis();
|
||||||
|
mLog["B"] = bTsp;
|
||||||
|
mLog["E"] = eTsp;
|
||||||
|
mLog["D"] = eTsp - bTsp;
|
||||||
|
|
||||||
|
mCfg->groups[group].lastRun = eTsp;
|
||||||
|
|
||||||
|
return doLog;
|
||||||
|
}
|
||||||
|
|
||||||
/** groupWaitRefresh
|
/** groupWaitRefresh
|
||||||
* pausiert die Gruppe
|
* pausiert die Gruppe
|
||||||
* @param group
|
* @param group
|
||||||
|
@ -791,8 +871,8 @@ class ZeroExport {
|
||||||
|
|
||||||
// Next
|
// Next
|
||||||
#if defined(ZEROEXPORT_DEV_POWERMETER)
|
#if defined(ZEROEXPORT_DEV_POWERMETER)
|
||||||
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
mCfg->groups[group].state = zeroExportState::PUBLISH;
|
||||||
mCfg->groups[group].stateNext = zeroExportState::WAITREFRESH;
|
mCfg->groups[group].stateNext = zeroExportState::PUBLISH;
|
||||||
mCfg->groups[group].lastRefresh = millis();
|
mCfg->groups[group].lastRefresh = millis();
|
||||||
#else
|
#else
|
||||||
if (result) {
|
if (result) {
|
||||||
|
@ -1219,9 +1299,8 @@ class ZeroExport {
|
||||||
// Reject limit if difference < 5 W
|
// Reject limit if difference < 5 W
|
||||||
if (
|
if (
|
||||||
(mCfg->groups[group].inverters[inv].limitNew > (mCfg->groups[group].inverters[inv].limit + ZEROEXPORT_GROUP_WR_LIMIT_MIN_DIFF)) &&
|
(mCfg->groups[group].inverters[inv].limitNew > (mCfg->groups[group].inverters[inv].limit + ZEROEXPORT_GROUP_WR_LIMIT_MIN_DIFF)) &&
|
||||||
(mCfg->groups[group].inverters[inv].limitNew < (mCfg->groups[group].inverters[inv].limit - ZEROEXPORT_GROUP_WR_LIMIT_MIN_DIFF))
|
(mCfg->groups[group].inverters[inv].limitNew < (mCfg->groups[group].inverters[inv].limit - ZEROEXPORT_GROUP_WR_LIMIT_MIN_DIFF))) {
|
||||||
) {
|
mLog["err"] = String("Diff < ") + String(ZEROEXPORT_GROUP_WR_LIMIT_MIN_DIFF) + String("W");
|
||||||
mLog["err"] = String("Diff < ") + String (ZEROEXPORT_GROUP_WR_LIMIT_MIN_DIFF) + String("W");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1252,8 +1331,8 @@ class ZeroExport {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next
|
// Next
|
||||||
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
mCfg->groups[group].state = zeroExportState::PUBLISH;
|
||||||
mCfg->groups[group].stateNext = zeroExportState::WAITREFRESH;
|
mCfg->groups[group].stateNext = zeroExportState::PUBLISH;
|
||||||
|
|
||||||
unsigned long eTsp = millis();
|
unsigned long eTsp = millis();
|
||||||
mLog["B"] = bTsp;
|
mLog["B"] = bTsp;
|
||||||
|
@ -1326,8 +1405,8 @@ class ZeroExport {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next
|
// Next
|
||||||
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
mCfg->groups[group].state = zeroExportState::PUBLISH;
|
||||||
mCfg->groups[group].stateNext = zeroExportState::WAITREFRESH;
|
mCfg->groups[group].stateNext = zeroExportState::PUBLISH;
|
||||||
mCfg->groups[group].lastRefresh = millis();
|
mCfg->groups[group].lastRefresh = millis();
|
||||||
|
|
||||||
unsigned long eTsp = millis();
|
unsigned long eTsp = millis();
|
||||||
|
@ -1393,8 +1472,8 @@ class ZeroExport {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next
|
// Next
|
||||||
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
mCfg->groups[group].state = zeroExportState::PUBLISH;
|
||||||
mCfg->groups[group].stateNext = zeroExportState::WAITREFRESH;
|
mCfg->groups[group].stateNext = zeroExportState::PUBLISH;
|
||||||
mCfg->groups[group].lastRefresh = millis();
|
mCfg->groups[group].lastRefresh = millis();
|
||||||
|
|
||||||
unsigned long eTsp = millis();
|
unsigned long eTsp = millis();
|
||||||
|
@ -1434,6 +1513,7 @@ class ZeroExport {
|
||||||
JsonObject mLog = mDocLog.to<JsonObject>();
|
JsonObject mLog = mDocLog.to<JsonObject>();
|
||||||
PubMqttType *mMqtt;
|
PubMqttType *mMqtt;
|
||||||
powermeter mPowermeter;
|
powermeter mPowermeter;
|
||||||
|
bool mIsSubscribed = false;
|
||||||
|
|
||||||
Inverter<> *mIv[ZEROEXPORT_MAX_GROUPS][ZEROEXPORT_GROUP_MAX_INVERTERS];
|
Inverter<> *mIv[ZEROEXPORT_MAX_GROUPS][ZEROEXPORT_GROUP_MAX_INVERTERS];
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue