mirror of
https://github.com/lumapu/ahoy.git
synced 2025-06-13 16:11:38 +02:00
ZE Bugfix mqtt
This commit is contained in:
parent
cba0979779
commit
4eb79ff7dc
2 changed files with 151 additions and 67 deletions
|
@ -64,7 +64,7 @@ class ZeroExport {
|
||||||
* @todo emergency
|
* @todo emergency
|
||||||
*/
|
*/
|
||||||
void loop(void) {
|
void loop(void) {
|
||||||
mqttInitTopic();
|
/// mqttInitTopic();
|
||||||
|
|
||||||
if ((!mIsInitialized) || (!mCfg->enabled)) return;
|
if ((!mIsInitialized) || (!mCfg->enabled)) return;
|
||||||
|
|
||||||
|
@ -471,80 +471,163 @@ class ZeroExport {
|
||||||
* @returns void
|
* @returns void
|
||||||
*/
|
*/
|
||||||
void onMqttMessage(JsonObject obj) {
|
void onMqttMessage(JsonObject obj) {
|
||||||
if (!mIsInitialized) return;
|
/// if (!mIsInitialized) return;
|
||||||
|
|
||||||
String topic = String(obj["topic"]);
|
String topic = String(obj["topic"]);
|
||||||
if (!topic.indexOf("/zero/set/")) return;
|
/// if (!topic.indexOf("/zero/set/")) return;
|
||||||
|
if (topic.indexOf("ctrl/zero") == -1) return;
|
||||||
|
|
||||||
mLog["t"] = "onMqttMessage";
|
mLog["t"] = "onMqttMessage";
|
||||||
|
if (mCfg->debug) mLog["d"] = obj;
|
||||||
|
|
||||||
if (obj["path"] == "zero" && obj["cmd"] == "set") {
|
if (obj["path"] == "ctrl" && obj["cmd"] == "zero") {
|
||||||
int8_t topicGroup = getGroupFromTopic(topic.c_str());
|
int8_t topicGroup = getGroupFromTopic(topic.c_str());
|
||||||
mLog["topicGroup"] = topicGroup;
|
if (topicGroup != -1)
|
||||||
|
mLog["g"] = topicGroup;
|
||||||
int8_t topicInverter = getInverterFromTopic(topic.c_str());
|
int8_t topicInverter = getInverterFromTopic(topic.c_str());
|
||||||
mLog["topicInverter"] = topicInverter;
|
if (topicInverter == -1)
|
||||||
|
mLog["i"] = topicInverter;
|
||||||
|
|
||||||
if ((topicGroup == -1) && (topicInverter == -1)) {
|
// "topic":"ctrl/zero/enabled"
|
||||||
// "topic":"???/zero/set/enabled"
|
if (topic.indexOf("ctrl/zero/enabled") != -1) {
|
||||||
if (topic.indexOf("/zero/set/enabled") != -1) {
|
|
||||||
mCfg->enabled = (bool)obj["val"];
|
mCfg->enabled = (bool)obj["val"];
|
||||||
mLog["mCfg->enabled"] = mCfg->enabled;
|
mLog["enabled"] = mCfg->enabled;
|
||||||
// Initialize groups
|
// Initialize groups
|
||||||
for (uint8_t group = 0; group < ZEROEXPORT_MAX_GROUPS; group++) {
|
for (uint8_t group = 0; group < ZEROEXPORT_MAX_GROUPS; group++) {
|
||||||
mCfg->groups[group].state = zeroExportState::INIT;
|
mCfg->groups[group].state = zeroExportState::INIT;
|
||||||
mCfg->groups[group].wait = 0;
|
mCfg->groups[group].wait = 0;
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
// "topic":"???/zero/set/sleep"
|
|
||||||
if (topic.indexOf("/zero/set/sleep") != -1) {
|
// "topic":"ctrl/zero/sleep"
|
||||||
|
if (topic.indexOf("/ctrl/zero/sleep") != -1) {
|
||||||
mCfg->sleep = (bool)obj["val"];
|
mCfg->sleep = (bool)obj["val"];
|
||||||
mLog["mCfg->sleep"] = mCfg->sleep;
|
mLog["sleep"] = mCfg->sleep;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
} else if ((topicGroup != -1) && (topicInverter == -1)) {
|
|
||||||
// "topic":"???/zero/set/groups/0/???"
|
if ((topicGroup >= 0) && (topicGroup < ZEROEXPORT_MAX_GROUPS)) {
|
||||||
mLog["g"] = topicGroup;
|
// "topic":"ctrl/zero/groups/+/enabled"
|
||||||
// "topic":"???/zero/set/groups/0/enabled"
|
if (topic.indexOf("/ctrl/zero/groups/" + String(topicGroup) + "/enabled") != -1) {
|
||||||
if (topic.indexOf("enabled") != -1) {
|
|
||||||
mCfg->groups[topicGroup].enabled = (bool)obj["val"];
|
mCfg->groups[topicGroup].enabled = (bool)obj["val"];
|
||||||
|
mLog["g.enabled"] = mCfg->groups[topicGroup].enabled;
|
||||||
// Initialize group
|
// Initialize group
|
||||||
mCfg->groups[topicGroup].state = zeroExportState::INIT;
|
mCfg->groups[topicGroup].state = zeroExportState::INIT;
|
||||||
mCfg->groups[topicGroup].wait = 0;
|
mCfg->groups[topicGroup].wait = 0;
|
||||||
}
|
}
|
||||||
// "topic":"???/zero/set/groups/0/sleep"
|
|
||||||
if (topic.indexOf("sleep") != -1) {
|
// "topic":"ctrl/zero/groups/+/sleep"
|
||||||
|
if (topic.indexOf("/ctrl/zero/groups/" + String(topicGroup) + "/sleep") != -1) {
|
||||||
mCfg->groups[topicGroup].sleep = (bool)obj["val"];
|
mCfg->groups[topicGroup].sleep = (bool)obj["val"];
|
||||||
|
mLog["g.sleep"] = mCfg->groups[topicGroup].sleep;
|
||||||
}
|
}
|
||||||
// "topic":"???/zero/set/groups/0/battery/switch"
|
|
||||||
if (topic.indexOf("battery/switch") != -1) {
|
// "topic":"ctrl/zero/groups/+/battery/switch"
|
||||||
|
if (topic.indexOf("/ctrl/zero/groups/" + String(topicGroup) + "/battery/switch") != -1) {
|
||||||
mCfg->groups[topicGroup].battSwitch = (bool)obj["val"];
|
mCfg->groups[topicGroup].battSwitch = (bool)obj["val"];
|
||||||
|
mLog["g.battSwitch"] = mCfg->groups[topicGroup].battSwitch;
|
||||||
}
|
}
|
||||||
// "topic":"???/zero/set/groups/0/advanced/setPoint"
|
|
||||||
if (topic.indexOf("advanced/setPoint") != -1) {
|
// "topic":"ctrl/zero/groups/+/advanced/setPoint"
|
||||||
|
if (topic.indexOf("/ctrl/zero/groups/" + String(topicGroup) + "/advanced/setPoint") != -1) {
|
||||||
mCfg->groups[topicGroup].setPoint = (int16_t)obj["val"];
|
mCfg->groups[topicGroup].setPoint = (int16_t)obj["val"];
|
||||||
|
mLog["g.setPoint"] = mCfg->groups[topicGroup].setPoint;
|
||||||
}
|
}
|
||||||
// "topic":"???/zero/set/groups/0/advanced/powerTolerance"
|
|
||||||
if (topic.indexOf("advanced/powerTolerance") != -1) {
|
// "topic":"ctrl/zero/groups/+/advanced/powerTolerance"
|
||||||
|
if (topic.indexOf("/ctrl/zero/groups/" + String(topicGroup) + "/advanced/powerTolerance") != -1) {
|
||||||
mCfg->groups[topicGroup].powerTolerance = (uint8_t)obj["val"];
|
mCfg->groups[topicGroup].powerTolerance = (uint8_t)obj["val"];
|
||||||
|
mLog["g.powerTolerance"] = mCfg->groups[topicGroup].powerTolerance;
|
||||||
}
|
}
|
||||||
// "topic":"???/zero/set/groups/0/advanced/powerMax"
|
|
||||||
if (topic.indexOf("advanced/powerMax") != -1) {
|
// "topic":"ctrl/zero/groups/+/advanced/powerMax"
|
||||||
|
if (topic.indexOf("/ctrl/zero/groups/" + String(topicGroup) + "/advanced/powerMax") != -1) {
|
||||||
mCfg->groups[topicGroup].powerMax = (uint16_t)obj["val"];
|
mCfg->groups[topicGroup].powerMax = (uint16_t)obj["val"];
|
||||||
|
mLog["g.powerMax"] = mCfg->groups[topicGroup].powerMax;
|
||||||
}
|
}
|
||||||
} else if ((topicGroup != -1) && (topicInverter != -1)) {
|
|
||||||
// "topic":"???/zero/set/groups/0/inverter/0/enabled"
|
if ((topicInverter >= 0) && (topicInverter < ZEROEXPORT_GROUP_MAX_INVERTERS)) {
|
||||||
if (topic.indexOf("enabled") != -1) {
|
// "topic":"ctrl/zero/groups/+/inverter/+/enabled"
|
||||||
|
if (topic.indexOf("ctrl/zero/groups/" + String(topicGroup) + "/inverter/" + String(topicInverter) + "/enabled") != -1) {
|
||||||
mCfg->groups[topicGroup].inverters[topicInverter].enabled = (bool)obj["val"];
|
mCfg->groups[topicGroup].inverters[topicInverter].enabled = (bool)obj["val"];
|
||||||
|
mLog["g.i.enabled"] = mCfg->groups[topicGroup].inverters[topicInverter].enabled;
|
||||||
}
|
}
|
||||||
// "topic":"???/zero/set/groups/0/inverter/0/powerMin"
|
|
||||||
if (topic.indexOf("powerMin") != -1) {
|
// "topic":"ctrl/zero/groups/+/inverter/+/powerMin"
|
||||||
|
if (topic.indexOf("ctrl/zero/groups/" + String(topicGroup) + "/inverter/" + String(topicInverter) + "/powerMin") != -1) {
|
||||||
mCfg->groups[topicGroup].inverters[topicInverter].powerMin = (uint16_t)obj["val"];
|
mCfg->groups[topicGroup].inverters[topicInverter].powerMin = (uint16_t)obj["val"];
|
||||||
|
mLog["g.i.powerMin"] = mCfg->groups[topicGroup].inverters[topicInverter].powerMin;
|
||||||
}
|
}
|
||||||
// "topic":"???/zero/set/groups/0/inverter/0/powerMax"
|
|
||||||
if (topic.indexOf("powerMax") != -1) {
|
// "topic":"ctrl/zero/groups/+/inverter/+/powerMax"
|
||||||
|
if (topic.indexOf("ctrl/zero/groups/" + String(topicGroup) + "/inverter/" + String(topicInverter) + "/powerMax") != -1) {
|
||||||
mCfg->groups[topicGroup].inverters[topicInverter].powerMax = (uint16_t)obj["val"];
|
mCfg->groups[topicGroup].inverters[topicInverter].powerMax = (uint16_t)obj["val"];
|
||||||
|
mLog["g.i.powerMax"] = mCfg->groups[topicGroup].inverters[topicInverter].powerMax;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// if ((topicGroup == -1) && (topicInverter == -1)) {
|
||||||
|
// // "topic":"???/zero/set/enabled"
|
||||||
|
// if (topic.indexOf("/zero/set/enabled") != -1) {
|
||||||
|
// mCfg->enabled = (bool)obj["val"];
|
||||||
|
// mLog["mCfg->enabled"] = mCfg->enabled;
|
||||||
|
// // Initialize groups
|
||||||
|
// for (uint8_t group = 0; group < ZEROEXPORT_MAX_GROUPS; group++) {
|
||||||
|
// mCfg->groups[group].state = zeroExportState::INIT;
|
||||||
|
// mCfg->groups[group].wait = 0;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // "topic":"???/zero/set/sleep"
|
||||||
|
// if (topic.indexOf("/zero/set/sleep") != -1) {
|
||||||
|
// mCfg->sleep = (bool)obj["val"];
|
||||||
|
// mLog["mCfg->sleep"] = mCfg->sleep;
|
||||||
|
// }
|
||||||
|
// } else if ((topicGroup != -1) && (topicInverter == -1)) {
|
||||||
|
// // "topic":"???/zero/set/groups/0/???"
|
||||||
|
// mLog["g"] = topicGroup;
|
||||||
|
// // "topic":"???/zero/set/groups/0/enabled"
|
||||||
|
// if (topic.indexOf("enabled") != -1) {
|
||||||
|
// mCfg->groups[topicGroup].enabled = (bool)obj["val"];
|
||||||
|
// // Initialize group
|
||||||
|
// mCfg->groups[topicGroup].state = zeroExportState::INIT;
|
||||||
|
// mCfg->groups[topicGroup].wait = 0;
|
||||||
|
// }
|
||||||
|
// // "topic":"???/zero/set/groups/0/sleep"
|
||||||
|
// if (topic.indexOf("sleep") != -1) {
|
||||||
|
// mCfg->groups[topicGroup].sleep = (bool)obj["val"];
|
||||||
|
// }
|
||||||
|
// // "topic":"???/zero/set/groups/0/battery/switch"
|
||||||
|
// if (topic.indexOf("battery/switch") != -1) {
|
||||||
|
// mCfg->groups[topicGroup].battSwitch = (bool)obj["val"];
|
||||||
|
// }
|
||||||
|
// // "topic":"???/zero/set/groups/0/advanced/setPoint"
|
||||||
|
// if (topic.indexOf("advanced/setPoint") != -1) {
|
||||||
|
// mCfg->groups[topicGroup].setPoint = (int16_t)obj["val"];
|
||||||
|
// }
|
||||||
|
// // "topic":"???/zero/set/groups/0/advanced/powerTolerance"
|
||||||
|
// if (topic.indexOf("advanced/powerTolerance") != -1) {
|
||||||
|
// mCfg->groups[topicGroup].powerTolerance = (uint8_t)obj["val"];
|
||||||
|
// }
|
||||||
|
// // "topic":"???/zero/set/groups/0/advanced/powerMax"
|
||||||
|
// if (topic.indexOf("advanced/powerMax") != -1) {
|
||||||
|
// mCfg->groups[topicGroup].powerMax = (uint16_t)obj["val"];
|
||||||
|
// }
|
||||||
|
// } else if ((topicGroup != -1) && (topicInverter != -1)) {
|
||||||
|
// // "topic":"???/zero/set/groups/0/inverter/0/enabled"
|
||||||
|
// if (topic.indexOf("enabled") != -1) {
|
||||||
|
// mCfg->groups[topicGroup].inverters[topicInverter].enabled = (bool)obj["val"];
|
||||||
|
// }
|
||||||
|
// // "topic":"???/zero/set/groups/0/inverter/0/powerMin"
|
||||||
|
// if (topic.indexOf("powerMin") != -1) {
|
||||||
|
// mCfg->groups[topicGroup].inverters[topicInverter].powerMin = (uint16_t)obj["val"];
|
||||||
|
// }
|
||||||
|
// // "topic":"???/zero/set/groups/0/inverter/0/powerMax"
|
||||||
|
// if (topic.indexOf("powerMax") != -1) {
|
||||||
|
// mCfg->groups[topicGroup].inverters[topicInverter].powerMax = (uint16_t)obj["val"];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(ZEROEXPORT_POWERMETER_MQTT)
|
#if defined(ZEROEXPORT_POWERMETER_MQTT)
|
||||||
// topic for powermeter?
|
// topic for powermeter?
|
||||||
|
@ -557,7 +640,6 @@ class ZeroExport {
|
||||||
}
|
}
|
||||||
#endif /*defined(ZEROEXPORT_POWERMETER_MQTT)*/
|
#endif /*defined(ZEROEXPORT_POWERMETER_MQTT)*/
|
||||||
|
|
||||||
if (mCfg->debug) mLog["Msg"] = obj;
|
|
||||||
sendLog();
|
sendLog();
|
||||||
clearLog();
|
clearLog();
|
||||||
return;
|
return;
|
||||||
|
@ -1116,12 +1198,12 @@ class ZeroExport {
|
||||||
int32_t y2 = cfgGroup->y2;
|
int32_t y2 = cfgGroup->y2;
|
||||||
int32_t y3 = cfgGroup->y3;
|
int32_t y3 = cfgGroup->y3;
|
||||||
|
|
||||||
if (cfgGroup->power > cfgGroup->powerMax) {
|
if ((cfgGroup->power + y) > cfgGroup->powerMax) {
|
||||||
int32_t diff = cfgGroup->power - cfgGroup->powerMax;
|
int32_t diff = cfgGroup->power + y - cfgGroup->powerMax;
|
||||||
// y = y - diff;
|
// y = y - diff;
|
||||||
// y1 = y1 - (diff * y1 / y);
|
// y1 = y1 - (diff * y1 / y);
|
||||||
// y2 = y2 - (diff * y2 / y);
|
// y2 = y2 - (diff * y2 / y);
|
||||||
// y3 = y3 - (diff * y3 / y);
|
// y3 = y3 - (diff * y3 / y);
|
||||||
y = -diff;
|
y = -diff;
|
||||||
y1 = -(diff * y1 / y);
|
y1 = -(diff * y1 / y);
|
||||||
y2 = -(diff * y2 / y);
|
y2 = -(diff * y2 / y);
|
||||||
|
@ -1582,8 +1664,8 @@ class ZeroExport {
|
||||||
if (mMqtt->isConnected()) {
|
if (mMqtt->isConnected()) {
|
||||||
String gr = "zero/state/groups/" + String(group) + "/inverters/" + String(inv);
|
String gr = "zero/state/groups/" + String(group) + "/inverters/" + String(inv);
|
||||||
mqttObj["enabled"] = cfgGroupInv->enabled;
|
mqttObj["enabled"] = cfgGroupInv->enabled;
|
||||||
// mqttObj["id"] = cfgGroupInv->id;
|
// mqttObj["id"] = cfgGroupInv->id;
|
||||||
// mqttObj["target"] = cfgGroupInv->target;
|
// mqttObj["target"] = cfgGroupInv->target;
|
||||||
mqttObj["powerMin"] = cfgGroupInv->powerMin;
|
mqttObj["powerMin"] = cfgGroupInv->powerMin;
|
||||||
mqttObj["powerMax"] = cfgGroupInv->powerMax;
|
mqttObj["powerMax"] = cfgGroupInv->powerMax;
|
||||||
mqttObj["power"] = cfgGroupInv->power;
|
mqttObj["power"] = cfgGroupInv->power;
|
||||||
|
|
|
@ -257,14 +257,16 @@ class PubMqtt {
|
||||||
tickerMinute();
|
tickerMinute();
|
||||||
publish(mLwtTopic.data(), mqttStr[MQTT_STR_LWT_CONN], true, false);
|
publish(mLwtTopic.data(), mqttStr[MQTT_STR_LWT_CONN], true, false);
|
||||||
|
|
||||||
for(uint8_t i = 0; i < MAX_NUM_INVERTERS; i++) {
|
// for(uint8_t i = 0; i < MAX_NUM_INVERTERS; i++) {
|
||||||
snprintf(mVal.data(), mVal.size(), "ctrl/limit/%d", i);
|
// snprintf(mVal.data(), mVal.size(), "ctrl/limit/%d", i);
|
||||||
|
// subscribe(mVal.data(), QOS_2);
|
||||||
|
// snprintf(mVal.data(), mVal.size(), "ctrl/restart/%d", i);
|
||||||
|
// subscribe(mVal.data());
|
||||||
|
// snprintf(mVal.data(), mVal.size(), "ctrl/power/%d", i);
|
||||||
|
// subscribe(mVal.data());
|
||||||
|
// }
|
||||||
|
snprintf(mVal.data(), mVal.size(), "ctrl/#");
|
||||||
subscribe(mVal.data(), QOS_2);
|
subscribe(mVal.data(), QOS_2);
|
||||||
snprintf(mVal.data(), mVal.size(), "ctrl/restart/%d", i);
|
|
||||||
subscribe(mVal.data());
|
|
||||||
snprintf(mVal.data(), mVal.size(), "ctrl/power/%d", i);
|
|
||||||
subscribe(mVal.data());
|
|
||||||
}
|
|
||||||
subscribe(subscr[MQTT_SUBS_SET_TIME]);
|
subscribe(subscr[MQTT_SUBS_SET_TIME]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue