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でのコマンドライン実行例は下記の通りです。
‘+’ をワイルドカードとして使用することにより、複数デバイスのデータを取得することもできます。
受信データフォーマット
受信データは改行のない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でのコマンドライン実行例は下記の通りです。
送信データフォーマット
送信データは改行のない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などが付与されたデータを同時に取得することもできます。
受信データフォーマット
受信データは改行のない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 以降を使用してください。
前ページ:LoRaWAN Shield for Arduino 使用方法
次ページ:LoRaWAN ゲートウェイの利用と申込み