ADS-Bアンテナをベランダに設置してRaspberry Piからflightradar24/FlightAwareへfeedしよう

新年度です。


さて、MH370ですがインマルサットの解析インド洋に向かったという情報が出てきました。ハイジャックからコックピットで火災説まで様々な予測が出ていますが、FDR/CVRを見つけるまでは断言が出来ません。AF447はフランスがメンツを賭けて根性で探して2年後にブラックボックスを発見しましたが、MH370はどうなることやら。英語版Wikipediaブラックボックスが見つかっていない航空事故の一覧がありますね。

それはそれとして、アンテナを作ったりUSBケーブルを外まで引っ張るのに苦労したり、flightradar24にfeedしたりしたので、それをまとめます。

アンテナを作る

aitendoで売ってるTV28Tv2DVB-T(R820T)にはエレメント長118mm(実測)のモノポールアンテナがついてます。1/4波長モノポールと考えたら600MHz帯用ですか。ADS-Bの電波は1090MHz固定なので、折角なら専用のアンテナを作りたいところ。

ADS-B アンテナ 自作 [検索]

探すと、同軸ケーブル使ったコリニアアンテナを作るのが一般的な様子。しかし同軸ケーブル手元にないので買うと高いので却下。更に探すと、チューナ附属のモノポールアンテナ台座を流用した針金でコリニアアンテナを作った記事を発見。

RTLチューナ付属アンテナをADS-B(1090MHz)用コリニアアンテナに改造してみました: K's Memo-Random

これで行きましょう。データはSBS-1 & SBS-3 Mode-S / ADSB Virtual Radar : User Forum xx • View topic - How tu build antenna for sbs-1?にあるとおり。川端のデイツー行って2mmの針金を買ってきました。

上から193mm→直径20mmループ→206mm→直径20mmループ→187mm。針金をこんな感じにペンチ使ってエイヤと曲げてやります。
f:id:W53SA:20140406005650j:plain
縦長写真になっちゃうので横に倒しました。ちなみに隣は附属のアンテナ。

針金を適当にジグザグにして1mmぶんの太さを稼いだ後に高ナットへ叩き込み、元あったアンテナ台座にネジ止め。

これだけアンテナ長くなれば見えるエリア広くなるかなーと思うわけですよ。同じ場所のアンテナで附属のモノポールと自作のコリニアで24時間ほど観測してadsbScopeのMaxRangeを重ねてみました。
f:id:W53SA:20140406010219p:plain
若干広くなったけど、劇的な変化はなし。まぁ数百円の出費ですから、こんなもんでしょう。そもそもベランダに置いてる時点で見えるエリアが偏るのはしゃーないし。

ちなみに、飛行機は様々な高さをもって飛んでるので二次元マップにプロットしたエリアでも見えない飛行機はありますわね。

ベランダに設置

窓際のRaspberry Piとアンテナ(及びチューナ)を1mぐらいのUSB延長ケーブルで繋いでたんですが、これだと窓が閉まらなくて寒い。窓を閉めるためにはエアコンの配管穴を経由して繋がないとだめ。

そこで、寺町マルツまで行って5mのツイストペア4芯ケーブルを買ってきてUSBコネクタ付けてチューナを差してみたわけだ。USBの規格上5mまで行けるんだからこれでよかろう。

しかし

デバイスは見えるけど受信できない。

どうやらケーブル品質にシビアらしい。これEthernetよりめんどいぞ。というか伝送路は単なる2芯ツイストペアで残り2本は単なる送電線なんだから四芯ツイストペア買う必要なかったやんけ…。

仕方ないので、また寺町マルツまで行って5mのUSBリピータケーブル買ってきました。

サンワサプライ USB2.0リピーターケーブル  5m  KB-USB-R205

サンワサプライ USB2.0リピーターケーブル 5m KB-USB-R205

使ってみると、当然ながら(?)一発で受信成功。なんでや、ということでバラしてみた。
f:id:W53SA:20140406011516j:plain
中心に位置するチップは4ポートUSBハブLSIμPD720114

ケーブルが残念だったのもあるかもしれないけど、デバイスから5mも引っ張ったのが敗因な雰囲気。これはUSBハブを5mケーブル先に繋ぎチューナをハブに突き刺せば良かったんちゃうのということですが、これだけのためにUSBハブ買うのもバカっぽいのでこれ以上深入りはせず。

なんで最初からリピーターケーブル買わんかったんや、って話ですけどエアコンの配管穴をUSBコネクタが通るか怪しかったんですね。ですが、結局USBコネクタ付きケーブルを通す羽目に。針金で試行錯誤したら通ってしまい実験してから買えばよかった、という結論に。切ない。

Flightradar24へfeedする

ここまで出来たら自分で近所の飛行機の状況を見れるわけですが、せっかくなのでfr24へfeedしてみましょう。

feedするソフトウェアはLinux版(Raspberry Pi用のARM LE向けbinary blobもある)があるんですが、feedするために必要な共有キーはWindows版クライアントでしか取得できません。

Software - Flightradar24.com - Live flight tracker!

Windows版クライアントを起動して、連絡用メールアドレスと、受信地の緯度経度を入力し、dump1090が走ってるRaspberry Piのhost:portを入れてSign up。上手くdump1090の吐く情報がfr24の情報と一致すれば認証が成功して自動的に共有キーが取得されます。なお、この共有キーはメールアドレスに送信されます。

認証キーを取れればWindows版クライアントを閉じてしまっていいんですが、その前に「flightradar24 PREMIUM」とか書かれたバナーをクリックしてfr24のアカウントを作ることが出来ます*1。データをfeedする限り*2、プレミアムを無料で使わせてくれるって。

ちなみに、このアカウント情報でfeedしている概要が表示できます。
f:id:W53SA:20140406013522j:plain
レーダーは受信地座標の最寄り空港名がつきます。

あとはさっき取得した共有キーを引数につけてLinux版のクライアント*3をRaspberry Piで起動すれば、適当にADS-B受信情報がfr24へfeedされます。

FlightAwareへfeedする

[この項4 Sep 2014追記。また、タイトルを変更しました。]


fr24以外にもADS-Bを記録しているWebサイトはいくつかあって、その一つにFlightAwareがあります。ここが8/14にRaspberry Pi用のFeeder(PiAware)をリリースしたのでこちにもfeedしてみました*4

dump1090が走っていれば、やり方は単純で配布ページからdeb拾ってきて入れるだけ*5。PiAwareはdaemonとして裏で動き、マシンで既に動いてるdump1090のbeast modeから情報を取ってきてfeedします。

で、なんかEnterpriseアカウント(89.95USD/月)に無償でしてくれるって書いてあるんだけど今ひとつ何が嬉しいアカウントなのかわからん。

f:id:W53SA:20140904131905p:plain

Nearest Airportが徳島空港になってる。おそらく、南側しか開けてなくて見えてるエリアの中心に一番近いのが徳島って判断をしたのでしょう。

*1:アカウントは共有キー取る際に使ったメールアドレスで作ってね、という注意事項がアカウント作成時に出るので、その点注意。

*2:データの最終feedから7日、なので適当に再起動したりしてfeedが一時的に止まっても即座にアカウント停止はなさげ。

*3:ちなみに、static linkとdynamic linkがあります。容量ケチる理由がないんでstatic linkedをわたしは使いました。

*4:forum見ると最初はあんまり安定してなくて試行錯誤してたようですが、今のPiAware 1.9は特段何も苦労せずに動きました。

*5:もちろんFlightAwareのアカウント情報がないとfeedできないんでアカウント作っておく必要はありますが

ADS-B受信にチャレンジ

MH370(9M-MRO)は一体何処へ行ってしまったのでしょうか。一週間たっても何の残骸も見つからないって意味がわからないです。

