diff --git a/mqtt_client.c b/mqtt_client.c index 159cefa..87c9541 100644 --- a/mqtt_client.c +++ b/mqtt_client.c @@ -958,6 +958,14 @@ esp_err_t esp_mqtt_client_reconnect(esp_mqtt_client_handle_t client) esp_err_t esp_mqtt_client_stop(esp_mqtt_client_handle_t client) { if (client->run) { + // Notify the broker we are disconnecting + MQTT_API_LOCK_FROM_OTHER_TASK(client); + client->mqtt_state.outbound_message = mqtt_msg_disconnect(&client->mqtt_state.mqtt_connection); + if (mqtt_write_data(client) != ESP_OK) { + ESP_LOGE(TAG, "Error sending disconnect message"); + } + MQTT_API_UNLOCK_FROM_OTHER_TASK(client); + client->run = false; xEventGroupWaitBits(client->status_bits, STOPPED_BIT, false, true, portMAX_DELAY); client->state = MQTT_STATE_UNKNOWN;