It’s a Bird, It’s a Plane.. no, that’s ENY3993

Our new house is situated right between two major airports and one smaller airport to the north. We are on the departure path and nearly every plane leaving internationally takes off right above our heads. This gave me an idea – would I be able to automatically determine what plane is flying over the house at any given time? The answer is of course, yes.

Air traffic data is public, and Flightradar24 is a super cool website that visualizes and tracks all ADS-B data coming from the planes. Much of this data is open- and crowd- sourced by people like me, using ADS-B receivers on their servers to keep a constant poll of things like a plane’s speed, altitude, and even it’s last known picture.

A github user has created a HomeAssistant integration that allows for Flightradar24’s API data to be pulled into dashboards!

To make the automation work the way I wanted, I configured the HomeAssistant integration to only track planes within a radius of 2650 meters of our location. I played with this value a lot, and found that planes within this range can be heard and seen from the backyard.

The integration installs 5 sensors by default, each running off the radius, latitude and longitude defined in the Options. Now it picks up when a flight is in our area!

This is where the magic happens. The integration triggers an API call to Flightradar24 when Current In Area > 0. The API returns all the flight data neatly packaged back to HomeAssistant states:

state_class: total
flights:
  - id: 3d2b86dc
    flight_number: AA1672
    callsign: AAL1672
    aircraft_registration: N146AA
    aircraft_photo_small: https://cdn.jetphotos.com/200/6/664487_1744462448_tb.jpg?v=0
    aircraft_photo_medium: https://cdn.jetphotos.com/400/6/664487_1744462448.jpg?v=0
    aircraft_photo_large: https://cdn.jetphotos.com/640cb/6/664487_1744462448.jpg?v=0
    aircraft_model: Airbus A321-231
    aircraft_code: A321
    airline: American Airlines
    airline_short: American Airlines
    airline_iata: AA
    airline_icao: AAL
    airport_origin_name: Dallas Fort Worth International Airport
    airport_origin_code_iata: DFW
    airport_origin_code_icao: KDFW
    airport_origin_country_name: United States
    airport_origin_country_code: US
    airport_origin_city: Dallas
    airport_origin_timezone_offset: -21600
    airport_origin_timezone_abbr: CST
    airport_origin_terminal: C
    airport_origin_latitude: 32.89682
    airport_origin_longitude: -97.037903
    airport_destination_name: Orlando International Airport
    airport_destination_code_iata: MCO
    airport_destination_code_icao: KMCO
    airport_destination_country_name: United States
    airport_destination_country_code: US
    airport_destination_city: Orlando
    airport_destination_timezone_offset: -18000
    airport_destination_timezone_abbr: EST
    airport_destination_terminal: B
    airport_destination_latitude: 28.42939
    airport_destination_longitude: -81.308899
    time_scheduled_departure: 1763564700
    time_scheduled_arrival: 1763573820
    time_real_departure: null
    time_real_arrival: null
    time_estimated_departure: 1763566500
    time_estimated_arrival: null
    latitude: 32.8436
    longitude: -97.0302
    altitude: 2350
    heading: 180
    ground_speed: 207
    squawk: ""
    vertical_speed: 1152
    distance: 3.1475550835048787
    on_ground: 0
    tracked_by_device: FlightRadar24
last_updated: "2025-11-19T09:32:08.985055"
icon: mdi:airplane-marker
friendly_name: FlightRadar24 Current in area

Now that HomeAssistant has this data, it can be used in dashboards to display in cards. I have these cards set to only display when Current In Area > 0 (aka when a plane is within 2650 meters):

Here is what it looks like under the hood:

type: vertical-stack
cards:
  - type: entities              # This card shows how many are "Flying overhead"
    entities:
      - entity: sensor.flightradar24_current_in_area
        name: Flying overhead
  - type: conditional
    conditions:                  # When Current In Area > 0
      - condition: numeric_state
        entity: sensor.flightradar24_current_in_area
        above: 0
    card:                        # This card pulls information from the API
      type: markdown             # and displays it with formatting
      content: >-
        {% set data = state_attr('sensor.flightradar24_current_in_area',
        'flights') %} {% if data %}
          {% for flight in data %}
          <ha-icon icon="mdi:airplane"></ha-icon> **{{ flight.aircraft_registration }}**
          ({{ flight.flight_number }}) - {{ flight.airline_short }} - {{ flight.aircraft_model }}  

          **Departed**: {{ flight.airport_origin_city }} {% if flight.airport_origin_country_code %}<img src="https://flagsapi.com/{{ flight.airport_origin_country_code }}/shiny/16.png" title="{{ flight.airport_origin_country_name }}"/>{% endif %} at {{ flight.time_scheduled_departure | int | timestamp_custom('%I:%M %p', True) }}  
          **Arriving**:  {{ flight.airport_destination_city }} {% if flight.airport_destination_country_code %}<img src="https://flagsapi.com/{{ flight.airport_destination_country_code }}/shiny/16.png" title="{{ flight.airport_destination_country_name }}"/>{% endif %} at {{ flight.time_scheduled_arrival | int | timestamp_custom('%I:%M %p', True) }}  
          **Current Altitude**: {{ flight.altitude }} ft {% if flight.altitude > 0 %}({{ (flight.altitude * 0.3048) | round(0) }} m){% endif %}  
          **Current Speed**: {{ flight.ground_speed }} kts {% if flight.ground_speed > 0 %}({{ (flight.ground_speed * 1.852) | round(0) }} km/h){% endif %}  

          {% if flight.aircraft_photo_large %}<img src="{{  flight.aircraft_photo_large }}">{% endif %}  
          {% endfor %}
        {% else %}
          No flight data available.
        {% endif %}

The map is simply an iframe, bookmarked to our house’s latitude and longitude:

type: iframe
url: >-
  https://globe.adsb.fi/?enableLabels&trackLabels&zoom=12&hideSideBar&lat=12.34&lon=56.78
aspect_ratio: 100%
grid_options:
  columns: full
  rows: 8

Note: as of January 2026, the flighttracker iframe no longer works, so it has been replaced with a globe.adsb.fi URL.

While some of this data is completely useless to most (including myself), it still intrigues me to be able to take away a bunch of random facts from this project:

  1. There are never more than 3 planes over our house at any given time, except for one instance on November 9th when there were 4
  2. Nearly every helicopter flying during the day is off to rescue someone and take them to a hospital
  3. Blimps transmit ADS-B data too!

In the future, I plan to grab an ADS-B receiver and supply my own data to Flightradar24. The website has a step-by-step for building a pi receiver, but I think I’m going to opt for a docker container and run it off The Lab.