Commit Graph

565 Commits

Author SHA1 Message Date
James Smith b23f63cb89 Stabilize satellite pass target switching 2026-03-19 16:41:55 +00:00
James Smith afc8c2e84f Wire satellite capture handoff 2026-03-19 15:59:58 +00:00
James Smith 30960e6d6f Harden satellite target switching 2026-03-19 15:33:20 +00:00
James Smith 572d6e3215 Fix satellite target switching regression 2026-03-19 14:55:48 +00:00
James Smith 17e2ca0c6a Stabilize satellite dashboard refreshes 2026-03-19 14:26:08 +00:00
James Smith 8191966e8e Fix satellite dashboard startup helpers 2026-03-19 13:49:20 +00:00
James Smith 19c9b4eaf3 Stabilize satellite dashboard startup 2026-03-19 13:23:52 +00:00
James Smith 4268732d58 Restore satellite mission controls 2026-03-19 13:06:26 +00:00
James Smith b746f9689c Move satellite packets into map console 2026-03-19 12:17:28 +00:00
James Smith 0f56fa1a13 Rework satellite dashboard mission layout 2026-03-19 12:01:59 +00:00
James Smith 089687ca31 Cache satellite pass predictions 2026-03-19 11:27:38 +00:00
James Smith c789646f24 Fix dashboard startup regressions and mode utilities 2026-03-19 10:37:21 +00:00
James Smith 4fc35c094c Delay welcome page GPS and voice streams 2026-03-19 09:34:33 +00:00
James Smith 94e9d65fad Defer hidden dashboard startup work 2026-03-19 09:19:36 +00:00
James Smith 7587c1d009 Lazy-load satellite iframe on main dashboard 2026-03-19 09:05:48 +00:00
James Smith b8b661b3be Revert "Retry ADS-B map bootstrap safely"
This reverts commit 2c66a2fe4a.
2026-03-19 08:54:59 +00:00
James Smith 2c66a2fe4a Retry ADS-B map bootstrap safely 2026-03-19 08:52:08 +00:00
James Smith 665067e399 Retry slow SDR detection in ADS-B 2026-03-19 08:43:20 +00:00
James Smith 0ea03c8f93 Harden ADS-B dashboard bootstrap 2026-03-19 08:35:43 +00:00
James Smith 0f161f96d3 Revert "Keep ADS-B on local startup tiles"
This reverts commit 2ceeb520e9.
2026-03-19 08:32:10 +00:00
James Smith 2ceeb520e9 Keep ADS-B on local startup tiles 2026-03-19 08:28:13 +00:00
James Smith 274824fe68 Keep ADS-B fallback grid until tiles load 2026-03-19 08:18:00 +00:00
James Smith 09e0ddef79 Ignore aborted satellite pass requests 2026-03-19 08:04:36 +00:00
James Smith 5486656782 Defer noncritical ADS-B startup work 2026-03-19 08:01:33 +00:00
James Smith be4c9a87ad Reduce repeated ADS-B device probes 2026-03-19 07:55:19 +00:00
James Smith 1be531a263 Skip pre-stop on dashboard navigation 2026-03-19 07:47:46 +00:00
James Smith b00638f794 Stop clearing browser caches on load 2026-03-19 07:43:32 +00:00
James Smith 7c9df8beb3 Revert "Reduce ADS-B map layout shift"
This reverts commit af475ad6ea.
2026-03-19 00:17:22 +00:00
James Smith af475ad6ea Reduce ADS-B map layout shift 2026-03-19 00:11:29 +00:00
James Smith 853f1da581 Harden APRS mode teardown and map fallback 2026-03-19 00:06:47 +00:00
James Smith 412bdde2d9 Disable stale dashboard service worker cache 2026-03-19 00:01:47 +00:00
James Smith 42d2371ba6 Revert "Stage dashboard startup requests"
This reverts commit ab3c581ab0.
2026-03-18 23:57:37 +00:00
James Smith ab3c581ab0 Stage dashboard startup requests 2026-03-18 23:53:54 +00:00
James Smith 03a0f13772 Open satellite dashboard in new tab 2026-03-18 23:41:29 +00:00
James Smith 8927f50696 Use direct satellite dashboard links 2026-03-18 23:35:24 +00:00
James Smith a8001604d7 Unify satellite navigation to dashboard 2026-03-18 23:29:09 +00:00
James Smith 4dc1cd43e4 Stabilize satellite dashboard sidebar panels 2026-03-18 23:17:02 +00:00
James Smith 01ed00805e Refresh embedded satellite dashboard state 2026-03-18 23:09:07 +00:00
James Smith a9eef9f949 Harden embedded satellite dashboard loading 2026-03-18 23:00:21 +00:00
James Smith 77cfed11d5 Fix satellite dashboard refresh flows 2026-03-18 22:53:36 +00:00
James Smith 694e16da59 Clear stale telemetry and add transmitter fallbacks 2026-03-18 22:43:40 +00:00
James Smith 75137646fc Harden satellite dashboard telemetry loading 2026-03-18 22:35:31 +00:00
James Smith c1f4c2310e Align Meteor tracking defaults 2026-03-18 22:28:04 +00:00
James Smith 4deb9603db Improve persisted Meteor status in dashboard 2026-03-18 22:25:20 +00:00
James Smith 4df59d0fad Persist Meteor decode job state 2026-03-18 22:20:24 +00:00
James Smith f5a2383c04 Add Meteor LRPT ground station pipeline 2026-03-18 22:01:52 +00:00
James Smith bf2f0b4a7f Harden dashboard loading against network stalls 2026-03-18 21:33:32 +00:00
James Smith 963fdaf013 Fix mode switch re-entry regressions 2026-03-18 21:26:01 +00:00
James Smith c4b3fcbd51 Add observation profile management UI to Ground Station panel
- OBSERVATION PROFILES section with list of configured satellites
- + ADD button opens inline form pre-filled from currently selected satellite
  and SatNOGS transmitter data (frequency, decoder type auto-detected)
