Configuration Reference

All fields in /etc/deskradar/config.json.

The configuration file is read at startup by the main deskradar app and validated by a Pydantic model. If the file is missing or contains invalid values, the app will exit with an error. Changes take effect after restarting the service (sudo systemctl restart deskradar). The web configurator at http://deskradar.local:5000/config handles saving and restarting automatically.

Example File

{
  "LAT": 50,
  "LON": 0,
  "GET_URL": "http://127.0.0.1:8080/data/aircraft.json",
  "MATRIX_HTTP_URL": "http://10.42.0.50",
  "LCD_SEND_URL": "http://0.0.0.0:8010/display",
  "MATRIX_SIZE_PX": 64,
  "DISPLAY_RADIUS_NM": 25,
  "DRAW_RETICULE": true,
  "MAX_HISTORY": 20,
  "POLL_CADENCE": 1,
  "FADE_FACTOR": 0.95,
  "MIN_ALT": 1000,
  "UNSEEN_MARK_SECS": 10,
  "MAX_UNSEEN_SECS": 20,
  "LONLAT_DECIMALS": 3,
  "MATRIX_HTTP_TIMEOUT": 2,
  "LCD_TIMEOUT": 1,
  "SHOW_CLOSEST": true,
  "CLOSEST_COLOUR": {"r": 255, "g": 255, "b": 255},
  "LOG_LEVEL": "info"
}

Location

KeyTypeDefaultDescription
LATfloat50 Latitude of the display center in decimal degrees. Aircraft are plotted relative to this point.
LONfloat0 Longitude of the display center in decimal degrees.

Network URLs

KeyTypeDefaultDescription
GET_URLstringhttp://127.0.0.1:8080/data/aircraft.json dump1090 API endpoint to poll for aircraft data. Usually local to the Pi.
MATRIX_HTTP_URLstringset by boot_check Base URL of the MatrixPortal S3. Written automatically at boot by resolving deskradar-portal.local. Format: http://<ip> (no trailing slash, no port — port 80 is used).
LCD_SEND_URLstringhttp://0.0.0.0:8010/display URL of the LCD service endpoint. Points to the local deskradar-lcd FastAPI service.
GET_URL, LCD_SEND_URL, and MATRIX_HTTP_URL are hidden from the web configurator UI — they are managed by the system or rarely need manual changes.

Display

KeyTypeDefaultDescription
MATRIX_SIZE_PXint64 Pixel dimensions of the LED matrix (width and height). The matrix is assumed to be square.
DISPLAY_RADIUS_NMfloat25 Radius of the displayed area in nautical miles, centered on LAT/LON. Aircraft beyond this radius are not shown.
DRAW_RETICULEbooltrue Draw a crosshair/reticule at the display center to indicate the reference location.
SHOW_CLOSESTbooltrue Highlight the nearest aircraft in CLOSEST_COLOUR and display its callsign on the LCD.
CLOSEST_COLOURobject{"r":255,"g":255,"b":255} RGB color used to highlight the closest aircraft. Must include r, g, and b keys with values 0–255.

Tracking

KeyTypeDefaultDescription
MAX_HISTORYint20 Maximum number of historical position points retained per aircraft track. Older points are dropped from the tail of the list.
POLL_CADENCEfloat1 Seconds between polling cycles. Lower values increase responsiveness but also CPU and network load.
FADE_FACTORfloat0.95 Multiplier applied to trail point colors each cycle (0.0–1.0). 0.95 means each point's brightness drops by 5% per second at 1-second cadence. Lower values fade trails faster.
MIN_ALTint1000 Minimum altitude in feet for an aircraft to appear on screen. Filters out ground traffic and very-low-altitude aircraft.
UNSEEN_MARK_SECSint10 Seconds without a new position update before an aircraft's trail is colored red (stale indicator).
MAX_UNSEEN_SECSint20 Seconds without any update before an aircraft is removed from the display entirely.
LONLAT_DECIMALSint3 Decimal precision used when rounding lat/lon values during data processing. 3 gives ~110 m resolution.

Timeouts

KeyTypeDefaultDescription
MATRIX_HTTP_TIMEOUTint2 Seconds before HTTP requests to the MatrixPortal time out. Should be less than POLL_CADENCE to avoid blocking the loop.
LCD_TIMEOUTint1 Seconds before HTTP requests to the LCD service time out.

Logging

KeyTypeDefaultAllowed Values
LOG_LEVELstring"info" debug, info, warning, error, critical (case-insensitive)

Derived Fields (read-only)

These are computed from other config values and cannot be set manually. They are calculated at startup by the Pydantic model:

FieldDescription
THOLDSTuple of 4 values: (lat_min, lat_max, lon_min, lon_max) computed from LAT, LON, and DISPLAY_RADIUS_NM using geopy's geodesic distance.
LAT_MIN / LAT_MAXSouthern and northern latitude bounds of the display area.
LON_MIN / LON_MAXWestern and eastern longitude bounds of the display area.
LAT_RANGENumPy linspace array of 64 latitude values evenly spanning LAT_MIN to LAT_MAX. Used for pixel mapping.
LON_RANGENumPy linspace array of 64 longitude values evenly spanning LON_MIN to LON_MAX.

Web Configurator

All fields except GET_URL, LCD_SEND_URL, and MATRIX_HTTP_URL are editable via the web UI at http://deskradar.local:5000/config.

The UI handles type coercion automatically — integer fields stay integers, floats stay floats. The CLOSEST_COLOUR field is presented as a color picker and converted between hex and RGB dict format transparently.