From a27af14e815ef993e9a0c94e5bc8b32dbf989a94 Mon Sep 17 00:00:00 2001 From: Filip Wandzio Date: Wed, 29 Oct 2025 13:29:27 +0100 Subject: Solve baud detection bug, fix wifi searching task scheduling bug, improve documentation, implement additional mqtt topics --- firmware/src/mqtt.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) (limited to 'firmware/src/mqtt.c') diff --git a/firmware/src/mqtt.c b/firmware/src/mqtt.c index b3553eb..a726534 100644 --- a/firmware/src/mqtt.c +++ b/firmware/src/mqtt.c @@ -11,7 +11,6 @@ static const char *TAG = "mqtt"; static esp_mqtt_client_handle_t client; -// Zliczniki i pomiary static long long last_sent = 0; static long long last_rtt = 0; static long long last_rtt_prev = 0; @@ -20,7 +19,6 @@ static int received_count = 0; static unsigned long tx_bytes = 0; static unsigned long rx_bytes = 0; -// Kanały pomiarów #define TOPIC_RTT "device/metrics/rtt" #define TOPIC_JITTER "device/metrics/jitter" #define TOPIC_LOSS "device/metrics/loss" @@ -29,6 +27,9 @@ static unsigned long rx_bytes = 0; #define TOPIC_NET_TX "device/metrics/net_tx" #define TOPIC_NET_RX "device/metrics/net_rx" +#define TOPIC_IN "device/echo/in" +#define TOPIC_OUT "device/echo/out" + static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) { @@ -37,13 +38,12 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base, switch (event->event_id) { case MQTT_EVENT_CONNECTED: ESP_LOGI(TAG, "MQTT connected!"); - esp_mqtt_client_subscribe(event->client, PUB_TOPIC, 1); + esp_mqtt_client_subscribe(event->client, TOPIC_IN, 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); @@ -61,8 +61,9 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base, last_rtt_prev = last_rtt; last_rtt = rtt; received_count++; + esp_mqtt_client_publish( - event->client, SUB_TOPIC, data, 0, 1, 0); + event->client, TOPIC_OUT, data, 0, 1, 0); tx_bytes += strlen(data); } } @@ -91,7 +92,7 @@ static void mqtt_test_task(void *pvParameters) last_sent = esp_timer_get_time() / 1000ULL; char msg[32]; snprintf(msg, sizeof(msg), "%lld", last_sent); - esp_mqtt_client_publish(client, PUB_TOPIC, msg, 0, 1, 0); + esp_mqtt_client_publish(client, TOPIC_IN, msg, 0, 1, 0); tx_bytes += strlen(msg); sent_count++; vTaskDelay(pdMS_TO_TICKS(delay_ms)); @@ -106,7 +107,6 @@ static void mqtt_metrics_task(void *pvParameters) long long dt = (now - last_time) / 1000ULL; last_time = now; - // RTT if (last_rtt > 0) { char buf[32]; snprintf(buf, sizeof(buf), "%lld", last_rtt); @@ -115,7 +115,6 @@ static void mqtt_metrics_task(void *pvParameters) tx_bytes += strlen(buf); } - // Jitter if (last_rtt_prev > 0) { long long jitter = llabs(last_rtt - last_rtt_prev); char buf[32]; @@ -125,23 +124,21 @@ static void mqtt_metrics_task(void *pvParameters) tx_bytes += strlen(buf); } - // Packet loss - int loss = sent_count > 0 ? (sent_count - received_count) * - 100 / sent_count - : 0; + int loss = + (sent_count > 0) + ? ((sent_count - received_count) * 100 / sent_count) + : 0; char buf_loss[16]; snprintf(buf_loss, sizeof(buf_loss), "%d", loss); esp_mqtt_client_publish(client, TOPIC_LOSS, buf_loss, 0, 1, 0); tx_bytes += strlen(buf_loss); - // Throughput char buf_thr[16]; snprintf(buf_thr, sizeof(buf_thr), "%d", received_count); esp_mqtt_client_publish(client, TOPIC_THROUGHPUT, buf_thr, 0, 1, 0); tx_bytes += strlen(buf_thr); - // CPU usage UBaseType_t free_heap = xPortGetFreeHeapSize(); UBaseType_t min_free_heap = xPortGetMinimumEverFreeHeapSize(); int cpu_load = @@ -156,16 +153,15 @@ static void mqtt_metrics_task(void *pvParameters) esp_mqtt_client_publish(client, TOPIC_CPU, buf_cpu, 0, 1, 0); tx_bytes += strlen(buf_cpu); - // Network TX/RX bytes char buf_tx[32], buf_rx[32]; snprintf(buf_tx, sizeof(buf_tx), "%lu", tx_bytes); snprintf(buf_rx, sizeof(buf_rx), "%lu", rx_bytes); esp_mqtt_client_publish(client, TOPIC_NET_TX, buf_tx, 0, 1, 0); esp_mqtt_client_publish(client, TOPIC_NET_RX, buf_rx, 0, 1, 0); - // Reset liczniki na kolejny interwał tx_bytes = 0; rx_bytes = 0; + sent_count = 0; received_count = 0; vTaskDelay(pdMS_TO_TICKS(1000)); -- cgit v1.2.3