前回の記事ではSens’itのバイナリデータの内容を確認しました。

今回は確認したバイナリデータの内容を基に、SORACOMのバイナリパーサーでJSON形式に変換します。

バイナリパーサーの書式はこちらにあります。

変換する際の項目名は任意で決められるのですが、都合上Sens’it Ver2の形式に合わせます。

Sens’it Ver2の形式はここで説明されています。

さて私は下のように設定しました。

内容を説明すると、バイナリデータから、mode、battery、Frameの3つの項目を取り出しています。

取り出し方はバイナリパーサーの説明に詳しくかいていますが、下記のようになります。

項目名:取り出すbyteの番号:変数の型:変数の型に依存した設定内容

今回はuint( 符号なし整数)だけ使っているので、変数の型に依存した設定内容はlength(必須)、offset(任意、何bit目から読み始めるか)、operations(任意、計算を記述)の3つがあります。

まずmodeからみますが、項目名:mode、取り出すbyteの番号:1byte(0から始まるので2つ目のbyte)、変数の型:uint(符号なし整数)、length:5bit、offset:7bit(7から開始なので先頭bit)目から読み始める。

となります。前回の記事に書いていますが、データ形式は下記のようになっています。

つまりmode:1:uint:5:7は「00011の部分をmodeという項目名で、符号なし整数で取り出す」という事になります。届いたJSONデータには”mode”:3=ドアモードとなっています。

同様にbatteryを見ると、battery:0:uint:5:7:*0.05+2.7と定義しています。この項目ではoperations(計算)も利用しています。Sens’it Ver3のマニュアルに記載がありますが、Battery Voltage(V)=(Battery Level×0.05)+2.7と定義されています。

バイナリパーサーの計算では通常の四則演算と異なり、左から順番に計算されます。ここでは”11011″(10進数の27)×0.05+2.7=4.05Vがバッテリー残量となります。

FrameではButton Alert Flagを取り出しています。データを参照にどの部分を取り出しているのか確認してみてください。

【その他】

別に書くのが面倒になったので、Sens’itのVer2とVer3のドアモードで気づいた違いをここに記載します。

1.開閉通知:Ver2は1開閉で1発報。Ver2は1開閉でOpen、Closeの2発報

2.電波強度:Ver3は2割程度電波が強い。(同一環境で測定した際に、Ver2のrssi値は110、Ver3のrssi値は136でした。)

開閉通知については、Ver3では開け閉めの判断が出来るようになった一方で、1日の送信回数140回と制限されているので70回の開け閉めしか確認できなくなります。(Ver2は開け閉めで1回の送信なので140回まで確認可能)。またどの程度バッテリーの持ちにも影響があると思われます。場合によってはSDKを利用してファームの改造が必要かもしれません。

また電波強度に関しては実感としても明確に違いがあり、Ver2では届かなかった部屋の奥まったところでも、Ver3では通信可能となっていました。電波強度に関しては、私の利用目的ではかなり実用的になったと感じています。ただこちらもバッテリーの持ちには影響があると思うので、その点については今後評価したいと思います。

Sens’it Ver3についての記事は今回で終わりますが、他に気づいた点があれば、随時更新したいと思います。

追記】

3.データ形式:定期通知の際のバイナリデータは”d61a000046003f0f8004223c”のような形となっていました。マニュアルにも記載されていましたが、定期通知の際はconfigpayloadの8byteが追加されていました。アラートと定期通知の見分け方はいろいろ考えられますが、私の場合はAzureのData Analyticsを利用しているので、その中のクエリでdata項目のバイト数を調べる事により分けてみようと思います。

4.定期通知はVer3では最後のデータ送信から24時間後となるようです。Ver2ではアラートと定期通知が分かれていました。

5.Button Alert Flagは定期送信の場合も0でした。Button押下の場合のみ1となるようです。