LoRaWANサーバーとのMQTT接続 | センスウェイ株式会社

はじめに

このマニュアルでは、PCやアプリケーションサーバーがセンスウェイLoRaWANサーバーとデータを送受信するために使用する、MQTT接続について説明します。

MQTT接続情報

SenseWay Mission Connect では、センスウェイLoRaWANサーバーが MQTT の Broker となり、 PCやアプリケーションサーバーは Subscribe や Publish によってデータの送受信を行います。
Broker への接続情報と 使用するTopic は下記の通りです。

Topic指定は、下記MQTTアクセス情報の topic に '/rx' を追加します。

Brokerへの接続
host mqtt.senseway.net
port 1883
username <username>
Password <password>
Topic lora/<username>/<devEUI>
Topic使用例
Uplinkデータ受信 lora/<username>/<devEUI>/rx
Downlinkデータ送信 lora/<username>/<devEUI>/tx
サーバーからのDownlinkDataの送信 lora/<username>/<devEUI>/tx_send
Downlink(ConfirmdDataDown時)のACK lora/<username>/<devEUI>/ack
Topic lora/<username>/<devEUI>

Uplinkデータ受信

PCやアプリケーションサーバーが、モジュール(デバイス)から送信されたデータを受信するには、MQTTの Subscribe を使用します。Subscribeを使用するには「topic」の末尾に '/rx' を追加します。

mosquittoでのコマンドライン実行例

mosquittoでのコマンドライン実行例は下記の通りです。
‘+’ をワイルドカードとして使用することにより、複数デバイスのデータを取得することもできます。

# mosquitto_sub -h <host> -p 1883 -u <username> -P '<password>' -t 'lora/<username>/000b78fffe0515e9/rx' -v
# mosquitto_sub -h <host> -p 1883 -u <username> -P '<password>' -t 'lora/<username>/+/rx' -v
受信データフォーマット

受信データは改行のないJSONファイルです。
※下記のデータ例は改行を入れて読みやすいように整形しています。

{
  "gw": [
    {
      "date": "2017-10-09T14:21:52.035266Z",
      "rssi": -21,
      "snr": 11.2,
      "gwid": "000b78fffeb00079"
    },
    {
      "date": "2017-10-09T14:21:52.024932Z",
      "rssi": -29,
      "snr": 12.5,
      "gwid": "00001c497bb44c3c"
    }
  ],
  "mod": {
    "dr": "2",
    "cnt": 3,
    "port": 11,
    "mt": "cnf",
    "fq": 925.8,
    "devEUI": "000b78fffe0515e9",
    "data": "0220a5900854ac80001f"
  }
}
項目 説明
gw ゲートウェイのデータ(配列形式)
date データ受信時刻(UTC)
rssi 受信信号強度
snr 信号雑音比
gwid Gateway ID
mod モジュール(デバイス)のデータ
dr DR 値 (SpreadFactor と BandWidth の組み合わせ)
cnt サーバでのカウント値
port LoRa ポート番号(ユーザが 1~223 の間で使用可能)
mt ACK 要求データ(Confirm)か否(UnConfirm)か
fq 使用周波数
devEUI モジュール(デバイス)固有アドレス DevEUI
data データ (16 進数表記)

● gw
ゲートウェイ情報が配列形式で記載されています。特定のモジュールのデータを複数ゲートウェイで受信した場合には、ゲートウェイの台数分の情報が配列で記載されます。

● mod
モジュールの情報です。モジュールのDevEUIや送信時のport番号、dataなどが記載されています。dataのフォーマットはモジュールやアプリケーションの仕様によって決まります。

Downlink データ送信

PCやアプリケーションサーバーから、Brokerやモジュールにデータを送信するには、MQTTの Publish を使用します。Subscribeを使用するには「topic」の末尾に '/tx' を追加します。
このとき、MQTTではサーバからモジュール(デバイス)への送信が行われたことを示す ‘/tx_send’ 付きtopicのメッセージも流れます。

