diff --git a/firmware/esp32/main/mqtt.cpp b/firmware/esp32/main/mqtt.cpp index 1d7d055..7fd9940 100644 --- a/firmware/esp32/main/mqtt.cpp +++ b/firmware/esp32/main/mqtt.cpp @@ -8,6 +8,23 @@ static const char* TAG = "MQTT"; +const int MQTT_CONNECTED_BIT = BIT0; + +static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) { + esp_mqtt_event_handle_t event = event_data; + switch (event->event_id) { + case MQTT_EVENT_CONNECTED: + xEventGroupSetBits(connectivity_event_group, MQTT_CONNECTED_BIT); + ESP_LOGI(TAG, "Connected to broker"); + break; + case MQTT_EVENT_DISCONNECTED: + xEventGroupClearBits(connectivity_event_group, MQTT_CONNECTED_BIT); + ESP_LOGI(TAG, "Disconnected from broker"); + break; + default: + break; + } +} static void mqtt_init(void) { // TODO; implement Trust only or Mutual TLS in the future (and secure boot + flash encryption) @@ -31,8 +48,6 @@ static void mqtt_subscribe(void) { static void mqtt_publish(void) {} -static void mqtt_fetch(void) {} - void mqttTask(void *pvParameters) { ESP_LOGI(TAG, "Task started"); @@ -40,13 +55,10 @@ void mqttTask(void *pvParameters) { ESP_ERROR_CHECK(esp_task_wdt_add(NULL)); for(;;) { - ESP_LOGI(TAG, "Checking Wi-Fi connection..."); - xEventGroupWaitBits(wifi_event_group, WIFI_CONNECTED_BIT, pdFALSE, pdTRUE, portMAX_DELAY); + ESP_LOGI(TAG, "Checking broker connection..."); - if (bits & WIFI_CONNECTED_BIT) { - mqtt_publish(); - mqtt_fetch(); - } + if(bits && MQTT_CONNECTED_BIT) mqtt_publish(); + else ESP_LOGW(TAG, "Waiting for connection..."); ESP_ERROR_CHECK(esp_task_wdt_reset()); ESP_LOGI(TAG, "Task reset");