飞常准 (VariFlight)目前提供的脚本已十分老旧,比较难以使用。官方提供的系统镜像也没有密码,导致设备只能用于ADS-B数据接收,无法用于其他事情,导致硬件资源的浪费。
本项目将ADS-B数据接收、数据收集封装在docker容器中,测试可在树莓派官方系统中使用,理论上也可用于其他系统,只需安装docker即可。
本项目完全重写了向飞常准发送数据的功能,代码已开源,用户可自行构建镜像。
本项目提供了原始信息永久化保存功能,用户可自行选择是否启用,启用后,数据将永久性保留在MySQL数据库中。请注意,若信息量较大,将会占用大量空间。收集的数据请勿用于违法用途,本项目不承担任何责任。
快速开始
前置条件
- 树莓派 4B 或 arm64/amd64 Linux 设备
- RTL-SDR 电视棒
- Docker & Docker Compose
准备
# 1. 克隆项目(含中文界面子模块)
git clone --recursive https://github.com/BigheadFishZJML/ADSB_Docker_flightadsb ADSB_Docker_flightadsb && cd ADSB_Docker_flightadsb
# 2. 创建环境配置
cp .env.example .env
# 编辑 .env,按需填入:
nano .env
# VARIFLIGHT_UUID= 你的 16 位 UUID(留空自动生成)
# LAT= 接收器纬度
# LONG= 接收器经度
启动
# 方式一:使用预构建镜像(推荐)
docker compose up -d
# 若需要附加 MySQL + 原始信息永久化保存,请使用以下命令
docker compose --profile full up -d
查看
| 地址 | 内容 |
|---|---|
http://<IP>:8080 |
飞机地图 |
http://<IP>:8081 |
UUID 状态页 |
http://<IP>:8080/graphs1090/ |
性能图表 |
绑定飞常准
- 访问
http://<IP>:8081查看 UUID - 登录 https://flightadsb.variflight.com/share-data/script
- 填入 UUID,在地图上标记站点位置,提交
功能
| 功能 | 端口 | 说明 |
|---|---|---|
| 🗺️ 飞机地图 | :8080 |
tar1090-zh 中文界面,wiedehopf/readsb 解码 |
| 🔑 UUID 管理 | :8081 |
显示站点 UUID,自动生成/持久化 |
| 📤 飞常准上报 | — | 读取 SBS 数据 → 压缩 → POST adsb.feeyo.com |
| 📊 原始信息永久化保存 | — | 可选,所有 Mode-S/ADS-B 消息存入 MySQL |
中文飞机地图界面基于 tar1090-zh 项目,以 git submodule 方式引入。
架构
RTL-SDR USB 电视棒
│
┌─ tar1090 ───────────────────────────────────────────────────┐
│ wiedehopf/readsb 解码器 + tar1090-zh 中文 Web UI │
│ :80→8080 飞机地图 │
│ :30003 SBS BaseStation 数据流 │
│ :30005 Beast 全量消息流 │
└────────────┬──────────────────────┬─────────────────────────┘
│ SBS │ Beast
↓ ↓
┌─ flightadsb-sender ─┐ ┌─ flightadsb-logger (可选) ─┐
│ python:3-slim │ │ Beast 协议解析 │
│ 非 root 运行 │ │ 全量消息解码 │
│ :8081 UUID 状态页 │ │ ADS-B 字段提取 │
│ POST adsb.feeyo.com │ │ 批量写入 MySQL │
└──────────────────────┘ └───────────┬───────────────┘
│
┌─ mysql (可选) ─┐
│ MySQL 8.4 │
│ 持久卷存储 │
└─────────────────┘
原始信息永久化保存(可选)
使用 docker compose --profile full up -d 启动项目后,flightadsb-logger 读取 readsb 的 Beast 全量输出(:30005),解析所有 Mode-S/ADS-B 消息并写入 MySQL。
数据库
messages (
id, hex_icao, df, msg_type, beast_ts, received_at,
raw_hex, -- 原始 Mode-S 十六进制
altitude, -- 气压高度 (ft)
latitude, longitude, speed, track, vr,
squawk, callsign
)
消息类型
| 类型 | 来源 | 说明 |
|---|---|---|
mode_s_short |
DF 0–15 | SSR 雷达应答(短报文) |
mode_s_long |
DF 16–24 | 含 ADS-B (DF17/18) + Comm-B (DF20/21) |
mode_s_allcall |
DF 11 | All-Call 应答 |
mode_ac |
Mode-A/C | 应答机编码(squawk) |
adsb_pos |
DF17 TC 9–18 | ADS-B 位置报文 |
adsb_vel |
DF17 TC 19 | ADS-B 速度报文 |
adsb_id |
DF17 TC 1–4 | ADS-B 呼号报文 |
自行构建镜像(可选)
flightadsb-sender 和 flightadsb-logger镜像都是以python:3-slim镜像为基础的,在此基础上运行若干Python代码。如果你想从源码构建 flightadsb-sender 和 flightadsb-logger 镜像:
# 1. 构建镜像(替换为你的 Docker Hub 用户名)
DOCKER_USER=你的用户名 docker compose -f docker-compose.build.yml build
# 2. 推送到 Docker Hub(可选)
docker push 你的用户名/flightadsb-sender:latest
docker push 你的用户名/flightadsb-logger:latest
# 3. 修改 docker-compose.yml,将 bigheadfishzjml 替换为你的用户名
nano docker-compose.yml
# 4. 启动项目
docker compose up -d
项目结构
flightadsb/
├── docker-compose.yml # 预构建镜像版(普通用户用)
├── docker-compose.build.yml # 源码构建版(开发者用)
├── .env.example # 环境变量模板
├── sender/ # 飞常准上报容器
│ ├── Dockerfile
│ ├── entrypoint.sh # UUID 解析 + 端口等待
│ ├── send_message.py # SBS 读取 → 压缩 → POST
│ ├── uuid_web.py # :8081 UUID 状态页
│ └── requirements.txt
├── logger/ # 全量消息采集容器(可选)
│ ├── Dockerfile
│ ├── main.py # Beast 读取 → 批量写入 MySQL
│ ├── beast_parser.py # Beast 二进制协议解析 + ADS-B 解码
│ └── requirements.txt
├── mysql/init/ # MySQL 初始化脚本
│ └── 01-schema.sql
├── graphs1090-patch/ # graphs1090 hash 保留补丁
│ └── graphs.js
├── README.md
└── RESEARCH.md # 技术调研记录
License
MIT License. 本项目代码可自由使用、修改、分发,详见 LICENSE 文件。
本项目使用的第三方组件遵循其各自的许可证:
- tar1090-zh — GPL-3.0
- wiedehopf/readsb — GPL-3.0
- sdr-enthusiasts/docker-tar1090 — GPL-3.0