下り通信(Downlink)

技術情報

下り通信を行って、デバイスの制御(モード変更、メッセージ送信間隔の変更等)を行いたいと考えたことはありませんか。本記事では、Sigfoxネットワークにおける下り通信の概要と設定方法について説明していきます。

下り通信の概要

ネットワークにおける下り通信が、どのような手順で行われているか説明します。

①上りメッセージ(12byte)+下り要求
下り通信は、必ずデバイスが起点となり始まり、デバイスから「下りメッセージを送って!」という要求を付加した上りメッセージを送ります。

②DATA BIDIR Callback
①上りメッセージを受信したSigfoxバックエンドは、Callback機能で、アプリケーションサーバーにメッセージを転送します。Callbackは、いくつか種類がありますが、下り通信を行う際は、必ずDATA BIDIR Callbackを使用する必要があります。
ここでは、Callbackを使用して、アプリケーションサーバーより下りメッセージを応答する方法(CALLBACKモード)を説明していますが、Callbackを使用せず、Sigfoxバックエンドで設定した下りメッセージを直接応答する方法(DIRECTモード)もあります。詳細は、後述の「下り通信のモード設定」で説明します。

③Callback応答
アプリケーションサーバーは、転送されてきたメッセージに対して、下りメッセージを応答します。

④下りメッセージ(8byte)
この応答をSigfoxバックエンドが受け取ると、①上りメッセージを受信した基地局の中から、下り通信を行うのに最適な1基地局を選択し、下りメッセージを送るように指示をします。

⑤下りメッセージ(8byte)
④で選択された基地局から下りメッセージが送信されます。この下りメッセージをデバイスが受信すると、下り通信が成功となります。下り通信の回数カウントは、基地局から⑤下りメッセージが送信されると1回としてカウントされます。デバイスの受信有無は、カウントに関係しません。
※もしデバイスが移動している状態にある場合、①上りメッセージを受信した局から遠ざかり、下りメッセージを受け取れなくなる可能性があります。

このように下り通信は、必ずデバイスの下り要求オプション付きの上りメッセージ(①上りメッセージ)を起点に開始されます。アプリケーションサーバーから任意のタイミングで下りメッセージを送信することはできません。

20211001-technical-1.png

では下り通信を行う際、デバイスはどのような動作をしているのでしょうか。デバイスは、下り要求オプション付きの上りメッセージ(①上りメッセージ)を送信してから約20秒後に下りメッセージを受信するモードになります。受信モード中に、Sigfox基地局から送信される下りメッセージを受信すると、下り通信は成功です。受信モード開始後、約35秒の間に下りメッセージを受信できなかった場合は、下り通信は失敗となり、受信モードは終了します。

※受信モード開始のタイミングと受信モードの時間は、Sigfoxのプロトコルにより定められており、変更することはできません。Sigfox基地局側もデバイスの受信モード中に下りメッセージを送信するよう設計されています。

下り通信の設定

下り通信を行うためには、Sigfoxバックエンド、もしくはアプリケーションサーバーで、下り要求オプション付き上りメッセージに対して、どのような内容の下りメッセージを応答するか設定する必要があります。ここからは、Sigfoxバックエンド及びアプリケーションサーバーの設定方法を説明していきます。

▶下り通信のモード設定(Device type情報の編集)

下り通信には、下記2つのモードがあります。これらのモードはSigfoxバックエンド上のDevice typeで設定することができます。ここでは、Device type情報の編集を行い、どちらのモードで下り通信を行うか設定してきます。

DIRECTモード:Sigfoxバックエンドで設定した下りメッセージを応答する。
CALLBACKモード:アプリケーションサーバーで設定した下りメッセージを応答する。

20211001-technical-2.png

①DEVICE TYPEメニューより、下り通信を行うデバイスが所属するDevice type Nameを選択します。

20211001-technical-3.png

②Device type Information画面右上[Edit]ボタンをクリックします。

20211001-technical-4.png

③Device type Edition画面のDownlink dataの項目を編集します。 

20211001-technical-5.png

・Downlink mode
  NONE:下り通信を行わない。
  DIRECT:Sigfoxバックエンドで設定した下りメッセージを応答する。
  CALLBACK:アプリケーションサーバーで設定した下りメッセージを応答する。

・Downlink data in hexa:上記でDIRECTを選択した場合、下りメッセージを設定します。
 8バイト固定長(16進数表で16桁)で入力する必要があります。

DIRECTモード(Sigfoxバックエンドで設定した下りメッセージを応答する)を選択した場合は、これで設定完了です。「下り要求オプション付きの上りメッセージの送信」の項目に進み、実際に下り通信を試してみましょう。

CALLBACKモード(アプリケーションサーバーで設定した下りメッセージを応答)を選択した場合は、この設定に加え、Callback設定、アプリケーションサーバーでCallbackに対して下りメッセージを応答する仕組みを実装する必要があります。

▶Callback設定

CALLBACKモード(アプリケーションサーバーで設定した下りメッセージを応答)を使用する場合、デバイスからの下り要求オプション付き上りメッセージをアプリケーションサーバーに転送する必要があります。ここでは、上りメッセージを転送するためにCallback設定を行っていきます。
※Callback機能については、こちらの記事を参考にしてください。

①DEVICE TYPEメニューより、下り通信を行うデバイスが所属するDevice type Nameを選択します。

20211001-technical-6.png

②CALLBACKメニューを選択し、画面右上[New]ボタンをクリックします。

20211001-technical-7.png

③Custom callbackを選択します。 

20211001-technical-8.png

④Callback edition画面にて、必要項目を入力します。

20211001-technical-9.png

