Raspberry Piとfr24feedを用いてFlightrader24にフィードする

数年経過した情報が多かったので雑記。ターミナルの出力の記録等取っていないので書き逃しあるかもしれません。コメントなどでどうぞ。
主に複数の記事を見て自分が行った流れを雑記したものです。詳しくは記事中に貼っている参考記事を参照してください。
PiAware（FlightAwareのフィーダ）を併用する場合については以下の記事を参照ください。
https://qiita.com/makochan1209/items/56ce5706d350aa76651b

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

# 使用機材
* Raspberry Pi 3 model B
    * microSDカード（8GB）
* レシーバー（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を有効化する```：チェックを入れる。
    * ```公開鍵認証のみを許可する```にした方がセキュリティ面で安全です。ただ今回はパスワード認証を用いました（Tera Termで接続）。
* ```ユーザー名とパスワードを設定する```：チェックを入れる。
    * ユーザー名は```pi```は回避したほうがいいはずです。セキュリティ的に。
* ```Wi-Fiを設定する```：Wi-Fiに接続する場合はチェックを入れる。
    * Raspberry Piのモデルによって5GHz帯に対応しているものと対応していないものがあるのて要注意。
* ```ロケール設定をする```：チェックを入れる。
    * 自分の希望するタイムゾーン、キーボードレイアウトにします。

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

# Raspberry Piの起動・初期設定
モニターについては、OSが起動しているかどうか等わかりやすいので、接続しているとより作業が容易になります。特にエラーが出た時とか。

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

```
$ sudo apt update
$ sudo apt full-upgrade
```

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

* 2行目は```sudo apt upgrade```を用いたところ更新に失敗しました。
    * ```E: Could not get lock /var/lib/dpkg/lock（以下省略）```
    * 以下の参考記事に従って対応を行ったが変わらなかったので```full-upgrade```にしたところ解決。ちょっとよくわからない。
        * 参考記事：[apt-getでエラーが出た場合の対処法：E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)](https://qiita.com/jizo/items/9496496a3156dd39d91a)

# 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
```

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