- EDIT / ✕ buttons per profile row
- Form fields: frequency, decoder (FM/AFSK/GMSK/BPSK/IQ-only), min elevation,
  gain, record IQ checkbox
- UPCOMING PASSES section below profiles with friendlier empty-state message
- gsOnSatelliteChange hook updates form when satellite dropdown changes
- CSS for .gs-form-row, .gs-profile-item, .gs-form-label

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 17:52:25 +00:00
James Smith a45a4d8ad5 Add ground station automation with 6-phase implementation
Phase 1 - Automated observation engine:
- utils/ground_station/scheduler.py: GroundStationScheduler fires at AOS/LOS,
  claims SDR, manages IQBus lifecycle, emits SSE events
- utils/ground_station/observation_profile.py: ObservationProfile dataclass + DB CRUD
- routes/ground_station.py: REST API for profiles, scheduler, observations, recordings,
  rotator; SSE stream; /ws/satellite_waterfall WebSocket
- DB tables: observation_profiles, ground_station_observations, ground_station_events,
  sigmf_recordings (added to utils/database.py init_db)
- app.py: ground_station_queue, WebSocket init, scheduler startup in _deferred_init
- routes/__init__.py: register ground_station_bp

Phase 2 - Doppler correction:
- utils/doppler.py: generalized DopplerTracker extracted from sstv_decoder.py;
  accepts satellite name or raw TLE tuple; thread-safe; update_tle() method
- utils/sstv/sstv_decoder.py: replace inline DopplerTracker with import from utils.doppler
- Scheduler runs 5s retune loop; calls rotator.point_to() if enabled

Phase 3 - IQ recording (SigMF):
- utils/sigmf.py: SigMFWriter writes .sigmf-data + .sigmf-meta; disk-free guard (500MB)
- utils/ground_station/consumers/sigmf_writer.py: SigMFConsumer wraps SigMFWriter

Phase 4 - Multi-decoder IQ broadcast pipeline:
- utils/ground_station/iq_bus.py: IQBus single-producer fan-out; IQConsumer Protocol
- utils/ground_station/consumers/waterfall.py: CU8→FFT→binary frames
- utils/ground_station/consumers/fm_demod.py: CU8→FM demod (numpy)→decoder subprocess
- utils/ground_station/consumers/gr_satellites.py: CU8→cf32→gr_satellites (optional)

Phase 5 - Live spectrum waterfall:
- static/js/modes/ground_station_waterfall.js: /ws/satellite_waterfall canvas renderer
- Waterfall panel in satellite dashboard sidebar, auto-shown on iq_bus_started SSE event

Phase 6 - Antenna rotator control (optional):
- utils/rotator.py: RotatorController TCP client for rotctld (Hamlib line protocol)
- Rotator panel in satellite dashboard; silently disabled if rotctld unreachable

Also fixes pre-existing test_weather_sat_predict.py breakage:
- utils/weather_sat_predict.py: rewritten with self-contained skyfield implementation
  using find_discrete (matching what committed tests expected); adds _format_utc_iso
- tests/test_weather_sat_predict.py: add _MOCK_WEATHER_SATS and @patch decorators
  for tests that assumed NOAA-18 active (decommissioned Jun 2025, now active=False)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 17:36:55 +00:00