main/task_mqtt.c

changeset 28
6d825e2962e4
parent 24
64078aa15512
child 37
358bbd5b608e
--- a/main/task_mqtt.c	Sun Nov 10 20:53:01 2019 +0100
+++ b/main/task_mqtt.c	Mon Nov 11 16:54:12 2019 +0100
@@ -338,6 +338,7 @@
 void task_mqtt(void *pvParameter)
 {
     esp_err_t	err;
+    char	*uri = NULL, port[11];
 
     ESP_LOGI(TAG, "Starting MQTT task");
     xSemaphorePcounter = xSemaphoreCreateMutex();
@@ -369,7 +370,7 @@
     xEventGroupMQTT = xEventGroupCreate();
     EventBits_t uxBits;
     esp_mqtt_client_config_t mqtt_cfg = {
-        .uri = "mqtt://seaport.mbse.ym",
+        .uri = "mqtt://localhost",
     };
     client = esp_mqtt_client_init(&mqtt_cfg);
     esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client);
@@ -382,10 +383,33 @@
 	uxBits = xEventGroupWaitBits(xEventGroupMQTT, TASK_MQTT_CONNECT | TASK_MQTT_DISCONNECT, pdFALSE, pdFALSE, portMAX_DELAY );
 
 	if (uxBits & TASK_MQTT_CONNECT) {
-	    ESP_LOGI(TAG, "Request MQTT connect");
+	    if (strlen(config.mqtt_server)) {
+	    	uri = xstrcpy((char *)"mqtt://");
+	    	if (strlen(config.mqtt_user) && strlen(config.mqtt_pwd)) {
+		    uri = xstrcat(uri, config.mqtt_user);
+		    uri = xstrcat(uri, (char *)":");
+		    uri = xstrcat(uri, config.mqtt_pwd);
+		    uri = xstrcat(uri, (char *)"@");
+	    	}
+		uri = xstrcat(uri, config.mqtt_server);
+		if (config.mqtt_port != 1883) {
+		    uri = xstrcat(uri, (char *)":");
+		    sprintf(port, "%d", config.mqtt_port);
+		    uri = xstrcat(uri, port);
+		}
+	    } else {
+		uri = xstrcpy((char *)"mqtt://iot.eclipse.org:1883");
+	    }
+	    ESP_LOGI(TAG, "Request MQTT connect %s", uri);
+	    err = esp_mqtt_client_set_uri(client, uri);
+	    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)
 	    	ESP_LOGE(TAG, "Result %s", esp_err_to_name(err));
+	    if (uri)
+		free(uri);
+	    uri = NULL;
 	    xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECT);
 
 	} else if (uxBits & TASK_MQTT_DISCONNECT) {

mercurial