main/task_mqtt.c

changeset 6
bad3414f7bc4
parent 5
b1f38105ca7e
child 7
2b337dd92f25
--- a/main/task_mqtt.c	Thu Mar 30 17:05:05 2023 +0200
+++ b/main/task_mqtt.c	Thu Mar 30 21:55:24 2023 +0200
@@ -192,6 +192,10 @@
 
         case MQTT_EVENT_CONNECTED:
             ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
+	    char *topic = topic_base();
+            topic = xstrcat(topic, (char *)"output/set/#");
+            ESP_LOGI(TAG, "Subscribe `%s' id %d", topic, esp_mqtt_client_subscribe(client, topic, 0));
+            free(topic);
 	    xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_CONNECTED);
             break;
 
@@ -222,7 +226,7 @@
 
         case MQTT_EVENT_DATA:
             ESP_LOGI(TAG, "MQTT_EVENT_DATA");
-            printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
+            printf("TOPIC=%.*s ", event->topic_len, event->topic);
             printf("DATA=%.*s\r\n", event->data_len, event->data);
             break;
 
@@ -231,12 +235,12 @@
             break;
 
 	case MQTT_EVENT_BEFORE_CONNECT:
-	    ESP_LOGI(TAG, "MQTT_EVENT_BEFORE_CONNECT");
+	    ESP_LOGD(TAG, "MQTT_EVENT_BEFORE_CONNECT");
 	    // Configure connection can be here.
 	    break;
 
         default:
-            ESP_LOGI(TAG, "Other event id:%d", event->event_id);
+            ESP_LOGE(TAG, "Other event id:%d", event->event_id);
             break;
     }
     return ESP_OK;
@@ -298,12 +302,19 @@
             if (err != ESP_OK)
                 ESP_LOGE(TAG, "Set uri %s", esp_err_to_name(err));
 	    err = esp_mqtt_client_start(client);
-	    if (err != ESP_OK)
+	    if (err != ESP_OK) {
 	    	ESP_LOGE(TAG, "Result %s", esp_err_to_name(err));
+	    }
 	    xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECT);
 
 	} else if (uxBits & TASK_MQTT_DISCONNECT) {
 	    ESP_LOGI(TAG, "Request MQTT disconnect");
+	    if (ready_mqtt()) {
+	    	char *topic = topic_base();
+            	topic = xstrcat(topic, (char *)"output/set/#");
+            	esp_mqtt_client_unsubscribe(client, topic);
+            	free(topic);
+	    }
 	    esp_mqtt_client_stop(client);
 	    xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_DISCONNECT);
 	    xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECTED);

mercurial