夏休みの宿題はため込む派の松下です。
7/5のSORACOM Discoveryで発表になりましたSigfoxのサポートですが、Sigfox対応デバイス2種の出荷がいよいよ始まります!
実際に利用可能なデバイスや通信可能な範囲、そして使い方をご紹介します。
Sigfoxの通信可能地域
まずはご自宅や利用したい地域でSigfoxの電波が届くか確認してみましょう!
Sigfoxの電波が届く範囲(カバレッジ)を調べるには、Sigfox社のcoverageページを見るのが一番です。
「Japan」を選択すると日本国内の状況が確認できます。
水色になっている地域がSigfoxの電波が届く地域です。東京・大阪・愛知だけでなく、福岡や札幌でも利用可能になっているようですね。
この図は随時更新されているようですので、Sigfoxを検討する際には是非チェックしてください。
※範囲は基地局の配置から推測したものであり、実測や実績に基づいたものでは無いのでご注意ください。また範囲内であっても建物内では圏外となる可能性もあります。
Sigfoxデバイスのご紹介
今回SORACOMでご購入&ご利用できるSigfoxデバイスは2種類ご用意しています。
- 6種のセンサーが使える汎用デバイス Sens’it
- 2チャンネルの接点出力をSigfoxで送信 ドライコンタクトコンバーター
Sigfoxの購入からセットアップまで
ご購入の方法はSORACOM Air for Sigfox の利用方法を、そしてデバイスが到着した後の登録作業はSigfox デバイス Sens’it をセットアップするに詳しく書かれていますので、ご覧ください。
※セットアップのページはSens’itのものですが、ドライコンタクトコンバーターも同様にSigfoxデバイスの受取確認を行ってください。
デバイスの使い方:Sens’it
Sens’itは温湿度、照度、ドア開閉検知、振動検知、磁気、ボタンの6つのセンサーデータをSigfoxで送信できる、充電式バッテリー内蔵の汎用デバイスです。
Sens’it のデータを SORACOM Harvest に送信して表示する手順はSigfox デバイス Sens’it をセットアップするに記載されていますので、ここでは SORACOM Funnel を通じてクラウドへデータを送ってみます。
2017/9/8 UPDATE!! 定義済みフォーマットがリリースされ、Sens’itのデータを簡単に展開できるようになりました!
SORACOM Funnel から出力されるJSONデータは下記の通りで payloads.data
にSens’itからのデータが格納されていますが、ビット単位で読み込んで展開する必要がある形式です。
{
"operatorId": "OPXXXXXXXXXXX",
"timestamp": 1504082329266,
"destination": {
"resourceUrl": "https://YOUR-AWS-IoT-ENDPOINT.amazonaws.com/YOUR_TOPIC/",
"service": "aws-iot",
"provider": "aws"
},
"credentialsId": "aws-cred",
"payloads": {
"seqNumber": "999",
"lat": "99.9",
"station": "XXXX",
"time": "1504082323",
"device": "XXXXXX",
"rssi": "-115.00",
"lng": "999.9",
"data": "81651969"
},
"sourceProtocol": "sigfox",
"deviceId": "XXXXXX"
}
幸いなことに sigfox/npm-sensit という Node.js ライブラリが提供されていますので、これを利用することで payloads.data
の中身を展開することができます。
今回は AWS Lambda 上で展開し、再度AWS IoTにpublishしなおす Node.js コードをご紹介します。
全体構成
全体構成は以下の通りです。ポイントは AWS Lambda から直接Amazon S3に投げるのではなくAWS IoTを経由することで、将来他のサービスへデータの複製をすることを容易にするという点にあります。
手順は下記のとおりです。保存先から作成していきます。
- Amazon S3でバケットを作成
- AWS IoTで Amazon S3バケットへ保存するルールとアクションを作成 (同時にAmazon S3バケットへ保存できるIAMロールも作成)
- AWS Lambdaで関数を作成
- AWS IoTで AWS Lambda関数を実行するルールとアクションを作成 (同時にAWS Lambda関数を実行できるIAMロールを作成)
- SORACOM FunnelでAWS IoTへ転送する設定を作成
以上となります。各手順はマニュアル等参考にしてください。ここでは4のAWS Lambda関数の中身をご紹介します。
下記のコードと、2つの環境変数 AWSIOT_ENDPOINT
と AWSIOT_TOPIC_PREFIX
をそれぞれ設定すれば完了です。
Amazon S3に保存される最終的なJSONは下記のとおりです。 temperature
や humidity
が表示されています!
{
"operatorId": "OPXXXXXXXXXXX",
"timestamp": 1504082329266,
"destination": {
"resourceUrl": "https://YOUR-AWS-IoT-ENDPOINT.amazonaws.com/YOUR_TOPIC/",
"service": "aws-iot",
"provider": "aws"
},
"credentialsId": "aws-cred",
"payloads": {
"seqNumber": "999",
"lat": "99.9",
"station": "XXXX",
"time": "1504082323",
"device": "XXXXXX",
"rssi": "-115.00",
"lng": "999.9",
"data": "81651969",
"sensit": {
"frame": 2170886505,
"frameStr": "81651969",
"binary": "10000001011001010001100101101001",
"bytes": [129, 101, 25, 105],
"mode": "Temperature",
"frameType": "Classic",
"battery": 2.835,
"temperatureLP": 12,
"humidity": 52.5,
"temperature": 26.125
}
},
"sourceProtocol": "sigfox",
"deviceId": "XXXXXX"
}
AWS IoTのルールを調整することで、Amazon Elasticsearch Service 等で可視化も可能でしょう。是非とも試してみてください!
※配布元の注意書きにもありますが、すべてのセンサーデータをサポートしてるわけではありませんのでご留意ください。
データ送信のタイミング
Sens’itですが、センサーデータ送信のタイミングが3つあります。1つめはモード切替直後の送信、2つめは定期的な送信
3つめはイベントトリガーによる送信です。
これは payloads.sensit.frameType
で見分けることができます。モード切替直後の送信時は New Mode
、 定期的な送信時は Classic
、 イベントトリガーの送信時は Alert
となります。
イベントトリガーですが、ドア開閉、加速度での数値変動、マグネットスイッチのON/OFFの変化が対象です。
それとは別に、ボタンを押した場合は Button
となります。
デバイスの使い方:ドライコンタクトコンバーター
オプテックス社のドライコンタクトコンバーター(以下DCC)は、センサーからの接点出力を受け取り、その値をSigfoxで送信することができるデバイスです。
この製品は接点出力を2チャンネル持っており、それぞれのチャンネルのON/OFFをトリガーにデータ送信をするモードの他、15分間のON(もしくはOFF)の回数を内部に保管し集計して送信するといったカウントモードが搭載されています。
またバッテリーを内蔵しており、保護等級IP65という耐塵&耐水性能もあるため、屋外でも利用可能です。
ところで、接点信号とはON/OFFの2値でセンサーとの入出力を行うシンプルなプロトコル(?)です。構造が単純ですので、私たちの生活のあらゆる場面で活躍しています。例えば照明のON/OFFや自動ドアの開閉などですが、気軽に入手できる接点出力可能なセンサーには、以下のようなものがあります。
- ボタンスイッチ
- トグルスイッチ
- マグネットスイッチ(磁気を利用して回路を動かす)
- 人感センサー(距離ではなく、一定範囲内の有無)
- 照度センサー(一定光量以上もしくは以下の検出)
今回はマグネットスイッチをDCCのチャンネル1に接続してみました。
左下の長方形の物体に磁石が入っており、距離に応じた磁気の強さによって内部回路のON/OFFが切り替わり、それを接点信号として出力します。応用例としては、ドアの開閉検知や物体の近接・遠隔の検知などに利用できます。
バイナリパーサー機能を利用してSORACOM Harvestでデータ表示
DCCから出力されるデータはバイナリ形式です。そこで今回は7/5に公開された新機能「バイナリパーサー機能」を利用し、JSON化したうえで SORACOM Harvest で可視化をしてみます。
DCCからの出力フォーマットはマニュアル※に記載されており、その内容に沿ってバイナリパーサーのフォーマットを組み立てます。
組み立てた結果は下記のとおりです。
※マニュアルはご購入者に個別配布となっております(2017年9月現在)
event:0:char:2 count_ch1:2:uint:16 count_ch2:4:uint:16 battery_status:6:uint:8
SORACOM Air for Sigfox の「バイナリパーサー設定」をONにした上で、上記文字列をフォーマット欄に入力して保存します。
また、同時にSORACOM Harvestの設定もONにします。
この状態でマグネットスイッチを近づけたり離したりしてみましょう。すると下図のようにSORACOM Harvest上にデータ表示されます。
JSONデータは以下のようになります
アラームモードの結果JSON (N.O.でマグネットスイッチを近づけた時)
{
"device": "XXXXXX",
"time": "1504166627",
"station": "XXXX",
"lat": "99.9",
"lng": "999.9",
"rssi": "-123.00",
"data": "314c000000001e00",
"seqNumber": "2031",
"event": "1L",
"count_ch1": 0,
"count_ch2": 0,
"battery_status": 30
}
event
に 1L
と記録されていることがわかります。
カウントモードの結果JSON (内部で回数を記録、15分毎に出力)
{
"device": "XXXXXX",
"time": "1504166423",
"station": "XXXX",
"lat": "99.9",
"lng": "999.9",
"rssi": "-137.00",
"data": "4354000300021e00",
"seqNumber": "2030",
"event": "CT",
"count_ch1": 3,
"count_ch2": 2,
"battery_status": 30
}
チャンネル1のカウント count_ch1
が 3
、チャンネル2のカウント count_ch2
が 2
と記録されていることがわかります。
もちろんこのJSONをSens’it同様に SORACOM Funnel や SORACOM Beam を活用して、他のクラウドサービス連携も可能です。
開発者がSigfoxを手軽に利用する仕組みとして、SORACOM Air for Sigfoxは最適ですので、ぜひとも一度試してみてください!
ソラコム 松下