メッセージがSigfoxクラウドに届かないとき(シーケンス番号エラー編)

技術情報

メッセージが届かなくなった……あれ、どうしてだろう……?
Sigfoxクラウドにメッセージが表示されない事象は、デバイスの電源断によってメッセージが送信できなかったり、回線契約が影響している場合であったり、Sigfoxクラウドのシーケンス番号認証によるものであったり、いろいろな要因が想定されます。

20210315technical-1.jpg

今回は、その中でもシーケンス番号認証による破棄について解説します。
Sigfoxのデバイスにはメッセージが送信されるたびに付与される番号(シーケンス番号)があり、この番号を確認することでメッセージが表示されない原因を特定する手助けになります。
Sigfoxの通信エリア外でデバイスが大量のメッセージを送信し、エリア内へ復帰した際の送信メッセージとSigfoxクラウドで最後に受け取ったメッセージの間ではシーケンス番号に大きなギャップが生じます。Sigfoxクラウド側が期待しているシーケンス番号との間で不整合が発生した場合に受信メッセージとして扱われなくなります。この記事ではシーケンス番号エラーに起因するメッセージ破棄状態を復旧する方法について説明します。

メッセージが届かなくなった原因の調査

それでは、メッセージが届かなくなった原因を調べましょう。

①Token stateの確認
まず、該当デバイスが回線利用期間内であるか、Sigfoxクラウドで確認します。
SigfoxクラウドにログインしてDEVICEメニューから該当デバイスを確認します。Token stateを確認し、☑である場合は回線利用期間内ですので、該当のDevice IDをクリックします。
(チェック以外の表示がされている場合、Token stateについてはこちら

20210315technical-2.jpg

②シーケンス番号飛びの確認
次にシーケンス飛びが発生していないか確認します。左のEVENTSメニューを確認します。

20210315technical-3.jpg

DEVICE-EVENTSメニューでは該当デバイスで発生したイベントを確認することができます。

20210315technical-4.jpg

Device-Events項目
①Time:イベント発生日時
②Type:イベントの種類(詳細はこちら
③Severity:イベントの重要度
➃Description:イベントの詳細
⑤Status:イベントを発生させたメッセージのCallbackの有無

メッセージが届かなくなった理由はシーケンス番号エラー(Type:Out of message sequence)が発生しているためだと確認できます。

シーケンス番号エラー

20201001technical-1.pngシーケンス番号とは?

シーケンス番号は、Sigfoxプロトコルのオーバーヘッドの一部であり、メッセージが送信されるたびにデバイス自体によってインクリメントされます。0~4095をサイクリックに利用します(4095の次のシーケンス番号は0になります)。Sigfoxクラウドは、シーケンス番号をデバイスメッセージの一貫性の観点で確認し、メッセージを受信します。

20210315technical-6.jpg

シーケンス番号飛び発生時のイベントについて
Sigfoxクラウドはシーケンス番号認証を行っています。シーケンス番号が連続していない場合、WARN、ERRORイベントが発生します。
シーケンス番号飛びは、下記のような場合に発生します。

エリア内でメッセージを送信しておりSigfoxクラウドでメッセージが受信されていたデバイスが、エリア外や電波の届かない場所で多くメッセージを送信した後、再度エリア内でメッセージを送信した場合

①WARNイベント(break in message sequence)
1以上しきい値(min値)以下のシーケンス番号飛びが発生した場合、”break in message sequence”イベントが発生します。このイベント発生以降も、メッセージは通常通りSigfoxクラウドで表示されます。

②ERRORイベント(out of message sequence)
しきい値(max値)を超えたシ-ケンス番号飛びがある場合、“out of message sequence”イベントが発生します。このイベントが発生すると、該当デバイスからのメッセージは破棄され続けます。 後述の“Disengage sequence number”を行うことで、メッセージ破棄状態から通常のメッセージ受信状態に復旧させることができます。

20201001technical-1.pngしきい値について

下記2つの計算値より、max値、min値を算出します。
①days×300
②contract×(days+2)
※days:2つのメッセージの経過日(~24時間:days=1、24~48時間:days=2、……)
 contract:契約上の上り回数制限(devkit登録の場合、140回)

x:最後にSigfoxクラウドに受信されたメッセージのシーケンス番号
y:現在Sigfoxクラウドに受信されたメッセージのシーケンス番号

20210315technical-7.jpg

20210315technical-8.jpg

シーケンス番号飛びによるメッセージ受信拒否の解除方法

受信メッセージのしきい値超えによるERRORイベント(Out Of Message Sequence)が発生した場合には、当該デバイスのイベント発生後のメッセージはすべて破棄されてしまいます。シーケンス番号エラーを起因とするメッセージ破棄状態から復旧させ、メッセージを再度受信するためにはDisengage sequence numberを実施します。Disengage sequence numberはデバイス単位、またはデバイスタイプ単位で行うことができます。

デバイス単位でDisengage sequence numberを行う方法

①DEVICEメニューより該当のデバイスのDevice IDをクリックします。

20210315technical-9.jpg

②Device Information画面右上のDisengage sequence numberボタンをクリックします。クリックすることで再度メッセージを受信させることができます。

20210315technical-10.jpg

デバイスタイプ単位でDisengage sequence numberを行う方法

①DEVICE TYPE INFORMATIONメニューより該当のデバイスが含まれるDevice Typeを選択します。

20210315technical-11.jpg

②Device Type Information画面右上のDisengage sequence numberボタンをクリックします。
クリックすると該当のDevice Type内のすべてのデバイスのシーケンス番号エラー状態をリセットできます。

20210315technical-12.jpg

Disengage sequence numberを行ってもメッセージが表示されない場合は、
Sigfoxクラウドの状態
通信エリア、通信場所の確認
・プログラムの確認
・デバイスの状態の確認
などご確認ください。

技術情報ブログでは定期的にプロジェクトのヒントとなる記事を公開していますので、参考にしてください。