diff options
| author | Filip Wandzio <contact@philw.dev> | 2025-10-14 22:18:55 +0200 |
|---|---|---|
| committer | Filip Wandzio <contact@philw.dev> | 2025-10-14 22:18:55 +0200 |
| commit | 4807e1cfe11dbedd7656e534e3995edb575129a6 (patch) | |
| tree | 48afc894f2b8c0ec1ad82ca433a77e4b247fa774 /firmware/src/mqtt.c | |
| parent | 01713bbe20d2cf5aafbe5eb32721d3e4fc5823d8 (diff) | |
| download | e1-4807e1cfe11dbedd7656e534e3995edb575129a6.tar.gz e1-4807e1cfe11dbedd7656e534e3995edb575129a6.zip | |
Optimize mqtt rtt analysis method
Diffstat (limited to 'firmware/src/mqtt.c')
| -rw-r--r-- | firmware/src/mqtt.c | 67 |
1 files changed, 31 insertions, 36 deletions
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 @@ | |||
| 8 | #include <stdlib.h> | 8 | #include <stdlib.h> |
| 9 | #include <string.h> | 9 | #include <string.h> |
| 10 | 10 | ||
| 11 | #ifndef BUFFER_SIZE | 11 | static const char *TAG = "mqtt"; |
| 12 | #define BUFFER_SIZE 64 | ||
| 13 | #endif | ||
| 14 | |||
| 15 | #ifndef PUBLISH_INTERVAL_MS | ||
| 16 | #define PUBLISH_INTERVAL_MS 1000 | ||
| 17 | #endif | ||
| 18 | |||
| 19 | #ifndef PUBLISHER_TASK_STACK_SIZE | ||
| 20 | #define PUBLISHER_TASK_STACK_SIZE 4096 | ||
| 21 | #endif | ||
| 22 | |||
| 23 | #ifndef PUBLISHER_TASK_PRIORITY | ||
| 24 | #define PUBLISHER_TASK_PRIORITY 5 | ||
| 25 | #endif | ||
| 26 | |||
| 27 | static esp_mqtt_client_handle_t client; | 12 | static esp_mqtt_client_handle_t client; |
| 28 | 13 | ||
| 14 | /** | ||
| 15 | * @brief Obsługa zdarzeń MQTT | ||
| 16 | */ | ||
| 29 | static void mqtt_event_handler(void *handler_args, esp_event_base_t base, | 17 | static void mqtt_event_handler(void *handler_args, esp_event_base_t base, |
| 30 | int32_t event_id, void *event_data) | 18 | int32_t event_id, void *event_data) |
| 31 | { | 19 | { |
| @@ -33,56 +21,63 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base, | |||
| 33 | 21 | ||
| 34 | switch (event->event_id) { | 22 | switch (event->event_id) { |
| 35 | case MQTT_EVENT_CONNECTED: | 23 | case MQTT_EVENT_CONNECTED: |
| 36 | printf("MQTT connected!\n"); | 24 | ESP_LOGI(TAG, "MQTT connected!"); |
| 37 | esp_mqtt_client_subscribe(event->client, SUB_TOPIC, 1); | 25 | esp_mqtt_client_subscribe(event->client, SUB_TOPIC, 1); |
| 38 | break; | 26 | break; |
| 39 | 27 | ||
| 40 | case MQTT_EVENT_DATA: { | 28 | case MQTT_EVENT_DATA: { |
| 41 | char topic[event->topic_len + 1]; | 29 | char topic[event->topic_len + 1]; |
| 42 | char data[event->data_len + 1]; | 30 | char data[event->data_len + 1]; |
| 31 | |||
| 43 | memcpy(topic, event->topic, event->topic_len); | 32 | memcpy(topic, event->topic, event->topic_len); |
| 44 | topic[event->topic_len] = '\0'; | 33 | topic[event->topic_len] = '\0'; |
| 45 | memcpy(data, event->data, event->data_len); | 34 | memcpy(data, event->data, event->data_len); |
| 46 | data[event->data_len] = '\0'; | 35 | data[event->data_len] = '\0'; |
| 47 | 36 | ||
| 48 | printf("MQTT Msg received\nTopic: %s\nData: %s\n", topic, data); | 37 | ESP_LOGI(TAG, "MQTT Msg received | Topic: %s | Data: %s", topic, |
| 38 | data); | ||
| 49 | 39 | ||
| 40 | // Echo wiadomości do PUB_TOPIC tylko jeśli timestamp jest | ||
| 41 | // sensowny | ||
| 50 | char *endptr; | 42 | char *endptr; |
| 51 | long long sent = strtoll(data, &endptr, 10); | 43 | long long ts = strtoll(data, &endptr, 10); |
| 52 | if (endptr != data) { | 44 | if (endptr != data && *endptr == '\0' && ts > 0 && ts < 1e13) { |
| 53 | long long now = esp_timer_get_time() / 1000ULL; | 45 | esp_mqtt_client_publish(event->client, PUB_TOPIC, data, |
| 54 | long long rtt = now - sent; | 46 | 0, 1, 0); |
| 55 | printf("RTT: %lld ms\n", rtt); | 47 | } else { |
| 48 | ESP_LOGW(TAG, "Nieprawidłowe dane, ignorowane: %s", | ||
| 49 | data); | ||
| 56 | } | 50 | } |
| 51 | |||
| 57 | break; | 52 | break; |
| 58 | } | 53 | } |
| 59 | 54 | ||
| 60 | default: | 55 | case MQTT_EVENT_DISCONNECTED: |
| 56 | ESP_LOGW(TAG, "MQTT disconnected"); | ||
| 61 | break; | 57 | break; |
| 62 | } | ||
| 63 | } | ||
| 64 | 58 | ||
| 65 | static void publisher_task(void *pvParameters) | 59 | case MQTT_EVENT_ERROR: |
| 66 | { | 60 | ESP_LOGE(TAG, "MQTT error occurred"); |
| 67 | while (1) { | 61 | break; |
| 68 | char buf[BUFFER_SIZE]; | 62 | |
| 69 | snprintf(buf, BUFFER_SIZE, "%lld", | 63 | default: |
| 70 | (long long)(esp_timer_get_time() / 1000ULL)); | 64 | break; |
| 71 | esp_mqtt_client_publish(client, PUB_TOPIC, buf, 0, 1, 0); | ||
| 72 | vTaskDelay(pdMS_TO_TICKS(PUBLISH_INTERVAL_MS)); | ||
| 73 | } | 65 | } |
| 74 | } | 66 | } |
| 75 | 67 | ||
| 68 | /** | ||
| 69 | * @brief Uruchamia klienta MQTT | ||
| 70 | */ | ||
| 76 | void mqtt_app_start(void) | 71 | void mqtt_app_start(void) |
| 77 | { | 72 | { |
| 78 | esp_mqtt_client_config_t mqtt_cfg = { | 73 | esp_mqtt_client_config_t mqtt_cfg = { |
| 79 | .broker.address.uri = MQTT_URI, | 74 | .broker.address.uri = MQTT_URI, |
| 80 | }; | 75 | }; |
| 76 | |||
| 81 | client = esp_mqtt_client_init(&mqtt_cfg); | 77 | client = esp_mqtt_client_init(&mqtt_cfg); |
| 82 | esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, | 78 | esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, |
| 83 | mqtt_event_handler, NULL); | 79 | mqtt_event_handler, NULL); |
| 84 | esp_mqtt_client_start(client); | 80 | esp_mqtt_client_start(client); |
| 85 | 81 | ||
| 86 | xTaskCreate(publisher_task, "publisher_task", PUBLISHER_TASK_STACK_SIZE, | 82 | ESP_LOGI(TAG, "MQTT client started"); |
| 87 | NULL, PUBLISHER_TASK_PRIORITY, NULL); | ||
| 88 | } | 83 | } |
