本気でADS-B受信環境構築 第5回 #ADSB

この記事を読む およそ時間 5

早くも5回目となる、ADS-B受信環境の構築ですが、ここからは本番機の構築です。
防水ケース組込(第6回)・アンテナ設置(第7回)・正式運用開始(第8回)を予定しています。

過去第1回から第4回まで、読んで無い方はそちらを先に読んで下さい。
今回は、staging環境から本番環境となるので、第3回と内容がかぶりますので
新規で1環境しか作らない場合は、第5回目は特に読まなくてもOKです。

ただし、第4回まで作った環境が壊れた場合、この記事と同じ事をしないと
行けないはずなので、その際の参考にしてもらえたらと思います。

本番機用意

staging環境は、手持ちのラズパイ3Bを使って構築しました。
全く問題無く動作はしていましたが、本番機はラズパイ4Bを使って構築していきます。

ラズパイ4B本体ですが、何気に一番安く買えるのはアリエクスプレスでした。
セールなどの時は、このくらいの金額で買えたりします。


ただし、届くまで結構時間がかかりますのでその点だけ要注意ですね。
あとは、全体的にサポートも良く無いです。安かろう悪かろうです。
壊れて届く物も多く、キットでは組み立ててもノイズがのったり
上手く動かないものも多いです。組立後なので、返品もどうなの?ってことでよくゴミ箱に捨てます。

本日時点では、ラズパイ4B(1GB)は下記の金額でした。

PoE HAT組込

今回は、アンテナ直下に設置するのでPoEを使って、データと電源をLANケーブル1本で
配信したい為、PoEHATを組み込んでケースに入れて行きます。

LANケーブル1本でラズパイが動いている事が確認出来る。

OSインストール

話がそれましたが、ラズパイ4B(4GB)を8000円弱で購入し、
手元に届きましたのでいつもの様にOSをSDカードに焼いていきます。

Bukkseye以外(Bookworm)OSイメージだと、なんか上手く行かなかったのと、
過去解説しているサイトが最新のイメージに対応しているのが少なく、あえてこれを入れています。
いちおう最新のイメージで試して見ましたが、どうもツール類はインストールまでは問題無かったですが
きれいに動いていない様子でした。

OSを焼き込んだSDカードを、ラズパイに挿入して電源をオンにして動作確認してください。

ネットワーク設定

DHCPでIPを設定するのも良いのですが、SSH等で接続するなどの使い方では
特定のIPに固定した方が管理が楽だったりするので、そちらを設定していきます。

なお、こちらはBukkseyeのOSとなります。最新のBookwormはまた別の方法で設定する必要があります。

sudo nano /etc/dhcpcd.conf
==========================================
下記を追加する
ip_address      = 固定したいIPアドレス/ネットワークマスク
routers        = デフォルトゲートウェイ(ルーター)
domain_name_servers = DNSサーバ 基本はルーターか、ISPのDNSサーバを指定
==========================================

interface eth0
static ip_address=192.168.3.44/24
static routers=192.168.3.1
static domain_name_servers=192.168.3.1

CTRL+OでSAVEして、CTRL+Xで抜ける
sudo reboot

起動してきたら下記で確認する
ip a

下記の様に設定されている事が分かる。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 192.168.3.44/24 brd 192.168.3.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever

ミドルウェアインストール

必要なソフトウェアをインストールしていきましょう

ドライバーインストール

★RTLドライバーをインストールする
$ sudo apt update
$ sudo apt install libusb-1.0-0-dev git cmake
$ sudo apt install debhelper

$ git clone https://github.com/rtlsdrblog/rtl-sdr-blog
$ cd rtl-sdr-blog
$ sudo dpkg-buildpackage -b --no-sign
$ cd ..

$ sudo dpkg -i librtlsdr0_*
$ sudo dpkg -i librtlsdr-dev_*
$ sudo dpkg -i rtl-sdr_*
$ sudo reboot

★認識してるかのテストを実施する
再起動後、下記のコマンドを実行しデバイスが認識されていることを確認する
$ rtl_test

デバイスが1つ見つかればOKです。表示内容は機種毎に違うので全く同じである必要はないです。

次にpiawareとdump1090-faをインストールする

$ wget https://ja.flightaware.com/adsb/piaware/files/packages/pool/piaware/f/flightaware-apt-repository/flightaware-apt-repository_1.2_all.deb
※上記wgetから最後のbまで1行で入力する

