Skip to main content

Planes-overhead ADS-B flight tracker widget for led-ticker.

Project description

led-ticker-flight

A planes-overhead ADS-B flight tracker plugin for led-ticker. It contributes a single flight.overhead widget that shows nearby aircraft — callsign, aircraft type, altitude + climb/descend cue, ground speed, track, and distance/bearing — pulled from the free, keyless adsb.lol API, in the visual language of an airport departures board.

The widget renders in one of three layouts depending on sign shape — a scrolling single-line crawl on a scale-1 sign, or a hi-res single-flight hero / wide multi-column dashboard on a scale-4 sign — chosen automatically or pinned explicitly. See design/README.md for the normative visual spec (palette, airline tail-fin marks, exact layout geometry) this widget faithfully reproduces. Several deliberate divergences from the prototype are documented in code: ticker back-fill for seamless looping, the empty-state label's fit-fallback, and a procedural 7×3 level bar in place of a glyph (each chosen where the prototype's own behavior contradicted its design prose or the hi-res charset it draws from); the prototype's blinking live-refresh pulse dot is dropped entirely (no other led-ticker widget carries an unexplained status indicator, and poll health is already visible in the web UI's Status tab); and hero/dashboard fade the whole card through black for 200ms at each end of a flight's dwell window when 2+ flights are tracked (a hardware-review finding — a hard cut between rotating flights read as a glitch on the physical panel; see Layouts below).

Prerequisites

  • A working led-ticker install.
  • Internet access on the Pi (the widget polls the adsb.lol API — no API key required).
  • The latitude/longitude of your receiver (or antenna/home location) — or set demo = true to preview with a bundled sample feed instead.

Install

The widget auto-registers via the led_ticker.plugins entry point — once the package is installed, no [plugins] config change is needed.

Into a containerized led-ticker (recommended): add this package to config/requirements-plugins.txt (copy it from config/requirements-plugins.example.txt), then rebuild:

led-ticker-flight
# in your led-ticker checkout
docker compose up -d --build

Standalone (a venv that already has led-ticker):

pip install led-ticker-flight

See the led-ticker Plugins docs for the constraint-based install the Docker image uses.

Configuration

[[playlist.section]]
[[playlist.section.widget]]
type = "flight.overhead"
latitude = 40.7128
longitude = -74.0060
radius_km = 30

A complete, runnable example (with every field commented) lives at examples/flight.toml.

Field reference

Option Type Default Description
latitude float required (unless demo = true) Receiver location, -90 to 90.
longitude float required (unless demo = true) Receiver location, -180 to 180.
radius_km int 30 Search radius in kilometers, 2-460. Converted to nautical miles for the adsb.lol call.
layout string "auto" "auto" | "ticker" | "hero" | "dashboard". auto picks by sign shape (see Layouts below). An explicit "hero"/"dashboard" on a scale-1 sign falls back to ticker — hi-res is impossible there.
max_aircraft int 4 Cap on tracked aircraft, 1-8. The closest N (by distance) are kept.
interval float 10.0 Seconds between adsb.lol polls, 5-3600.
demo bool false Render the bundled 4-flight sample feed instead of calling the network. No coordinates needed.

No font/color knobs — the design handoff pins them (see design/README.md); the semantic palette (ident white, altitude amber, speed green, track cyan, distance magenta, climb/descend cues) and airline tail-fin colors are fixed across every layout and sign.

Layouts

  • ticker — a single-line, continuously-scrolling BDF crawl through every tracked aircraft's full field set, dot-separated. Targets scale-1 signs (smallsign) where hi-res drawing isn't available.
  • hero — one flight at a time, shown large: a swept tail-fin, a hi-res callsign, an airline-name/type line, a metrics line (vertical-rate cue, altitude, speed, track, distance), and paging dots. Rotates through the tracked flights on a fixed dwell. Targets narrower hi-res signs (scale > 1, < 400 physical px — e.g. bigsign).
  • dashboard — the widescreen layout: hero ident on the left, four labelled metric columns (altitude, speed, track, distance) filling the rest of the width. Targets wide hi-res signs (scale > 1, >= 400 physical px — e.g. longboi).

layout = "auto" (the default) resolves at draw time from the canvas's scale and physical width, so the same config works unmodified across smallsign/bigsign/longboi deploys.

With 2 or more tracked flights, hero/dashboard fade the entire card through black for 200ms at the start and end of each flight's dwell window (0.4s total spent near/at black per rotation) instead of cutting straight to the next flight. A single tracked flight is just held — it never fades.

Data source

Aircraft come from adsb.lol's /v2/point/{lat}/{lon}/{radius} endpoint — free, public, no API key. Be a good citizen of the shared endpoint: the default 10s interval is already frequent for a keyless public API; don't lower it without reason. Aircraft missing a callsign, altitude, or position are dropped; the remaining set is sorted by distance and capped at max_aircraft.

Development

This package lives in the led-ticker-plugins monorepo. Run tooling from the repo root:

uv sync --extra dev
uv run pytest plugins/flight
uv run ruff check plugins/flight
uv run pyright plugins/flight/src

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

led_ticker_flight-0.1.0.tar.gz (52.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

led_ticker_flight-0.1.0-py3-none-any.whl (21.7 kB view details)

Uploaded Python 3

File details

Details for the file led_ticker_flight-0.1.0.tar.gz.

File metadata

  • Download URL: led_ticker_flight-0.1.0.tar.gz
  • Upload date:
  • Size: 52.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for led_ticker_flight-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b611f5fc27655b9280921d3c9541f13b1c0a04de6153e8d78bd35d46eb0b2d25
MD5 1c52d00dae4caeed1a3d4c5af6794a95
BLAKE2b-256 607bc33e1e7b55c89d65d94e19d3f59bb60d0777e413895706c6a4b56d4fa1bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for led_ticker_flight-0.1.0.tar.gz:

Publisher: publish.yml on JamesAwesome/led-ticker-plugins

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file led_ticker_flight-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for led_ticker_flight-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 78e7b412da0883da8ac6981d8dc08932cb692a4739ecabb41939cbee57a17f18
MD5 1d1ec0c91bfc28ce23dfb1cd439b39c0
BLAKE2b-256 eb17a7dfc56d35ed046b893c1b53afc511f39e814f5f02a630ce72ab33ded338

See more details on using hashes here.

Provenance

The following attestation bundles were made for led_ticker_flight-0.1.0-py3-none-any.whl:

Publisher: publish.yml on JamesAwesome/led-ticker-plugins

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page