2025-08-23 23:51:37 +02:00
# SkyView - Multi-Source ADS-B Aircraft Tracker
2025-08-23 22:09:37 +02:00
2025-08-31 11:02:27 +02:00
A high-performance, multi-source ADS-B aircraft tracking application that connects to multiple dump1090/readsb receivers using Beast binary or VRS JSON formats and provides a modern web interface with advanced visualization capabilities.
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
## ✨ Features
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
### Multi-Source Data Fusion
2025-08-31 11:02:27 +02:00
- **Multiple Formats**: Support for both Beast binary (port 30005) and VRS JSON (port 33005) protocols
- **Multiple Receivers**: Connect to unlimited dump1090/readsb sources simultaneously
- **Mixed Sources**: Use Beast and VRS sources together in the same system
2025-08-23 23:51:37 +02:00
- **Intelligent Merging**: Smart data fusion with signal strength-based source selection
2025-08-24 16:24:46 +02:00
- **High-throughput Processing**: High-performance concurrent message processing
2025-08-23 23:51:37 +02:00
### Advanced Web Interface
- **Interactive Maps**: Leaflet.js-based mapping with aircraft tracking
2025-08-24 16:24:46 +02:00
- **Low-latency Updates**: WebSocket-powered live data streaming
2025-08-23 22:09:37 +02:00
- **Mobile Responsive**: Optimized for desktop, tablet, and mobile devices
2025-08-23 23:51:37 +02:00
- **Multi-view Dashboard**: Map, Table, Statistics, Coverage, and 3D Radar views
### Professional Visualization
2025-08-24 18:24:08 +02:00
- **Signal Analysis**: Signal strength visualization and coverage analysis
2025-08-23 23:51:37 +02:00
- **Range Circles**: Configurable range rings for each receiver
- **Flight Trails**: Historical aircraft movement tracking
2025-08-24 18:24:08 +02:00
- **3D Radar View**: Three.js-powered 3D visualization
- **Statistics Dashboard**: Aircraft count timeline * (additional charts under construction) * 🚧
2025-08-24 10:29:25 +02:00
- **Smart Origin**: Auto-calculated map center based on receiver locations
- **Map Controls**: Center on aircraft, reset to origin, toggle overlays
2025-08-24 18:24:08 +02:00
- **Signal Heatmaps**: Coverage heatmap visualization * (under construction) * 🚧
2025-08-23 23:51:37 +02:00
2025-08-31 19:40:44 +02:00
### Aircraft Data Enhancement
2025-08-23 23:51:37 +02:00
- **Complete Mode S Decoding**: Position, velocity, altitude, heading
- **Aircraft Identification**: Callsign, category, country, registration
2025-08-31 19:40:44 +02:00
- **Enhanced Callsign Lookup**: Multi-source airline database with 6,162+ airlines and 83,557+ airports
- **Aviation Data Integration**: OpenFlights and OurAirports databases with automatic updates
2025-08-24 16:24:46 +02:00
- **ICAO Country Database**: Comprehensive embedded database with 70+ allocations covering 40+ countries
2025-08-23 23:51:37 +02:00
- **Multi-source Tracking**: Signal strength from each receiver
2025-08-31 19:40:44 +02:00
- **Historical Data**: Position history with configurable retention
- **Database Optimization**: Automatic VACUUM operations and storage efficiency monitoring
2025-08-23 23:51:37 +02:00
## 🚀 Quick Start
### Using Command Line
```bash
# Single source
./skyview -sources "primary:Local:localhost:30005:51.47:-0.46"
# Multiple sources
./skyview -sources "site1:North:192.168.1.100:30005:51.50:-0.46,site2:South:192.168.1.101:30005:51.44:-0.46"
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
# Using configuration file
./skyview -config config.json
```
### Using Debian Package
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
```bash
# Install
2025-08-24 21:59:46 +02:00
sudo dpkg -i skyview_0.0.3_amd64.deb
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
# Configure
sudo nano /etc/skyview/config.json
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
# Start service
sudo systemctl start skyview
sudo systemctl enable skyview
```
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
## ⚙️ Configuration
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
### Configuration File Structure
2025-08-23 22:09:37 +02:00
```json
{
"server": {
2025-08-23 23:51:37 +02:00
"host": "",
2025-08-23 22:09:37 +02:00
"port": 8080
},
2025-08-23 23:51:37 +02:00
"sources": [
{
"id": "primary",
2025-08-31 11:02:27 +02:00
"name": "Primary Receiver (Beast)",
2025-08-23 23:51:37 +02:00
"host": "localhost",
"port": 30005,
2025-08-31 11:02:27 +02:00
"format": "beast",
2025-08-23 23:51:37 +02:00
"latitude": 51.4700,
"longitude": -0.4600,
"altitude": 50.0,
"enabled": true
2025-08-31 11:02:27 +02:00
},
{
"id": "secondary",
"name": "Secondary Receiver (VRS JSON)",
"host": "192.168.1.100",
"port": 33005,
"format": "vrs",
"latitude": 51.4800,
"longitude": -0.4500,
"altitude": 75.0,
"enabled": true
2025-08-23 23:51:37 +02:00
}
],
"settings": {
"history_limit": 1000,
"stale_timeout": 60,
"update_rate": 1
2025-08-24 10:29:25 +02:00
},
"origin": {
"latitude": 51.4700,
"longitude": -0.4600,
"name": "Custom Origin"
2025-08-23 22:09:37 +02:00
}
}
```
2025-08-31 11:02:27 +02:00
### Data Format Configuration
SkyView supports two ADS-B data formats:
#### Beast Binary Format
- **Port**: Typically 30005
- **Format**: Binary protocol developed by FlightAware
- **Source**: dump1090, dump1090-fa, readsb with `--net-bo-port 30005`
- **Configuration**: `"format": "beast"` (default if not specified)
- **Advantages**: Compact binary format, includes precise timestamps and signal strength
#### VRS JSON Format
- **Port**: Typically 33005
- **Format**: JSON objects with aircraft arrays
- **Source**: readsb with `--net-vrs-port 33005`
- **Configuration**: `"format": "vrs"`
- **Advantages**: Human-readable JSON, simpler to parse and debug
- **Update Interval**: Configurable with `--net-vrs-interval` (default 5 seconds)
Both formats can be used simultaneously in the same SkyView instance for maximum flexibility and redundancy.
2025-08-23 23:51:37 +02:00
### Command Line Options
```bash
skyview [options]
Options:
-config string
Configuration file path
-server string
Server address (default ":8080")
-sources string
Comma-separated Beast sources (id:name:host:port:lat:lon)
-verbose
Enable verbose logging
```
## 🗺️ Web Interface
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
Access the web interface at `http://localhost:8080`
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
### Views Available:
- **Map View**: Interactive aircraft tracking with receiver locations
- **Table View**: Sortable aircraft data with multi-source information
2025-08-24 18:24:08 +02:00
- **Statistics**: Aircraft count timeline * (additional charts planned) * 🚧
- **Coverage**: Signal strength analysis * (heatmaps under construction) * 🚧
- **3D Radar**: Three-dimensional aircraft visualization * (controls under construction) * 🚧
### 🚧 Features Under Construction
Some advanced features are currently in development:
- **Message Rate Charts**: Per-source message rate visualization
- **Signal Strength Distribution**: Signal strength histogram analysis
- **Altitude Distribution**: Aircraft altitude distribution charts
- **Interactive Heatmaps**: Leaflet.heat-based coverage heatmaps
- **3D Radar Controls**: Interactive 3D view manipulation (reset, auto-rotate, range)
- **Enhanced Error Notifications**: User-friendly toast notifications for issues
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
## 🔧 Building
### Prerequisites
- Go 1.21 or later
- Make
### Build Commands
2025-08-23 22:09:37 +02:00
```bash
2025-08-23 23:51:37 +02:00
make build # Build binary
make deb # Create Debian package
make docker-build # Build Docker image
make test # Run tests
make clean # Clean artifacts
2025-08-23 22:09:37 +02:00
```
2025-08-23 23:51:37 +02:00
## 🐳 Docker
2025-08-23 22:09:37 +02:00
```bash
2025-08-23 23:51:37 +02:00
# Build
make docker-build
# Run
docker run -p 8080:8080 -v $(pwd)/config.json:/app/config.json skyview
```
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
## 📊 API Reference
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
### REST Endpoints
- `GET /api/aircraft` - All aircraft data
2025-08-24 10:29:25 +02:00
- `GET /api/aircraft/{icao}` - Individual aircraft details
2025-08-23 23:51:37 +02:00
- `GET /api/sources` - Data source information
2025-08-24 10:29:25 +02:00
- `GET /api/stats` - System statistics
- `GET /api/origin` - Map origin configuration
2025-08-23 23:51:37 +02:00
- `GET /api/coverage/{sourceId}` - Coverage analysis
- `GET /api/heatmap/{sourceId}` - Signal heatmap
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
### WebSocket
2025-08-24 16:24:46 +02:00
- `ws://localhost:8080/ws` - Low-latency updates
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
## 🛠️ Development
### Project Structure
```
skyview/
├── cmd/skyview/ # Main application
2025-08-24 10:29:25 +02:00
├── assets/ # Embedded static web assets
2025-08-23 23:51:37 +02:00
├── internal/
│ ├── beast/ # Beast format parser
│ ├── modes/ # Mode S decoder
│ ├── merger/ # Multi-source merger
2025-08-24 10:29:25 +02:00
│ ├── client/ # Beast TCP clients
2025-08-23 23:51:37 +02:00
│ └── server/ # HTTP/WebSocket server
├── debian/ # Debian packaging
└── scripts/ # Build scripts
2025-08-23 22:09:37 +02:00
```
2025-08-23 23:51:37 +02:00
### Development Commands
```bash
make dev # Run in development mode
make format # Format code
make lint # Run linter
make check # Run all checks
```
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
## 📦 Deployment
### Systemd Service (Debian/Ubuntu)
2025-08-23 22:09:37 +02:00
```bash
2025-08-23 23:51:37 +02:00
# Install package
2025-08-24 21:59:46 +02:00
sudo dpkg -i skyview_0.0.3_amd64.deb
2025-08-23 23:51:37 +02:00
# Configure sources in /etc/skyview/config.json
# Start service
sudo systemctl start skyview
sudo systemctl enable skyview
# Check status
sudo systemctl status skyview
sudo journalctl -u skyview -f
2025-08-23 22:09:37 +02:00
```
2025-08-23 23:51:37 +02:00
### Manual Installation
```bash
# Build binary
make build
# Create user and directories
2025-08-31 19:40:44 +02:00
sudo useradd -r -s /bin/false skyview-adsb
sudo mkdir -p /etc/skyview-adsb /var/lib/skyview-adsb /var/log/skyview-adsb
sudo chown skyview-adsb:skyview-adsb /var/lib/skyview-adsb /var/log/skyview-adsb
2025-08-23 23:51:37 +02:00
# Install binary and config
sudo cp build/skyview /usr/bin/
2025-08-31 19:40:44 +02:00
sudo cp build/skyview-data /usr/bin/
sudo cp config.example.json /etc/skyview-adsb/config.json
sudo chown root:skyview-adsb /etc/skyview-adsb/config.json
sudo chmod 640 /etc/skyview-adsb/config.json
2025-08-23 23:51:37 +02:00
# Create systemd service
2025-08-31 19:40:44 +02:00
sudo cp debian/lib/systemd/system/skyview-adsb.service /lib/systemd/system/
sudo cp debian/lib/systemd/system/skyview-database-update.service /lib/systemd/system/
sudo cp debian/lib/systemd/system/skyview-database-update.timer /lib/systemd/system/
2025-08-23 23:51:37 +02:00
sudo systemctl daemon-reload
2025-08-31 19:40:44 +02:00
sudo systemctl enable skyview-adsb
sudo systemctl enable skyview-database-update.timer
sudo systemctl start skyview-adsb
sudo systemctl start skyview-database-update.timer
```
### Database Management
SkyView includes powerful database management capabilities through the `skyview-data` command:
```bash
# Update aviation data sources (airlines, airports)
skyview-data update
# Optimize database storage and performance
skyview-data optimize
# Check database optimization statistics
skyview-data optimize --stats-only
# List available data sources
skyview-data list
# Check current database status
skyview-data status
2025-08-23 23:51:37 +02:00
```
2025-08-31 19:40:44 +02:00
The system automatically:
- Updates aviation databases on service startup
- Runs weekly database updates via systemd timer
- Optimizes storage with VACUUM operations
- Monitors database efficiency and statistics
### Configuration
SkyView supports comprehensive configuration including external aviation data sources:
- **3 External Data Sources**: OpenFlights Airlines (~6,162), OpenFlights Airports (~7,698), OurAirports (~83,557)
- **Database Management**: Automatic optimization, configurable retention, backup settings
- **Privacy Controls**: Privacy mode for air-gapped operation, selective source control
- **Performance Tuning**: Connection pooling, cache settings, update intervals
See * * [Configuration Guide ](docs/CONFIGURATION.md )** for complete documentation of all options.
2025-08-23 23:51:37 +02:00
## 🔒 Security
The application includes security hardening:
- Runs as unprivileged user
- Restricted filesystem access
- Network isolation where possible
- Systemd security features enabled
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
## 📄 License
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
MIT License - see [LICENSE ](LICENSE ) file for details.
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
## 🤝 Contributing
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
1. Fork the repository
2. Create feature branch
3. Make changes with tests
4. Submit pull request
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
## 🆘 Support
2025-08-23 22:09:37 +02:00
2025-08-24 18:24:08 +02:00
- [Issues ](https://kode.naiv.no/olemd/skyview/issues )
- [Documentation ](https://kode.naiv.no/olemd/skyview/wiki )
- [Configuration Examples ](https://kode.naiv.no/olemd/skyview/src/branch/main/examples )
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
---
2025-08-23 22:09:37 +02:00
2025-08-23 23:51:37 +02:00
**SkyView** - Professional multi-source ADS-B tracking with Beast format support.