LoRaWAN や Sigfox を使ってデータを送る際の標準的なペイロードサイズは数10バイト程度と非常に少なく、Web サービスのように JSON データを POST することができません。
そのため、デバイスによっては独自のバイナリフォーマットを定義しています。また、自分でデバイスを開発する際にもバイナリ形式でデータフォーマットを設計する必要があります。
また、現状、そのバイナリデータをパースするためには、Beam や Funnel の転送先でプログラムを書く必要がありました。
SORACOM Harvest では表示段階で簡易的なデコードを試みるようになっていますが、上記のようにフォーマットが不定なバイナリデータに対しては表示できず、また、API経由では生データしか取得することができませんでした。
今日発表するバイナリパーサーは、この課題を解決するために開発されました。
バイナリパーサーの概要
バイナリパーサーはその名の通り、ユーザーが定義したフォーマットに従ってバイナリデータをパースして、キーと値の組に変換する機能です。
この変換処理は SORACOM プラットフォーム上で行われるので、SORACOM Beam, Funnel の転送先や Harvest に変換後のデータを送付することができます。
フォーマットは bit 単位で読み出すデータの長さとデータ型を指定できます。取り出した値に対して四則演算を5回まで行うことができるので、値の精度がそれほど必要ではないデータを少ないビット数で表現し、四則演算を施すことで実際の値に変換することができます。
例えば、以下のようなフォーマットで定義された GPS トラッカーのバイナリデータがあったとします。
- 先頭バイトはヘッダー。2bit をステータスに使い、残りの 6bit をバッテリーの残量にする(2% 刻みで表現する)
- 残りの10バイトをで緯度経度高度に使う。高度は、10 で割って、100 マイナスする
これを変換するフォーマットは以下のように書くことができます。
status:0:uint:2:7 battery:0:uint:6:5:*2 latitude:5:float:32 longitude:1:float:32 altitude:7:uint:16:/10-100
これだけで、以下のように変換された JSON がペイロードにマージされ、転送されるようになります。
{
"data": "ORIGINAL_HEX",
"status": 2,
"battery": 80,
"longitude": 139.7405,
"latitude": 35.66816,
"altitude": 10.2
}
フォーマットの詳細については、バイナリパーサー詳細 を参考にしてください。
(これは単純化した例なので、実際には要件にあわせた精度で値を得られるように設計する必要があります)
使い方
使い方はとても簡単です。デバイスが所属する LoRaWAN / Sigfox グループの設定画面で、バイナリパーサー機能を有効にし、フォーマットを指定するだけです。
この機能は本日より、無料でご利用いただけます。
LoRaWAN に加えて Sigfox にも対応したこの機会に、Wireless Agnostic を目指す SORACOM サービスをぜひ体感してみてください。