$ sudo dpkg -i flightaware-apt-repository_1.2_all.deb
$ sudo apt update
$ sudo apt install dump1090-fa
$ sudo apt install piaware

★下記のオプションを追加設定
$ sudo piaware-config allow-auto-updates yes
$ sudo piaware-config allow-manual-updates yes

$ sudo piaware-status 下記黒字を確認する
============================================
PiAware master process (piaware) is running with pid 671.
PiAware ADS-B client (faup1090) is running with pid 733.
PiAware ADS-B UAT client (faup978) is not running (disabled by configuration settings)
PiAware mlat client (fa-mlat-client) is running with pid 793.
Local ADS-B receiver (dump1090-fa) is running with pid 503.

dump1090-fa (pid 503) is listening for ES connections on port 30005.
faup1090 is connected to the ADS-B receiver.
piaware is connected to FlightAware.

dump1090 is NOT producing data on localhost:30005.

Your feeder ID is ID (from /var/cache/piaware/feeder_id)
============================================

★ブラウザで下記に接続(紐付けを行う)
https://flightaware.com/adsb/piaware/claim/上記ID

下記が表示されたら30分以内に、受信スコアのページが自動作成されるので待つ

プロファイルについて

同じアカウントに複数プロファイルが作られるが、基本は放置しておいて問題無いようだ。
半年たったら消していいか?問い合わせが来るらしく、問題無ければそこで削除される。
ただ、どうしても消したい方はサポートの問い合わせると消してくれるそうだ。

筆者は、staging環境と本番環境を作ったので、2つのプロファイルが作成された状態である。
下記の様に、オレンジのバーをクリックすることで、紐付けられたアカウントが見れるので
適当に名前をつけてどっちがどっちであるか、分かる様に設定しておくと良い。

今回は、staging環境と本番環境と作ったが、物理的ロケーションが違う場合、
どこに設置した物なのか?を記載した方が良い。

動作確認

http://ラズパイIP:8080 ブラウザーで接続

上記の様に飛行機が見えていれば、正常に動作している。

flightradar24にFeedを送る

$ sudo bash -c "$(wget -O - https://repo-feed.flightradar24.com/install_fr24_rpi.sh)"sudo bash -c "$(wget -O - https://repo-feed.flightradar24.com/install_fr24_rpi.sh)"

シェルがキックされて、インストールが行われます。
その最中下記の質問事項が対話式で出てくるので、それぞれを入力してください。

入力に必要な物を先にパラメーターとして、準備しておいてください。
・観測点の緯度経度 -> https://fukuno.jig.jp/app/map/latlng/
・メールアドレス

Step 1.1 - Enter your email address (username@domain.tld)
$:<★flightradar24で使うメールアドレスを入力(stagingと同じ物を入力)> Enter

Step 1.2 - If you used to feed FR24 with ADS-B data before, enter your sharing key.
If you don't remember your sharing key, you can find it in your account on the website under "My data sharing".
https://www.flightradar24.com/account/data-sharing

Enter your sharing key or press ENTER/RETURN to continue.
$:<stagingで発行されたIDを入力> Enter

Step 1.3 - Would you like to participate in MLAT calculations? (yes/no)$:
<★MLATのサービスを使うかどうか?の設定で、他のサービス(flightAwarcなど)に情報共有してる場合は "no" を入れる> Enter

上記1.2でIDを入れているので、次いきなり下記が表示される

Would you like to continue using these settings?
Enter your choice (yes/no)$:<★設定値確認なので問題無ければ "yes"> Enter

We have detected that you already have a dump1090 instance running. We can therefore automatically configure the FR24 feeder to use the existing receiver configuration, or you can manually configure all the parameters.

Would you like to use autoconfig (*yes*/no)$:<★dump1090-fa が同居し稼働してる場合 "yes"を入力する> Enter

Submitting form data...OK

Congratulations! You are now registered and ready to share ADS-B data with Flightradar24.

Thank you for supporting Flightradar24! We hope that you will enjoy our Premium services that will be available to you when you become an active feeder.

To start sending data now please start the fr24feed daemon again by running the following command: sudo systemctl start fr24feed!

Saving settings to /etc/fr24feed.ini...OK
Settings saved, attempting to enable and start the fr24feed service
Enabled fr24feed service...OK
Restarted fr24feed service...OK
All done, you can check the status by using the fr24feed-status command

Starting the fr24feed service, it may take a while if dump1090 needs to be installed...
Installation and configuration completed!

