Web dashboard for DXpedition tracking with azimuth rotor control and multi-source log support.
- DXpedition cards — per-expedition tracking across bands (6m–160m) and modes (SSB, FT8, FT4, RTTY)
- QSO status — Confirmed (QSL/LoTW), Worked unconfirmed, Not worked — color-coded per cell. Status reflects your log history for the DXCC entity, not the specific DXpedition callsign
- SP / LP bearings — short path and long path per expedition, clickable to point the rotor
- Distance — calculated from your locator via cty.dat (346+ entities)
- Rotor control — ARS-USB (EA4TX) via GS-232A protocol, animated compass widget in topbar
- Multi-source logs — HRD XML, Swisslog MDB, Log4OM SQLite, ADIF
- Propagation estimate — real-time per-band score (0–99%) for SP and LP, based on live Kp (NOAA) and SFI (HamQSL), MUF model, solar hour at path midpoint, geomagnetic penalty and auroral zone detection
- Drag & drop — reorder expedition cards (SortableJS)
- Two deployments — Docker/NAS or standalone Windows .exe
| Type | Extension | Selection |
|---|---|---|
| HRD XML | .xml |
Folder — loads latest file automatically |
| Swisslog MDB | .mdb |
Single file (Windows: app auto-detects and prompts to install Microsoft Access Database Engine if missing; Docker: uses mdbtools) |
| Log4OM SQLite | .sqlite / .db |
Single file |
| ADIF | .adi / .adif |
Single file |
- Protocol: Yaesu GS-232A
- Mechanical range: 0°–360°, hard stop at North — never crossed
- Direction: shortest arc avoiding the stop
- Position polling: 500 ms
- HTTP server on
localhost:8767 - Auto-reconnect with exponential backoff (2 s → 60 s max) when ARS is off
- Docker + Docker Compose
- NAS or Linux host
- Windows PC with ARS-USB connected (for rotor, optional)
- Copy
docker/docker-compose.ymlto your NAS - Edit the volume paths to match your setup
- Run:
docker compose up -dDashboard available at http://<host-ip>:8766
services:
dxtracker:
image: ea3tb/dxpedition-tracker:latest
container_name: dxpedition_tracker
restart: unless-stopped
ports:
- "8766:8766"
volumes:
# Data directory (config, expeditions, cty.dat)
- /your/nas/path/Dxpedition_Dashboard:/opt/Dxpedition_Dashboard
# NAS disk — read-only access to log files
- /your/nas/path:/mnt/nas:ro
# Optional: mount a shared folder from a Windows PC (SMB/CIFS)
# - pc_logs:/mnt/pc_logs:ro
environment:
- DATA_DIR=/opt/Dxpedition_Dashboard
- PORT=8766
networks:
- dx_net
networks:
dx_net:
driver: bridge
# volumes:
# pc_logs:
# driver: local
# driver_opts:
# type: cifs
# device: "//192.168.X.X/SharedFolderName"
# o: "guest,uid=1000,gid=1000,iocharset=utf8,vers=2.0"The rotor runs as a Windows tray app on the PC connected to the ARS-USB.
- Copy the
rotor_tray/folder to your Windows PC - Run
install_tray.batas Administrator - Enter the COM port of your ARS-USB when prompted
- A tray icon appears — green=online, yellow=connecting, red=offline
Tray autostart is configured automatically (Windows startup folder, no console window).
To uninstall: run uninstall_tray.bat as Administrator.
- Windows 10/11 x64
- Download
DXpeditionTracker.exefrom Releases - Run it — the dashboard opens automatically in your default browser
- The rotor tray icon appears in the system tray
No installation required. Data is stored in %APPDATA%\DXpeditionTracker\.
cd windows\
BUILD_WINDOWS.batRequires Python 3.12 and PyInstaller. Produces two executables:
DXpeditionTracker.exe— main dashboardrotor_tray_exe.exe— rotor tray (launched automatically)
| Port | Service |
|---|---|
| 8766 | Dashboard (FastAPI) |
| 8767 | Rotor HTTP server |
- Backend: FastAPI + uvicorn (Python 3.12)
- Frontend: Vanilla HTML/JS, SortableJS
- Rotor: pyserial, pystray, Pillow
- Docker base: python:3.12-slim + mdbtools
MIT — see LICENSE
de EA3TB