diff options
Diffstat (limited to 'firmware/src/mqtt.c')
| -rw-r--r-- | firmware/src/mqtt.c | 28 |
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 @@ | |||
| 11 | static const char *TAG = "mqtt"; | 11 | static const char *TAG = "mqtt"; |
| 12 | static esp_mqtt_client_handle_t client; | 12 | static esp_mqtt_client_handle_t client; |
| 13 | 13 | ||
| 14 | // Zliczniki i pomiary | ||
| 15 | static long long last_sent = 0; | 14 | static long long last_sent = 0; |
| 16 | static long long last_rtt = 0; | 15 | static long long last_rtt = 0; |
| 17 | static long long last_rtt_prev = 0; | 16 | static long long last_rtt_prev = 0; |
| @@ -20,7 +19,6 @@ static int received_count = 0; | |||
| 20 | static unsigned long tx_bytes = 0; | 19 | static unsigned long tx_bytes = 0; |
| 21 | static unsigned long rx_bytes = 0; | 20 | static 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 | |||
| 32 | static void mqtt_event_handler(void *handler_args, esp_event_base_t base, | 33 | static 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)); |
