Browse Source

Merge pull request #179 from tastendruecker123/mqttfix

MQTT resubscribe only when reconnected successfully, don't call reconnect() when client is still connected (Issue #176)
pull/181/head
Andreas Schiffler 3 years ago
committed by GitHub
parent
commit
4f62d10598
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      .gitignore
  2. 19
      tools/esp8266/mqtt.h

1
.gitignore

@ -20,3 +20,4 @@ tools/esp8266/binaries
tools/esp8266/.vscode/extensions.json
.DS_Store
.vscode
tools/esp8266/platformio-device-monitor-*.log

19
tools/esp8266/mqtt.h

@ -54,7 +54,7 @@ class mqtt {
bool isConnected(bool doRecon = false) {
//DPRINTLN(DBG_VERBOSE, F("mqtt.h:isConnected"));
if(doRecon)
if(doRecon && !mClient->connected())
reconnect();
return mClient->connected();
}
@ -71,6 +71,7 @@ class mqtt {
DPRINTLN(DBG_DEBUG, F("mqtt.h:reconnect"));
DPRINTLN(DBG_DEBUG, F("MQTT mClient->_state ") + String(mClient->state()) );
DPRINTLN(DBG_DEBUG, F("WIFI mEspClient.status ") + String(mEspClient.status()) );
boolean resub = false;
if(!mClient->connected()) {
if(strlen(mDevName) > 0) {
// der Server und der Port müssen neu gesetzt werden,
@ -78,16 +79,18 @@ class mqtt {
mClient->setServer(mCfg->broker, mCfg->port);
mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
if((strlen(mCfg->user) > 0) && (strlen(mCfg->pwd) > 0))
mClient->connect(mDevName, mCfg->user, mCfg->pwd);
resub = mClient->connect(mDevName, mCfg->user, mCfg->pwd);
else
mClient->connect(mDevName);
resub = mClient->connect(mDevName);
}
// ein Subscribe ist nur nach einem connect notwendig
char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte
// ToDo: "/devcontrol/#" is hardcoded
snprintf(topic, MQTT_TOPIC_LEN + 13, "%s/devcontrol/#", mCfg->topic);
DPRINTLN(DBG_INFO, F("subscribe to ") + String(topic));
mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#"
if(resub) {
char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte
// ToDo: "/devcontrol/#" is hardcoded
snprintf(topic, MQTT_TOPIC_LEN + 13, "%s/devcontrol/#", mCfg->topic);
DPRINTLN(DBG_INFO, F("subscribe to ") + String(topic));
mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#"
}
}
}

Loading…
Cancel
Save