Skip to main content

Aircraft Tracker - Fully configurable airport departure board style display using ADS-B data

Project description

Flight Display ✈️

Fully Configurable Aircraft Tracker with Airport Departure Board Style Display

A beautiful Python CLI tool that tracks nearby aircraft and displays them in an airport departure board style interface using real-time ADS-B data from the OpenSky Network. Now with comprehensive configuration support for complete customization!

✨ Features

  • 🌍 Auto-location detection - Automatically detects your location using IP geolocation
  • 📡 Real-time aircraft tracking - Uses OpenSky Network's free API for live aircraft data
  • 🎯 Adaptive radius search - Automatically expands search radius to find aircraft
  • 🏢 Airline identification - Enhanced operator detection with online airline database
  • 🎨 Beautiful display - Color-coded departure board style interface
  • Rate limit handling - Smart retry logic for API reliability
  • ⚙️ Fully configurable - JSON-based configuration for all aspects of the application
  • 🎨 Customizable colors & thresholds - Adjust altitude thresholds, distance ranges, display limits
  • 🌐 Flexible APIs - Configure endpoints, timeouts, and data sources
  • 🛩️ Aircraft type recognition - Customizable aircraft type mappings and patterns

🎉 What's New in v1.0.0

Complete Configuration System - All hardcoded values are now configurable
JSON Configuration Files - Easy-to-edit configuration with example templates
Backwards Compatibility - All existing usage patterns still work
Environment-Specific Configs - Different settings for different use cases
Enhanced Documentation - Comprehensive configuration guides

🚀 Installation

Option 1: Install from PyPI (Recommended)

pip install flight-display

Option 2: Install from source

# Clone the repository
git clone <repository-url>
cd flight-display

# Install the package
pip install -e .
# or with uv
uv pip install -e .

Option 2: Run directly with Python

# Install dependencies
pip install -r requirements.txt
# or with uv
uv pip install -r requirements.txt

# Run directly
python main.py

🎮 Usage

Quick Start

# Auto-detect location and start tracking
flight-display

# Use specific coordinates (latitude, longitude)
flight-display --lat 40.7128 --lon -74.0060

# Set custom search radius and update interval
flight-display --radius 100 --interval 30

Configuration System

NEW! Flight Display now supports comprehensive JSON-based configuration:

# Create an example configuration file
flight-display --create-config

# Use your custom configuration
cp config_example.json config.json
# Edit config.json to your preferences
flight-display --config config.json

Command Line Options

# Auto-detect location and start tracking
flight-display

# Use specific coordinates (latitude, longitude)
flight-display --lat 40.7128 --lon -74.0060

# Set custom search radius (default: from config or 50km)
flight-display --radius 100

# Set update interval (default: from config or 10 seconds)
flight-display --interval 30

# Use custom configuration file
flight-display --config my-config.json

# Skip online airline database for faster startup
flight-display --no-online-db

# Create example configuration file
flight-display --create-config

⚙️ Configuration

Flight Display supports comprehensive JSON configuration files. All aspects of the application can be customized without modifying code.

Quick Configuration Setup

  1. Generate example config:

    flight-display --create-config
    
  2. Copy and customize:

    cp config_example.json config.json
    # Edit config.json with your preferences
    
  3. Use your configuration:

    flight-display  # Automatically uses config.json if present
    # OR
    flight-display --config my-custom-config.json
    

What's Configurable

Category Examples
Display Colors, thresholds, table format, aircraft limit
Location Default coordinates, fallback location, radius
Aircraft Types Type mappings (Boeing 737 → B737), unknown codes
Registration Country patterns (N → US, G- → UK), private aircraft
APIs Endpoints, timeouts, retry behavior
Units Conversion factors, distance calculations

Example Customizations

Change default location:

{
  "location": {
    "default_latitude": 51.5074,
    "default_longitude": -0.1278,
    "default_location_name": "London, UK"
  }
}

Adjust display settings:

{
  "display": {
    "max_aircraft_displayed": 20,
    "high_altitude_threshold": 35000,
    "default_update_interval": 5
  }
}

Add custom aircraft types:

{
  "aircraft_types": {
    "type_mappings": {
      "Cessna 172": "C172",
      "Piper Cherokee": "PA28"
    }
  }
}

For complete configuration documentation, see CONFIGURATION.md.

Use fixed radius (disable adaptive search)

flight-display --no-adaptive --radius 50

Quiet mode (less verbose output)

flight-display --quiet

Show help

flight-display --help


### Legacy Usage (Backward compatible)

