added --mqttchanges

This commit is contained in:
john30
2018-12-02 12:28:45 +01:00
parent c467f2b245
commit a84c3cb296
+12 -3
View File
@@ -36,7 +36,8 @@ using std::dec;
#define O_RETA (O_TOPI+1)
#define O_JSON (O_RETA+1)
#define O_IGIN (O_JSON+1)
#define O_CAFI (O_IGIN+1)
#define O_CHGS (O_IGIN+1)
#define O_CAFI (O_CHGS+1)
#define O_CERT (O_CAFI+1)
#define O_KEYF (O_CERT+1)
#define O_KEPA (O_KEYF+1)
@@ -54,6 +55,7 @@ static const struct argp_option g_mqtt_argp_options[] = {
{"mqttjson", O_JSON, nullptr, 0, "Publish in JSON format instead of strings", 0 },
{"mqttignoreinvalid", O_IGIN, nullptr, 0,
"Ignore invalid parameters during init (e.g. for DNS not resolvable yet)", 0 },
{"mqttchanges", O_CHGS, nullptr, 0, "Whether to only publish changed messages instead of all received", 0 },
#if (LIBMOSQUITTO_MAJOR >= 1)
{"mqttca", O_CAFI, "CA", 0, "Use CA file or dir (ending with '/') for MQTT TLS (no default)", 0 },
@@ -76,6 +78,7 @@ static vector<string> g_topicFields;
static bool g_retain = false; //!< whether to retail all topics
static OutputFormat g_publishFormat = 0; //!< the OutputFormat for publishing messages
static bool g_ignoreInvalidParams = false; //!< ignore invalid parameters during init
static bool g_onlyChanges = true; //!< whether to only publish changed messages instead of all received
#if (LIBMOSQUITTO_MAJOR >= 1)
static const char* g_cafile = nullptr; //!< CA file for TLS
@@ -151,6 +154,10 @@ static error_t mqtt_parse_opt(int key, char *arg, struct argp_state *state) {
g_ignoreInvalidParams = true;
break;
case O_CHGS:
g_onlyChanges = true;
break;
#if (LIBMOSQUITTO_MAJOR >= 1)
case O_CAFI: // --mqttca=file or --mqttca=dir/
if (arg == nullptr || arg[0] == 0) {
@@ -546,7 +553,7 @@ void MqttHandler::notifyUpdateCheckResult(const string& checkResult) {
}
void MqttHandler::run() {
time_t lastTaskRun, now, start, lastSignal = 0;
time_t lastTaskRun, now, start, lastSignal = 0, lastUpdates = 0;
bool signal = false;
string signalTopic = m_globalTopic+"signal";
string uptimeTopic = m_globalTopic+"uptime";
@@ -602,7 +609,8 @@ void MqttHandler::run() {
updates.clear();
updates << dec;
for (auto message : *messages) {
if (message->getLastChangeTime() > 0 && message->isAvailable()) {
if (message->getLastChangeTime() > 0 && message->isAvailable()
&& (!g_onlyChanges || message->getLastChangeTime() > lastUpdates)) {
publishMessage(message, &updates);
}
}
@@ -610,6 +618,7 @@ void MqttHandler::run() {
it = m_updatedMessages.erase(it);
}
m_messages->unlock();
time(&lastUpdates);
} else {
m_updatedMessages.clear();
}