also send MQTT definition topic and handle knx subscription for conditional messages evaluated later

This commit is contained in:
John
2024-01-14 11:04:10 +01:00
parent 3232f4ff95
commit 1316291740
4 changed files with 37 additions and 6 deletions
+15 -2
View File
@@ -109,7 +109,7 @@ Message::Message(const string& filename, const string& circuit, const string& le
m_id(id), m_key(createKey(id, isWrite, isPassive, srcAddress, dstAddress)),
m_data(data), m_deleteData(deleteData),
m_pollPriority(pollPriority),
m_usedByCondition(false), m_isScanMessage(false), m_condition(condition),
m_usedByCondition(false), m_isScanMessage(false), m_condition(condition), m_availableSinceTime(0),
m_dataHandlerState(0), m_lastUpdateTime(0), m_lastChangeTime(0), m_pollOrder(0), m_lastPollTime(0) {
if (circuit == "scan") {
setScanMessage();
@@ -129,7 +129,7 @@ Message::Message(const string& circuit, const string& level, const string& name,
m_id({pb, sb}), m_key(createKey(pb, sb, broadcast)),
m_data(data), m_deleteData(deleteData),
m_pollPriority(0),
m_usedByCondition(false), m_isScanMessage(true), m_condition(nullptr),
m_usedByCondition(false), m_isScanMessage(true), m_condition(nullptr), m_availableSinceTime(0),
m_lastUpdateTime(0), m_lastChangeTime(0), m_pollOrder(0), m_lastPollTime(0) {
time(&m_createTime);
}
@@ -652,6 +652,19 @@ bool Message::isAvailable() {
return (m_condition == nullptr) || m_condition->isTrue();
}
time_t Message::getAvailableSinceTime() {
if (m_condition == nullptr) {
return m_createTime;
}
if (!m_condition->isTrue()) {
return 0;
}
if (m_availableSinceTime == 0) { // was not yet available
m_availableSinceTime = m_condition->getLastCheckTime();
}
return m_availableSinceTime;
}
bool Message::hasField(const char* fieldName, bool numeric) const {
return m_data->hasField(fieldName, numeric);
}