--- a/main/task_mqtt.c Tue Apr 04 14:33:26 2023 +0200 +++ b/main/task_mqtt.c Tue Apr 04 20:57:49 2023 +0200 @@ -47,12 +47,23 @@ extern uint8_t Dimmer4; -void connect_mqtt(bool state) +void request_mqtt(bool state) { - if (state) - xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_CONNECT); - else - xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_DISCONNECT); + if (state) { + if (xEventGroupGetBits(xEventGroupMQTT) & TASK_MQTT_CONNECTED) { + ESP_LOGW(TAG, "request_mqtt(true) but already connected"); + } else { + xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_CONNECT); + } + } else { + if (xEventGroupGetBits(xEventGroupMQTT) & TASK_MQTT_DISCONNECT) { + ESP_LOGW(TAG, "request_mqtt(false) already in progress"); + } else if (! (xEventGroupGetBits(xEventGroupMQTT) & TASK_MQTT_CONNECTED)) { + ESP_LOGW(TAG, "request_mqtt(false) but already disconnected"); + } else { + xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_DISCONNECT); + } + } } @@ -446,7 +457,7 @@ xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECT); } else if (uxBits & TASK_MQTT_DISCONNECT) { - ESP_LOGI(TAG, "Request MQTT disconnect"); + ESP_LOGI(TAG, "Request MQTT disconnect start"); /* * Unsubscribe if connected */ @@ -479,7 +490,10 @@ ESP_LOGI(TAG, "stopped"); } + xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECTED); + xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_DISCONNECTED); xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_DISCONNECT); + ESP_LOGI(TAG, "Request MQTT disconnect done"); } } }