mosquittoでのコマンドライン実行例

mosquittoでのコマンドライン実行例は下記の通りです。

# mosquitto_pub -h -u <username> -P '<password>' -t "lora/<username>/000b78fffe051290/tx" -m '{"cnf":true,"ref":"abcd1234","port":14,"data":"00112233"}'
送信データフォーマット

送信データは改行のないJSONファイルです。
※下記のデータ例は改行を入れて読みやすいように整形しています。

{
  "cnf": true,
  "ref": "abcd1234",
  "port": 14,
  "data": "00112233"
}
項目 説明
cnf モジュール(デバイス)に、ACK を要求する場合 true
ref どのメッセージへのACK要求なのかを区別するID
port LoRa ポート番号(ユーザが 1~223 の間で使用可能)
data データ (16 進数表記)

● cnf
true の場合、Publishされたメッセージをモジュールが受信した時にACKを返します。

● ref
どのメッセージへのACK要求なのかを区別するためのIDです。ユーザーが自由に付与できます。

port と data については、Uplink 時と同じです。

※ MQTT上は、上記ユーザが指定した ‘/tx’ つき topic のデータ以外に、サーバからモジュール(デバイス)への送信が行われたことを示す ‘/tx_send’つき topic のデータも流れます。

Downlinkデータ送信時のACK受信

PCやアプリケーションサーバーからのデータ送信時にモジュールからのACKを要求した場合、モジュールはこのデータを受信したあとの「次の」データ送信時(最初にデータをPublishしてからの「次の次の」データ送信時)に、BrokerにACKを自動的に送信します。
PCやアプリケーションサーバーは、MQTTアクセス情報の topic に ‘/ack’ を付与した Subscribe を使用して、BrokerからACKを受信します。

モジュール(デバイス)では、上記サーバ側へのMQTT Publish以降、次のデータ送信時、サーバに受信データがある場合に、それを受信します。受信したデータの表示や参照方法は、各社モジュールにより異なります。

mosquittoでのコマンドライン実行例

mosquittoでのコマンドライン実行例は下記の通りです。
‘#’ をワイルドカードとして使用することにより、topicに/rxや/txなどが付与されたデータを同時に取得することもできます。

# mosquitto_sub -h -p 1883 -u <username> -P '<password>' -t 'lora/<username>/000b78fffe051290/ack' -v
# mosquitto_sub -h -p 1883 -u <username> -P '<password>' -t 'lora/<username>/000b78fffe051290/#' -v
受信データフォーマット

受信データは改行のないJSONファイルです。
※下記のデータ例は改行を入れて読みやすいように整形しています。

{
  "devEUI": "000b78fffe050c42",
  "ref": "abcd1234",
  "date": "2017-10-10T10:16:43.63027Z"
}
項目 説明
devEUI ACK を送信したデバイスの DevEUI
ref どのメッセージへのACK要求なのかを区別するID
date データ受信時刻(UTC)

MQTTのSSL対応(MQTTS化)

【事前準備】
SenseWay Mission Connect では、MQTTのSSL対応ができます。
センスウェイLoRaWANサーバーの mosquitto で使用しているサーバー証明書は、amazon trust servic による認証を受けています。ルート証明書を下記からダウンロードし、PCやアプリケーションサーバーに配置して使用してください。

https://www.amazontrust.com/repository/SFSRootCAG2.pem
(Root CAs CN=Starfield Services Root Certificate Authoriy)

mosquittoでのコマンドライン実行例

mosquittoでのコマンドライン実行例は下記の通りです。
※mosquitto のバージョンは、証明書のワイルドカード指定に対応している version 1.4 以降を使用してください。

# mosquitto_sub -h -p 8883 --cafile SFSRootCAG2.pem -u <username> -P '<password>' -t "lora/<username>/<devEUI>/rx" -v

前ページ:LoRaWAN Shield for Arduino 使用方法
次ページ:LoRaWAN ゲートウェイの利用と申込み