main/task_mqtt.c

changeset 28
6d825e2962e4
parent 24
64078aa15512
child 37
358bbd5b608e
equal deleted inserted replaced
27:8bb63daa7b46 28:6d825e2962e4
336 * Task to read temperature sensors on request. 336 * Task to read temperature sensors on request.
337 */ 337 */
338 void task_mqtt(void *pvParameter) 338 void task_mqtt(void *pvParameter)
339 { 339 {
340 esp_err_t err; 340 esp_err_t err;
341 char *uri = NULL, port[11];
341 342
342 ESP_LOGI(TAG, "Starting MQTT task"); 343 ESP_LOGI(TAG, "Starting MQTT task");
343 xSemaphorePcounter = xSemaphoreCreateMutex(); 344 xSemaphorePcounter = xSemaphoreCreateMutex();
344 345
345 /* 346 /*
367 368
368 /* event handler and event group for the wifi driver */ 369 /* event handler and event group for the wifi driver */
369 xEventGroupMQTT = xEventGroupCreate(); 370 xEventGroupMQTT = xEventGroupCreate();
370 EventBits_t uxBits; 371 EventBits_t uxBits;
371 esp_mqtt_client_config_t mqtt_cfg = { 372 esp_mqtt_client_config_t mqtt_cfg = {
372 .uri = "mqtt://seaport.mbse.ym", 373 .uri = "mqtt://localhost",
373 }; 374 };
374 client = esp_mqtt_client_init(&mqtt_cfg); 375 client = esp_mqtt_client_init(&mqtt_cfg);
375 esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client); 376 esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client);
376 377
377 /* 378 /*
380 while (1) { 381 while (1) {
381 382
382 uxBits = xEventGroupWaitBits(xEventGroupMQTT, TASK_MQTT_CONNECT | TASK_MQTT_DISCONNECT, pdFALSE, pdFALSE, portMAX_DELAY ); 383 uxBits = xEventGroupWaitBits(xEventGroupMQTT, TASK_MQTT_CONNECT | TASK_MQTT_DISCONNECT, pdFALSE, pdFALSE, portMAX_DELAY );
383 384
384 if (uxBits & TASK_MQTT_CONNECT) { 385 if (uxBits & TASK_MQTT_CONNECT) {
385 ESP_LOGI(TAG, "Request MQTT connect"); 386 if (strlen(config.mqtt_server)) {
387 uri = xstrcpy((char *)"mqtt://");
388 if (strlen(config.mqtt_user) && strlen(config.mqtt_pwd)) {
389 uri = xstrcat(uri, config.mqtt_user);
390 uri = xstrcat(uri, (char *)":");
391 uri = xstrcat(uri, config.mqtt_pwd);
392 uri = xstrcat(uri, (char *)"@");
393 }
394 uri = xstrcat(uri, config.mqtt_server);
395 if (config.mqtt_port != 1883) {
396 uri = xstrcat(uri, (char *)":");
397 sprintf(port, "%d", config.mqtt_port);
398 uri = xstrcat(uri, port);
399 }
400 } else {
401 uri = xstrcpy((char *)"mqtt://iot.eclipse.org:1883");
402 }
403 ESP_LOGI(TAG, "Request MQTT connect %s", uri);
404 err = esp_mqtt_client_set_uri(client, uri);
405 if (err != ESP_OK)
406 ESP_LOGE(TAG, "Set uri %s", esp_err_to_name(err));
386 err = esp_mqtt_client_start(client); 407 err = esp_mqtt_client_start(client);
387 if (err != ESP_OK) 408 if (err != ESP_OK)
388 ESP_LOGE(TAG, "Result %s", esp_err_to_name(err)); 409 ESP_LOGE(TAG, "Result %s", esp_err_to_name(err));
410 if (uri)
411 free(uri);
412 uri = NULL;
389 xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECT); 413 xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECT);
390 414
391 } else if (uxBits & TASK_MQTT_DISCONNECT) { 415 } else if (uxBits & TASK_MQTT_DISCONNECT) {
392 ESP_LOGI(TAG, "Request MQTT disconnect"); 416 ESP_LOGI(TAG, "Request MQTT disconnect");
393 esp_mqtt_client_stop(client); 417 esp_mqtt_client_stop(client);

mercurial