最近の飛行機は飛行機の位置座標などを随時放送*1する機械が積まれていています。これをみんなで受信してマップにプロットしたのが、flightradar24(通称fr24)です。MH370失踪が最初にネット上で話題になったのもfr24ですし、成田空港が強風で一時クローズすると千葉沖などでぐるぐるする飛行機がいますがそれをfr24で見て実況する人がいたり、知り合いの乗った飛行機が飛んで行くのを見守ったり、使い方は色々あります。


せっかくだから自分でも受信してみたいよね。


ぐぐると、1000円弱で変えるデバイスを使ったソフトウェアラジオで受信ができるらしい。

というわけで、買ってみたのはaitendoの特売品*2。R820Tはこの手のデバイスで割と優秀なようですが、熱くなって中の水晶振動子がドリフト起こして受信周波数がずれたりするらしい*3

届いたので取り敢えずノートマシンに繋いで様子を見ることに。

ドライバのインストール

ドングルをマシンに突き刺すとドライバインストールダイアログが出ますが閉じて、R820TをWinUSBで叩くためにZadigを使います。Zadigを起動してOption→List all Devicesをチェックするとデバイスが見えます。

f:id:W53SA:20140316180957p:plain

モノによっては見えるデバイス名が違うこともあるようです。二つ見えるので2つともにWinUSBをインストール。

受信する

デバイスが見えるようになったので、まずはソフトウェアラジオ+デコーダADSB#を入れる。入れると言ってもzipを拾ってきて適当に展開して起動するだけ。これで、Frames/secsが0でなければ何か受信してます。telnetlocalhost:47806に繋ぐとデコードされたデータが流れてきているはず。

表示する

デコードされたデータ見ても受信できてることしかわからんので、地図上にプロットします。プロットツールはadsbSCOPEVirtual Radar Serverが有名なようです。

adsbSCOPEを使った画像はこんな感じになりました。
f:id:W53SA:20140316181931p:plain

adsbSCOPEは自前で地図を表示しますが、Virtual Radar Serverを使うとGoogleMapに表示するWebサーバとして動くのでブラウザを使って最新の地図上にプロットされた情報を見ることが出来ます。

どちらもADSB#に繋いでデータをもらってくる設定をしなきゃいけないんですが、ちょっと手間取りました。参考文献あたりを参考にしてください。

次回予告

取り敢えずWindowsマシンに繋いで動くことはわかったので、次はこんなところを予定してます。

  • Raspberry PiでADS-Bソフトウェアラジオ/デコーダを動かす
  • アンテナを作る
  • ベランダに設置する算段を考える
  • R820熱くなりすぎるので放熱を考える

追記

Raspberry Piでさっくり動いてしまいました。

端的に言えば、http://git.osmocom.org/rtl-sdrからソフトウェアラジオライブラリをcloneしてbuildし、https://github.com/MalcolmRobb/dump1090からADS-Bデコーダをcloneしてbuildするだけ。デバイスは突き刺すだけで特段ko入れることなく認識されます。詳細は参考URIを見てください。

dump1090のinteractive表示と、dump1090が内部で持ってるWebサーバ経由でGoogle Mapに描いてる様子。もちろん、adsbSCOPEにdump1090を繋いで表示もできます。dump1090のデフォルト待ち受けポートが30002*4ってことぐらい気をつければいいでしょう。
f:id:W53SA:20140316223301j:plain

いやー、これソフトウェア的にはほぼ出来ていて、アンテナとか熱対策とかハード回りが本番ですね。南向きアパートのベランダなので北側が全く見えなくて辛いところ。桂キャンパスとか受信環境良さそう…。

*1:これをADS-Bと呼びます。

*2:記事執筆時点では品切れになっていました…。魔改造用に二個発注しときゃよかったなぁ。

*3:で、TCXOに根性で置換した人がいるとかなかなか遊び甲斐があるデバイス。

*4:dump1090の起動オプションで変更可能。わたしの環境ではWebサーバ用ポート8080が既に使用済みなので、Webサーバ待ち受けポートだけ起動時の引数で変更した。

