123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // MQTT callback
- void mqttCallback(char* topic, byte* payload, unsigned int length) {
- //Serial.print("Message arrived [");
- //Serial.print(topic);
- //Serial.println("] ");
- /*for (int i = 0; i < length; i++) {
- Serial.print((char)payload[i]);
- }
- Serial.println();*/
- if (strcmp(topic, mqtt_topic_in) == 0) { //if topic = mqtt_topic_in
- for (int i = 0; i < length; i++) {
- cmdPayload[i] = (char)payload[i];
- }
- cmdPayload[length + 1] = '\0';
- Serial.print("cmdPayload:");
- Serial.println(cmdPayload);
- cmdInQueue = true;
- }//if topic = mqtt_topic_in
- if ( useDomoticz ) {
- if (strcmp(topic, DOMOTICZ_OUT_TOPIC) == 0) { //if topic = DOMOTICZ_OUT_TOPIC
- if ( !domoticzOutParserBusy ) {
- for (int i = 0; i < length; i++) {
- domoticzOutPayload[i] = (char)payload[i];
- }
- domoticzOutPayload[length + 1] = '\0';
- domoticzOutParseData = true; // parse domoticz data in the next loop()
- }
- }
- }
- }//mqttCallback
- boolean mqttReconnect() {
- // Create a random MQTT client ID
- String mqttClientId = "ESP8266Client-";
- mqttClientId += String(random(0xffff), HEX);
- if (mqttclient.connect(mqttClientId.c_str())) {
- Serial.println("MQTT connected");
- // Once connected, publish an announcement...
- mqttclient.publish(mqtt_topic_out, "connected");
- // ... and resubscribe
- mqttclient.subscribe(mqtt_topic_in);
- mqttclient.subscribe(domoticz_out_topic);
- }
- return mqttclient.connected();
- } //mqttReconnect
- void mqttClientInit() {
- mqttclient.setServer(mqtt_server, mqtt_port);
- mqttclient.setCallback(mqttCallback);
- mqttLastReconnectAttempt = 0;
- }
- void mqttHandleConnection() {
- if ( WiFi.status() == WL_CONNECTED ) {
- // MQTT reconnect if not connected (nonblocking)
- if (!mqttclient.connected()) {
- long now = millis();
- if (now - mqttLastReconnectAttempt > 5000) {
- mqttLastReconnectAttempt = now;
- if (mqttReconnect()) { // Attempt to reconnect
- mqttLastReconnectAttempt = 0;
- }
- }
- } else { // Client connected
- mqttclient.loop();
- }//else
- }
- }
|