✈️

Ubuntu+DockerでFlightradar24とFlightAwareとRadarboxにADS-B情報を配信する

2023/08/29に公開

航空機の位置情報を表示できるサービスのFlightradar24FlightAwareRadarboxにADS-B情報をフィード配信する手順です。
公式やネット上の情報はRaspberry Piを使用する方法がほとんどだったので、x86_64な環境のUbuntu Serverで動かす方法を残しておきます。

事前準備

Ubuntu Serverのセットアップ

普通にインストールしてください。
Dockerを使うので、ここを参考に導入しておく

利用するパッケージについて

Flightradar24に情報を送信するパッケージはx86_64なLinux用のものも用意されていたが、FlightAwareとRadarboxではRaspberry Piでしか動作できないようだった。
有志が用意したDockerイメージ群が公開されているので、これを利用して構築していく。

docker-readsb-protobufの導入

https://github.com/sdr-enthusiasts/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の導入

https://github.com/sdr-enthusiasts/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の導入

https://github.com/sdr-enthusiasts/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の導入

https://github.com/sdr-enthusiasts/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構成

https://gist.github.com/mnao305/bd35bfb3a2847bb262e0fb861df301f2

フィードすることで貰えるプランの情報

これらのサービスに情報提供すると、月額約190ドル分のサービスが無料で使えるようになります。

サービス プラン 価格(月)
Flightradar24 Business $49.99
FlightAware Enterprise $99.95
Radarbox Business $39.95

参考

https://github.com/sdr-enthusiasts/docker-readsb-protobuf

Discussion