Browse Source

change from const char to String mqtt data

pull/432/head
DanielR92 3 years ago
parent
commit
fc98abd549
  1. 18
      src/config/settings.h
  2. 5
      src/defines.h
  3. 22
      src/publisher/pubMqtt.h
  4. 7
      src/web/web.cpp

18
src/config/settings.h

@ -68,11 +68,11 @@ typedef struct {
} cfgLed_t;
typedef struct {
char broker[MQTT_ADDR_LEN];
String broker;
uint16_t port;
char user[MQTT_USER_LEN];
String user;
char pwd[MQTT_PWD_LEN];
char topic[MQTT_TOPIC_LEN];
String topic;
} cfgMqtt_t;
typedef struct {
@ -272,10 +272,10 @@ class settings {
mCfg.serial.debug = false;
mCfg.mqtt.port = DEF_MQTT_PORT;
snprintf(mCfg.mqtt.broker, MQTT_ADDR_LEN, "%s", DEF_MQTT_BROKER);
snprintf(mCfg.mqtt.user, MQTT_USER_LEN, "%s", DEF_MQTT_USER);
mCfg.mqtt.broker = DEF_MQTT_BROKER;
mCfg.mqtt.user = DEF_MQTT_USER;
snprintf(mCfg.mqtt.pwd, MQTT_PWD_LEN, "%s", DEF_MQTT_PWD);
snprintf(mCfg.mqtt.topic, MQTT_TOPIC_LEN, "%s", DEF_MQTT_TOPIC);
mCfg.mqtt.topic = DEF_MQTT_TOPIC;
mCfg.led.led0 = DEF_LED0_PIN;
mCfg.led.led1 = DEF_LED1_PIN;
@ -366,10 +366,10 @@ class settings {
obj[F("topic")] = mCfg.mqtt.topic;
} else {
mCfg.mqtt.port = obj[F("port")];
snprintf(mCfg.mqtt.broker, MQTT_ADDR_LEN, "%s", obj[F("broker")].as<const char*>());
snprintf(mCfg.mqtt.user, MQTT_USER_LEN, "%s", obj[F("user")].as<const char*>());
mCfg.mqtt.broker = obj[F("broker")].as<const char*>();
mCfg.mqtt.user = obj[F("user")].as<const char*>();
snprintf(mCfg.mqtt.pwd, MQTT_PWD_LEN, "%s", obj[F("pwd")].as<const char*>());
snprintf(mCfg.mqtt.topic, MQTT_TOPIC_LEN, "%s", obj[F("topic")].as<const char*>());
mCfg.mqtt.topic = obj[F("topic")].as<const char*>();
}
}

5
src/defines.h

@ -85,10 +85,7 @@ union serial_u {
#define DEVNAME_LEN 16
#define NTP_ADDR_LEN 32 // DNS Name
#define MQTT_ADDR_LEN 32 // DNS Name
#define MQTT_USER_LEN 16
#define MQTT_PWD_LEN 32
#define MQTT_TOPIC_LEN 64
#define MQTT_PWD_LEN 64
#define MQTT_MAX_PACKET_SIZE 384

22
src/publisher/pubMqtt.h

@ -44,7 +44,7 @@ class PubMqtt {
mSunrise = sunrise;
mSunset = sunset;
mClient->setServer(mCfg_mqtt->broker, mCfg_mqtt->port);
mClient->setServer(mCfg_mqtt->broker.c_str(), mCfg_mqtt->port);
mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
setCallback(std::bind(&PubMqtt<HMSYSTEM>::cbMqtt, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
@ -107,7 +107,7 @@ class PubMqtt {
return mTxCnt;
}
void sendMqttDiscoveryConfig(const char *topic) {
void sendMqttDiscoveryConfig(String topic) {
DPRINTLN(DBG_VERBOSE, F("sendMqttDiscoveryConfig"));
char stateTopic[64], discoveryTopic[64], buffer[512], name[32], uniq_id[32];
@ -173,23 +173,21 @@ class PubMqtt {
if(strlen(mDevName) > 0) {
// der Server und der Port müssen neu gesetzt werden,
// da ein MQTT_CONNECTION_LOST -3 die Werte zerstört hat.
mClient->setServer(mCfg_mqtt->broker, mCfg_mqtt->port);
mClient->setServer(mCfg_mqtt->broker.c_str(), mCfg_mqtt->port);
mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
char lwt[MQTT_TOPIC_LEN + 7 ]; // "/uptime" --> + 7 byte
snprintf(lwt, MQTT_TOPIC_LEN + 7, "%s/uptime", mCfg_mqtt->topic);
String lwt = mCfg_mqtt->topic + "/uptime";
if((strlen(mCfg_mqtt->user) > 0) && (strlen(mCfg_mqtt->pwd) > 0))
resub = mClient->connect(mDevName, mCfg_mqtt->user, mCfg_mqtt->pwd, lwt, 0, false, "offline");
if((mCfg_mqtt->user.length() > 0) && (strlen(mCfg_mqtt->pwd) > 0))
resub = mClient->connect(mDevName, mCfg_mqtt->user.c_str(), mCfg_mqtt->pwd, lwt.c_str(), 0, false, "offline");
else
resub = mClient->connect(mDevName, lwt, 0, false, "offline");
resub = mClient->connect(mDevName, lwt.c_str(), 0, false, "offline");
// ein Subscribe ist nur nach einem connect notwendig
if(resub) {
char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte
// ToDo: "/devcontrol/#" is hardcoded
snprintf(topic, MQTT_TOPIC_LEN + 13, "%s/devcontrol/#", mCfg_mqtt->topic);
DPRINTLN(DBG_INFO, F("subscribe to ") + String(topic));
mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#"
String topic = mCfg_mqtt->topic + "/devcontrol/#"; // "/devcontrol/#"
DPRINTLN(DBG_INFO, F("subscribe to ") + topic);
mClient->subscribe(&topic); // subscribe to mTopic + "/devcontrol/#"
}
}
}

7
src/web/web.cpp

@ -434,11 +434,12 @@ void web::showSave(AsyncWebServerRequest *request) {
if(request->arg("mqttAddr") != "") {
String addr = request->arg("mqttAddr");
addr.trim();
addr.toCharArray(mConfig->mqtt.broker, MQTT_ADDR_LEN);
request->arg("mqttUser").toCharArray(mConfig->mqtt.user, MQTT_USER_LEN);
mConfig->mqtt.broker = addr;
mConfig->mqtt.user = request->arg("mqttUser");
if(request->arg("mqttPwd") != "{PWD}")
request->arg("mqttPwd").toCharArray(mConfig->mqtt.pwd, MQTT_PWD_LEN);
request->arg("mqttTopic").toCharArray(mConfig->mqtt.topic, MQTT_TOPIC_LEN);
mConfig->mqtt.topic = request->arg("mqttTopic");
mConfig->mqtt.port = request->arg("mqttPort").toInt();
}

Loading…
Cancel
Save