Browse Source

reviewed PR #1541

pull/1663/head
lumapu 4 months ago
parent
commit
940cd71582
  1. BIN
      scripts/__pycache__/htmlPreprocessorDefines.cpython-311.pyc
  2. 8
      src/app.h
  3. 1
      src/appInterface.h
  4. 2
      src/config/settings.h
  5. 25
      src/hm/hmInverter.h
  6. 6
      src/publisher/pubMqtt.h
  7. 26
      src/publisher/pubMqttIvData.h

BIN
scripts/__pycache__/htmlPreprocessorDefines.cpython-311.pyc

Binary file not shown.

8
src/app.h

@ -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();

1
src/appInterface.h

@ -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;

2
src/config/settings.h

@ -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;

25
src/hm/hmInverter.h

@ -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"));

6
src/publisher/pubMqtt.h

@ -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;

26
src/publisher/pubMqttIvData.h

@ -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…
Cancel
Save