$ fr24feed-status 下記を確認する
FR24 Feeder/Decoder Process: running.
FR24 Stats Timestamp: 2024-08-31 15:39:08.
FR24 Link: connected [UDP].
FR24 Radar: T-R
FR24 Tracked AC: 0.
Receiver: connected (611207 MSGS/0 SYNC).

動作確認

ブラウザで下記でAccessする。
http://ラズパイのIPアドレス:8754

上記のような画面が出れば、現在Feedしている数等も表示されているので、
上手く動作しているか確認出来ます。続いて、アカウントとFeedを紐付けを行います。
Aircraft Tracked / Aorcraft Uploadesがカウントアップされているか確認する

下記のURLに接続して確認します。
https://www.flightradar24.com/account/data-sharing

上記の様に、Onlineになっていれ、正常にFeedされています。
ただ、時間帯によっては飛行機が飛んでない時間帯もあるので
その場合、1つ前の確認事項でAircraft Tracked / Aorcraft Uploadesがカウントアップされているか確認する。
ここが0の場合、何も受信できてなくて、Online (No Data)表記になる。

設定ミスなどで、正常にFeed出来ていない状況も考えられるので
下記で再度確認し、飛行機が測位できているのにもかかわらず
Aircraft Tracked / Aorcraft Uploadesがカウントアップされないのであれば
トラブルシューティングを行う必要がある

http://ラズパイIP:8080 ブラウザーで接続

小テクニック

ラズパイには、電源LEDとACT LEDが用意されています。
電源LEDは、電源をさした状態で赤に点灯します。エラーがあれば、点滅もするようですが
いったん、正常であれば赤点灯でOSを起動しても赤点灯のままなのです。
ACTは、SDカードにアクセスしている時にストレージアクセスLEDとして点滅します。

問題は、ラズパイは電源ぶち切りに対応していないということです。
ルーターなどは、内部で組込型のLinuxが動作していますが、
それはROMに焼かれた物が動作している為、電源をぶち切りしても
データ破損がされないような設計になっています。

ラズパイは、普通のSDカードをストレージにしたPCなので
起動中オープンになっているファイルが、停止プロセスを行わず
ぶち切ってしまうと、壊れる事があるというのが問題となっている。
メーカー側でも、最小2回、最大20回程度でOSが壊れると記載がある。
その場合、あきらめてOSの焼き直しから始めるしかないと書かれている。

これらの課題を解決すべく、今動いているのか?
シャットダウンして電源だけが供給されている状態なのか?を
ぱっと見で判断出来る様にするのが、今回の設定である。

 $ sudo nano /boot/config.txt

[all]の下に下記を追加する
dtparam=pwr_led_trigger=heartbeat

CTRL+OでSAVEして、CTRL+Xで抜けて
$ sudo reboot

これで下記の様な動きになる


上記の様に点滅している時は、SSHやConsoleに入って、シャットダウンコマンドを実行し
点灯状態になった事を確認して電源コードを抜く必要がある。

適当に監視を設定する

ZabbixAgentインストール

$ sudo apt install zabbix-agent
$ sudo nano /etc/zabbix/zabbix_agentd.conf

★Zabbix Server のIPを設定する
Server=192.168.3.?? 

CTRL+OでSAVEして、CTRL+Xで抜ける

★Zabbix Agentを再起動させる
$ sudo systemctl restart zabbix-agent

Zabbix Serverにホストを作成する

このようになれば、オンラインで監視状態になっている

受信している飛行機の数を監視したいのであれば下記をラズパイ側に追加設定する

$ sudo nano /etc/zabbix/zabbix_agentd.conf

★下記コードを設定ファイル最終行に追加する
UserParameter=flight_wc,cat /run/dump1090-fa/aircraft.json | grep hex | wc -l

CTRL+OでSAVEして、CTRL+Xで抜ける

★Zabbix Agentを再起動させる
$ sudo systemctl restart zabbix-agent

Zabbix Server側設定

アイテムとして、下記のように設定を入れる。

テストボタンがあるので、そちらをクリックする。
こちらで値が返ってきていれば、現在7件測位出来ている事が分かる。

測位できた飛行機の数を時間単位で、夜中も含めて確認することが出来る。

ADS-B 本番機用監視ダッシュボードを作成する

だいたいこの当たりの監視をしておけば、とりあえず問題ないと思われる。
防水ボックスに組み込んだ場合、USBの温度センサードングルを搭載予定なので
その防水ボックス内の温度もZabbixにて監視できる用に設定を行う。

