This is an automated archive made by the Lemmit Bot.
The original was posted on /r/homeassistant by /u/LinkDude80 on 2025-08-12 17:14:49+00:00.
You Did WHAT?
Most aircraft in the United States are required to be equipped with a device called a transponder, which transmits identifying information about the aircraft. In a modern ADS-B enabled transponder, required in the US on most transponder equipped aircraft since 2020, this information includes the aircraft's altitude and GPS coordinates.
In most cases, transponder data is broadcast unencrypted and can be received by anybody with the right equipment. This includes other aircraft, air traffic control, and of course, aviation nerds with a USB based software defined radio (SDR) such as the venerable RTL-SDR.
Normally, people with this kind of setup use it to feed data to major aircraft tracking sites such as FR24 in exchange for a free premium account, but I decided to take things a step further.
I store the SDR output in a PostgreSQL database and monitor this database with Grafana. When Grafana detects two subsequent position reports that pass within a 1.5mi radius of my house, it fires a web hook which Home Assistant can use as an automation trigger. This reliably happens within 10-30 seconds of me first hearing engine noises, effectively giving me aircraft based home automation!
But... why?
The most "practical" use for this is to display my ADS-B dashboard when an aircraft is overhead. We use browser-mod to navigate my display device to the ADS-B page, I look at it, and my day is a tiny bit better as a result.
Let's check out the dashboard!
It's just a simple webpage type dashboard which displays a Grafana Dashboard. Grafana is doing the heavy lifting here.
For that guy who was wondering what we strap tablets to the wall for...
This is populated with data from my PostgreSQL database. What are we looking at? Let's go panel by panel.
tar1090 Live View:
At the top right we have an embedded iFrame showing the live map view for area traffic.
Aircraft Overhead Today:
The list of aircraft which have been spotted overhead today. This is defined as all aircraft which have two adjacent entries in the flight path table recorded within the current calendar day whose vector intersects a 1.5mi radius of "my house." (For demonstration purposes, “my house” is defined as a random Target I picked on a map at 40.889629,-74.271452)
Unique Aircraft:
A count of aircraft encountered today defined by unique transponder HEX codes in the flight_paths table, timestamped for the current calendar day. If this is the first appearance in the flight_paths table, it’s considered a new aircraft.
Interesting Aircraft Spotted Today:
A table of aircraft I would consider interesting which have been logged today anywhere in our detection range. This includes:
Rare Aircraft:
Any aircraft whose type_code appears less than 10 times in the aircraft table. To streamline things, a type_code_family table groups aircraft in the same family under a single family code such as “737” or “A320 Family.”
Favorites:
Any aircraft whose registration appears in a “favorites” table. This mostly includes interesting planes such as police and news helicopters, unique liveries such as the ANA Pokemon planes, and fire service aircraft.
ATIS:
A scrolling feed of current automatic terminal information service (ATIS) information for major area airports obtained from https://datis.clowd.io/api. Let’s me know which runways are active at which airports which determines how much traffic I see on a given day.
Airlines (Today):
A breakdown of aircraft spotted today by airline. United and Delta are by far the most common airlines I spot.
Aircraft Types (Today):
A breakdown of aircraft spotted today by type code with certain type codes grouped by family as described above.
How does this work?
Radio signals transmitted at 1090MHz from ADS-B transponders aboard (most) aircraft can be received by anybody. This can be accomplished with an RTL-SDR and a program called dump1090 or one of it’s various forks like tar1090.
tar1090 provides a JSON endpoint, tar1090/data/aircraft.json, which outputs a live feed of everything our SDR is receiving. This includes a unique hexadecimal identifier, current position, and altitude.
A Python script checks the tar1090 JSON endpoint every 30 seconds. For each aircraft, we check the database to see if we have seen it before. If the aircraft is new, or was last seen more than a week ago, we call the OpenSkyNetwork API with the aircraft’s hex code (https://opensky-network.org/api/metadata/aircraft/icao/a0a8da) to get additional details such as type, registration, and owner. Each aircraft is logged into a PostgreSQL database table called “Aircraft” and each position report and timestamp into a “flight_paths” table. The OpenSky database is not always consistent or complete so we also keep additional lookup tables such as the global list of airline ICAO codes to ensure data consistency.