From f4ade738df59322272d21fdc3a10bb00241d8196 Mon Sep 17 00:00:00 2001 From: mikecarper Date: Thu, 22 Oct 2026 16:50:31 -0700 Subject: [PATCH] Add packed noise-floor telemetry history for both radio profiles --- .github/workflows/run-unit-tests.yml | 7 + docs/_javascript/telemetry_decoder.js | 222 ++++++++++-- docs/_stylesheets/telemetry_decoder.css | 32 ++ docs/cli_commands.md | 78 ++++- docs/telemetry_decoder.md | 53 ++- examples/simple_repeater/MyMesh.cpp | 56 ++- examples/simple_repeater/MyMesh.h | 5 + examples/simple_room_server/MyMesh.cpp | 29 +- examples/simple_room_server/MyMesh.h | 7 +- mkdocs.yml | 4 +- scripts/test_telemetry_decoder.js | 189 ++++++++++- src/Dispatcher.h | 10 + src/helpers/NoiseFloorHistory.h | 320 ++++++++++++++++++ src/helpers/NoiseFloorHistorySampler.h | 58 ++++ src/helpers/radiolib/CustomLR1110Wrapper.h | 5 +- src/helpers/radiolib/CustomLR1121Wrapper.h | 5 +- src/helpers/radiolib/CustomLR2021Wrapper.h | 5 +- src/helpers/radiolib/RadioLibWrappers.cpp | 13 + src/helpers/radiolib/RadioLibWrappers.h | 14 + test/fixtures/noise_floor_history/main.cpp | 303 +++++++++++++++++ test/fixtures/noise_floor_sampler/main.cpp | 297 ++++++++++++++++ .../telemetry_tx_persistence/fixture.cpp | 141 ++++++++ test/test_noise_floor_cli.py | 204 +++++++++++ test/test_noise_floor_history.py | 64 ++++ test/test_noise_floor_readings.py | 254 ++++++++++++++ test/test_noise_floor_rssi_errors.py | 117 +++++++ test/test_noise_floor_sampler.py | 70 ++++ test/test_radio_profile_scan.py | 1 + test/test_radio_receive_contract.py | 2 + test/test_radio_rx_activity_epoch.py | 1 + test/test_solarxiao_room.py | 4 +- test/test_telemetry_tx_persistence.py | 3 +- 32 files changed, 2520 insertions(+), 53 deletions(-) create mode 100644 src/helpers/NoiseFloorHistory.h create mode 100644 src/helpers/NoiseFloorHistorySampler.h create mode 100644 test/fixtures/noise_floor_history/main.cpp create mode 100644 test/fixtures/noise_floor_sampler/main.cpp create mode 100644 test/test_noise_floor_cli.py create mode 100644 test/test_noise_floor_history.py create mode 100644 test/test_noise_floor_readings.py create mode 100644 test/test_noise_floor_rssi_errors.py create mode 100644 test/test_noise_floor_sampler.py diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index fbe3ffc72..b4e9d5547 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -426,6 +426,13 @@ jobs: - name: Verify telemetry schedule input and persistence rollback run: python3 -B test/test_telemetry_tx_command.py -v + - name: Verify packed noise history, fresh measurements and sampling + working-directory: test + run: >- + python3 -B -m unittest + test_noise_floor_history test_noise_floor_readings test_noise_floor_sampler + test_noise_floor_rssi_errors test_noise_floor_cli -v + - name: Verify transactional telemetry preferences and legacy route recovery run: python3 -B test/test_telemetry_tx_persistence.py -v diff --git a/docs/_javascript/telemetry_decoder.js b/docs/_javascript/telemetry_decoder.js index 22f133a66..7e2c39389 100644 --- a/docs/_javascript/telemetry_decoder.js +++ b/docs/_javascript/telemetry_decoder.js @@ -5,9 +5,16 @@ const TYPE_VOLTAGE = 0x12; const TYPE_GPS = 0x13; const TYPE_EXTERNAL_VOLTAGE = 0x14; + const TYPE_NOISE = 0x15; + const TYPE_NOISE_SECONDARY = 0x16; const BINARY_TEMPERATURE_MAGIC = "TTB1"; const BINARY_VOLTAGE_MAGIC = "TVB1"; const BINARY_EXTERNAL_VOLTAGE_MAGIC = "IVB1"; + const BINARY_NOISE_MAGIC = "N1B1"; + const BINARY_NOISE_SECONDARY_MAGIC = "N2B1"; + const NOISE_BITS = 5; + const NOISE_CLI_MAX_SAMPLES = 176; + const NOISE_BINARY_MAX_SAMPLES = 255; const BINARY_HEADER_SIZE = 19; const BINARY_MAX_SAMPLES = 165; const BINARY_EXTERNAL_HEADER_SIZE = 20; @@ -25,6 +32,8 @@ + + @@ -60,6 +69,7 @@
+