Troubleshooting¶
This page covers the most common cases where OrbitDeck starts but does not behave as expected.
The server starts, but the UI looks wrong or old¶
Likely causes:
- cached browser assets
- a stale lite service worker
- the backend was restarted but the browser still has older JS/CSS
Try:
- hard reload the page
- reopen
/liteor/ - if testing lite, revisit
/lite/settingsand/lite - restart the FastAPI process if frontend and backend changed together
Lite shows cached data instead of live data¶
This is expected when the phone cannot currently reach the Pi.
Check:
- whether the Pi is reachable on the network
- whether the cached snapshot age warning says the data is stale
- whether
Sync Nowsucceeds once connectivity returns
Notes:
- after 12 hours, lite warns strongly that data is stale
- after 24 hours, pass timing should be treated as reference only
No passes appear in lite¶
Check:
- tracked satellites were actually saved in
/lite/settings - the selected location is correct
- the satellites you chose actually have upcoming passes from that location
- lite is not outside the next qualifying pass window
Lite and rotator apply filtering rules to the queue output.
The pass list is empty in kiosk¶
Check the pass filter profile in /settings.
IssOnlywill intentionally hide non-ISS passesFavoritesonly shows satellites selected in that profile
GPS mode is selected, but nothing updates¶
OrbitDeck stores GPS configuration and uses GPS location state if it is present. This repo does not include a GPS daemon or reader process.
So verify:
/api/v1/settings/gpscontains the connection settings you expect/api/v1/locationshowssource_modeset togpsgps_locationis actually being populated by whatever external process you are using
If no process is updating gps_location, OrbitDeck has nothing live to resolve.
AMSAT status does not refresh immediately¶
That can be normal.
OrbitDeck intentionally guards AMSAT refreshes to a minimum 12-hour interval. A manual refresh may still leave AMSAT data unchanged if the guard window has not expired.
/radio connects, but Poll Rig fails¶
Treat this as a CI-V readback problem, not just a UI problem.
Check:
- the serial device path is correct
- the configured
civ_addressmatches the rig - the configured baud rate matches the rig
- the rig is actually exposing the CI-V port you selected
Important distinction:
- a successful connect only proves that OrbitDeck opened the serial device
- a successful poll proves that OrbitDeck exchanged usable CI-V state with the rig
APRS connects, but no packets decode or transmit¶
Check:
- the station callsign and SSID are set
- the APRS operating mode and target selection are correct
- the transport mode and rig settings match the intended USB or Wi-Fi path
runtime.modem_state,runtime.kiss_connected, andruntime.last_erroron/api/v1/aprs/state
Important distinction:
connected: truemeans the APRS service started its control path- packet decode and packet transmit still depend on the modem path, target gating, and transport-specific audio/PTT behavior
Dire Wolf status says the binary is missing¶
Check:
GET /api/v1/aprs/direwolf/status- whether
direwolfis onPATHor the configured binary path is valid - on macOS, whether Homebrew is installed before using the install action
If the binary is missing:
- use the install action in
/aprs - or run
POST /api/v1/aprs/direwolf/install-terminalto launch the terminal-based install helper
Wi-Fi APRS connects, but the IC-705 does not behave correctly¶
Check:
- the radio Wi-Fi host, credentials, and control port
- that the IC-705 is reachable on the network
- that the radio is in a compatible saved packet/data profile before connect
transport_mode,control_endpoint,audio_rx_active, andaudio_tx_activein the APRS runtime payload
Notes:
- Wi-Fi APRS does not use local OS audio devices for the active transport path
- OrbitDeck uses decode-only Dire Wolf receive plus native Bell 202 AFSK transmit over the IC-705 LAN session
IC-705 Wi-Fi connect fails before the handshake starts¶
OrbitDeck now performs a short reachability preflight before IC-705 Wi-Fi radio and APRS connects.
Check:
- the configured
wifi_hostis correct - the radio is powered on and attached to the same network
- the server host can reach the radio IP directly
If the preflight fails, the API returns a clear error such as did not respond to ping instead of attempting the full Wi-Fi session setup.
Satellite APRS target is selected, but transmit remains blocked¶
Check the APRS runtime target fields:
can_transmittx_block_reasonpass_activepass_aospass_los
Common causes:
- the selected satellite pass is not currently active
- the selected target has no usable APRS channel for the current pass
- the target was resolved from stale pass data and needs a cache rebuild
Use POST /api/v1/passes/cache/refresh if target timing no longer matches current pass state.
APRS log export is empty or shorter than expected¶
Check:
log_enabledis still true in APRS settingslog_max_recordsis not too small for the test you are running- the receive log has not been cleared recently
The local APRS receive log lives at data/aprs/received_log.jsonl and only stores packets received while logging is enabled.
Stop TX was needed after an APRS session¶
This indicates OrbitDeck believed the transport or sidecar might still be keyed after disconnect or send activity.
If this happens:
- use
Stop TX - disconnect APRS cleanly
- reconnect only after the runtime state settles
Then inspect:
last_erroroutput_tail- the current transport mode
timeout waiting for CI-V response to 0x25¶
This can occur after a manual write on the IC-705 path.
Known behavior:
- the rig may still have applied the write successfully
- OrbitDeck may keep the last known good VFO targets in runtime
- a later poll can still recover normal readback
If this appears:
- verify the rig front panel changed as expected
- poll again
- reconnect if the controller state no longer looks trustworthy
The rig writes the pair, but the runtime still looks stale¶
Check:
- poll again after the write
- reload
/radioif the page is showing cached frontend code - confirm the response payload for the write actually came from the endpoint you used
The /radio page now reports the exact endpoint and response body so the request path can be verified without guessing.
The selected pass says it is not eligible for radio control¶
The rotator radio workflow currently only accepts:
- VHF
144.000 MHzto148.000 MHz - UHF
420.000 MHzto450.000 MHz
If both sides fall outside that range, OrbitDeck marks the session ineligible and returns eligibility_reason.
A test session ends, but the rig does not return to the earlier state¶
OrbitDeck attempts to restore a previously captured snapshot when a test session is confirmed, stopped, or ends after LOS.
If restore fails:
- the request still completes
- the session moves to a released state
- the failure is recorded in
runtime.last_error
This is intentional so the UI does not crash just because restore failed.
The rotator is pinned on radio control when you expected normal scene rotation¶
That means a radio-control session is still active or released-but-pinned.
Use:
Back to Rotatorin the rotator UI- or
POST /api/v1/radio/session/clear
to clear the selected session and return to the normal rotator flow.
ModuleNotFoundError: No module named 'app'¶
If this happens when launching from the repo root, you are probably not running the repo’s intended launcher path or interpreter.
Preferred launch commands:
python3 scripts/run_tracker.py --mode windowed --ui kiosk --host 127.0.0.1 --port 8000
or:
uvicorn app.main:app --host 127.0.0.1 --port 8000
The docs site builds locally but GitHub Pages is blank¶
Check:
- the
docsGitHub Actions workflow completed successfully - Pages is configured to use
GitHub Actions - the repository Pages URL is the one configured in
mkdocs.yml
The current docs deployment model does not use a gh-pages branch. It uses the GitHub Actions Pages artifact flow.