diff -r 2cc30d828d6e -r 74609f70411e main/task_mqtt.c --- a/main/task_mqtt.c Tue Apr 11 19:41:53 2023 +0200 +++ b/main/task_mqtt.c Wed Apr 12 16:23:02 2023 +0200 @@ -79,14 +79,13 @@ void wait_mqtt(int time) { - EventBits_t uxBits; +// EventBits_t uxBits; - ESP_LOGI(TAG, "wait_mqtt(%d) 1", time); if (xEventGroupGetBits(xEventGroupMQTT) & TASK_MQTT_CONNECTED) { - uxBits = xEventGroupWaitBits(xEventGroupMQTT, TASK_MQTT_DISCONNECTED, pdTRUE, pdFALSE, time / portTICK_PERIOD_MS); - ESP_LOGI(TAG, "wait_mqtt(%d) 2 %lu", time, uxBits & TASK_MQTT_DISCONNECTED); - } else { - ESP_LOGI(TAG, "wait_mqtt(%d) 3 not connected", time); + /*uxBits =*/ xEventGroupWaitBits(xEventGroupMQTT, TASK_MQTT_DISCONNECTED, pdTRUE, pdFALSE, time / portTICK_PERIOD_MS); +// ESP_LOGI(TAG, "wait_mqtt(%d) 2 %lu", time, uxBits & TASK_MQTT_DISCONNECTED); +// } else { +// ESP_LOGI(TAG, "wait_mqtt(%d) 3 not connected", time); } } @@ -242,17 +241,18 @@ static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event) { - char *topic = NULL; + char *subscr = NULL, *check = NULL; switch (event->event_id) { case MQTT_EVENT_CONNECTED: ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED"); - 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); - topic = NULL; + subscr = topic_base(); + subscr = xstrcat(subscr, (char *)"output/set/#"); + int msgid = esp_mqtt_client_subscribe(client, subscr, 0); + ESP_LOGI(TAG, "Subscribe `%s' id %d", subscr, msgid); + free(subscr); + subscr = NULL; xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_CONNECTED); xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_DISCONNECTED); break; @@ -264,7 +264,7 @@ break; case MQTT_EVENT_SUBSCRIBED: - ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id); + ESP_LOGD(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id); break; case MQTT_EVENT_UNSUBSCRIBED: @@ -272,7 +272,6 @@ break; case MQTT_EVENT_PUBLISHED: - ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id); if (xSemaphoreTake(xSemaphorePcounter, 10) == pdTRUE) { if (count_pub) { count_pub--; @@ -281,60 +280,65 @@ } else { ESP_LOGE(TAG, "mqtt_event_handler_cb(() lock error event"); } + ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d, %d msgs in queue", event->msg_id, count_pub); break; case MQTT_EVENT_DATA: - ESP_LOGI(TAG, "MQTT_EVENT_DATA len=%d", event->data_len); bool gotit = false; - char data[65]; + char data[65], topic[128]; if (event->data_len < 65) snprintf(data, 64, "%.*s", event->data_len, event->data); else data[0] = '\0'; + if (event->topic_len < 128) + snprintf(topic, 127, "%.*s", event->topic_len, event->topic); + else + topic[0] = '\0'; + ESP_LOGI(TAG, "MQTT_EVENT_DATA %s %s", topic, data); - topic = topic_base(); - topic = xstrcat(topic, (char *)"output/set/1"); - if (strncmp(topic, event->topic, event->topic_len) == 0) { - ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data)); + check = topic_base(); + check = xstrcat(check, (char *)"output/set/1"); + if (strncmp(check, event->topic, event->topic_len) == 0) { + ESP_LOGD(TAG, "Got %s `%s' %d", check, data, atoi(data)); gotit = true; Relay1 = (uint8_t)atoi(data); nvsio_write_u8((char *)"out1", Relay1); } - free(topic); - topic = NULL; + free(check); + check = NULL; - topic = topic_base(); - topic = xstrcat(topic, (char *)"output/set/2"); - if (strncmp(topic, event->topic, event->topic_len) == 0) { - ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data)); + check = topic_base(); + check = xstrcat(check, (char *)"output/set/2"); + if (strncmp(check, event->topic, event->topic_len) == 0) { + ESP_LOGD(TAG, "Got %s `%s' %d", check, data, atoi(data)); gotit = true; Relay2 = (uint8_t)atoi(data); nvsio_write_u8((char *)"out2", Relay2); } - free(topic); - topic = NULL; + free(check); + check = NULL; - topic = topic_base(); - topic = xstrcat(topic, (char *)"output/set/3"); - if (strncmp(topic, event->topic, event->topic_len) == 0) { - ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data)); + check = topic_base(); + check = xstrcat(check, (char *)"output/set/3"); + if (strncmp(check, event->topic, event->topic_len) == 0) { + ESP_LOGI(TAG, "Got %s `%s' %d", check, data, atoi(data)); gotit = true; Dimmer3 = (uint8_t)atoi(data); nvsio_write_u8((char *)"out3", Dimmer3); } - free(topic); - topic = NULL; + free(check); + check = NULL; - topic = topic_base(); - topic = xstrcat(topic, (char *)"output/set/4"); - if (strncmp(topic, event->topic, event->topic_len) == 0) { - ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data)); + check = topic_base(); + check = xstrcat(check, (char *)"output/set/4"); + if (strncmp(check, event->topic, event->topic_len) == 0) { + ESP_LOGD(TAG, "Got %s `%s' %d", check, data, atoi(data)); gotit = true; Dimmer4 = (uint8_t)atoi(data); nvsio_write_u8((char *)"out4", Dimmer4); } - free(topic); - topic = NULL; + free(check); + check = NULL; if (! gotit) { printf("TOPIC=%.*s ", event->topic_len, event->topic); @@ -427,7 +431,7 @@ xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECT); } else if (uxBits & TASK_MQTT_DISCONNECT) { - ESP_LOGI(TAG, "Request MQTT disconnect start"); + ESP_LOGI(TAG, "Request MQTT disconnect"); /* * Unsubscribe if connected */ @@ -446,7 +450,6 @@ ESP_LOGE(TAG, "Result %s", esp_err_to_name(err)); } xEventGroupWaitBits(xEventGroupMQTT, TASK_MQTT_DISCONNECTED, pdTRUE, pdFALSE, 500 / portTICK_PERIOD_MS); - ESP_LOGI(TAG, "disconnect confirmed"); /* * Finally stop the client because new connections start @@ -455,9 +458,7 @@ */ err = esp_mqtt_client_stop(client); if (err != ESP_OK) { - ESP_LOGE(TAG, "Result %s", esp_err_to_name(err)); - } else { - ESP_LOGI(TAG, "stopped"); + ESP_LOGE(TAG, "esp_mqtt_client_stop() result %s", esp_err_to_name(err)); } xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECTED);