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); |