センサーから取得したデータをSORACOM Sigfoxを使って送信する

SORACOM Discovery 2017（2017/7/5に行われたカンファレンス)でSORACOMプラットフォームのSigfox™対応が発表されました。

ただただSigfoxネットワーク使うだけなら別にSORACOMでSigfox使う必要もないんですが、当然使うメリットがあります。[公式ブログ](https://blog.soracom.jp/blog/2017/07/05/release-air-sigfox/)では以下のように説明されています。

>「SORACOM」プラットフォームをご利用いただけば、無線通信方式毎に異なるシステムや運用体制を構築することなく、共通のプラットフォームで開発・管理・運用を行うことができます
普段の設備の稼働状況の監視等は SORACOM Air for Sigfox や SORACOM Air for LoRaWAN を用いて監視を行い、ファームウェアのアップデートといった高速通信や、広域に移動する移動体のトラッキングには SORACOM Air for セルラーを利用するといった、使い分けが可能です

ということで、とりあえず[Sens'it](http://www.kccs.co.jp/sigfox/product/)というSigfox対応のセンサデバイスを用いて収集したデータをSORACOMコンソール上で可視化してみたいと思います。

## Sens'itの購入
今回はSORACOM Harvestでサクッと可視化したいのでデバイスの購入もSORACOMコンソールから行います。
共通機能の発注からSens'itを購入します。
![貼り付けた画像_2017_10_05_4_27.png](https://qiita-image-store.s3.amazonaws.com/0/19695/9fe07304-986a-7e5b-7e35-75aaf9b85ca7.png)
通信費用込みと書いてありますが、そもそも通信費用なんて微々たるもんなんで、その辺は特に気にしなくて良いです。

その後、数日でデバイスが届くのでそうしたら注文履歴で受け取り確認のボタンをクリックして受け取り済みにしてください。
※ただ、僕の場合はボタンをクリックしていませんが以下の画面のように受け取り済みになっていました。
![貼り付けた画像_2017_10_05_4_16.png](https://qiita-image-store.s3.amazonaws.com/0/19695/27e9efed-7609-b235-373a-3305bc3d3a7d.png)

## デバイスの確認
受け取り済みにした後はデバイスの確認を行います。コンソールのメニューからSigfox > Sigfoxデバイス管理　と進んでください。そうすると、
![貼り付けた画像_2017_10_05_4_31.png](https://qiita-image-store.s3.amazonaws.com/0/19695/2bfd6a07-f873-de89-559f-6e91412a2165.png)
こんな感じでデバイスの登録が最初からされているのが確認できます。

※なお、SORACOMからSens'itを購入した場合、[Sens'it公式サイト](https://www.sensit.io/)の管理コンソールは使えないそうです。

## Harvestの設定
今回はHarvestを使って可視化するのでその設定を行います。
まずは管理コンソールのメニューからSigfox > Sigfoxグループ と進んでグループを追加してください。
名前は何でも良いです(今回はtestというグループを作りました）。
![貼り付けた画像_2017_10_05_4_37.png](https://qiita-image-store.s3.amazonaws.com/0/19695/c42968ed-13ce-a75c-1f8c-710e8e48273a.png)

グループ名をクリックしたら各種サービスの設定に入ります。
今回はHarvestだけですが、BeamとFunnelも設定することが可能です。
*ただ、Beam/Funnel/Harvestを同時には使えないのでその点は注意してください。
全部オンにしたらアルファベット順でBeam>Funnel>Harvestという順番で優先されます。要するに全部オンにしたらBeamしか実質使えません。*

Harvestの設定は簡単。
![SORACOM_ユーザーコンソール.png](https://qiita-image-store.s3.amazonaws.com/0/19695/71d41893-63ff-9454-ebb6-5548abea1b90.png)
バイナリパーサはONにしなくても良いらしいんですが、なぜか僕の場合はONにしないとデータ送信がうまくいきませんでした。気のせいな気もしてますが。

グループの設定が終わったらSigfoxデバイス管理に戻り、デバイスをグループに所属させます。
![貼り付けた画像_2017_10_05_4_48.png](https://qiita-image-store.s3.amazonaws.com/0/19695/b1e278af-f540-5f12-dd14-767784b6d003.png)

## 本体設定

所属させたらSens'itを起動しましょう。本体真ん中に唯一あるボタンを長押しします。僕は指ではうまく押せないんでボールペンで押してます。
![貼り付けた画像_2017_10_05_4_51.png](https://qiita-image-store.s3.amazonaws.com/0/19695/7b4359d5-c0d1-c81c-0053-b07e2f999204.png)

Sens'it自体のマニュアルは本体にも英語のものが同封されていますし、[こちら](http://www.kccs.co.jp/sigfox/product/#product-device)で日本語のものを確認できます。

とりあえず緑色に光らせてください。それが温湿度の取得モードです。
デフォルトでは１時間おきのデータ送信になっています。
今は下りの通信に対応していないんでこの間隔は変えられません。
２０１７年秋に下り対応するとのことですが、この記事を書いている今がガッツリ２０１７年秋です。

まあ、とりあえず窓際あたりにしばらく放置してください。
なお、そもそもですがsigfoxの対応エリアは[公式サイト](https://www.sigfox.com/en/coverage)で確認しといてください。

## データの確認
うまく通信できていたらデータの確認から送信されたデータを確認できます。
複数デバイスを同時に確認は今の所できないようです。
![貼り付けた画像_2017_10_05_4_48.png](https://qiita-image-store.s3.amazonaws.com/0/19695/b1e278af-f540-5f12-dd14-767784b6d003.png)

データは生データの他にグラフでも確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/19695/3a94e380-a6aa-7bf6-7625-c4bf6bcf7387.png)

このグラフの各線の意味が最初は不明な点もあったんですが、SORACOMに問い合わせたら速攻で教えてくれました。
>"device": デバイスID
"time": データ送信時刻（UNIXTIME）
"station": 基地局ID
"lat": 大まかな緯度（位置情報の取得には適しておりません）
"lng": 大まかな経度（位置情報の取得には適しておりません）
"rssi": 電波強度
"data": Sens'itからの送信データ（バイナリ）
"seqNumber": データの通し番号
---A---
"mode": データ取得モード（4は振動検知です。"modeText"の項目で現在のモードを確認できます）
"modeText": データ取得モードの名称
"timeframe": データ送信間隔
"timeframeText": データ送信間隔
"type": モード番号
"typeText": 信号の状態
"battery": バッテリーレベル
"tempCLowPrecision": 温湿度モード以外での低精度の温度データ（摂氏）
"tempFLowPrecision": 温湿度モード以外での低精度での温度データ（華氏）
"tempC": 温湿度モードでの温度データ（摂氏）
"tempF": 温湿度モードでの温度データ（華氏）
"reedSwitchState": マグネットモードのステータス
"numAlerts": センサが反応した回数
---B---
"binaryParserEnabled": ソラコムのバイナリパーサーの有効・無効

Sens'itが惜しいのはせっかく色々なセンサーを内蔵しているのに同時に１つのモードしか起動できない点。
下りサービスが始まったら遠隔でモード切り替えできるようになるかなと期待してはいます。

とりあえずSORACOM Sigfoxを使ってSens'itから取得したデータを確認の流れはこんな感じです。
次はSigfoxからのデータをfunnel経由でGoogle cloud pub/subに飛ばします。