みなさんも普段から例えばラズパイなんかにアンテナ付けて、dump1090-faをインストールして航空機のADS-B受信してFlightrader24に情報提供してBusinessアカウントもらってオンラインで航空機観察を楽しんでいると思います。
しかしせっかく自宅で受信しているのだから、Flightrader24やFlightAwareに提供するだけでなく、自分専用に楽しめることがあるといいですね!
そこで私は航空機が自宅に近づいてきたら Google Home に通知してくれる仕組みを作ってみました。
例えばラズパイにdump1090-faをインストールした状態だと /run/dump1090-fa/aircraft.json に最新の受信データが入っています。
試しに中身を覗いてみるとjson形式でデータが入っています。
# cat /run/dump1090-fa/aircraft.json
こんな感じで入っていると思います。
{ "now" : 1697609623.8,
"messages" : 2843412,
"aircraft" : [
{"hex":"87c823","alt_baro":3725,"squawk":"3440","mlat":[],"tisb":[],"messages":52,"seen":0.3,"rssi":-26.8},
{"hex":"8678e2","flight":"ANA69 ","alt_baro":2150,"alt_geom":2400,"gs":209.5,"tas":206,"track":47.3,"roll":1.1,"geom_rate":1152,"squawk":"2367","category":"A0","nav_qnh":1020.0,"nav_altitude_mcp":15008,"lat":35.610833,"lon":139.795532,"nic":8,"rc":186,"seen_pos":0.7,"version":0,"nac_p":8,"nac_v":2,"sil":2,"sil_type":"unknown","mlat":[],"tisb":[],"messages":974,"seen":0.2,"rssi":-11.2},
aircraft要素の配列に航空機一機ごとの情報があるのでこの中から使えそうな情報を使います。
例えば私がやってみたのは、
・日本の政府専用機(2機ある)を捉えたら通知する
・自宅の10km以内に接近し、高度10000ft以下の航空機を通知する
というものです。政府専用機はFlightrader24では非表示なので重宝するはず。
高度10000ft以下に絞ったのは、低空の航空機なら目視しやすいことと、高度10000ft以上は大抵ANAやらJALやらの定期便でレア感はないし、いちいち補足して通知するほどではないと思ったからです。
以下、サンプルコードです。(xxxxxxのところは自分で調べて埋めてください。わかる人はすぐわかるはず。)
googlehome.py はGoogle Homeに音声ファイルを渡すとそれを再生してくれるスクリプトです。
機会があれば別途解説記事を作成しますが、ここをFCMなり任意の通知処理に変えれば良いです。
#!/usr/bin/env python3
import json
import subprocess
json_open = open('/run/dump1090-fa/aircraft.json', 'r')
json_load = json.load(json_open)
for v in json_load['aircraft']:
if('hex' in v):
if(v['hex'] == 'xxxxxx' or v['hex'] == 'xxxxxx'):
arg = '政府専用機が近くにいるよ'
subprocess.call(f'/home/pi/googlehome.py {arg}'.split())
if('lat' in v):
if(v['lat'] > 34.xxxxxxx and v['lat'] < 36.xxxxxxx):
if('lon' in v):
if(v['lon'] > 138.xxxxxxx and v['lon'] < 140.xxxxxxx):
if('alt_baro' in v):
if(v['alt_baro'] < 10000):
if('flight' in v):
print(v['flight'])
flight = v['flight'].rstrip()
arg = f'{flight}が接近しているよ'
subprocess.call(f'/home/pi/googlehome.py {arg}'.split())
あとはこれをcronで数分置きに呼び出すことで監視が可能になります。
cronの設定については詳細触れませんが、crontab -e で以下のようにやれば1分置きにスクリプトを呼び出します。
# m h dom mon dow command
*/1 * * * * /home/pi/aircraft.py