From e08ac6eb6f5e40d0851c24ce4ca9f738c1d40ac4 Mon Sep 17 00:00:00 2001 From: Patrick Balsiger Date: Sun, 18 Nov 2018 19:29:46 +0100 Subject: [PATCH] add json config --- src/MqttConfig.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++ src/MqttPlugin.cpp | 11 ++++++++--- src/MqttPlugin.h | 14 +++----------- 3 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 src/MqttConfig.h diff --git a/src/MqttConfig.h b/src/MqttConfig.h new file mode 100644 index 0000000..f079902 --- /dev/null +++ b/src/MqttConfig.h @@ -0,0 +1,48 @@ +#ifndef __MQTT_CONFIG__ +#define __MQTT_CONFIG__ + +#include + +#define JSON_MQTT_CLIENT_NAME "mqttClientName" +#define JSON_MQTT_BROKER_HOST "mqttBrokerHost" +#define JSON_MQTT_BROKER_PORT "mqttBrokerPort" +#define JSON_MQTT_IN_TOPIC_ROOT "mqttInTopicRoot" +#define JSON_MQTT_OUT_TOPIC_ROOT "mqttOutTopicRoot" + +struct MqttConfig +{ + const char *clientName; + const char *brokerHost; + int brokerPort; + const char *inTopicRoot; + const char *outTopicRoot; +}; + +struct MqttConfigJson : public MqttConfig, public JsonStruct +{ + void mapJsonObject(JsonObject &root) + { + root[JSON_MQTT_CLIENT_NAME] = clientName; + root[JSON_MQTT_BROKER_HOST] = brokerHost; + root[JSON_MQTT_BROKER_PORT] = brokerPort; + root[JSON_MQTT_IN_TOPIC_ROOT] = inTopicRoot; + root[JSON_MQTT_OUT_TOPIC_ROOT] = outTopicRoot; + } + void fromJsonObject(JsonObject &json) + { + if (!verifyJsonObject(json)) + { + Serial.println("ERROR: cannot parse JSON object"); + valid = 0; + return; + } + clientName = getAttr(json, JSON_MQTT_CLIENT_NAME); + brokerHost = getAttr(json, JSON_MQTT_BROKER_HOST); + brokerPort = getIntAttrFromJson(json, JSON_MQTT_BROKER_PORT); + inTopicRoot = getAttr(json, JSON_MQTT_IN_TOPIC_ROOT); + outTopicRoot = getAttr(json, JSON_MQTT_OUT_TOPIC_ROOT); + valid = 1; + }; +}; + +#endif \ No newline at end of file diff --git a/src/MqttPlugin.cpp b/src/MqttPlugin.cpp index 39e03ba..92d910a 100644 --- a/src/MqttPlugin.cpp +++ b/src/MqttPlugin.cpp @@ -2,7 +2,12 @@ MqttPlugin::MqttPlugin(MqttConfig cfg) { - mqttConfig = cfg; + mqttConfig.brokerHost = cfg.brokerHost; + mqttConfig.brokerPort = cfg.brokerPort; + mqttConfig.clientName = cfg.clientName; + mqttConfig.inTopicRoot = cfg.inTopicRoot; + mqttConfig.outTopicRoot = cfg.outTopicRoot; + mqttConfig.fromFile("/mqttConfig.json"); } void MqttPlugin::activate(Scheduler *scheduler) @@ -35,7 +40,7 @@ void MqttPlugin::connect() if (client->connect(mqttConfig.clientName)) { // bind handlers to all local subscriptions - if (!locallySubscribed) + if (!subscribed) { for (auto const &localSub : mediator->subscriptions) { @@ -46,7 +51,7 @@ void MqttPlugin::connect() (String(mqttConfig.inTopicRoot) + String(localSub.first.c_str())) .c_str()); } - locallySubscribed = true; + subscribed = true; } PRINT_MSG(Serial, "MQTT", "connected"); } diff --git a/src/MqttPlugin.h b/src/MqttPlugin.h index 48da573..942ff63 100644 --- a/src/MqttPlugin.h +++ b/src/MqttPlugin.h @@ -8,24 +8,16 @@ #include #include #include "utils/print.h" +#include "MqttConfig.h" using namespace std; using namespace std::placeholders; -struct MqttConfig -{ - const char *clientName; - const char *brokerHost; - int brokerPort; - const char *inTopicRoot; - const char *outTopicRoot; -}; - class MqttPlugin : public Plugin { public: PubSubClient *client; - MqttConfig mqttConfig; + MqttConfigJson mqttConfig; MqttPlugin(MqttConfig cfg); @@ -39,7 +31,7 @@ class MqttPlugin : public Plugin WiFiClient wifiClient; Task connectTask; Task processTask; - bool locallySubscribed = false; + bool subscribed = false; void enableConnectTask(Scheduler *scheduler); void enableProcessTask(Scheduler *scheduler);