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

今回は、その中でもシーケンス番号認証による破棄について解説します。
Sigfoxのデバイスにはメッセージが送信されるたびに付与される番号(シーケンス番号)があり、この番号を確認することでメッセージが表示されない原因を特定する手助けになります。
Sigfoxの通信エリア外でデバイスが大量のメッセージを送信し、エリア内へ復帰した際の送信メッセージとSigfoxクラウドで最後に受け取ったメッセージの間ではシーケンス番号に大きなギャップが生じます。Sigfoxクラウド側が期待しているシーケンス番号との間で不整合が発生した場合に受信メッセージとして扱われなくなります。この記事ではシーケンス番号エラーに起因するメッセージ破棄状態を復旧する方法について説明します。
メッセージが届かなくなった原因の調査
それでは、メッセージが届かなくなった原因を調べましょう。
①Token stateの確認
まず、該当デバイスが回線利用期間内であるか、Sigfoxクラウドで確認します。
SigfoxクラウドにログインしてDEVICEメニューから該当デバイスを確認します。Token stateを確認し、☑である場合は回線利用期間内ですので、該当のDevice IDをクリックします。
(チェック以外の表示がされている場合、Token stateについてはこちら)

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

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

Device-Events項目
- ①Time:イベント発生日時
- ②Type:イベントの種類(詳細はこちら)
- ③Severity:イベントの重要度
- ④Description:イベントの詳細
- ⑤Status:イベントを発生させたメッセージのCallbackの有無
メッセージが届かなくなった理由はシーケンス番号エラー(Type:Out of message sequence)が発生しているためだと確認できます。
シーケンス番号エラー
シーケンス番号とは?
シーケンス番号は、Sigfoxプロトコルのオーバーヘッドの一部であり、メッセージが送信されるたびにデバイス自体によってインクリメントされます。0~4095をサイクリックに利用します(4095の次のシーケンス番号は0になります)。Sigfoxクラウドは、シーケンス番号をデバイスメッセージの一貫性の観点で確認し、メッセージを受信します。

シーケンス番号飛び発生時のイベントについて
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"を行うことで、メッセージ破棄状態から通常のメッセージ受信状態に復旧させることができます。
しきい値について
下記2つの計算値より、max値、min値を算出します。
①days×300
②contract×(days+2)
- ※days:2つのメッセージの経過日(~24時間:days=1、24~48時間:days=2、……)
contract:契約上の上り回数制限(devkit登録の場合、140回)
x:最後にSigfoxクラウドに受信されたメッセージのシーケンス番号
y:現在Sigfoxクラウドに受信されたメッセージのシーケンス番号


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

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

デバイスタイプ単位でDisengage sequence numberを行う方法
①DEVICE TYPE INFORMATIONメニューより該当のデバイスが含まれるDevice Typeを選択します。

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

Disengage sequence numberを行ってもメッセージが表示されない場合は、
- Sigfoxクラウドの状態
- 通信エリア、通信場所の確認
- プログラムの確認
- デバイスの状態の確認
などご確認ください。
技術情報ブログでは定期的にプロジェクトのヒントとなる記事を公開していますので、参考にしてください。