mirror of
https://github.com/lumapu/ahoy.git
synced 2025-04-28 17:56:21 +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
|
||||
}
|
||||
|
||||
bool getMqttJsonEnabled() override {
|
||||
#if defined(ENABLE_MQTT)
|
||||
return mMqtt.isJson();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
uint32_t getMqttTxCnt() override {
|
||||
#if defined(ENABLE_MQTT)
|
||||
return mMqtt.getTxCnt();
|
||||
|
|
|
@ -52,7 +52,6 @@ class IApp {
|
|||
virtual bool getSettingsValid() = 0;
|
||||
virtual void setMqttDiscoveryFlag() = 0;
|
||||
virtual bool getMqttIsConnected() = 0;
|
||||
virtual bool getMqttJsonEnabled() = 0;
|
||||
|
||||
virtual bool getNrfEnabled() = 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.topic, MQTT_TOPIC_LEN, "%s", DEF_MQTT_TOPIC);
|
||||
mCfg.mqtt.interval = 0; // off
|
||||
mCfg.mqtt.json = 0; // off
|
||||
mCfg.mqtt.json = false; // off
|
||||
mCfg.mqtt.enableRetain = true;
|
||||
|
||||
mCfg.inst.sendInterval = SEND_INTERVAL;
|
||||
|
|
|
@ -53,9 +53,6 @@ T calcIrradiation(Inverter<> *iv, uint8_t arg0);
|
|||
template<class T=float>
|
||||
T calcMaxPowerAcCh0(Inverter<> *iv, uint8_t arg0);
|
||||
|
||||
template<class T=float>
|
||||
T calcMaxTempCh0(Inverter<> *iv, uint8_t arg0);
|
||||
|
||||
template<class T=float>
|
||||
T calcMaxPowerDc(Inverter<> *iv, uint8_t arg0);
|
||||
|
||||
|
@ -975,28 +972,6 @@ T calcMaxPowerAcCh0(Inverter<> *iv, uint8_t arg0) {
|
|||
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>
|
||||
T calcMaxPowerDc(Inverter<> *iv, uint8_t arg0) {
|
||||
DPRINTLN(DBG_VERBOSE, F("hmInverter.h:calcMaxPowerDc"));
|
||||
|
|
|
@ -62,7 +62,7 @@ class PubMqtt {
|
|||
mUptime = uptime;
|
||||
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) {
|
||||
publish(subTopic, payload, retained, true, qos);
|
||||
});
|
||||
|
@ -235,10 +235,6 @@ class PubMqtt {
|
|||
return mRxCnt;
|
||||
}
|
||||
|
||||
inline bool isJson() {
|
||||
return mCfgMqtt->json;
|
||||
}
|
||||
|
||||
void sendDiscoveryConfig(void) {
|
||||
DPRINTLN(DBG_VERBOSE, F("sendMqttDiscoveryConfig"));
|
||||
mDiscovery.running = true;
|
||||
|
|
|
@ -24,10 +24,10 @@ class PubMqttIvData {
|
|||
public:
|
||||
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;
|
||||
mSys = sys;
|
||||
mJson = app->getMqttJsonEnabled();
|
||||
mCfg = cfg_mqtt;
|
||||
mUtcTimestamp = utcTs;
|
||||
mSendList = sendList;
|
||||
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_VERSION, rec)));
|
||||
} 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(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;
|
||||
if((FLD_EVT != rec->assign[mPos].fieldId)
|
||||
&& (FLD_LAST_ALARM_CODE != rec->assign[mPos].fieldId))
|
||||
|
@ -210,26 +210,24 @@ class PubMqttIvData {
|
|||
mPos++;
|
||||
} else {
|
||||
if (MqttSentStatus::LAST_SUCCESS_SENT == rec->mqttSentStatus) {
|
||||
if (mJson && RealTimeRunData_Debug == mCmd) {
|
||||
if (mCfg->json && (RealTimeRunData_Debug == mCmd)) {
|
||||
DynamicJsonDocument doc(300);
|
||||
std::array<char, 300> buf;
|
||||
|
||||
for (mPos = 0; mPos < rec->length; mPos++) {
|
||||
doc[fields[rec->assign[mPos].fieldId]] = ah::round3(mIv->getValue(mPos, rec));
|
||||
|
||||
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)
|
||||
publish = true;
|
||||
} else
|
||||
publish = true;
|
||||
|
||||
if (publish) {
|
||||
publish = false;
|
||||
// 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);
|
||||
mPublish(mSubTopic.data(), buf.data(), false, QOS_0);
|
||||
mPublish(mSubTopic.data(), mVal.data(), false, QOS_0);
|
||||
doc.clear();
|
||||
}
|
||||
}
|
||||
|
@ -292,14 +290,14 @@ class PubMqttIvData {
|
|||
mTotal[4] = mApp->getTotalMaxPower();
|
||||
break;
|
||||
}
|
||||
if (!mJson) {
|
||||
if (!mCfg->json) {
|
||||
snprintf(mSubTopic.data(), mSubTopic.size(), "total/%s", fields[fieldId]);
|
||||
snprintf(mVal.data(), mVal.size(), "%g", ah::round3(mTotal[mPos]));
|
||||
mPublish(mSubTopic.data(), mVal.data(), retained, QOS_0);
|
||||
}
|
||||
mPos++;
|
||||
} else {
|
||||
if (mJson) {
|
||||
if (mCfg->json) {
|
||||
int type[5] = {FLD_PAC, FLD_YT, FLD_YD, FLD_PDC, FLD_MP};
|
||||
snprintf(mVal.data(), mVal.size(), "{");
|
||||
|
||||
|
@ -321,6 +319,7 @@ class PubMqttIvData {
|
|||
|
||||
private:
|
||||
IApp *mApp = nullptr;
|
||||
cfgMqtt_t *mCfg = nullptr;
|
||||
|
||||
HMSYSTEM *mSys = nullptr;
|
||||
uint32_t *mUtcTimestamp = nullptr;
|
||||
|
@ -339,8 +338,7 @@ class PubMqttIvData {
|
|||
bool mRTRDataHasBeenSent = false;
|
||||
|
||||
std::array<char, (32 + MAX_NAME_LENGTH + 1)> mSubTopic;
|
||||
std::array<char, 160> mVal;
|
||||
bool mJson;
|
||||
std::array<char, 300> mVal;
|
||||
|
||||
std::queue<sendListCmdIv> *mSendList = nullptr;
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue