LNS設定
SenseCAP M2 Multi Platform Gatewayには、Chirpstackベースの内蔵LoRaWANネットワークサーバーが搭載されており、LoRaWANネットワークの立ち上げに高速で信頼性の高いソリューションを提供します。
ゲートウェイ設定
Web UIを介してゲートウェイを設定します。Luciにログインする方法については、クイックスタートをご確認ください。
チャンネルプラン設定
LoRa > Channel Planに移動します

地域と周波数プランを選択します。

設定後、Save&Applyをクリックします
ローカルネットワークサーバー設定
LoRa > LoRa Networkに移動します

モードをLocal Network Serverに設定し、MQTTの情報(Broker Host/Port/User/Password)を追加します。その他のパラメータはデフォルト値のままで構いません。

Save&Applyをクリックして設定を適用します。
プロセスの開始には約1分かかります。その後、GUI設定にアクセスできます。
ChirpStack GUI設定
http://localhost:8080を介してChirpStack GUIにログインします。

デフォルトのアカウントとパスワード:admin。

ダッシュボードページが表示されます。

地域の確認
Network Server > Regionsに移動します。
Region IDが表示されるはずです。それをクリックして情報を確認し、前のステップでの設定と同じであることを確認してください。


デバイスプロファイルの追加
Tenant > Device Profilesに移動し、Add Profileをクリックします。

MAC version: LoRaWAN 1.0.3
Regional parameters reversion: A
ADR algorithm: Default ADR algorithm(LoRa only)
Expected uplink interval: カスタマイズ、デフォルト3600s

Codecに移動し、JavaScript functionsを選択して、SenseCAP Decoder for TTNをコピーして送信します。

ゲートウェイの追加
Gatewayに移動し、Add Gatewayをクリックします。

名前とゲートウェイID(ランダムにIDを生成するためにクリックできます)を定義し、送信します。

デバイスの追加
Tenant > Applicationに移動し、Add Applicationをクリックします。
アプリケーションに名前を付けて送信します。

アプリケーションに移動し、Add deviceをクリックします。

デバイスEUIを貼り付け、前に追加したデバイスプロファイルを選択して送信します。

アプリケーションキーを貼り付けて送信をクリックします。

デバイスを正しく設定するためにユーザーガイドを確認し、プラットフォームをOther Platformに選択してください。
デバイスステータスの確認
デバイスのEventsを確認すると、デバイスがネットワークに参加したときのjoinパケットが取得できます。

パケットの詳細も確認できます。

インテグレーション
この章はクラウドサービス開発のためのもので、以下のガイドラインは参考用です。
MQTT
トピック
MQTTインテグレーションは、イベントタイプで文書化されているすべてのイベントを公開します。
デフォルトのイベントトピックは:
application/APPLICATION_ID/device/DEV_EUI/event/EVENT
Event Types で詳細を確認してください。
アプリケーションタブでアプリケーションIDを確認できます:

- Event types
| up | アップリンクイベント | 
|---|---|
| status | マージンとバッテリーステータス | 
| join | デバイス参加イベント | 
| ack | 確認済みダウンリンク(n)ack | 
| txack | ダウンリンク送信ack | 
| log | ログ(またはエラー)イベント | 
| location | 位置情報イベント | 
| integration | 統合イベント | 
+ はすべてのメッセージを受信することを意味します
例:
- 特定のゲートウェイ下のすべてのデバイスからアップリンクメッセージを受信するには:
gateway/<GATEWAY_EUI>/device/+/event/up
- アプリケーション配下のすべてのデバイスからのすべてのメッセージを受信するには:
application/+/device/+/event/+
- すべてのゲートウェイからすべてのデバイスメッセージを受信するには:
gateway/+/device/+/event/+
gatewayid を確認してゲートウェイを区別できます。

ペイロード
object.valid が true の場合、データ解析が成功したことを意味し、object.messages を走査して必要なデータタイプを抽出できます。

- SenseCAP LoRaWAN S210X センサーのアップイベントペイロード例の説明:

- upload_battery: バッテリー
- upload_interval: アップロード間隔、単位:秒
- upload_version: ハードウェア/ファームウェアバージョン
- report_telemetry: 測定値
'report_telemetry' メッセージ内の measurementId については、詳細は SenseCAP Measurement ID を確認してください。

- SenseCAP データロガーのアップイベントペイロード例の説明:

'report_telemetry' メッセージ内の measurementId については、詳細は SenseCAP Measurement ID を確認してください。
HTTP
HTTP タブで + をクリックして新しい HTTP インテグレーションを追加します。
LNS は設定された URL に POST としてメッセージを送信します。

URL 情報を送信します。
http のみサポート、https はサポートしません。

HTTP インテグレーションは設定されたイベントエンドポイント(複数の URL を設定可能、カンマ区切り)に POST リクエストを行います。イベント URL クエリパラメータはイベントのタイプを示します。
HTTP インテグレーションは Event Type で文書化されているすべてのイベントを公開します。
例:
(main.py)
from http.server import HTTPServer, BaseHTTPRequestHandler 
from urllib.parse import urlparse, parse_qs 
from chirpstack_api import integration 
from google.protobuf.json_format import Parse 
class Handler(BaseHTTPRequestHandler): 
\# True - JSON marshaler 
\# False - Protobuf marshaler (binary) 
json = False 
def do_POST(self): 
self.send_response(200) 
self.end_headers() 
query_args = parse_qs(urlparse(self.path).query) 
content_len = int(self.headers.get('Content-Length', 0)) 
body = self.rfile.read(content_len) 
if query_args["event"][0] == "up": 
self.up(body) 
elif query_args["event"][0] == "join": 
self.join(body) 
else:
print("handler for event %s is not implemented" % query_args["event"][0]) 
def up(self, body): 
up = self.unmarshal(body, integration.UplinkEvent()) 
print("Uplink received from: %s with payload: %s" % (up.device_info.dev_eui, up.data.hex())) 
def join(self, body): 
join = self.unmarshal(body, integration.JoinEvent()) 
print("Device: %s joined with DevAddr: %s" % (join.device_info.dev_eui, join.dev_addr)) 
def unmarshal(self, body, pl): 
if self.json: 
return Parse(body, pl) 
pl.ParseFromString(body) 
return pl 
httpd = HTTPServer(('', 8090), Handler) 
httpd.serve_forever() 
ダウンリンク
ダウンリンクメッセージ:
ダウンリンクを保持済みとしてマークすることを推奨します。これにより、コマンドが繰り返し実行されることがなくなります。
デフォルトのTopicは:application/APPLICATION_ID/device/DEV_EUI/command/down
command:詳細については、デバイスユーザーマニュアルのダウンリンクコマンドを確認してください。
| Topic | application/APPLICATION_ID/device/DEV_EUI/command/down | 
|---|---|
| devEUI | デバイスEUI | 
| confirmed | true/false(ペイロードを確認済みデータダウンとして送信する必要があるかどうか) | 
| fPort | 使用するFPort(0より大きい値である必要があります) | 
| data | base64エンコードされたデータ(平文、ChirpStackによって暗号化されます) | 
例:
- SenseCAP S210x LoRaWANセンサーの再起動:
Topic:
application/dbf6\*\*\*\*6c92/device/2CF7F1C2\*\*\*/command/down
Json:
{
"devEui":"2CF7F1C2\*\*\*", 
"confirmed":true, 
"fPort":2, 
"data":"AMgAAAAAACsm" 
} 
- SenseCAP S210x LoRaWANセンサーのアップロード間隔を1分に設定する:
トピック:
application/dbf6\*\*\*\*6c92/device/2CF7F1C2\*\*\*/command/down
Json:
{
"devEui":"2CF7F1C2\*\*\*", 
"confirmed":true, 
"fPort":2, 
"data":"AIkAESIBAJBQ
" 
}