空間放射線量データを公開しているSafecast。REST API経由で定点観測データを自動送信するには?

とらんじしょん昭島(地域活動)の一環で、空間線量定点観測所があるといいよねって話になって、システム構成検討中。そのメモ記事です。

全体の構成

絵にしたいとこですが、今の所はざっくり箇条書きで。

  1. 空間放射線量計測センサー
  2. 計測データ集計・送信用マイコン
  3. データベースサーバ(Safecastさんのデータベースに蓄積したい)
  4. 計測データ閲覧用フロントエンド(WebブラウザだったりiPhoneアプリだったり)

以下に詳細を書き留めます。

空間放射線量計測センサー

以下の3候補のうちの何れか。

電子工作ではおなじみ?のSparkFunが出しているGeiger Counter。個人輸入すれば$149程度です。コンパクトなガイガーミュラー菅は、LND712だそうです。

探してみると、意外とありますね。こちらはAdafruit製。$100切ってます。安い。ガイガー菅はSbM20っぽい。

そしてGM-10。3つの中では一番高くて、$199。SparkFunのと同LND712を使っているようです。

これらは全て、USBシリアル経由でASCII文字コードを出力するので、それらを1分間数えてあげればcpm(count per minute)単位でデータが取得できます。これをμSv/hに変換してやればいいわけですが、簡易なカウント数からシーベルトへの換算で書かれているLND712の係数を参考にすれば良さそう。

計測データ集計・送信用マイコン

SparkFunのGeiger CounterにはArduinoが載っているので、Ethernetボード+無線コンバータかませばいいかな? と思ったんですが、コストかかりすぎるので、$5マイコンボード Raspberry Pi Zeroを採用したい。

コストが安いのもいいのだけど、この安さと小ささでLinuxが動くもんだから、何でもできてしまうのが良い。これに格安の無線LAN USBドングル付ければ、データ送信部の出来上がり。

難点は、入手が困難ということか…。今のところ、一人当たり1ボードのみ購入できます、という状態。品薄状態が早く解消されないかなぁ。

データベースサーバ

空間放射線量計測用キットを自前で設計、開発したり、そのキット制作ワークショップを開催したり、データを蓄積するデータベースをオープンにしていたりと、何かと先進的な取り組みをされているSafecastさんという団体を見つけまして。

こちらに全てのデータを提供しつつ、データベース等のインフラを間借りさせていただけないかなぁ… と目論見中。そのうちコンタクトとってみようと思ってます。

ただ、Safecast APIでアカウント作成してAPI仕様を見ても、計測データをcurlとかでPOSTするのに必要なクエリが分からなかったので、Google ChromeのデベロッパツールやSafecastさん提供のgithubコードを参考に、コマンドベースでデータ送信できることを確認しました。

Safecastさん提供のWebアプリ経由で観測データをアップロードするまでの操作をGoogle Chromeデベロッパツールでトレースしてみると、以下のようなデータをPOSTしていることが分かります。

[General]
Request URL:https://api.safecast.org/en-US/measurements
Request Method:POST
Status Code:302 Found
Remote Address:162.243.100.197:443

[Response Headers]
Access-Control-Allow-Methods:GET, OPTION
Access-Control-Allow-Origin:*
Cache-Control:no-cache
Connection:keep-alive
Content-Type:text/html; charset=utf-8
Date:Fri, 19 Aug 2016 04:43:08 GMT
Location:https://api.safecast.org/en-US/measurements/70276074
...

[Form Data]
utf8:_
authenticity_token:xxxx
measurement[value]:0.28
measurement[unit]:usv
measurement[captured_at]:25 December 2014, 14:00:00
measurement[location_name]:栃木県那須塩原市二区町周辺
measurement[latitude]:36.867139847134666
measurement[longitude]:139.95172936359324
measurement[device_id]:155
measurement[height]:1m
measurement[surface]:Soil
measurement[radiation]:Air

これと、先ほどのSafecastさん提供githubコードに実装されているapi_keyクエリを追加したPythonコードが以下になります。

data = {
"utf8": "_",
"measurement[value]": 0.11,
"measurement[unit]": "usv",
"measurement[captured_at]": "25 December 2014, 14:00:00",
"measurement[location_name]": "埼玉県羽生市大字弥勒周辺",
"measurement[latitude]": 36.180948,
"measurement[longitude]": 139.585453,
"measurement[device_id]": 155,
"measurement[height]": "1m",
"measurement[surface]": "Soil",
"measurement[radiation]": "Air",
}

requests.post("https://api.safecast.org/en-US/measurements?api_key=xxxx", data=data)

この通り、しっかり反映されました。

計測データ閲覧用フロントエンド(WebブラウザだったりiPhoneアプリだったり)

Safecastさんとコラボさせてもらえれば、こんなカッコイイ線量マップが参照できてしまいます。すごい…。

まとめ

早いとこ全体構成図を描いて、Safecastさんにコンタクト取りたいと思います。

スポンサーリンク
  • このエントリーをはてなブックマークに追加