# fr24feedのインストール
参考記事：[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と入力。
    * この設定で続けますか？と聞かれています。
* ```Step 4.1```：1を入力。
    * なお1を選ぶのはfr24feedのみでフィードを行う場合のみ。USB接続したレシーバーから直接情報を受け取ります。
    * piawareと共存する場合はこの方法を用いることはできません。後日記事を書く予定です。詳しくは以下の公式ページを参照してください。
    * 公式ページ：[How to share data from piaware? : Flightradar24 Support center](https://support.fr24.com/support/solutions/articles/3000115335-how-to-share-data-from-piaware-)
* ```Step 4.3```：何も入力しないでEnter
* ```Step 5.1```：yes
* ```Step 5.2```：yes
* ```Step 6```：1を入力。
    * 0でも2でも大丈夫なので好みの選択肢を選んでください。ログを記録、保存する時間と思われます。
* ```Installation and configuration completed!```と出ればインストール成功です。
    * エラーが出た場合はフィードは行えません。原因を調べる必要があります。
    * ただとりあえずやることはインストール成功時と同じなので、このまま次の章に進んでください（おそらくエラーが出るはずです）。

# fr24feedの状態確認（CLI）

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

```
$ fr24feed-status
```

すべて成功している場合は正常に動作しています。

## MLATのみFailedとなる場合の対応
### 起動順序の確認・変更
参考記事：[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
```

## 起動順序は問題ない場合
[Flightrader24](https://flightrader24.com)を開きます。また、dump1090の確認画面```[ホスト名].local/dump1090/```を開きます。

これにより、実際の航空機の飛行状況と、レシーバーの航空機認識状況を比較して、レシーバーが動作しているか・航空機が認識されているかを確認します。

### そもそも周囲に航空機が飛んでいない
Flightrader24で確認したところ、周囲に機体が飛んでいなかった場合です。
この場合は、航空機が周囲を飛行するのを待機します。レシーバーが機体を認識した時にMLATが動作しているかを確認しましょう。MLATは航空機を認識しないと動作しないと思われます（航空機を初めて認識するまでMLATはNoだったのが、認識した瞬間にYesに変わったことからの推測です）。

### 周囲に機体が飛んでいるが、レシーバーが機体を認識していない
Flightrader24で確認したところ、周囲に機体が飛んでいた場合です。
レシーバー、アンテナの状態を確認してください。アンテナを電波環境の良い場所に移動させることが望ましいと思われます。ガラス窓でも網入り窓ガラスだと受信性能が悪化するとの報告もあります。

参考記事：[ADS-B アンテナを室内で運用してみたら - ADSB](https://hokkaitaroblog.blog.fc2.com/blog-entry-532.html)

## Receiver: downの場合

参考記事：[fr24feedが "[FAIL] Receiver: down ... failed!" で起動しない](https://zenn.dev/algernon/articles/7c2d42a53fd6e8)

インストール自体が失敗している可能性が高いです。確認方法は参考記事を参照してください。
自分の作業手順は以下に雑記しますが、手順について詳しくは同じく参考記事を参照してください。

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

```
$ sudo /usr/lib/fr24/install_dump1090.sh
```

dump1090のインストールを行う。すると以下のエラーが出た。

```
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
```

最後の行に表示されているコマンドを手動で実行した。

```
sudo dpkg --configure -a
```

この状態で再度dump1090のインストールを行う。

```
$ sudo /usr/lib/fr24/install_dump1090.sh
```

問題なく終了したため、```fr24feed.service```を再起動する。

```
$ sudo systemctl restart fr24feed.service
$ sudo systemctl status fr24feed.service
```

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

# fr24feedの動作確認・設定変更（ブラウザから）
```[ホスト名].local:8754```で確認可能です。

認識・追跡された航空機の機数、Flightrader24にアップロードされた機数がリアルタイムで表示されます。また、fr24feedのインストールにおいて設定した、レシーバーの接続方法やMLATの有効・無効の変更などができます。

# （補足）dump1090の動作確認・検出状況のマップ表示
MLATのエラーの章で触れた内容の再掲です。
dump1090の確認画面は、```[ホスト名].local/dump1090/```から開けます。認識されている航空機のコールサイン、高度、速度、緯度経度が表示され、また地図上に認識されている航空機の位置が表示されます。とてもわかりやすく、また純粋に見ていて楽しい画面です。

# フィーダーからの情報の提供状況の確認・プランの確認
[Flightrader24のアカウントページ](https://www.flightradar24.com/account/data-sharing)から確認します。

まず、```STATUS```を確認します。Businessプランになる条件としては、STATUSが```Online```でなければなりません。```Offline```だけでなく、```Online - No data```ではBusinessプランにはなりません。

後者の```Online - No data```は、フィーダーはFlightrader24と通信ができているものの、フィーダー並びに接続されているレシーバー・アンテナが航空機の```位置情報```を認識できていないことを意味します。具体的には、```Hits and positions reported```において、```POSITIONS```が0の場合です。```HITS```は0でなかったとしても、No dataの扱いとなります。ADS-B信号を受信して、航空機の```存在```が認識されただけでは情報としては不十分で、```位置情報```まで受信できないとデータとしては認められないという意味です。

なお、位置情報が受信できないものの航空機のみ認識ができているということ自体は問題ではありません（実際自分のフィーダーもHitsのほうがPositionsよりもはるかに高く、dump1090で確認しても位置情報が不明の信号を多く受信しています）。
改善しない場合（位置情報が読めない場合）は、（MLATの時の繰り返しとなりますが）レシーバー、アンテナの状態を確認してください。アンテナを電波環境の良い場所に移動させることが望ましいと思われます。ガラス窓でも網入り窓ガラスだと受信性能が悪化するとの報告もあります。

参考記事：[ADS-B アンテナを室内で運用してみたら - ADSB](https://hokkaitaroblog.blog.fc2.com/blog-entry-532.html)

# あとがき
割とエラーをフルコースで踏み抜いた気がします。きつかった。
結構いろいろな情報があるのでネットに頼りましょう。ちなみにモニターがあるとやはり便利です。直接Raspberry Piの状態を確認できるだけでエラー対応がとても楽になりました。

# 今後の予定
piawareを併用できるように新たに組み直す予定です。記事は後日また書きます。