艦これ専用ブラウザのような何かを作ったよ

前からネタにしていた艦これの専ブラ、そこそこまともなドキュメントをようやく書きました。

f:id:W53SA:20140306020626p:plain
f:id:W53SA:20140306013919j:plain

ドキュメントを真面目に書くのに時間かかりましたね…。ということで、取り敢えず公開してみます。

http://www.3pf.jp/products/kcb から。

配布サイトでも散々書いてますが、専ブラは割とグレーらしいので自己責任で。

一般公開前から身内に配っていて感想とか要望貰って色々弄りました。感謝ですね。

Googleスプレッドシートで.NETアプリケーションのデータを管理する

最近(というほどではないかもしれないけど)は色んなログをオンラインデータストレージに放り込むのが流行ってます。Apacheのログとかを放り込んでごりごり解析するTreasureDataとか有名*1ですね。

さて。

ログと言えば艦これ*2
f:id:W53SA:20140219003119p:plain
専ブラが吐き出す艦船建造などのログが貯まってきたので、これをオンラインデータストレージに放り込んでやりたいなというのが今回のお話。

*1:TDが流行り始めたの、ちょうど一年ぐらい前でしたか。

*2:どうでもいいことですが、Excelutf-8など非Shift_JISで書かれたcsv食わすと文字化けします。

続きを読む

WebBrowserコントロールのIEバージョン

.NETアプリでWebBroserコントロールを貼っつけたらInternet Explorerコンポーネントが貼り付けられます。
ところで、このIEコンポーネント、どんなIEなんでしょうか。

「そんなんマシンに入ってるIEと同じに決まってんやろ」という人は鴨川デルタで磔にされますよ。



f:id:W53SA:20131216203756j:plain

WebBroswerコントロールで動くIEはバージョン7です。

ほんまかいな、という人のためにAcid2テスト*1をしてみましょう。

f:id:W53SA:20131216204027j:plain

見事に失敗してますね。

In order to ensure that these existing applications remain in working order, IE8 renders pages running within instances of the WebBrowser control in IE7 Standards Mode by default.


WebBrowser Control Rendering Modes in IE8 - IEBlog - Site Home - MSDN Blogs

既存のアプリケーションが困らないようにこうしたんだって。

*1:Acid2IE7不合格でIE8は合格してる。

続きを読む

C#でJSONを読み込むメモ

Webアプリケーションでのデータ構造デファクトスタンダードがJSONなので、.NETというかC#でJSONを読みたいことがままあります。

みんな同じようなことを思うので、ライブラリがちゃんとあって、周辺環境も色々と整備されています。

基本的にはぐぐればおよその情報が出てくるので、メモ程度です。

あ、前の記事で艦これのやりとりするJSONデータが取れたんで、それを料理しましょうって話です。

続きを読む

FiddlerCoreを使ってC#でhttp通信を覗き見しよう

突然ですが、HTTP通信を覗くことを考えます。

あ、艦これの専ブラを作った話からの続きです、はい。

要するにHTTPプロキシを作ればいいわけで、C#にはSystem.Net.HttpListenerというHTTPサーバクラスもあったりして自前で実装することもできますが、FiddlerCoreという.NET向けHTTPプロキシライブラリがあるのでこれを使うことにしました。車輪の再発明はやめて、枯れたライブラリをありがたく使わせてもらいましょう*1

FiddlerCoreとは

FiddlerというHTTPアナライザのHTTPプロキシ部分がライブラリFiddlerCoreとして提供されています。

なので、単にHTTPセッションを中継するだけではなく、以下の機能があります。
「HTTPセッションをハンドルし、適当なタイミングでイベントを呼び、HTTPリクエスト/レスポンスを適当に調理したものを渡してくれる。」
完璧じゃないですか。

というわけで、早速使ってみましょう。

*1:自分の書いたコードが一番信用ならんかったりするよね。

続きを読む