今回は、下記設定でCallbackを作成します。
・Type:必ず[DATA BIDIR]のCallbackを設定してください。
・HTTP Method:POST
・Content type:application/json
・Body:下記変数を使用しています。
  {device} :デバイスID
  {time} :Sigfox基地局がメッセージを受信した時刻(UNIX time)
  {data} :最大12バイトのペイロード
  {ack}:下り要求オプションの有無、要求有りの場合はtrue、無しの場合はfalseが
  Callbackされます。
  ※ {ack}の変数を使用することで、アプリケーションサーバーが下り要求のオプションの
   有無を判断できるようになります。

⑤Callbackを作成すると、作成したCallbackの一覧が表示されますので、今回作成したCallbackのDownlinkの[◯]をクリックします。[●]に変われば設定完了です。これでCallbackの設定は完了です。

20211001-technical-10.png

▶アプリケーションサーバーの設定

前項のCallback設定を行うことで、デバイスからの下り要求付き上りメッセージがアプリケーションサーバーまで届くようになります。アプリケーションサーバーは、届いたCallbackに対して、下りメッセージを応答する必要があります。下りメッセージを応答することで、Sigfoxバックエンドを経由し、Sigfox基地局から下りメッセージが送信されます。ここでは、アプリケーションサーバーのCallbackに対する応答設定をしていきます。

アプリケーションサーバーは、Sigfoxバックエンドからメッセージが転送されてきたら、10秒以内に下記フォーマットで応答する必要があります。

{
"デバイスID":{
"downlinkData": "下りデータ"
} }

例えば、デバイスID:B42E24に対し、0x1234567890ABCDEFという下りメッセージを応答する場合は、下記のように応答します。
※下りメッセージは8バイトの固定長となります。必ず16進数16桁で応答してください。

{
"B42E24":{
"downlinkData": "1234567890ABCDEF"
} }

SigfoxバックエンドからJson形式でメッセージがPOSTされてきた際のアプリケーションサーバーのPHPの実装例を下記に示しています。下り通信要求オプションの有無を確認し、もし下り通信の要求があれば、指定されたフォーマットを応答する内容になっています。

<?php
   $_POST = json_decode(file_get_contents('php://input'), true);
   $_device = $_POST["device"]; 
   $_time = $_POST["time"]; 
   $_ack = $_POST["ack"]; 
   $_data = $_POST["data"]; 
   if ( $_ack == "true" ) { 
     echo "{"; 
     echo "\"$_device\":{\"downlinkData\":\"1234567890ABCDEF\"}"; 
     echo "}"; 
   } 
   header("HTTP/1.0 200 OK"); 
   header("Content-Type : application/json"); 
?>

これでアプリケーションサーバーの設定は完了です。実際にデバイスから下り要求オプション付きの上りメッセージを送ってみましょう。

▶下り要求オプション付きの上りメッセージの送信

Sigfoxバックエンド、アプリケーションサーバーの設定が完了したら、デバイスから下り要求オプション付きの上りメッセージを送信して、下り通信を試してみましょう。下り通信を行った際、Sigfoxバックエンド上のメッセージ画面でどのように表示されるのか見ていきます。

下り要求オプション付きの上りメッセージ送信方法は、各デバイスの仕様をご確認ください。
こちらの記事にDevkit(開発キット)であるBRKWS01の上りメッセージ・下り要求オプション付き上りメッセージの送信方法について記載がありますので参考にしてください。

下図は、デバイスのメッセージ画面です。下り要求オプション付き上りメッセージを送信するとCallbacksの項目に[↓]が表示されます。Callbacksの[↓]をクリックすると、Downlink statusのwindowが表示され、下り通信の状況と送信した下りメッセージを確認できます。Status:[ACEKD]は、Sigfox基地局から下りメッセージを送信したことを表しています。
※デバイスが下りメッセージを受け取ったことを表していませんのでご注意ください。

20211001-technical-11.pngSigfox基地局から下りメッセージを送信できなかった場合は、Callbacksの[↓]が赤色となります。 下図では、Status:[INVALID_PAYLOAD]となっており、これは、応答した下りメッセージのフォーマットが不正の場合に発生します。下りメッセージが8バイト固定長(16進数16桁)でなかったり、SigfoxバックエンドからのCallbackに対して、10秒以内にアプリケーションサーバーが応答できていない場合に発生しますので、もしこのエラーが発生する場合は、アプリケーションサーバーの設定を確認してみてください。

20211001-technical-12.png

【Tips】下り要求オプション付き上りメッセージに応答しない

CALLBACKモード(アプリケーションサーバーで設定した下りメッセージを応答) を使用している場合、デバイスからの下り要求オプション付き上りメッセージ対して、下りメッセージを応答しないことができます。

下記2通りの方法があり、いずれかの応答をすることで、Sigfox基地局から下りメッセージが送信されなくなります。
・HTTP NO_CONTENTコード(204)を応答する。
・下記のJsonデータを応答する。

{
"デバイスID":{
"noData":true
} }

上記応答をした場合のデバイスのメッセージ画面を見てみましょう。Callbacksの[↓]をクリックするとStatus:[NO_ANSWER]となっています。このStatusの場合、Sigfox基地局から下りメッセージが送信されていません。

20211001-technical-13.pngSigfoxネットワークの下り通信の上限回数は、プランにより異なりますが、1日最大4回となります。この方法を使用することで、下り通信の送信回数を制御することができます。但し、デバイスは、下りオプション付きの上りメッセージを送信すると、必ず受信モードとなり、上りメッセージを送信するだけの場合と比較すると、バッテリーを消耗してしまいますので、ご注意ください。