目次: 自宅サーバー
空を飛ぶ飛行機は離陸直後や着陸寸前でもない限り飛んでいる姿は見えませんが、現代の飛行機は大抵ADS-B(Automatic Dependent Surveilance-Broadcast)対応していて、どの飛行機がどこに居るか教えてくれます。地上局などが受信側で飛行機が送信側となり、送信側は1秒に1回くらいの間隔で自己位置を送っているそうです。
ADS-Bが使用する周波数帯は地上波テレビ(400MHz〜700MHzくらい)に近い1090MHzのUHF帯です。なので地デジ受信ができるSDR(Software Defined Radio)を使い、受信ソフトを実装すれば受信&復調できます。情報に暗号化や秘匿処理はないため誰でも受信して中身を見ることができる、割とおおらかなシステムです。
HWは復調RTL2838U、チューナーR820T搭載のUSBドングル(Nooelec NESDR Mini)にしました。Amazonで7,000円くらい。同じ復調ICが載っていればたぶん何でも良いです。母艦はROCK 5Bを使用します。
飛行機からの電波を受信するので、ドングル付属のアンテナは空が見える窓際などに置くと良いでしょう。
受信ソフトはいくつかあるっぽいですが、今回はreadsb(GitHubのソースコードリポジトリ)を使います。最初apt-getでreadsbをインストールしたら、RTL2838Uに対応していなくてエラーでした。ヘルプにrtlsdrを指定せよと書いてあるのに、指定するとエラーになります。なんだこりゃ?
$ readsb --device-type rtlsdr SDR type 'rtlsdr' not recognized; supported SDR types are: modesbeast gnshulc ifile none ERROR: Unknown device type:rtlsdr Error parsing the given command line parameters, check readsb --usage and readsb --help for valid parameters. invoked by: ./readsb --device-type rtlsdr
仕方ないのでソースコードからビルドして動作確認します。
$ git clone https://github.com/wiedehopf/readsb $ cd readsb $ make clean $ RTLSDR=yes make -j8 $ sudo ./readsb --device-type rtlsdr invoked by: ./readsb --device-type rtlsdr [2026-07-01 15:02:52.418 UTC] readsb starting up. readsb version: 3.16.14 wiedehopf git: v3.16-81-gb80c737 (committed: Mon May 4 20:10:25 2026 0000) autogain enabled, silent mode, suppressing gain changing messages lowestGain: 0.0 noiseLowThreshold: 34 noiseHighThreshold: 36 loudThreshold: 243 rtlsdr: using device #0: Generic RTL2832U OEM (Realtek, RTL2838UHIDIR, SN 00000001) Found Rafael Micro R820T tuner Allocating 16 zero-copy buffers $ sudo cp readsb /usr/bin/readsb
Debianのパッケージに含まれるバイナリ以外の便利なファイルたち(systemdやデーモンの設定/etc/default/readsb)はありがたく流用させてもらって、動かないバイナリだけ上書きしちゃいました。こういう雑なことをすると、将来的にapt upgradeしたタイミングで上書きされて動かなくなる可能性が高いので、ご注意ください。
受信機が置いてある座標を指定する必要があるみたいなので、/etc/default/readsbのDECODER_OPTIONSの先頭に--lat 35.xxxxx --lon 139.xxxxxを書き加えます。
DECODER_OPTIONS="--lat 35.xxxxx --lon 139.xxxxx --max-range 450 --write-json-every 1"
緯度と経度はGoogle Mapで自分の家をクリックするとURLに数字が出るので、その数字を使うといいでしょう。スマホのGPSアプリで調べるのも簡単で良いですね。
USBデバイスにアクセスできなくて怒られるときはudevの設定を足します。
# vim /etc/udev/rules.d/rtlsdr.rules # udevadm trigger
# RTL2832U OEM vid/pid, e.g. ezcap EzTV668 (E4000), Newsky TV28T (E4000/R820T) etc.
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
元にした情報はreadsbと同じ作者が公開している便利スクリプト(GitHubのリポジトリ)にあります。ファイル名はosmocom-rtl-sdr.rulesです。
設定出来たらreadsbサービスを再起動しましょう。systemctl statusで見てエラーになっていなければOKです。
$ sudo systemctl restart readsb
ADS-Bを表示するにはviewadsbを使います。下記のような情報が一覧で表示されるはずです。表示例は別の日に計測した結果なので7/3の情報じゃないかもですが、こんな雰囲気ってことで。
Hex Mode Sqwk Flight Alt Spd Hdg Lat Long RSSI Msgs Ti | ──────────────────────────────────────────────────────────────────────────────── 861B8E S 3735 JAL35 9350 299 232 35.483 139.888 -13.2 134 0
今住んでいる場所が羽田空港の近くなこともあり、飛行機のラッシュ時(夕方とか)に起動したら大量の飛行機が表示されて驚きました。羽田空港って大変ですね……。
この記事にコメントする
目次: 自宅サーバー
以前(2015年5月8日の日記参照)、GPSモジュールからの時刻情報を使ってNTPサーバの時刻を合わせました。最近はntpdがntpsecであることが多く、設定方法が違うのでメモしておきます。
設定はとても簡単で、下記を/etc/ntpsec/ntp.confに書き加えてsudo systemctl restart ntpd.serviceでデーモンを再起動させるだけです。当然ですがgpsdも起動している必要があります。
refclock shm unit 0 maxpoll 4 time1 0.232 refid GPS
設定の意味は公式ドキュメント(Shared Memory Driver - ntpsecのドキュメント参照)にある通りです。
両方のデーモン(ntpsec, gpsd)の設定がうまくいっていれば、ntpq -pを実行した際に下記のようにrefidがGPSになっている行が出現するはずです。
remote refid st t when poll reach delay offset jitter
===============================================================================
+SHM(0) .GPS. 0 l 5 16 377 0.0000 8.7846 14.7606
私の環境だとjitterがかなり大きな値となり、インターネット越しのStratum 2のサーバーに負けてしまいました。悲しい。より正確な時刻合わせを行うならPPSを受信する方法もあるみたいですが、ROCK 5BでGPIO使うのは大変そうなのでPPSは諦め気味です。今使っているケースが金属製の密閉型のため、ROCK 5Bのボード上ピンヘッダにアクセスするのは容易ではないのです……。
この記事にコメントする
| < | 2026 | > | ||||
| << | < | 07 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| - | - | - | 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | - |
24年2月7日
23年5月15日
26年6月27日
23年6月1日
26年7月3日
26年7月1日
26年6月26日
20年2月22日
26年6月18日
26年6月23日
26年6月11日
26年4月29日
26年5月3日
26年5月31日
26年6月8日
26年4月8日
26年5月28日
26年5月22日
21年7月10日
26年6月2日
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
2026年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: