aboutsummaryrefslogtreecommitdiffstats
path: root/firmware/src/mqtt.c
diff options
context:
space:
mode:
authorFilip Wandzio <contact@philw.dev>2025-10-29 13:29:27 +0100
committerFilip Wandzio <contact@philw.dev>2025-10-29 13:29:27 +0100
commita27af14e815ef993e9a0c94e5bc8b32dbf989a94 (patch)
treefed25911f251f95c7f2c71d1d770a5013452664c /firmware/src/mqtt.c
parent4698910f842c322b80ebd1cf19a4e32c0fb2249d (diff)
downloade1-master.tar.gz
e1-master.zip
Solve baud detection bug, fix wifi searching task scheduling bug, improve documentation, implement additional mqtt topicsHEADmaster
Diffstat (limited to '')
-rw-r--r--firmware/src/mqtt.c28
1 files changed, 12 insertions, 16 deletions
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 @@
11static const char *TAG = "mqtt"; 11static const char *TAG = "mqtt";
12static esp_mqtt_client_handle_t client; 12static esp_mqtt_client_handle_t client;
13 13
14// Zliczniki i pomiary
15static long long last_sent = 0; 14static long long last_sent = 0;
16static long long last_rtt = 0; 15static long long last_rtt = 0;
17static long long last_rtt_prev = 0; 16static long long last_rtt_prev = 0;
@@ -20,7 +19,6 @@ static int received_count = 0;
20static unsigned long tx_bytes = 0; 19static unsigned long tx_bytes = 0;
21static unsigned long rx_bytes = 0; 20static unsigned long rx_bytes = 0;
22 21
23// Kanały pomiarów
24#define TOPIC_RTT "device/metrics/rtt" 22#define TOPIC_RTT "device/metrics/rtt"
25#define TOPIC_JITTER "device/metrics/jitter" 23#define TOPIC_JITTER "device/metrics/jitter"
26#define TOPIC_LOSS "device/metrics/loss" 24#define TOPIC_LOSS "device/metrics/loss"
@@ -29,6 +27,9 @@ static unsigned long rx_bytes = 0;
29#define TOPIC_NET_TX "device/metrics/net_tx" 27#define TOPIC_NET_TX "device/metrics/net_tx"
30#define TOPIC_NET_RX "device/metrics/net_rx" 28#define TOPIC_NET_RX "device/metrics/net_rx"
31 29
30#define TOPIC_IN "device/echo/in"
31#define TOPIC_OUT "device/echo/out"
32
32static void mqtt_event_handler(void *handler_args, esp_event_base_t base, 33static void mqtt_event_handler(void *handler_args, esp_event_base_t base,
33 int32_t event_id, void *event_data) 34 int32_t event_id, void *event_data)
34{ 35{
@@ -37,13 +38,12 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base,
37 switch (event->event_id) { 38 switch (event->event_id) {
38 case MQTT_EVENT_CONNECTED: 39 case MQTT_EVENT_CONNECTED:
39 ESP_LOGI(TAG, "MQTT connected!"); 40 ESP_LOGI(TAG, "MQTT connected!");
40 esp_mqtt_client_subscribe(event->client, PUB_TOPIC, 1); 41 esp_mqtt_client_subscribe(event->client, TOPIC_IN, 1);
41 break; 42 break;
42 43
43 case MQTT_EVENT_DATA: { 44 case MQTT_EVENT_DATA: {
44 char topic[event->topic_len + 1]; 45 char topic[event->topic_len + 1];
45 char data[event->data_len + 1]; 46 char data[event->data_len + 1];
46
47 memcpy(topic, event->topic, event->topic_len); 47 memcpy(topic, event->topic, event->topic_len);
48 topic[event->topic_len] = '\0'; 48 topic[event->topic_len] = '\0';
49 memcpy(data, event->data, event->data_len); 49 memcpy(data, event->data, event->data_len);
@@ -61,8 +61,9 @@ static void mqtt_event_handler(void *handler_args, esp_event_base_t base,
61 last_rtt_prev = last_rtt; 61 last_rtt_prev = last_rtt;
62 last_rtt = rtt; 62 last_rtt = rtt;
63 received_count++; 63 received_count++;
64
64 esp_mqtt_client_publish( 65 esp_mqtt_client_publish(
65 event->client, SUB_TOPIC, data, 0, 1, 0); 66 event->client, TOPIC_OUT, data, 0, 1, 0);
66 tx_bytes += strlen(data); 67 tx_bytes += strlen(data);
67 } 68 }
68 } 69 }
@@ -91,7 +92,7 @@ static void mqtt_test_task(void *pvParameters)
91 last_sent = esp_timer_get_time() / 1000ULL; 92 last_sent = esp_timer_get_time() / 1000ULL;
92 char msg[32]; 93 char msg[32];
93 snprintf(msg, sizeof(msg), "%lld", last_sent); 94 snprintf(msg, sizeof(msg), "%lld", last_sent);
94 esp_mqtt_client_publish(client, PUB_TOPIC, msg, 0, 1, 0); 95 esp_mqtt_client_publish(client, TOPIC_IN, msg, 0, 1, 0);
95 tx_bytes += strlen(msg); 96 tx_bytes += strlen(msg);
96 sent_count++; 97 sent_count++;
97 vTaskDelay(pdMS_TO_TICKS(delay_ms)); 98 vTaskDelay(pdMS_TO_TICKS(delay_ms));
@@ -106,7 +107,6 @@ static void mqtt_metrics_task(void *pvParameters)
106 long long dt = (now - last_time) / 1000ULL; 107 long long dt = (now - last_time) / 1000ULL;
107 last_time = now; 108 last_time = now;
108 109
109 // RTT
110 if (last_rtt > 0) { 110 if (last_rtt > 0) {
111 char buf[32]; 111 char buf[32];
112 snprintf(buf, sizeof(buf), "%lld", last_rtt); 112 snprintf(buf, sizeof(buf), "%lld", last_rtt);
@@ -115,7 +115,6 @@ static void mqtt_metrics_task(void *pvParameters)
115 tx_bytes += strlen(buf); 115 tx_bytes += strlen(buf);
116 } 116 }
117 117
118 // Jitter
119 if (last_rtt_prev > 0) { 118 if (last_rtt_prev > 0) {
120 long long jitter = llabs(last_rtt - last_rtt_prev); 119 long long jitter = llabs(last_rtt - last_rtt_prev);
121 char buf[32]; 120 char buf[32];
@@ -125,23 +124,21 @@ static void mqtt_metrics_task(void *pvParameters)
125 tx_bytes += strlen(buf); 124 tx_bytes += strlen(buf);
126 } 125 }
127 126
128 // Packet loss 127 int loss =
129 int loss = sent_count > 0 ? (sent_count - received_count) * 128 (sent_count > 0)
130 100 / sent_count 129 ? ((sent_count - received_count) * 100 / sent_count)
131 : 0; 130 : 0;
132 char buf_loss[16]; 131 char buf_loss[16];
133 snprintf(buf_loss, sizeof(buf_loss), "%d", loss); 132 snprintf(buf_loss, sizeof(buf_loss), "%d", loss);
134 esp_mqtt_client_publish(client, TOPIC_LOSS, buf_loss, 0, 1, 0); 133 esp_mqtt_client_publish(client, TOPIC_LOSS, buf_loss, 0, 1, 0);
135 tx_bytes += strlen(buf_loss); 134 tx_bytes += strlen(buf_loss);
136 135
137 // Throughput
138 char buf_thr[16]; 136 char buf_thr[16];
139 snprintf(buf_thr, sizeof(buf_thr), "%d", received_count); 137 snprintf(buf_thr, sizeof(buf_thr), "%d", received_count);
140 esp_mqtt_client_publish(client, TOPIC_THROUGHPUT, buf_thr, 0, 1, 138 esp_mqtt_client_publish(client, TOPIC_THROUGHPUT, buf_thr, 0, 1,
141 0); 139 0);
142 tx_bytes += strlen(buf_thr); 140 tx_bytes += strlen(buf_thr);
143 141
144 // CPU usage
145 UBaseType_t free_heap = xPortGetFreeHeapSize(); 142 UBaseType_t free_heap = xPortGetFreeHeapSize();
146 UBaseType_t min_free_heap = xPortGetMinimumEverFreeHeapSize(); 143 UBaseType_t min_free_heap = xPortGetMinimumEverFreeHeapSize();
147 int cpu_load = 144 int cpu_load =
@@ -156,16 +153,15 @@ static void mqtt_metrics_task(void *pvParameters)
156 esp_mqtt_client_publish(client, TOPIC_CPU, buf_cpu, 0, 1, 0); 153 esp_mqtt_client_publish(client, TOPIC_CPU, buf_cpu, 0, 1, 0);
157 tx_bytes += strlen(buf_cpu); 154 tx_bytes += strlen(buf_cpu);
158 155
159 // Network TX/RX bytes
160 char buf_tx[32], buf_rx[32]; 156 char buf_tx[32], buf_rx[32];
161 snprintf(buf_tx, sizeof(buf_tx), "%lu", tx_bytes); 157 snprintf(buf_tx, sizeof(buf_tx), "%lu", tx_bytes);
162 snprintf(buf_rx, sizeof(buf_rx), "%lu", rx_bytes); 158 snprintf(buf_rx, sizeof(buf_rx), "%lu", rx_bytes);
163 esp_mqtt_client_publish(client, TOPIC_NET_TX, buf_tx, 0, 1, 0); 159 esp_mqtt_client_publish(client, TOPIC_NET_TX, buf_tx, 0, 1, 0);
164 esp_mqtt_client_publish(client, TOPIC_NET_RX, buf_rx, 0, 1, 0); 160 esp_mqtt_client_publish(client, TOPIC_NET_RX, buf_rx, 0, 1, 0);
165 161
166 // Reset liczniki na kolejny interwał
167 tx_bytes = 0; 162 tx_bytes = 0;
168 rx_bytes = 0; 163 rx_bytes = 0;
164 sent_count = 0;
169 received_count = 0; 165 received_count = 0;
170 166
171 vTaskDelay(pdMS_TO_TICKS(1000)); 167 vTaskDelay(pdMS_TO_TICKS(1000));