From 642c019076d523b3bfeffc180ec0933a3436da04 Mon Sep 17 00:00:00 2001 From: Yellowcooln <12516003+yellowcooln@users.noreply.github.com> Date: Sun, 14 Jun 2026 19:32:41 -0400 Subject: [PATCH] fix: preserve modem GPS satellites in view --- repeater/data_acquisition/gps_service.py | 22 ++++++++++++++++++++++ tests/test_gps_service.py | 24 +++++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/repeater/data_acquisition/gps_service.py b/repeater/data_acquisition/gps_service.py index 3a9ba13..0aa4ec8 100644 --- a/repeater/data_acquisition/gps_service.py +++ b/repeater/data_acquisition/gps_service.py @@ -338,6 +338,28 @@ class NMEAParser: in_view = _to_int(satellites.get("in_view_count", satellites.get("satellites_in_view"))) if in_view is not None: self.satellites["in_view_count"] = in_view + satellite_details = satellites.get("in_view") + if isinstance(satellite_details, list): + normalized = [] + for satellite in satellite_details: + if not isinstance(satellite, dict): + continue + prn = satellite.get("prn", satellite.get("id")) + if prn in (None, ""): + continue + normalized.append( + { + "prn": str(prn), + "elevation_degrees": _to_int( + satellite.get("elevation_degrees", satellite.get("elevation")) + ), + "azimuth_degrees": _to_int( + satellite.get("azimuth_degrees", satellite.get("azimuth")) + ), + "snr_db": _to_float(satellite.get("snr_db", satellite.get("snr"))), + } + ) + self.satellites["in_view"] = normalized for key in ("datetime_utc", "utc_time", "date"): value = time_data.get(key) or payload.get(key) diff --git a/tests/test_gps_service.py b/tests/test_gps_service.py index 605c572..a99b9f7 100644 --- a/tests/test_gps_service.py +++ b/tests/test_gps_service.py @@ -133,7 +133,24 @@ def test_gps_service_modem_http_source_reads_generic_modem_gps(monkeypatch): "longitude": -71.05888, "altitude_m": 12.5, }, - "satellites": {"used_count": 9, "in_view_count": 14}, + "satellites": { + "used_count": 9, + "in_view_count": 14, + "in_view": [ + { + "prn": "04", + "elevation_degrees": 77, + "azimuth_degrees": 45, + "snr_db": 42, + }, + { + "prn": "05", + "elevation_degrees": 13, + "azimuth_degrees": 180, + "snr_db": 35, + }, + ], + }, "time": {"datetime_utc": "2026-06-14T18:25:30+00:00"}, }, } @@ -188,6 +205,11 @@ def test_gps_service_modem_http_source_reads_generic_modem_gps(monkeypatch): assert snapshot["fix"]["quality"] == 1 assert snapshot["satellites"]["used_count"] == 9 assert snapshot["satellites"]["in_view_count"] == 14 + assert snapshot["satellites"]["in_view"] == [ + {"prn": "04", "elevation_degrees": 77, "azimuth_degrees": 45, "snr_db": 42.0}, + {"prn": "05", "elevation_degrees": 13, "azimuth_degrees": 180, "snr_db": 35.0}, + ] + assert snapshot["satellites"]["snr"] == {"min": 35.0, "max": 42.0, "avg": 38.5} assert snapshot["time"]["datetime_utc"] == "2026-06-14T18:25:30+00:00"