Raspberry Pi上でpiawareとfr24feedを併用してフィードする

数年経過した情報が多かったので雑記。ターミナルの出力の記録等取っていないので書き逃しあるかもしれません。コメントなどでどうぞ。
主に複数の記事を見て自分が行った流れを雑記したものです。詳しくは記事中に貼っている参考記事を参照してください。

目的は、フィードを行うことでFlightrader24のBusinessプランとFlightAwareのEnterprizeプランをともに無料で使うことです。

なお自分が書いた[fr24feedのみでフィードを行った記事](https://qiita.com/makochan1209/items/703fe9c87fba4b28788f)からそのまま引用している箇所があります。

# 使用機材
* Raspberry Pi 3 model B
    * microSDカード（16GB）
* レシーバー（RTL-SDR.com）
* パソコン（Windows 11搭載、OS書き込み・Raspberry PiへのSSH接続）

# Raspberry Pi OSの書き込み
```Raspberry Pi Imager```を用います。以前より機能が向上しておりWi-FiやSSH接続の初期設定がImagerで行えるようになっていて、とても便利なので使っていきましょう。

* OS：```Raspberry Pi OS (32bit)```（推奨だったので）
* ストレージ：Raspberry Piに挿入するmicroSDカードを選択します。

この状態で歯車マークのボタン（設定メニュー）を開きます。設定メニューでは以下のように選択してください。

* ```ホスト名```：好きな名前にする。今後のRaspberry Piへの接続に用いるので記録しておきましょう。
* ```SSHを有効化する```：チェックを入れる。
    * ```公開鍵認証のみを許可する```にした方がセキュリティ面で安全です。
    * 公開鍵を（メモ帳などで開いて文字列として）そのままコピーして、```authorized_keys```欄に貼り付けることで登録できます。
* ```ユーザー名とパスワードを設定する```：チェックを入れる。
    * ユーザー名は```pi```は回避したほうがいいはずです。セキュリティ的に。
* ```Wi-Fiを設定する```：Wi-Fiに接続する場合はチェックを入れる。
    * Raspberry Piのモデルによって5GHz帯に対応しているものと対応していないものがあるのて要注意。
* ```ロケール設定をする```：チェックを入れる。
    * 自分の希望するタイムゾーン、キーボードレイアウトにします。

microSDカードに書き込みを行い、書き込んだmicroSDカードをRaspberry Piに差し込みます。

# Raspberry Piの起動・初期設定
起動したらまず更新を適用します。以下コマンドはSSH接続またはRaspberry Pi本体のターミナルで実行しています。

```
$ sudo apt update
$ sudo apt upgrade
```

カーネルアップデートなども含まれるので、ものすごく時間がかかります。頑張って待ってください。

# RTL-SDRの接続・パッケージのインストール
参考記事：[Raspberry Pi 4BでRTL-SDR | cagylogic](https://www.cagylogic.com/archives/2021/05/30000313/11981.php)

自分の作業手順は以下に雑記しますが、詳しくは参考記事を参照してください。

#### 実際の作業手順（雑記）
以下に自分の作業手順を記録します。

```
$ sudo apt install rtl-sdr
$ sudo apt install libusb-1.0-0-dev
$ echo 'blacklist dvb_usb_rtl28xxu' | sudo tee --append /etc/modprobe.d/blacklist-dvb_usb_rtl28xxu.conf
$ sudo reboot
```

再起動後の作業。
```
$ lsmod
```

dvb_usb_rtl28xxuが無いことを確認する。

```
$ rtl_test
```

差し込んでいるレシーバーが認識されることを確認する。

# piawareならびに関連するパッケージのインストール
この章は以下の公式サイトの内容をそのまま行っています。
公式サイト：[PiAware - dump1090 ADS-B integration with FlightAware - FlightAware](https://flightaware.com/adsb/piaware/install)

## piawareのインストール
```
$ wget https://flightaware.com/adsb/piaware/files/packages/pool/piaware/f/flightaware-apt-repository/flightaware-apt-repository_1.1_all.deb
$ sudo dpkg -i flightaware-apt-repository_1.1_all.deb
```

```
$ sudo apt update
$ sudo apt install piaware
```

```
$ sudo piaware-config allow-auto-updates yes
$ sudo piaware-config allow-manual-updates yes
```

## dump1090-faとdump978のインストール
```
$ sudo apt install dump1090-fa
$ sudo apt install dump978-fa
$ sudo reboot
```

## FlightAwareアカウントとの紐付け
PiAwareが起動しているRaspberry Pi（フィーダー）と同じネットワーク上にいるコンピュータのブラウザで、以下のURLを開くと紐付けの手続きが自動で行われます。便利すぎる。

FlightAware.comでPiAwareクライアントを申し込む - [https://flightaware.com/adsb/piaware/claim](https://flightaware.com/adsb/piaware/claim)
（ログイン情報を求められるサイトなのでフィッシングとか疑われないようにURLで貼ります）

なお、フィーダーが自動で認識されなかった場合については以下の参考記事を参照してください。

参考記事：[PiAwareを使ってFlightAwareにフィードする｜cope｜note](https://note.com/cope731/n/ne9aebb1fd2b2)

# fr24feedのインストール
fr24feedはdump1090-faを勝手に認識してくれて自動設定してくれるようなので、fr24feedをそのままインストールするより簡単な気もします。
自動設定が動作するにはdump1090-faが走っている必要があります。今回はPiAwareが動作している状態のはずなので、dump1090-faも動作しているはずです。

参考記事：[Flightradar24にデータをフィードしてみる（Raspberry Pi にセットアップ） - notebook 001](https://mkmkipy.hatenablog.com/entry/2020/06/07/020631)

wgetでインストールを行いました。
```
$ sudo bash -c "$(wget -O - http://repo.feed.flightradar24.com/install_fr24_rpi.sh)"
```

* ```Step 1.1```：メールアドレス入力
* ```Step 1.2```：何も入力しないでEnter
    * 再設定・再設置など、過去にフィードしていて登録がなされていてそれを引き継ぎたい場合は、以下のFlightrader24のページから```sharing key```を確認し入力します。入力しない場合は、別の新しいフィーダーとして扱われます。
    * 紐付けされているフィーダーの情報：[https://www.flightradar24.com/account/data-sharing](https://www.flightradar24.com/account/data-sharing)
* ```Step 1.3```：yesと入力。
    * より正確に航空機の位置等を計測する手法のようです。ある程度の処理性能を要するようです。なお、MLATについて詳しくは以下の参考文献を参照してください。
    * 参考文献：[マルチラテレーションシステム（MLAT）導入事例｜JRC 日本無線株式会社](https://www.jrc.co.jp/casestudy/case/mlat)
* ```Step 3.A```：アンテナ設置位置の緯度
    * 例：北緯36.2222度→```36.2222```
* ```Step 3.B```：アンテナ設置位置の経度
    * 例：東経139.5555度→```139.5555```
* ```Step 3.C```：アンテナ設置位置の標高
    * 標高をフィートに変換して入力します。
    * ビルなど高い場所に設置する場合は、階層分を概算で足した値とします。
* 入力内容の確認と、最も近い空港の情報を表示してくれる。
* ```Would you like to continue using these settings?```：yesと入力。
    * この設定で続けますか？と聞かれています。

## dump1090との同期
fr24feed側が勝手にdump1090-faを認識してくれて自動設定してくれます。なお、自動設定してくれない場合は次の章（小見出し）を参照してください。

```
We have detected that you already have a dump1090 instance running. （略）

Would you like to use autoconfig (*yes*/no)$:
```

自動設定を用いるにはyesを入力します。

```Installation and configuration completed!```と出ればインストール成功です。
    * エラーが出た場合はフィードは行えません。原因を調べる必要があります。
    * ただとりあえずやることはインストール成功時と同じなので、このまま次の章に進んでください（おそらくエラーが出るはずです）。

### 自動設定ができない・手動設定を行う場合
自動設定ができなかった場合は、裏でdump1090-faが走っていなかった可能性が高いです。

これ以降は試していないのですが、参考記事によるとおそらく以下のような設定が表示されるはずです（fr24feedの単独インストール時と同じ）。

参考記事：[FlightRadar24にフィードする - がとらぼ](https://intaa.net/archives/21706)

dump1090-faから情報を共有してもらうための値の設定方法は以下の公式サイトを参考にしました。

公式サイト：https://support.fr24.com/support/solutions/articles/3000115335-how-to-share-data-from-piaware-

共有の際の通信方法は2種類あります。基本的にはavr-tcpで良いと思います。

#### avr-tcpを用いる場合
* ```Step 4.1```：5を入力。
* ```Step 4.2```：1を入力。
* ```Step 4.3A```：127.0.0.1
* ```Step 4.3B```：30002
    * 参考記事では30003でうまくいったとの報告があります。
* ```Step 5.1```：no
* ```Step 5.2```：no
* ```Step 6```：1を入力。
    * 0でも2でも大丈夫なので好みの選択肢を選んでください。ログを記録、保存する時間と思われます。
* ```Installation and configuration completed!```と出ればインストール成功です。
    * エラーが出た場合はフィードは行えません。原因を調べる必要があります。
    * ただとりあえずやることはインストール成功時と同じなので、このまま次の章に進んでください（おそらくエラーが出るはずです）。

#### （参考）beast-tcpを用いる場合
* ```Step 4.1```：4を入力。
* ```Step 4.2```：1を入力。
* ```Step 4.3A```：127.0.0.1
* ```Step 4.3B```：30005
* ```Step 5.1```：no
* ```Step 5.2```：no
* ```Step 6```：1を入力。
    * 0でも2でも大丈夫なので好みの選択肢を選んでください。ログを記録、保存する時間と思われます。
* ```Installation and configuration completed!```と出ればインストール成功です。
    * エラーが出た場合はフィードは行えません。原因を調べる必要があります。
    * ただとりあえずやることはインストール成功時と同じなので、このまま次の章に進んでください（おそらくエラーが出るはずです）。


# fr24feedの状態確認（CLI）

fr24feedの動作状況を確認します。

```
$ fr24feed-status
```

すべて成功している場合は正常に動作しています。なおMLATについては、起動後に航空機を1機も見つけていない場合、有効となりません（再起動の場合も再起動後に認識されていないとMLATは無効と表示されます）。dump1090が航空機を認識してから再度確認した方がいいかなと思います。

正常であれば、一度再起動して再度fr24feedの動作状況を確認します。

```
$ sudo reboot
$ fr24feed-status
```

ここでもすべて成功している場合は正常に動作していますが、おそらくMLATが無効になると思われます。これは起動順序に原因があることが多いです。dump1090-faよりもfr24feedが先に起動してしまうことに問題があるようです。

参考記事：[FR24のMLATを自動起動させる+dump1090の状況を視覚化 – SDRでADS-Bとか、フライトシムとか。](https://darumaya.ddns.net/blog/fr24%E3%81%AEmlat%E3%82%92%E8%87%AA%E5%8B%95%E8%B5%B7%E5%8B%95%E3%81%95%E3%81%9B%E3%82%8Bdump1090%E3%81%AE%E7%8A%B6%E6%B3%81%E3%82%92%E8%A6%96%E8%A6%9A%E5%8C%96/?doing_wp_cron=1678441824.4840691089630126953125)

自分の作業手順は以下に雑記しますが、詳しくは参考記事を参照してください。

#### 実際の作業手順（雑記）
以下に自分の作業手順を記録します。

まず起動順序の確認を行う。
```
$ systemd-analyze plot > ~/systemd-analyze.svg
```

```systemd-analyze.svg```を開いてサービス起動順序を確認。Dump1090>FR24の順になっていない場合は正常に動作しないので修正が必要。

```
sudo vi /etc/rc.local
```
vimの代わりにnanoやemacsを使っても構わない。

エディタにおいて最後の```exit 0```の前に1行追記する。

```
/bin/sleep 20
```

```
$ sudo service fr24feed stop
$ sudo systemctl disable fr24feed
$ sudo vi /etc/systemd/system/fr24feed.service
```

```[Unit]```の中の```After```の部分を変更
```
[Unit]
Description=Flightradar24 Decoder & Feeder
#After=network-online.target  #元の設定をコメントアウトしてバックアップ
After=rc-local.service　  #追加する（rc-local.serviceの後にサービスを起動するように設定する）
```

```
$ sudo systemctl enable fr24feed
$ sudo reboot
```

起動順序の確認を行う。
```
$ systemd-analyze plot > ~/systemd-analyze.svg
```

```systemd-analyze.svg```を開いてサービス起動順序を確認。Dump1090>FR24の順になっているはず。なっていない場合は```rc.local```の待機時間を伸ばすなどして対応する。

再度fr24feedの動作状況を確認する。
```
$ fr24feed-status
```

なお、上述の通り起動後に航空機を1機も見つけていない場合、MLATは有効とならない。dump1090が航空機を認識してから再度確認する。

# あとがき
自分としてはfr24feed単独インストールよりだいぶ簡単にできた気もしました。エラーをそこまで踏み抜かなかったのはよかったです。