From 57b8d8022cf8444cf59cd20a25cfee491ec88799 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Wed, 26 Jun 2019 13:16:27 +0800 Subject: [PATCH] update mqttd, add ID match support --- mqttd/etc/conf.h | 2 ++ mqttd/etc/conf.c | 14 ++++++++++++++ mqttd/etc/mqttd.conf | 2 ++ mqttd/main.c | 31 ++++++++++++++++++++++++++----- 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/mqttd/etc/conf.c b/mqttd/etc/conf.c index c78e24d..a32683d 100644 --- a/mqttd/etc/conf.c +++ b/mqttd/etc/conf.c @@ -25,6 +25,7 @@ if( !conf_file ) { + strncpy(ctx->id, "\"rpi3b001\"", sizeof(ctx->id)); /* logger settings */ strncpy(ctx->logfile, DBG_LOG_FILE, sizeof(ctx->logfile)); @@ -99,6 +100,19 @@ log_nrml("Logger system initialise ok\n"); + /*+------------------------------------------------------+ + *| parser production ID | + *+------------------------------------------------------+*/ + + if( !(str=iniparser_getstring(ini, "common:id", NULL)) ) + { + log_err("ERROR: Parser production ID failure\n"); + return -2; + } + /* cJSON parser ID will get "" */ + snprintf(ctx->id, sizeof(ctx->id), "\"%s\"", str); + log_nrml("Parser production ID [%s]\n", ctx->id); + /*+------------------------------------------------------+ *| parser broker settings | diff --git a/mqttd/etc/conf.h b/mqttd/etc/conf.h index f3c7965..1c6216c 100644 --- a/mqttd/etc/conf.h +++ b/mqttd/etc/conf.h @@ -37,6 +37,8 @@ typedef struct mqtt_ctx_s { + char id[32]; /* production ID */ + /* logger settings */ char logfile[128]; /* logger record file */ int loglevel; /* logger level */ diff --git a/mqttd/etc/mqttd.conf b/mqttd/etc/mqttd.conf index d1352f3..3747c4f 100644 --- a/mqttd/etc/mqttd.conf +++ b/mqttd/etc/mqttd.conf @@ -1,3 +1,5 @@ +[common] +id="rpi3b001" [logger] diff --git a/mqttd/main.c b/mqttd/main.c index 8808585..48e6e85 100644 --- a/mqttd/main.c +++ b/mqttd/main.c @@ -202,9 +202,9 @@ memset(msg, 0, sizeof(msg)); if( ds18b20_get_temperature(&temp) < 0 ) - strncpy(msg, "{ \"temp\":\"error\" }", sizeof(msg)); + snprintf(msg, sizeof(msg), "{ \"id\":%s, \"temp\":\"error\" }", ctx->id); else - snprintf(msg, sizeof(msg), "{ \"temp\":\"%.2f\" }", temp); + snprintf(msg, sizeof(msg), "{ \"id\":%s, \"temp\":\"%.2f\" }", ctx->id, temp); rv = mosquitto_publish(mosq, NULL, ctx->pubTopic, strlen(msg)+1, msg, ctx->pubQos, retain); if( rv ) @@ -388,8 +388,11 @@ void sub_message_callback(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message) { - cJSON *root = NULL; - char *out; + mqtt_ctx_t *ctx = (mqtt_ctx_t *)userdata; + + cJSON *root = NULL; + cJSON *item; + char *value; if ( !message->payloadlen ) @@ -398,7 +401,7 @@ return ; } - log_nrml("Subscriber receive message: '%s'\n", message->payload); + log_dbg("Subscriber receive message: '%s'\n", message->payload); root = cJSON_Parse(message->payload); if( !root ) @@ -407,8 +410,26 @@ return ; } + item = cJSON_GetObjectItem(root, "id"); + if( !item ) + { + log_err("cJSON_Parse get ID failure: %s\n", cJSON_GetErrorPtr()); + goto OUT; + } + + value = cJSON_PrintUnformatted(item); + if( strcasecmp(value, ctx->id) ) + { + free(value); + goto OUT; + } + + free(value); + log_nrml("Subscriber receive message: '%s'\n", message->payload); + proc_json_items(root); +OUT: cJSON_Delete(root); /* must delete it, or it will result memory leak */ return ; } -- Gitblit v1.9.1