From 4807e1cfe11dbedd7656e534e3995edb575129a6 Mon Sep 17 00:00:00 2001 From: Filip Wandzio Date: Tue, 14 Oct 2025 22:18:55 +0200 Subject: Optimize mqtt rtt analysis method --- firmware/src/mqtt.c | 67 +++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 36 deletions(-) (limited to 'firmware/src/mqtt.c') diff --git a/firmware/src/mqtt.c b/firmware/src/mqtt.c index 90451bc..b171437 100644 --- a/firmware/src/mqtt.c +++ b/firmware/src/mqtt.c @@ -8,24 +8,12 @@ #include #include -#ifndef BUFFER_SIZE -#define BUFFER_SIZE 64 -#endif - -#ifndef PUBLISH_INTERVAL_MS -#define PUBLISH_INTERVAL_MS 1000 -#endif - -#ifndef PUBLISHER_TASK_STACK_SIZE -#define PUBLISHER_TASK_STACK_SIZE 4096 -#endif - -#ifndef PUBLISHER_TASK_PRIORITY -#define PUBLISHER_TASK_PRIORITY 5 -#endif - +static const char *TAG = "mqtt"; static esp_mqtt_client_handle_t client; +/** + * @brief Obsługa zdarzeń MQTT + */ static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) { @@ -33,56 +21,63 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base, switch (event->event_id) { case MQTT_EVENT_CONNECTED: - printf("MQTT connected!\n"); + ESP_LOGI(TAG, "MQTT connected!"); esp_mqtt_client_subscribe(event->client, SUB_TOPIC, 1); break; case MQTT_EVENT_DATA: { char topic[event->topic_len + 1]; char data[event->data_len + 1]; + memcpy(topic, event->topic, event->topic_len); topic[event->topic_len] = '\0'; memcpy(data, event->data, event->data_len); data[event->data_len] = '\0'; - printf("MQTT Msg received\nTopic: %s\nData: %s\n", topic, data); + ESP_LOGI(TAG, "MQTT Msg received | Topic: %s | Data: %s", topic, + data); + // Echo wiadomości do PUB_TOPIC tylko jeśli timestamp jest + // sensowny char *endptr; - long long sent = strtoll(data, &endptr, 10); - if (endptr != data) { - long long now = esp_timer_get_time() / 1000ULL; - long long rtt = now - sent; - printf("RTT: %lld ms\n", rtt); + long long ts = strtoll(data, &endptr, 10); + if (endptr != data && *endptr == '\0' && ts > 0 && ts < 1e13) { + esp_mqtt_client_publish(event->client, PUB_TOPIC, data, + 0, 1, 0); + } else { + ESP_LOGW(TAG, "Nieprawidłowe dane, ignorowane: %s", + data); } + break; } - default: + case MQTT_EVENT_DISCONNECTED: + ESP_LOGW(TAG, "MQTT disconnected"); break; - } -} -static void publisher_task(void *pvParameters) -{ - while (1) { - char buf[BUFFER_SIZE]; - snprintf(buf, BUFFER_SIZE, "%lld", - (long long)(esp_timer_get_time() / 1000ULL)); - esp_mqtt_client_publish(client, PUB_TOPIC, buf, 0, 1, 0); - vTaskDelay(pdMS_TO_TICKS(PUBLISH_INTERVAL_MS)); + case MQTT_EVENT_ERROR: + ESP_LOGE(TAG, "MQTT error occurred"); + break; + + default: + break; } } +/** + * @brief Uruchamia klienta MQTT + */ void mqtt_app_start(void) { esp_mqtt_client_config_t mqtt_cfg = { .broker.address.uri = MQTT_URI, }; + client = esp_mqtt_client_init(&mqtt_cfg); esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL); esp_mqtt_client_start(client); - xTaskCreate(publisher_task, "publisher_task", PUBLISHER_TASK_STACK_SIZE, - NULL, PUBLISHER_TASK_PRIORITY, NULL); + ESP_LOGI(TAG, "MQTT client started"); } -- cgit v1.2.3