Flightradar24で使用されているdump1090をコマンドラインで使用してみる!

Flightradar24で使用されているADS-Bの情報をデコードするdump1090をコマンドラインで使用してみます。

Flightradar24のサービスを停止する!

SDRのドングルをコマンドラインで使用できるようにするため、Flightradar24のサービスを停止します。

$ sudo systemctl stop fr24feed.service

dump1090のヘルプを参照してみる!

dump1090のヘルプを参照します。多機能であることがわかります。

pi@ras011p1:~ $ /usr/lib/fr24/dump1090 --help
-----------------------------------------------------------------------------
| dump1090 ModeS Receiver                              EB_SOURCE EB_VERSION |
-----------------------------------------------------------------------------
--device-index <index>   Select RTL device (default: 0)
--gain <db>              Set gain (default: max gain. Use -10 for auto-gain)
--enable-agc             Enable the Automatic Gain Control (default: off)
--freq <hz>              Set frequency (default: 1090 Mhz)
--ifile <filename>       Read data from file (use '-' for stdin)
--iformat <format>       Sample format for --ifile: UC8 (default), SC16, or SC16Q11
--throttle               When reading from a file, play back in realtime, not at max speed
--interactive            Interactive mode refreshing data on screen. Implies --throttle
--interactive-rows <num> Max number of rows in interactive mode (default: 22)
--interactive-ttl <sec>  Remove from list if idle for <sec> (default: 60)
--interactive-rtl1090    Display flight table in RTL1090 format
--raw                    Show only messages hex values
--net                    Enable networking
--modeac                 Enable decoding of SSR Modes 3/A & 3/C
--net-only               Enable just networking, no RTL device or file used
--net-bind-address <ip>  IP address to bind to (default: Any; Use 127.0.0.1 for private)
--net-ri-port <ports>    TCP raw input listen ports  (default: 30001)
--net-ro-port <ports>    TCP raw output listen ports (default: 30002)
--net-sbs-port <ports>   TCP BaseStation output listen ports (default: 30003)
--net-bi-port <ports>    TCP Beast input listen ports  (default: 30004,30104)
--net-bo-port <ports>    TCP Beast output listen ports (default: 30005)
--net-ro-size <size>     TCP output minimum size (default: 0)
--net-ro-interval <rate> TCP output memory flush rate in seconds (default: 0)
--net-heartbeat <rate>   TCP heartbeat rate in seconds (default: 60 sec; 0 to disable)
--net-buffer <n>         TCP buffer size 64Kb * (2^n) (default: n=0, 64Kb)
--net-verbatim           Do not apply CRC corrections to messages we forward; send unchanged
--forward-mlat           Allow forwarding of received mlat results to output ports
--lat <latitude>         Reference/receiver latitude for surface posn (opt)
--lon <longitude>        Reference/receiver longitude for surface posn (opt)
--max-range <distance>   Absolute maximum range for position decoding (in nm, default: 300)
--fix                    Enable single-bits error correction using CRC
--no-fix                 Disable single-bits error correction using CRC
--no-crc-check           Disable messages with broken CRC (discouraged)
--mlat                   display raw messages in Beast ascii mode
--stats                  Print stats at exit
--stats-range            Collect/show range histogram
--stats-every <seconds>  Show and reset stats every <seconds> seconds
--onlyaddr               Show only ICAO addresses (testing purposes)
--metric                 Use metric units (meters, km/h, ...)
--gnss                   Show altitudes as HAE/GNSS (with H suffix) when available
--snip <level>           Strip IQ file removing samples < level
--debug <flags>          Debug mode (verbose), see README for details
--quiet                  Disable output to stdout. Use for daemon applications
--show-only <addr>       Show only messages from the given ICAO on stdout
--ppm <error>            Set receiver error in parts per million (default 0)
--html-dir <dir>         Use <dir> as base directory for the internal HTTP server. Defaults to /usr/share/dump1090-mutability/html
--write-json <dir>       Periodically write json output to <dir> (for serving by a separate webserver)
--write-json-every <t>   Write json output every t seconds (default 1)
--json-location-accuracy <n>  Accuracy of receiver location in json metadata: 0=no location, 1=approximate, 2=exact
--dcfilter               Apply a 1Hz DC filter to input data (requires lots more CPU)
--help                   Show this help

Debug mode flags: d = Log frames decoded with errors
                  D = Log frames decoded with zero errors
                  c = Log frames with bad CRC
                  C = Log frames with good CRC
                  p = Log frames with bad preamble
                  n = Log network debugging info
                  j = Log frames to frames.js, loadable by debug.html

対話モード(interactive mode)を使用してみる!

試しに、対話モードを使用してみます。以下のような情報が、リアルタイムに更新されて表示されます。

$ /usr/lib/fr24/dump1090 --interactive

 Hex    Mode  Sqwk  Flight   Alt    Spd  Hdg    Lat      Long   RSSI  Msgs  Ti/
-------------------------------------------------------------------------------
 8464D2 S     2011  ANA1097   3350  202  136   35.523  139.875 -23.6   251 11
 86DDD4 S     2165            2550                             -24.8     7 32
 86D2AA S     7302  ANA265   17750                             -23.4    15 42
 84C43E S     2403  SFJ85     7625  235  264   35.460  139.818 -20.3   638  0
 86D6A4 S     3345  ANA35    15375  342  256   35.347  139.585 -19.1   881  0
 4D0109 S     3256  ICV5717  28000  309  257   35.441  139.872 -24.7   272  3

Web画面を表示してみる!

Web画面を表示してみます。dump1090を停止して、Flightradar24のサービスを起動します。

sudo systemctl start fr24feed.service

以下のように、RaspberrypiのIPアドレスを使用して、ブラウザでアクセスします。

http://10.1.5.11/dump1090/

以下のようなマップ表示を見ることができます。

おわりに

Flightradar24の仕組みを理解するために、dump1090をコマンドラインで動作させてみました。ADS-B情報を出力して、Webサーバで表示できるようにすると独自のFlightradar24のようなサイトが構築できるようです。