Turning a Local ADS-B Feed Into an Easy to Read Dashboard

 









Have you ever wondered where the plane or helicopter overhead is coming from, where it is going or who operates it? I found myself logging into my SkyAware monitor several times a week to look up that information. The problem was that it only showed what was overhead at that moment and logging in took a minute or two each time. I knew there had to be a better way to see this information quickly and to keep a historical record of all the aircraft traffic I had observed.

One of the fun side effects of running a local ADS-B receiver with dump1090-fa on a Pi with an RTL-SDR dongle, is that you end up with a constant stream of aircraft telemetry sitting on your Pi. aircraft.json updates every second or two with hex codes, positions, altitudes, speeds and it's all there waiting to be analyzed and not just sent to Flightaware.

Recently, I learned about JetClock which is a slick, commercial desk clock that shows you the aircraft passing overhead with airline, route, photos and all kinds of other data. Amazing idea for a product, especially for airplane geeks like me. But it's a physical device tied to their backend and I already had a receiver, a Python environment and some free time to try to code something for my specific setup.

This project started from a simple question:

Could I build a JetClock-style dashboard entirely from data I already have on my own network without relying on a cloud service or proprietary hardware?

The short answer turned out to be yes and it grew into more than I expected.

What It Does

At its core, ADSB Analyzer is a small Flask app that polls your local aircraft.json feed and turns it into a live browser dashboard. 

It features:

A clock face that surfaces the closest overhead aircraft in real time — callsign, airline, route, aircraft type, altitude, speed, distance, bearing and a photo, when one's available.

A personal sightings logbook (SQLite) that logs every aircraft that's passed through range, with analytics: busiest hour/day, top routes, top aircraft types, a manufacturer breakdown, personal records (closest approach, fastest, highest, longest overhead) and a local rarity score based on how often you've personally seen a given aircraft type.

Live local weather and sun/moon data.

A Settings tab where basically everything is live-editable from the browser including receiver URL, home location, detection filters (altitude range, radius, aircraft category, viewing angle, even a best-effort "military only" toggle), weather source and five different card layouts (including a fully custom one where you pick your own data points).

What This Project Is and Most Importantly Is Not

This is a personal dashboard project, not an official JetClock product and not affiliated with JetClock, adsbdb.com or WeatherAPI in any way.

Where a feature was directly inspired by something JetClock does, like their "Smart Origin" logic that shows the destination instead of the origin once a flight is well clear of where it departed, the code says so in a comment.

The aircraft "rarity" scoring is a good example of the difference, JetClock has a proprietary database of hundreds of thousands of aircraft to rank against where this project only has your logbook, so rarity here means "rare for you," and not "rare globally." That's a real limitation and the UI says so rather than pretending otherwise.

It also leans hard on two free, best-effort public APIs (adsbdb.com and weatherapi.com) that have no uptime guarantee. The app is built to degrade gracefully so if either one is down, you get a clear "unavailable" state and the receiver polling keeps running independently, rather than the whole dashboard falling over.

Why This Matters

A commercial product like JetClock is genuinely well designed and if you want a physical desk clock with zero setup, buy one. It looks like it's a great product (I'm ordering mine soon). But if you're already the kind of person running dump1090 on a Pi, there's a particular satisfaction in processing the data you've already gathered locally with a solution that you can customize in anyway you'd like to.

Project Link  


If you're running your own dump1090-fa/Skyaware feed and want to try it, the setup above should get you running in a few minutes.

Feedback on other receiver setups — piaware, readsb, different aircraft.json flavors would be genuinely useful/appreciated, since so far this has only been tested against my setup.

73

Comments

Popular posts from this blog

How to Put Your AllStar Node on 44Net Connect

Why You Might Want To Set Up Your Raspberry Pi Internet Web Server on 44Net

How To Set Up Your Own Remote Station

Build a Central N3FJP Field Day Log Server With Local DHCP and GPS Time

Building a Secure Web Portal on 44Net Without VPN Headaches

How To Get Precise Time Outside Your Shack

Getting WaveNode Power Meter Data Into Node-RED

Turning Your Starlink Mini into a Real Telemetry Device - How to bridge Starlink Mini into MQTT and Node-RED for real-time monitoring and automation

A Non-Programmers Guide on How To Use AI to Write Your Own Custom Ham Radio Computer Applications

Why You Should Use SSH Keys Instead of Passwords on Your Raspberry Pi

Ham RSS News Feeds

Amateur Radio Daily

ARRL News

Zero Retries