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; } cfgLed_t;
typedef struct { typedef struct {
char broker[MQTT_ADDR_LEN]; String broker;
uint16_t port; uint16_t port;
char user[MQTT_USER_LEN]; String user;
char pwd[MQTT_PWD_LEN]; char pwd[MQTT_PWD_LEN];
char topic[MQTT_TOPIC_LEN]; String topic;
} cfgMqtt_t; } cfgMqtt_t;
typedef struct { typedef struct {
@ -272,10 +272,10 @@ class settings {
mCfg.serial.debug = false; mCfg.serial.debug = false;
mCfg.mqtt.port = DEF_MQTT_PORT; mCfg.mqtt.port = DEF_MQTT_PORT;
snprintf(mCfg.mqtt.broker, MQTT_ADDR_LEN, "%s", DEF_MQTT_BROKER); mCfg.mqtt.broker = DEF_MQTT_BROKER;
snprintf(mCfg.mqtt.user, MQTT_USER_LEN, "%s", DEF_MQTT_USER); mCfg.mqtt.user = DEF_MQTT_USER;
snprintf(mCfg.mqtt.pwd, MQTT_PWD_LEN, "%s", DEF_MQTT_PWD); 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.led0 = DEF_LED0_PIN;
mCfg.led.led1 = DEF_LED1_PIN; mCfg.led.led1 = DEF_LED1_PIN;
@ -366,10 +366,10 @@ class settings {
obj[F("topic")] = mCfg.mqtt.topic; obj[F("topic")] = mCfg.mqtt.topic;
} else { } else {
mCfg.mqtt.port = obj[F("port")]; mCfg.mqtt.port = obj[F("port")];
snprintf(mCfg.mqtt.broker, MQTT_ADDR_LEN, "%s", obj[F("broker")].as<const char*>()); mCfg.mqtt.broker = obj[F("broker")].as<const char*>();
snprintf(mCfg.mqtt.user, MQTT_USER_LEN, "%s", obj[F("user")].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.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 DEVNAME_LEN 16
#define NTP_ADDR_LEN 32 // DNS Name #define NTP_ADDR_LEN 32 // DNS Name
#define MQTT_ADDR_LEN 32 // DNS Name #define MQTT_PWD_LEN 64
#define MQTT_USER_LEN 16
#define MQTT_PWD_LEN 32
#define MQTT_TOPIC_LEN 64
#define MQTT_MAX_PACKET_SIZE 384 #define MQTT_MAX_PACKET_SIZE 384

22
src/publisher/pubMqtt.h

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

Loading…
Cancel
Save