mirror of
https://github.com/lumapu/ahoy.git
synced 2025-06-08 13:41:40 +02:00
0.8.970008-zero
This commit is contained in:
parent
4a2434f763
commit
8452e5613c
4 changed files with 98 additions and 12 deletions
|
@ -75,6 +75,9 @@ class ZeroExport {
|
|||
case zeroExportState::WAIT:
|
||||
if (groupWait(group)) sendLog();
|
||||
break;
|
||||
case zeroExportState::PUBLISH:
|
||||
if (groupPublish(group)) sendLog();
|
||||
break;
|
||||
case zeroExportState::WAITREFRESH:
|
||||
if (groupWaitRefresh(group)) sendLog();
|
||||
break;
|
||||
|
@ -288,6 +291,18 @@ class ZeroExport {
|
|||
}
|
||||
}
|
||||
|
||||
/** onMqttMessage
|
||||
*
|
||||
*/
|
||||
void onMqttMessage(JsonObject obj) {
|
||||
if ((!mIsInitialized) || (!mCfg->enabled)) {
|
||||
return;
|
||||
}
|
||||
|
||||
mLog["MQTT"] = obj;
|
||||
sendLog();
|
||||
}
|
||||
|
||||
private:
|
||||
/** groupInit
|
||||
* initialisiert die Gruppe und sucht die ivPointer
|
||||
|
@ -414,6 +429,71 @@ class ZeroExport {
|
|||
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
|
||||
* pausiert die Gruppe
|
||||
* @param group
|
||||
|
@ -791,8 +871,8 @@ class ZeroExport {
|
|||
|
||||
// Next
|
||||
#if defined(ZEROEXPORT_DEV_POWERMETER)
|
||||
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
||||
mCfg->groups[group].stateNext = zeroExportState::WAITREFRESH;
|
||||
mCfg->groups[group].state = zeroExportState::PUBLISH;
|
||||
mCfg->groups[group].stateNext = zeroExportState::PUBLISH;
|
||||
mCfg->groups[group].lastRefresh = millis();
|
||||
#else
|
||||
if (result) {
|
||||
|
@ -1219,9 +1299,8 @@ class ZeroExport {
|
|||
// Reject limit if difference < 5 W
|
||||
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))
|
||||
) {
|
||||
mLog["err"] = String("Diff < ") + String (ZEROEXPORT_GROUP_WR_LIMIT_MIN_DIFF) + String("W");
|
||||
(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");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1252,8 +1331,8 @@ class ZeroExport {
|
|||
}
|
||||
|
||||
// Next
|
||||
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
||||
mCfg->groups[group].stateNext = zeroExportState::WAITREFRESH;
|
||||
mCfg->groups[group].state = zeroExportState::PUBLISH;
|
||||
mCfg->groups[group].stateNext = zeroExportState::PUBLISH;
|
||||
|
||||
unsigned long eTsp = millis();
|
||||
mLog["B"] = bTsp;
|
||||
|
@ -1326,8 +1405,8 @@ class ZeroExport {
|
|||
}
|
||||
|
||||
// Next
|
||||
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
||||
mCfg->groups[group].stateNext = zeroExportState::WAITREFRESH;
|
||||
mCfg->groups[group].state = zeroExportState::PUBLISH;
|
||||
mCfg->groups[group].stateNext = zeroExportState::PUBLISH;
|
||||
mCfg->groups[group].lastRefresh = millis();
|
||||
|
||||
unsigned long eTsp = millis();
|
||||
|
@ -1393,8 +1472,8 @@ class ZeroExport {
|
|||
}
|
||||
|
||||
// Next
|
||||
mCfg->groups[group].state = zeroExportState::WAITREFRESH;
|
||||
mCfg->groups[group].stateNext = zeroExportState::WAITREFRESH;
|
||||
mCfg->groups[group].state = zeroExportState::PUBLISH;
|
||||
mCfg->groups[group].stateNext = zeroExportState::PUBLISH;
|
||||
mCfg->groups[group].lastRefresh = millis();
|
||||
|
||||
unsigned long eTsp = millis();
|
||||
|
@ -1434,6 +1513,7 @@ class ZeroExport {
|
|||
JsonObject mLog = mDocLog.to<JsonObject>();
|
||||
PubMqttType *mMqtt;
|
||||
powermeter mPowermeter;
|
||||
bool mIsSubscribed = false;
|
||||
|
||||
Inverter<> *mIv[ZEROEXPORT_MAX_GROUPS][ZEROEXPORT_GROUP_MAX_INVERTERS];
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue