LoRaWAN MQTT接続に関するマニュアル
目次
Uplinkデータ受信
モジュール(端末)から送信したデータを、サーバ経由でMQTTプロトコルの Subscribe により受信します。
Topic指定は、下記MQTTアクセス情報の topic に '/rx' を追加します。
MQTTアクセス情報 | |
---|---|
host | mqtt.senseway.net |
port | 1883 |
username | <username> |
Password | <password> |
Topic | lora/<username>/<devEUI> |
Topic情報 | |
---|---|
通常Uplinkデータ | lora/<username>/<devEUI>/rx |
DownlinkData投入用Topic | lora/<username>/<devEUI>/tx |
サーバーからのDownlinkDataの送信 | lora/<username>/<devEUI>/tx_send |
Downlink(ConfirmdDataDown時)のACK | lora/<username>/<devEUI>/ack |
Topic | lora/<username>/<devEUI> |
mosquittoでのコマンドライン実行例
(該当アカウントに複数デバイスが関連づけられている場合、トピック指定時に ‘+’ をワイルドカードとして使用することにより、複数デバイスのデータを取得可能。)
受信データフォーマット
以下のようなJSONの改行なしフォーマットで受信可能です。
(以下は、jqコマンド等で人間が読みやすい形にフォーマットしたものです。)
{ "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 はゲートウェイ情報の [配列] です。
近隣に複数ゲートウェイが存在し、それぞれで受信した場合は列挙されます。
(注:1つしかない場合も、要素数1の配列となります。)
mod はモジュール情報です。
DevEUI の他、モジュールから送信した時の port番号や dataが格納されています。
サーバ側のアプリケーションでは、この data を送信時のエンコード方法と逆の手順、もしくは各社で決められたフォーマットに従ってデコードして使用します。
Downlink データ送信
MQTTの Publish により、PCやアプリケーションサーバからモジュール(デバイス)へデータを送信します。
Topic 指定は、MQTTアクセス情報の topic に ‘/tx’ を追加します。
mosquittoでのコマンドライン実行例
送信データフォーマット
以下のようなJSONの改行なしフォーマットで送信します。
(以下は、jqコマンド等で人間が読みやすい形にフォーマットしたものです。)
{ "cnf": true, "ref": "abcd1234", "port": 14, "data": "00112233" }
項目 | 説明 |
---|---|
cnf | モジュール(デバイス)に、ACK を要求する場合 true |
ref | ACK を要求した時に、対応がわかるようにユーザがつける ID |
port | LoRa ポート番号(ユーザが 1~223 の間で使用可能) |
data | データ (16 進数表記) |
cnf は true の場合、デバイスがそれを受信した時に自動でACKを返します。
ref は、ACKを要求した時に、どのメッセージへのACKなのかの対応を確認するためのIDです。ユーザが自由につけられます。
port と data については、Uplink 時と同じです。
※ MQTT上は、上記ユーザが指定した ‘/tx’ つき topic のデータ以外に、サーバからモジュール(デバイス)への送信が行われたことを示す ‘/tx_send’つき topic のデータも流れます。
モジュールでのデータ受信
モジュール(デバイス)では、上記サーバ側へのMQTT Publish以降、次のデータ送信時、サーバに受信データがある場合に、それを受信します。受信したデータの表示や参照方法は、各社モジュールにより異なります。
ACK受信
サーバからのデータ送信時に、"cnf": true により、モジュール(デバイス)からのACKを要求した場合、モジュール側は、上記データ受信の「次の」データ送信時(つまり、Publishしてから次の次のデータ送信時) に、サーバにACKが自動的に送信されます。
サーバへのACKは、MQTTの Subscribe により、MQTTアクセス情報の topic に ‘/ack’ を追加した topicで受信できます。
mosquittoでのコマンドライン実行例
(トピック指定時に ‘#’ をワイルドカードとして使用することにより、以降どの文字列が階層的にあってもマッチするので、/rx や /tx, /ack 等に流れるデータを見ることが可能です。)
ACKは、以下のようなJSONの改行なしフォーマットで受信可能です。
{ "devEUI": "000b78fffe050c42", "ref": "abcd1234", "date": "2017-10-10T10:16:43.63027Z" }
項目 | 説明 |
---|---|
devEUI | ACK を送信したデバイスの DevEUI |
ref | ACK を要求した時に、対応がわかるようにユーザがつけた ID |
date | ACK を受信した日時(UTC) |