Sigfox Shield for Arduino から送信されたデータを バイナリパーサー の定義済みフォーマット @unashield で変換した場合、
{"ctr":8,"tmp":28.5,"vlt":3.3}
といった 3 つのデータが入った JSON 形式となります。「定義済みフォーマット @unashield」は、「unabiz-arduino ライブラリ」で送信されるデータ形式に対応しています。送信されるデータ形式を更新した場合や別のフォーマットを送信した場合「定義済みフォーマット @unashield」は対応しておりませんのでご注意ください。
「unabiz-arduino ライブラリ」は下記にて公開されています。
https://github.com/UnaBiz/unabiz-arduino
「unabiz-arduino ライブラリで定義されたデータ形式」では Sigfox で送れる 12 バイトを 4 バイト × 3 に分割してデータを格納しています。さらに、初めの 2 バイトを 'ctr' などのデータ名、次の 2 バイトをデータの値というように使用しています。データ名やデータの値についての制約は、以下 Unabiz 社ドキュメントの "Sending a structured message" にて詳説されていますので、カスタマイズされたい場合は参照ください。
https://unabiz.github.io/unashield/
また、3 つ以上のデータを送りたい場合やさらなるカスタマイズをご希望の場合は 12 バイトをご自身で定義してください。その際は、 バイナリパーサー のカスタムフォーマットをご利用いただくことも可能です。
たとえば、任意の数値をバイナリにして送信するサンプルコードを紹介します。これは前述した Unashield のドキュメントにて "Sending a raw message" で紹介されている方法です。
■ 任意のデータを送信するサンプルコード
float lat = 35.66966, lng = 139.744853; char buf[25]; sprintf(buf, "%08lx%08lx", (long)(lat * 1000000) ,(long)(lng * 1000000)); transceiver.sendMessage(buf);
■ バイナリパーサーのカスタムフォーマット
latitude::int:32:/1000000 longitude::int:32:/1000000
■ 変換後のデータ (device 名はマスクしています)
{ "device": "xxxxxx", "time": "1560832997", "data": "0220469c08545660", "seqNumber": "917", "lqi": "Good", "operatorName": "SIGFOX_Japan_KCCS", "countryCode": "392", "latitude": 35.66966, "longitude": 139.744864, "binaryParserEnabled": true }
なお、デバイスからの送信データの他に Sigfox バックエンドから以下のデータが送られ、Harvest などで確認できます。これらは予告なく変更される可能性がございますのでご注意ください。
- "device": デバイス固有の ID
- "time": データ送信時刻(UNIXTIME)
- "seqNumber": データの通し番号
- "data": Sigfox Shield for Arduino からの送信データ(HEX 文字列)バイナリパーサー "@unashield" はこちらの文字列を変換しています。
- "lqi" : Link Quality Indicator (電波強度) を Excellent, Good, Average, Limit の4レベルで表示します。各レベルの基準は Sigfox 社のドキュメント をご確認ください。
- "countryCode": 国コード (ISO 3166-1の3桁)。日本の場合は 392 となります。
- "binaryParserEnabled": バイナリパーサー機能により変換されたことを示すフラグ(値は "true")