dump1090-fa

ADS-Bの受信用に購入したARM64のH5を搭載したシングルボードコンピュータのOrangePi Zero Plusは、DebianがベースのArmbianが動いている。昨年夏の時点ではADS-Bの受信にはdump1090-mutabilityを使用した。これはArmbianの標準リポジトリに入っているパッケージを単にインストールしたもの。簡単なので。
ただ、dump1090-mutabilityは昨年夏の時点で既にも既に開発者がもう開発を継続しないのでdump1090-faに移れと言っていたもの。流石に2020年に新しくインストールするならもうdump1090-mutabilityはナイ。
dump1090-faをググるとGithubではdump1090-faとしてhttps://github.com/adsbxchange/dump1090-fa がヒットするんだけど、こちらはArmbian上では全くビルドできなかった。
GitHubのdump1090-mutabilityのREADME.mdを見ると https://github.com/flightaware/dump1090 にリンクが張られていたので、dump1090-faはこちらが良いっぽい。

Orange Pi Zero Plus上でビルドする

$ sudo apt install git lighttpd debhelper librtlsdr-dev pkg-config dh-systemd libncurses5-dev libbladerf-dev libusb-dev devscripts

先ずはビルドに必要そうなパッケージをインストールする。Armbian新規インストール直後だともしかしたら他にも要るかも。後のビルド時のエラーを見て追加。

dump1090-fa 4.0では libhackrf-dev liblimesuite-dev が追加で必要になりました。でも、RTL-SDR受信機専用でビルドするならlibhackrf-devは要らないんじゃないかな?

$ git clone https://github.com/flightaware/dump1090 dump1090-fa
$ cd dump1090-fa

$ dpkg-buildpackage -b --no-sign
または
$ dpkg-buildpackage -b --no-sign --build-profiles=custom,rtlsdr

gitでダウンロードしてからビルド。
今回は普通にMakeするのではなくDebian用パッケージとして作製する。ラクだし。上の最後の行にするとRTL-SDRレシーバ専用になるのでわざわざビルドするならこれがオススメ。もちろんbladeRFとかHackRFを使ってるなら話は別。
ビルドが終わったら1つ上の階層にパッケージが出来ている筈。

$ ls ../
dump1090_3.8.0_all.deb
dump1090-fa  (dir)
dump1090-fa_3.8.0_arm64.buildinfo
dump1090-fa_3.8.0_arm64.changes
dump1090-fa_3.8.0_arm64.deb    ←これ
dump1090-fa-dbgsym_3.8.0_arm64.deb
いくつかパッケージが出来ている筈だが、インストールするのは1つだけ。
$ sudo dpkg -i dump1090-fa_3.8.0_arm64.deb

パッケージをインストール。systemd向けのサービス起動用ファイルも入るのでラク。

/lib/systemd/system/dump1090-fa.service (特に触る必要無し)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# dump1090-fa service for systemd

[Unit]
Description=dump1090 ADS-B receiver (FlightAware customization)
Documentation=https://flightaware.com/adsb/piaware/
Wants=network.target
After=network.target

[Service]
User=dump1090
RuntimeDirectory=dump1090-fa
RuntimeDirectoryMode=0755
ExecStart=/usr/share/dump1090-fa/start-dump1090-fa --write-json %t/dump1090-fa --quiet
SyslogIdentifier=dump1090-fa
Type=simple
Restart=on-failure
RestartSec=30
RestartPreventExitStatus=64
Nice=-5

[Install]
WantedBy=default.target
パッケージだと自動で入るが、内容の紹介だけ。

2021年6月6日追記:
dump1090-faのデフォルトはおそらくjsonファイルを/run/dump1090-faに出力するようになっている。dump1090-faを動かすシステムがHDDのPCなら問題ないが、Raspberry PiなどのシングルボードでmicroSDカードなどNANDメモリのストレージだと非常にマズい。そこでRAMディスクの/tmp配下などに出力するよう変更する方が良い。上のdump1090-faサービスファイルの中の" --write-json %t/dump1090-fa" の部分だが、単にpathを変更するだけだと失敗することがある。dump1090 Prometheus ExporterでADS-B受信状況を監視するに書いたので参照いただければと思います。

dump1090-faの設定

パッケージで入る設定ファイルは/etc/defaultにあるdump1090-fa。
この設定の初期値はRECEIVER_OPTIONSが--device-index 0 --gain -10 --ppm 0になっている。例えば手動でゲインを変更するなら--gain の後の数値を変える。初期値はマイナス値の-10で、この-10がオートゲイン向けらしいので触らないのが無難?
--ppmは激安RTL-SDR登載クロックオシレータが怪しいやつで周波数がズレるのを修正する用かしら。
SoCがH5なOrange Pi Zero Plusでは--enable-agc指定でdump1090-faのCPU使用率が30%に届かない程度。--enable-agc且つ--dcfilterを指定すると35%程度になった。でも、DC Filterって意味あるのかしら?
基本的にはあまり初期値から変更する必要はないと思うけど、アンテナ設置場所の座標(--lat 緯度 --lon 経度)だけは書いたほうが良さげ。でないと、ウェブUIの地図の表示の初期値がヨーロッパになるので日本まで地図をずらすのが面倒。座標を指定すると、その座標を中心とした同心円も地図に書かれるし。その座標オプションははレシーバーオプションなのかデコーダオプションなのかよく判らないがとりあえずRECEIVER_OPTIONSの方に足して機能している。なお、ウェブUIを使わないなら座標指定は要らない。
ネットワーク設定は設定ファイルの初期値のままで普通に他のホストから参照できる設定になっているので特に触らなくて良い筈。
ヘルプは dump1090-fa --helpで表示される。

dump1090-faの起動

$ sudo systemctl enable dump1090-fa.service
$ sudo service dump1090-fa start

1行目はdump1090-faのサービス有効化。これを実行すると次にワザと無効化するまでシステムを再起動しても有効化はずっと保たれる。
2行目はサービスの開始。先に有効化しないと開始できない。

JSON出力

各種JSONは/var/run/dump1090-fa下に出力される。(/lib/systemd/system/dump1090-fa.serviceの起動オプションによる)
このJSONを他のアプリに渡して利用することも可能。

Web UI

今回はウェブ出力付きでビルドしているので http://IPアドレス/dump1090-fa をブラウザで開く。
dump1090-fa 5.0では http://IPアドレス/skyaware/ でモダンUIに。

dump1090-fa Web-UI
表示される。うん、動いてる。でも、特に何かできるわけではないので要らないね。
ちなみに、この画像はdump1090-faの設定で座標を指定していないので同心円は描かれていない。また、ウェブ上の設定で飛行機の軌跡も描かないものになっている。

関連記事: