4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Sigfox Callbackのcustom payload configになじみのない方は、

LPWAを使ったアプリケーションを開発する際は、如何にデータサイズを抑えるかが、重要なポイントになっています。例えば次のようなデータを送りたいとします。

データ名 内容 サイズ データ例
Speed 速度情報 8bits(1Byte) 0km/h~255km/h
Direction 進行方向 4bits 北、北東、東、南東...北西(8パターン)
Status モノの状態コード 4bits 0~15で表すコード
これをSigfoxのペイロードに乗せようとした場合、ひとつの方法は、Speed、Direction、Statusで各1バイトずつ使う方法もあります。が、4bitsで十分なデータに8bits(1byte)も使いたくないということがあると思います。
そのような場合、
image.png
となるペイロード構成をとることになります。

では、このペイロードをSigfoxのCustom Payload Configで変数定義したい場合、どうなるでしょうか?

#間違ったやり方
まずは、間違った定義をお見せします。
Speed::uint:8 Direction::uint:4 Status::uint:4
このように定義すれば、Body内(例えばJSON構文)でcustomData#Speed, customData#Direction, customData#Statusといった変数が使えるようになるから、それでいいと思うかもしれません。
###何が起きるか?
このような定義をした場合、何が起きるのかを説明します。
image.png
まずは、
[1] Speed::uint:8により、Speed情報は先頭から8ビットをuint型として読み取るため、問題ありません
[2] Direction::uint:4により、次のバイトの先頭から4ビットをuint型として読み取るため、これも問題ないでしょう。
[3] 問題は、ここです。[2]でuintを使ったので、自動的に次のバイト(上図でいう"NEXT")までポインタが飛んでしまいます。
ですので、Status::uint:4は、"NEXT"のところから4ビットを取ってきてしまいます。

#解決例
次のようにcustom payload configを定義してみましょう。
Speed::uint:8 Direction::uint:4 Status:1:uint:4::3
違いは、Statusのところです。2フィールド目(byte_index)に1が、そして6フィールド目(最後)に3がついています。
Status:1:uint:4::3を見てみます。下図の[4][5]です。
image.png
[4] 2フィールド目(byte_index)を"1"にしたため、ペイロードの2バイト目にポインタが移ります。(0にしたら、1バイト目に移ります。byte_indexは0~9のいずれかが使えます)
[5] 最終フィールドを"3"とすることにより、4ビットシフトとなります。
Sigfoxのヘルプを見てみると

uint (unsigned integer) : parameters are the number of bits to include in the value, optionally the endianness for multi-bytes integers, and optionally the bit offset where to start the reading of the first byte. Default is big endian and 7 for the offset.

と書かれています。...optionally the bit offset where to start the reading of the first byte. Default is 7 for the offset.
ビットオフセットのデフォルトは7ということです。つまり、オフセットしたくない場合が7ということは、4ビットオフセットしたい場合は7-4=3でいいですね。

#試してみる
Custom payload configを試すだけであれば、わざわさ、Callbackを作成する必要もありません。
ご自身のデバイスのDeviceTypeを選択し、Edit画面にあるPayload displayに設定するだけで、デバイスのMessages画面で確認することができます。
image.png
Payload displayは、表示だけですので、システムに影響を及ぼすこともないかと思いますので、一度、ご自身の環境で試してみてください。

Sigfox Japan KCCS

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?