Ubuntu+DockerでFlightradar24とFlightAwareとRadarboxにADS-B情報を配信する
航空機の位置情報を表示できるサービスのFlightradar24とFlightAwareとRadarboxにADS-B情報をフィード配信する手順です。
公式やネット上の情報はRaspberry Piを使用する方法がほとんどだったので、x86_64な環境のUbuntu Serverで動かす方法を残しておきます。
事前準備
- Ubuntu Server 22 LTSのisoイメージ
- ADS-B受信用のレシーバーとアンテナ
- 今回はAmazonで売っていたこのセットを購入。
- 多分もっと安いやつで良いと思う。
Ubuntu Serverのセットアップ
普通にインストールしてください。
Dockerを使うので、ここを参考に導入しておく。
利用するパッケージについて
Flightradar24に情報を送信するパッケージはx86_64なLinux用のものも用意されていたが、FlightAwareとRadarboxではRaspberry Piでしか動作できないようだった。
有志が用意したDockerイメージ群が公開されているので、これを利用して構築していく。
docker-readsb-protobufの導入
dump1090の代わりとなるものだと思います。
事前準備
docker-install.shを実行する、もしくはPrerequisitesの項目の内容を実行する。
docker-install.sh
を使用すればDocker他必要なパッケージ群の導入からADS-Bレシーバーを利用できるまで自動でセットアップしてくれます。
セットアップ完了後再起動し、レシーバーを接続しておく。
docker-compose.ymlファイルの用意
以下ファイルを用意し(緯度・経度を埋めて)、docker compose up -d
で起動する。
version: '2.0'
volumes:
readsbpb_rrd:
readsbpb_autogain:
services:
readsb:
image: ghcr.io/sdr-enthusiasts/docker-readsb-protobuf:latest
tty: true
container_name: readsb
hostname: readsb
restart: always
devices:
- /dev/bus/usb:/dev/bus/usb
ports:
- 8080:8080
- 30005:30005
environment:
- TZ=Asia/Tokyo
- READSB_DCFILTER=true
- READSB_DEVICE_TYPE=rtlsdr
- READSB_FIX=true
- READSB_GAIN=autogain
- READSB_LAT=<緯度>
- READSB_LON=<経度>
- READSB_MODEAC=true
- READSB_RX_LOCATION_ACCURACY=2
- READSB_STATS_RANGE=true
- READSB_NET_ENABLE=true
volumes:
- readsbpb_rrd:/run/collectd
- readsbpb_autogain:/run/autogain
- /proc/diskstats:/proc/diskstats:ro
tmpfs:
- /run/readsb:size=64M
- /var/log:size=32M
動作確認
docker exec -it readsb viewadsb
を実行すると、受信できた航空機の情報が表示されることを確認する。
また、ブラウザからhttp://<IPアドレス>:8080/
にアクセスして、航空機の情報が表示できるかも確認しておく。
docker-flightradar24の導入
前段階で用意したdocker-readsb-protobufコンテナと連携して、FlightRadar24にフィードするためのコンテナイメージ。
Sharing Keyの取得
もう既に持っているSharing Keyを使用する場合は不要。
緯度、経度などを埋めて下記コマンドを実行し、出力されるSharing Keyをメモっておく。
docker run \
--rm \
-it \
-e FEEDER_LAT="<緯度>" \
-e FEEDER_LONG="<経度>" \
-e FEEDER_ALT_FT="<アンテナの高さ(フィート単位)>" \
-e FR24_EMAIL="<Flightradar24に登録しているメールアドレス>" \
--entrypoint /scripts/signup.sh \
ghcr.io/sdr-enthusiasts/docker-flightradar24:latest
docker-compose.ymlファイルに構成を追記する
前段階で用意したdocker-compose.yml
のservicesセクションに追記し、docker compose down && docker compose up -d
で再起動する。
fr24feed:
image: ghcr.io/sdr-enthusiasts/docker-flightradar24:latest
tty: true
container_name: fr24feed
restart: always
ports:
- 8754:8754
environment:
- BEASTHOST=readsb
- FR24KEY=xxxxxxxxxxx
- MLAT=yes
動作確認
http://<IPアドレス>:8754/
にアクセスして、航空機をトラッキングできているか確認する。
また、 https://www.flightradar24.com/account/data-sharing にアクセスして、データがFlightRadar24に送られているか確認する。
docker-piawareの導入
前段階で用意したdocker-readsb-protobufコンテナと連携して、FlightAwareにフィードするためのコンテナイメージ。
Feeder IDの取得
もう既に持っているFeeder IDを使用する場合は不要。
下記コマンドを実行し、出力されるFeeder IDをメモっておく。
その後、https://www.flightaware.com/adsb/piaware/claimにアクセスしてアカウントと紐付ける。
docker pull ghcr.io/sdr-enthusiasts/docker-piaware:latest
timeout 30 docker run --rm ghcr.io/sdr-enthusiasts/docker-piaware:latest | grep "my feeder ID"
docker-compose.ymlファイルに構成を追記する
docker-compose.yml
のservicesセクションに追記し、docker compose down && docker compose up -d
で再起動する。
piaware:
image: ghcr.io/sdr-enthusiasts/docker-piaware:latest
tty: true
container_name: piaware
restart: always
ports:
- 80:80
environment:
- TZ="Asia/Tokyo"
- RECEIVER_TYPE=relay
- BEASTHOST=readsb
- BEASTPORT=30005
- FEEDER_ID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
tmpfs:
- /run:exec,size=64M
- /var/log
動作確認
http://<IPアドレス>/skyaware/
にアクセスして、航空機をトラッキングできているか確認する。
また、 https://www.flightaware.com/adsb/stats/user/<ユーザー名> にアクセスして、データがFlightAwareに送られているか確認する。
docker-radarboxの導入
前段階で用意したdocker-readsb-protobufコンテナと連携して、RadarBoxにフィードするためのコンテナイメージ。
Sharing Keyの取得
そのままdocker runしようとするとSegmentation fault errorが発生するた。
ラズパイに生えている温度センサーを参照しようとしているが、実行している環境には存在しないためエラーが生えているらしい。
ここを参考に回避する。
# Segmentation fault error対策で偽の温度センサーを生やす
# sudo echoでファイルを書き込もうとしてもPermission deniedになるためrootになっておく
sudo su
mkdir -p /opt/adsb/data/radarbox_segfault_fix/thermal_zone0
echo 24000 > /opt/adsb/data/radarbox_segfault_fix/thermal_zone0/temp
exit
# sharing keyの取得。過去にデータを送信していて引き継ぐ場合は不要
timeout 300s docker run \
--rm \
-it \
-e BEASTHOST=127.0.0.1 \
-e LAT=<緯度> \
-e LONG=<経度> \
-e ALT=<高度(メートル)> \
-v /opt/adsb/data/radarbox_segfault_fix:/sys/class/thermal:ro \
ghcr.io/sdr-enthusiasts/docker-radarbox:latest
# [rbfeeder] [2023-08-20 18:23:09] Your new key is **********. Please save this key for future use.
# ↑というメッセージが流れてくるのでkeyをメモっておく
自分の場合ここのkey生成でもうすでに使われているものが出てきてしまった。
keyはMACアドレスを元に生成しているらしくここのIssueを参考に、以下のように別のMACアドレスを指定すると問題なく別のkeyで生成できた。
timeout 300s docker run \
--rm \
-it \
-e BEASTHOST=127.0.0.1 \
-e LAT=<緯度> \
-e LONG=<経度> \
-e ALT=<高度(メートル)> \
--mac-address XX:XX:XX:XX:XX:XX
-v /opt/adsb/data/radarbox_segfault_fix:/sys/class/thermal:ro \
ghcr.io/sdr-enthusiasts/docker-radarbox:latest
https://www.radarbox.com/sharing-data/claim から生成したkeyを送信してアンテナ位置を設定する。
docker-compose.ymlファイルに構成を追記する
docker-compose.yml
のservicesセクションに追記する。
rbfeeder:
image: ghcr.io/sdr-enthusiasts/docker-radarbox:latest
tty: true
container_name: rbfeeder
restart: always
environment:
- TZ=Asia/Tokyo
- BEASTHOST=readsb
- LAT=<緯度>
- LONG=<経度>
- ALT=<高度(メートル)>
- SHARING_KEY=XXXXXXXXXXXXXX
volumes:
- "radarbox_segfault_fix:/sys/class/thermal:ro"
また、Segmentation fault error対策にvolumesセクションに以下を追記し、docker compose down && docker compose up -d
で再起動する。
radarbox_segfault_fix:
driver: local
driver_opts:
type: none
device: /opt/adsb/data/radarbox_segfault_fix
o: bind
動作確認
https://www.radarbox.com/stations/<ステーション名> にアクセスして、データがRadarBoxに送られているか確認する。
最終的なdocker-compose.yml構成
フィードすることで貰えるプランの情報
これらのサービスに情報提供すると、月額約190ドル分のサービスが無料で使えるようになります。
サービス | プラン | 価格(月) |
---|---|---|
Flightradar24 | Business | $49.99 |
FlightAware | Enterprise | $99.95 |
Radarbox | Business | $39.95 |
参考
Discussion