esp8266-sensor/mqtt.ino
2018-12-06 20:14:48 +01:00

81 lines
2.0 KiB
C++
Executable File

/*********************MQTT connect **************************************/
bool mqtt_connect() {
const int8_t maxRetryMqtt = 5;
int8_t currRetryMqtt = 0;
char mqttBrokerBuf[16]; //ToDo Legacy IPv4
mqttBroker.toString().toCharArray( mqttBrokerBuf, mqttBroker.toString().length()+1 );
#ifdef SERIAL_DEBUG
//Serial.println("MQTT Status: " + String(mqttClient.state()));
#endif
if (mqttClient.connected()) {
mqttCheck = true;
return true;
}
#ifdef SERIAL_DEBUG
Serial.println("Connecting to MQTT Broker...\t"+ String(mqttBrokerBuf));
#endif
#ifdef OLED_OUTPUT
display.clear();
//display.drawStringMaxWidth(0, 0, 128, "MQTT: conn");
#endif
//set options, may be obsolete
//mqttClient.setOptions(2, true, 750);
mqttClient.begin(mqttBrokerBuf, MQTT_PORT, mqttSocket);
mqttClient.onMessage(messageReceived);
mqttClient.setWill(MQTT_WILL_TOPIC, MQTT_WILL_MESSAGE, MQTT_WILL_RETAIN, MQTT_WILL_QOS);
bool retVal = mqttClient.connect(MQTT_CLIENTID, MQTT_USERNAME, MQTT_PASSWORD);
delay(10);
while (currRetryMqtt <= maxRetryMqtt && !mqttClient.connect(MQTT_CLIENTID, MQTT_USERNAME, MQTT_PASSWORD))
{ // connect will return 0 for connected
currRetryMqtt++;
if (mqttClient.connected()) {
currRetryMqtt=0;
return true;
}
else {
#ifdef SERIAL_DEBUG
if (currRetryMqtt == 1) {
Serial.print("Retrying MQTT connection in 1 seconds \t.");
}
else {
Serial.print(".");
}
#endif
delay(1000);// wait 1 seconds
}
}
retVal = mqttClient.connected();
#ifdef OLED_OUTPUT
display.drawStringMaxWidth(0, 32, 128, "MQTT: Error " + String(retVal));
display.display();
#endif
#ifdef OLED_OUTPUT
display.clear();
#endif
return retVal;
}
bool mqtt_disconnect() {
bool retVal = mqttClient.disconnect();
delay(10);
mqttClient.loop();
delay(10);
#ifdef SERIAL_DEBUG
if ( retVal ) {
Serial.println("mqtt disconnected");
}
else {
Serial.println("mqtt NOT disconnected");
}
#endif
return retVal;
}