2024/09/03 追記
ボックス内の温度(現在はまだ設置前なのでオープンエアー)やラズパイの温度、
fr24feed Versionが日次バッチで勝手にあがるのでそのversion情報
mlat msg/s received countの情報収集して表示できるようにしました。
だいたい、これだけ情報収集していれば、状況は把握出来るでしょう。

外部から見える様にリバプロを設定

これもいつも通りですが、8080と8754ポートについて、外部から確認したいので
適当にドメインふって、ダイジェスト認証かけてローカルは、http接続でアクセスさせて
フロントは、Nginxでリパプロさせてhttpsでアクセスするように設定する。
ローカル環境は、ローカルのDNSで制御し、ダイジェスト認証レスで
グローバルIPから来た物については、ダイジェスト認証で認証後使える環境に設定する

例>stg.pi.rurikara.com / stg.frf.rurikara.com PiAware SkyAware
  prd.pi.rurikara.com / prd.frf.rurikara.com flightradar24 Feed

Nginxに食わせる設定サンプルとしては以下の通り。

server {
    listen 80;
    server_name 管理画面にアクセスするドメイン名;
    return 301 https://手持ちのドメイン名$request_uri;
}

server {
    listen 443 ssl;
    server_name         管理画面にアクセスするドメイン名;
    ssl_certificate     /opt/psk/any_ssl_cert/SSL証明書.fullchain.pem;
    ssl_certificate_key /opt/psk/any_ssl_cert/SSL証明書鍵.key.pem;
    ssl_session_timeout 5m;                     #
    ssl_prefer_server_ciphers on;

    access_log            /var/log/nginx/管理画面ドメイン名.ssl-access.log  main;
    error_log             /var/log/nginx/管理画面ドメイン名.ssl-error.log;

    location / {
        satisfy any;
        allow 222.222.222.222/32;     # 自宅 GIP
        deny all;

      ######################################################
      # Access制限
        auth_basic  "digest authentication";
        auth_basic_user_file .login_auth;
        proxy_pass http://ラズパイIP:8080;
        proxy_redirect http:// https://;
   }

      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-Proto $scheme;

      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto https;
      proxy_set_header X-Forwarded-Port 443;
  }

本番機構築が終わって所感

なんだか分からないけど、性能が上がってデコード率がよくなったのか?
今まで見えなかった距離の飛行機が見え始めました。
アンテナやチューナーは、既に使ってきたものなので性能は変わらないはず。
変わったのは、ラズパイ3Bがラズパイ4Bになった事と、メモリーが1GBから4GBに増えたことなどです。

演算性能が上がれば、遠くまで見える!!
なんと奥が深いですね。これで、専用の9dbiのアンテナに付け替えたら
どこまで拾えるでしょうね。そして、次に1090MHzのフィルターとブースタをつけると
どこまでの飛行機の通信を測位出来るか?結果が楽しみです。

後は、雨とか曇りとか、雪とかの減衰も確認したい所。
BSとかCSは、天気が悪化するとブロックノイズが出始めますよね。
それは、雲の厚さがどんどん増してきて、BSやCSから発進された電波が減衰するからなのですが
1GHzを越えている電波なので、直進性も高く途中雲とかが出ると減衰すると思うんですよね。
雨の日は、ちょっと見える範囲が減るなとか、雪の日はとか色々な条件で見て行ければと思います。

残作業

基本的に、もう本番環境で測位しているので、後はPoEインジェクターを買って
DMZのVLANにつなぎ込むこと、今はとりあえずPoE HATをいったん取り外しており
TYPE-CのUSBで給電して、DMZのVLANに接続してセットアップを行っています。
PoE Switchが接続されているVLANがポート開放とかやって無くて
DMZIPに全部転送しているので、基本的に設計したポートに通信が出来ない
という制約があって構築時はそのような感じになってます。

PoEインジェクターを買えば、DMZのL2 SwitchからPoEインジェクターを経由して
PoE HATを接続したラズパイに接続でき、そこまで来たらケースに稼働状況に
組み込む事が可能になるので、とりあえず、PoEインジェクターを次は購入しようと思っています。

また、上でも書きましたが、USB温度センサードングルを買っているので
そちらも設定して、測定された温度をZabbix Agent経由で吸い上げて
Zabbix Serverでグラフを書かせて、指定以上の温度の場合、アラートがあがるような
設定にしようと思っています。

番外編で第5.1回というのが、USB温度センサー組込で記事を書くかも知れません。
防水ボックスと一緒にしちゃうかも知れません。お楽しみにしてください。

Related posts

Leave a Comment