```bash
# Auto-detect location
python main.py

# Manual coordinates
python main.py 40.7128 -74.0060

📊 Display Information

The departure board displays the following information for each aircraft:

Column Description
CALLSIGN Aircraft callsign or registration
OPERATOR Airline or operator name
TYPE Aircraft type (e.g., B737, A320)
ALTITUDE Current altitude with color coding
SPEED Ground speed in knots
TRACK Heading in degrees
V/SPEED Vertical rate with directional arrows
DISTANCE Distance from your location

Color Coding

  • 🔴 Red: Close aircraft (<10km), ground level, descending rapidly
  • 🟡 Yellow: Medium distance (10-25km), low altitude (10,000-30,000ft)
  • 🟢 Green: Far aircraft (>25km), cruising altitude (>30,000ft), climbing
  • 🔵 Cyan: High altitude cruise (>30,000ft)

🔧 Configuration Options

Command Line Arguments

# Location Options
--lat, --latitude FLOAT    Your latitude coordinate
--lon, --longitude FLOAT   Your longitude coordinate

# Display Options
--radius, -r FLOAT         Search radius in km (default: 25)
--interval, -i INT         Update interval in seconds (default: 15)
--max-radius FLOAT         Maximum search radius for adaptive search (default: 200)

# Data Options
--no-online-db            Skip fetching online airline database
--no-adaptive             Disable adaptive radius search

# Output Options
--quiet, -q               Reduce output verbosity
--version, -v             Show version information
--help, -h                Show help message

🌐 Data Sources

  • OpenSky Network: Free ADS-B aircraft position data
  • OpenFlights Database: Airline ICAO codes and operator information
  • IP Geolocation: Automatic location detection via ipapi.co and ipinfo.io

🚨 Rate Limiting

The tool includes smart rate limiting handling:

  • Automatic retries with exponential backoff
  • Respectful API usage with appropriate delays
  • User-friendly messages explaining any delays
  • Graceful fallbacks when APIs are unavailable

🛠️ Development

Project Structure

flight-display/
├── src/flight_display/
│   ├── __init__.py         # Package initialization
│   ├── tracker.py          # Core aircraft tracking logic
│   └── cli.py             # Command-line interface
├── main.py                # Backward compatibility wrapper
├── main_legacy.py         # Legacy implementation
├── pyproject.toml         # Package configuration
└── README.md              # This file

Building and Testing

# Install in development mode
pip install -e .

# Test the CLI
flight-display --help

# Test with specific coordinates
flight-display --lat 51.5074 --lon -0.1278 --radius 50

📝 Examples

Basic Usage

# Start with auto-detection
flight-display

London Heathrow Area

flight-display --lat 51.4700 --lon -0.4543 --radius 50

New York Area with Custom Settings

flight-display --lat 40.7128 --lon -74.0060 --radius 75 --interval 10

Quick Start (No Airline DB)

flight-display --no-online-db --radius 30

🔍 Troubleshooting

No Aircraft Found

  • Check your location: Make sure you're in an area with air traffic
  • Increase radius: Try --radius 100 or higher
  • Check time: More aircraft during business hours and near airports
  • API issues: Wait a few minutes and try again

API Rate Limiting

  • The tool handles rate limits automatically with retries
  • If persistent, wait 5-10 minutes before trying again
  • OpenSky API is free but has usage limits

Installation Issues

# Update pip/uv first
pip install --upgrade pip
uv self update

# Clean install
pip uninstall flight-display
pip install -e .

📜 License

MIT License - See LICENSE file for details.

🤝 Contributing

Contributions welcome! Please feel free to submit issues and pull requests.


Happy flight tracking! ✈️

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

flight_display-1.0.0.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

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

flight_display-1.0.0-py3-none-any.whl (20.4 kB view details)

Uploaded Python 3

File details

Details for the file flight_display-1.0.0.tar.gz.

File metadata

  • Download URL: flight_display-1.0.0.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for flight_display-1.0.0.tar.gz
Algorithm Hash digest
SHA256 24cdedc02c981026906302560c2754d599c78cf77e5f31704be796f06fb7e04e
MD5 cc56bbba8906bc050a7560e89ac1e308
BLAKE2b-256 cf1cac6c9ea0b79084fd5538b586beba8c95f0528cbd8b5819c4ee2c55da978a

See more details on using hashes here.

File details

Details for the file flight_display-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: flight_display-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 20.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for flight_display-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 231eee7f6f34b8c44ff20f0afde85e7dfd8eaf880b5071e6d3ef9b397c63033e
MD5 41c4310a5b0983171325805c5f78f003
BLAKE2b-256 f5594376eefe9c58abd2e2d100e9594e3ca4c16f13e714029ec9f29cbc75821f

See more details on using hashes here.

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