mirror of
https://github.com/lumapu/ahoy.git
synced 2025-04-30 02:36:20 +02:00
reviewed PR #1541
This commit is contained in:
parent
e3cc302948
commit
940cd71582
7 changed files with 14 additions and 54 deletions
Binary file not shown.
|
@ -239,14 +239,6 @@ class app : public IApp, public ah::Scheduler {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool getMqttJsonEnabled() override {
|
|
||||||
#if defined(ENABLE_MQTT)
|
|
||||||
return mMqtt.isJson();
|
|
||||||
#else
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t getMqttTxCnt() override {
|
uint32_t getMqttTxCnt() override {
|
||||||
#if defined(ENABLE_MQTT)
|
#if defined(ENABLE_MQTT)
|
||||||
return mMqtt.getTxCnt();
|
return mMqtt.getTxCnt();
|
||||||
|
|
|
@ -52,7 +52,6 @@ class IApp {
|
||||||
virtual bool getSettingsValid() = 0;
|
virtual bool getSettingsValid() = 0;
|
||||||
virtual void setMqttDiscoveryFlag() = 0;
|
virtual void setMqttDiscoveryFlag() = 0;
|
||||||
virtual bool getMqttIsConnected() = 0;
|
virtual bool getMqttIsConnected() = 0;
|
||||||
virtual bool getMqttJsonEnabled() = 0;
|
|
||||||
|
|
||||||
virtual bool getNrfEnabled() = 0;
|
virtual bool getNrfEnabled() = 0;
|
||||||
virtual bool getCmtEnabled() = 0;
|
virtual bool getCmtEnabled() = 0;
|
||||||
|
|
|
@ -486,7 +486,7 @@ class settings {
|
||||||
snprintf(mCfg.mqtt.pwd, MQTT_PWD_LEN, "%s", DEF_MQTT_PWD);
|
snprintf(mCfg.mqtt.pwd, MQTT_PWD_LEN, "%s", DEF_MQTT_PWD);
|
||||||
snprintf(mCfg.mqtt.topic, MQTT_TOPIC_LEN, "%s", DEF_MQTT_TOPIC);
|
snprintf(mCfg.mqtt.topic, MQTT_TOPIC_LEN, "%s", DEF_MQTT_TOPIC);
|
||||||
mCfg.mqtt.interval = 0; // off
|
mCfg.mqtt.interval = 0; // off
|
||||||
mCfg.mqtt.json = 0; // off
|
mCfg.mqtt.json = false; // off
|
||||||
mCfg.mqtt.enableRetain = true;
|
mCfg.mqtt.enableRetain = true;
|
||||||
|
|
||||||
mCfg.inst.sendInterval = SEND_INTERVAL;
|
mCfg.inst.sendInterval = SEND_INTERVAL;
|
||||||
|
|
|
@ -53,9 +53,6 @@ T calcIrradiation(Inverter<> *iv, uint8_t arg0);
|
||||||
template<class T=float>
|
template<class T=float>
|
||||||
T calcMaxPowerAcCh0(Inverter<> *iv, uint8_t arg0);
|
T calcMaxPowerAcCh0(Inverter<> *iv, uint8_t arg0);
|
||||||
|
|
||||||
template<class T=float>
|
|
||||||
T calcMaxTempCh0(Inverter<> *iv, uint8_t arg0);
|
|
||||||
|
|
||||||
template<class T=float>
|
template<class T=float>
|
||||||
T calcMaxPowerDc(Inverter<> *iv, uint8_t arg0);
|
T calcMaxPowerDc(Inverter<> *iv, uint8_t arg0);
|
||||||
|
|
||||||
|
@ -975,28 +972,6 @@ T calcMaxPowerAcCh0(Inverter<> *iv, uint8_t arg0) {
|
||||||
return acMaxPower;
|
return acMaxPower;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T=float>
|
|
||||||
T calcMaxTempCh0(Inverter<> *iv, uint8_t arg0) {
|
|
||||||
DPRINTLN(DBG_VERBOSE, F("hmInverter.h:calcMaxTempCh0"));
|
|
||||||
T maxTemp = 0.0;
|
|
||||||
if(NULL != iv) {
|
|
||||||
record_t<> *rec = iv->getRecordStruct(RealTimeRunData_Debug);
|
|
||||||
T Temp = iv->getChannelFieldValue(arg0, FLD_T, rec);
|
|
||||||
|
|
||||||
for(uint8_t i = 0; i < rec->length; i++) {
|
|
||||||
if((FLD_MT == rec->assign[i].fieldId) && (0 == rec->assign[i].ch)) {
|
|
||||||
maxTemp = iv->getValue(i, rec);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(Temp > maxTemp) {
|
|
||||||
iv->tsMaxTemperature = *iv->Timestamp;
|
|
||||||
return Temp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return maxTemp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T=float>
|
template<class T=float>
|
||||||
T calcMaxPowerDc(Inverter<> *iv, uint8_t arg0) {
|
T calcMaxPowerDc(Inverter<> *iv, uint8_t arg0) {
|
||||||
DPRINTLN(DBG_VERBOSE, F("hmInverter.h:calcMaxPowerDc"));
|
DPRINTLN(DBG_VERBOSE, F("hmInverter.h:calcMaxPowerDc"));
|
||||||
|
|
|
@ -62,7 +62,7 @@ class PubMqtt {
|
||||||
mUptime = uptime;
|
mUptime = uptime;
|
||||||
mIntervalTimeout = 1;
|
mIntervalTimeout = 1;
|
||||||
|
|
||||||
SendIvData.setup(app, sys, utcTs, &mSendList);
|
SendIvData.setup(app, sys, cfg_mqtt, utcTs, &mSendList);
|
||||||
SendIvData.setPublishFunc([this](const char *subTopic, const char *payload, bool retained, uint8_t qos) {
|
SendIvData.setPublishFunc([this](const char *subTopic, const char *payload, bool retained, uint8_t qos) {
|
||||||
publish(subTopic, payload, retained, true, qos);
|
publish(subTopic, payload, retained, true, qos);
|
||||||
});
|
});
|
||||||
|
@ -235,10 +235,6 @@ class PubMqtt {
|
||||||
return mRxCnt;
|
return mRxCnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool isJson() {
|
|
||||||
return mCfgMqtt->json;
|
|
||||||
}
|
|
||||||
|
|
||||||
void sendDiscoveryConfig(void) {
|
void sendDiscoveryConfig(void) {
|
||||||
DPRINTLN(DBG_VERBOSE, F("sendMqttDiscoveryConfig"));
|
DPRINTLN(DBG_VERBOSE, F("sendMqttDiscoveryConfig"));
|
||||||
mDiscovery.running = true;
|
mDiscovery.running = true;
|
||||||
|
|
|
@ -24,10 +24,10 @@ class PubMqttIvData {
|
||||||
public:
|
public:
|
||||||
PubMqttIvData() : mTotal{}, mSubTopic{}, mVal{} {}
|
PubMqttIvData() : mTotal{}, mSubTopic{}, mVal{} {}
|
||||||
|
|
||||||
void setup(IApp *app, HMSYSTEM *sys, uint32_t *utcTs, std::queue<sendListCmdIv> *sendList) {
|
void setup(IApp *app, HMSYSTEM *sys, cfgMqtt_t *cfg_mqtt, uint32_t *utcTs, std::queue<sendListCmdIv> *sendList) {
|
||||||
mApp = app;
|
mApp = app;
|
||||||
mSys = sys;
|
mSys = sys;
|
||||||
mJson = app->getMqttJsonEnabled();
|
mCfg = cfg_mqtt;
|
||||||
mUtcTimestamp = utcTs;
|
mUtcTimestamp = utcTs;
|
||||||
mSendList = sendList;
|
mSendList = sendList;
|
||||||
mState = IDLE;
|
mState = IDLE;
|
||||||
|
@ -194,13 +194,13 @@ class PubMqttIvData {
|
||||||
static_cast<int>(mIv->getChannelFieldValue(CH0, FLD_GRID_PROFILE_CODE, rec)),
|
static_cast<int>(mIv->getChannelFieldValue(CH0, FLD_GRID_PROFILE_CODE, rec)),
|
||||||
static_cast<int>(mIv->getChannelFieldValue(CH0, FLD_GRID_PROFILE_VERSION, rec)));
|
static_cast<int>(mIv->getChannelFieldValue(CH0, FLD_GRID_PROFILE_VERSION, rec)));
|
||||||
} else {
|
} else {
|
||||||
if (!mJson) {
|
if (!mCfg->json) {
|
||||||
snprintf(mSubTopic.data(), mSubTopic.size(), "%s/ch%d/%s", mIv->config->name, rec->assign[mPos].ch, fields[rec->assign[mPos].fieldId]);
|
snprintf(mSubTopic.data(), mSubTopic.size(), "%s/ch%d/%s", mIv->config->name, rec->assign[mPos].ch, fields[rec->assign[mPos].fieldId]);
|
||||||
snprintf(mVal.data(), mVal.size(), "%g", ah::round3(mIv->getValue(mPos, rec)));
|
snprintf(mVal.data(), mVal.size(), "%g", ah::round3(mIv->getValue(mPos, rec)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (InverterDevInform_All == mCmd || InverterDevInform_Simple == mCmd || !mJson) {
|
if ((InverterDevInform_All == mCmd) || (InverterDevInform_Simple == mCmd) || !mCfg->json) {
|
||||||
uint8_t qos = (FLD_ACT_ACTIVE_PWR_LIMIT == rec->assign[mPos].fieldId) ? QOS_2 : QOS_0;
|
uint8_t qos = (FLD_ACT_ACTIVE_PWR_LIMIT == rec->assign[mPos].fieldId) ? QOS_2 : QOS_0;
|
||||||
if((FLD_EVT != rec->assign[mPos].fieldId)
|
if((FLD_EVT != rec->assign[mPos].fieldId)
|
||||||
&& (FLD_LAST_ALARM_CODE != rec->assign[mPos].fieldId))
|
&& (FLD_LAST_ALARM_CODE != rec->assign[mPos].fieldId))
|
||||||
|
@ -210,26 +210,24 @@ class PubMqttIvData {
|
||||||
mPos++;
|
mPos++;
|
||||||
} else {
|
} else {
|
||||||
if (MqttSentStatus::LAST_SUCCESS_SENT == rec->mqttSentStatus) {
|
if (MqttSentStatus::LAST_SUCCESS_SENT == rec->mqttSentStatus) {
|
||||||
if (mJson && RealTimeRunData_Debug == mCmd) {
|
if (mCfg->json && (RealTimeRunData_Debug == mCmd)) {
|
||||||
DynamicJsonDocument doc(300);
|
DynamicJsonDocument doc(300);
|
||||||
std::array<char, 300> buf;
|
|
||||||
|
|
||||||
for (mPos = 0; mPos < rec->length; mPos++) {
|
for (mPos = 0; mPos < rec->length; mPos++) {
|
||||||
doc[fields[rec->assign[mPos].fieldId]] = ah::round3(mIv->getValue(mPos, rec));
|
doc[fields[rec->assign[mPos].fieldId]] = ah::round3(mIv->getValue(mPos, rec));
|
||||||
|
|
||||||
bool publish = false;
|
bool publish = false;
|
||||||
if (mPos != rec->length - 1) { // not last one
|
if (mPos != (rec->length - 1)) { // not last one
|
||||||
if (rec->assign[mPos].ch != rec->assign[mPos+1].ch)
|
if (rec->assign[mPos].ch != rec->assign[mPos+1].ch)
|
||||||
publish = true;
|
publish = true;
|
||||||
} else
|
} else
|
||||||
publish = true;
|
publish = true;
|
||||||
|
|
||||||
if (publish) {
|
if (publish) {
|
||||||
publish = false;
|
|
||||||
// if next channel or end->publish
|
// if next channel or end->publish
|
||||||
serializeJson(doc, buf.data(), buf.size());
|
serializeJson(doc, mVal.data(), mVal.size());
|
||||||
snprintf(mSubTopic.data(), mSubTopic.size(), "%s/ch%d", mIv->config->name, rec->assign[mPos].ch);
|
snprintf(mSubTopic.data(), mSubTopic.size(), "%s/ch%d", mIv->config->name, rec->assign[mPos].ch);
|
||||||
mPublish(mSubTopic.data(), buf.data(), false, QOS_0);
|
mPublish(mSubTopic.data(), mVal.data(), false, QOS_0);
|
||||||
doc.clear();
|
doc.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -292,14 +290,14 @@ class PubMqttIvData {
|
||||||
mTotal[4] = mApp->getTotalMaxPower();
|
mTotal[4] = mApp->getTotalMaxPower();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!mJson) {
|
if (!mCfg->json) {
|
||||||
snprintf(mSubTopic.data(), mSubTopic.size(), "total/%s", fields[fieldId]);
|
snprintf(mSubTopic.data(), mSubTopic.size(), "total/%s", fields[fieldId]);
|
||||||
snprintf(mVal.data(), mVal.size(), "%g", ah::round3(mTotal[mPos]));
|
snprintf(mVal.data(), mVal.size(), "%g", ah::round3(mTotal[mPos]));
|
||||||
mPublish(mSubTopic.data(), mVal.data(), retained, QOS_0);
|
mPublish(mSubTopic.data(), mVal.data(), retained, QOS_0);
|
||||||
}
|
}
|
||||||
mPos++;
|
mPos++;
|
||||||
} else {
|
} else {
|
||||||
if (mJson) {
|
if (mCfg->json) {
|
||||||
int type[5] = {FLD_PAC, FLD_YT, FLD_YD, FLD_PDC, FLD_MP};
|
int type[5] = {FLD_PAC, FLD_YT, FLD_YD, FLD_PDC, FLD_MP};
|
||||||
snprintf(mVal.data(), mVal.size(), "{");
|
snprintf(mVal.data(), mVal.size(), "{");
|
||||||
|
|
||||||
|
@ -321,6 +319,7 @@ class PubMqttIvData {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
IApp *mApp = nullptr;
|
IApp *mApp = nullptr;
|
||||||
|
cfgMqtt_t *mCfg = nullptr;
|
||||||
|
|
||||||
HMSYSTEM *mSys = nullptr;
|
HMSYSTEM *mSys = nullptr;
|
||||||
uint32_t *mUtcTimestamp = nullptr;
|
uint32_t *mUtcTimestamp = nullptr;
|
||||||
|
@ -339,8 +338,7 @@ class PubMqttIvData {
|
||||||
bool mRTRDataHasBeenSent = false;
|
bool mRTRDataHasBeenSent = false;
|
||||||
|
|
||||||
std::array<char, (32 + MAX_NAME_LENGTH + 1)> mSubTopic;
|
std::array<char, (32 + MAX_NAME_LENGTH + 1)> mSubTopic;
|
||||||
std::array<char, 160> mVal;
|
std::array<char, 300> mVal;
|
||||||
bool mJson;
|
|
||||||
|
|
||||||
std::queue<sendListCmdIv> *mSendList = nullptr;
|
std::queue<sendListCmdIv> *mSendList = nullptr;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue