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でのコマンドライン実行例

# 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の改行なしフォーマットで受信可能です。
(以下は、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でのコマンドライン実行例

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

以下のような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でのコマンドライン実行例

# 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

(トピック指定時に ‘#’ をワイルドカードとして使用することにより、以降どの文字列が階層的にあってもマッチするので、/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)

次ページ:MQTTS(SSL) 接続について