SenseCAP M2 多平台网关 LNS 配置
网关配置
通过 Web UI 配置网关,请查看快速入门以登录 Luci。
信道计划设置
导航到 LoRa > Channel Plan

选择区域和频率计划。

设置完成后,点击 Save&Apply
本地网络服务器配置
导航到 LoRa > LoRa Network

将模式设置为 Local Network Server,添加您的 MQTT 信息(代理主机/端口/用户/密码),其他参数可以保持默认值。

点击 Save&Apply 应用您的设置。
启动过程大约需要 1 分钟,然后您可以访问 GUI 配置。
ChirpStack GUI 配置
通过 http://localhost:8080 登录 ChirpStack GUI。

默认账户和密码:admin。

然后您将看到仪表板页面。

检查区域
导航到 Network Server > Regions。
应该有一个区域 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 并选择我们之前添加的设备配置文件,然后提交。

粘贴应用程序密钥并点击提交。

检查设备状态
检查您设备的 Events,当设备加入网络时,您将获得加入数据包。

您还可以查看数据包详细信息。

集成
本章节用于云服务开发,以下指南仅供参考。
MQTT
主题
MQTT 集成公开了事件类型文档中记录的所有事件。
默认事件主题是:
application/APPLICATION_ID/device/DEV_EUI/event/EVENT
查看 事件类型 了解更多详情。
您可以在应用程序选项卡中找到应用程序 ID:

- 事件类型
| up | 上行链路事件 |
|---|---|
| status | 边际和电池状态 |
| join | 设备加入事件 |
| ack | 确认下行链路 (n)ack |
| txack | 下行链路传输确认 |
| 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 将以 POST 方式向配置的 URL 发送消息。

提交您的 URL 信息。
仅支持 http,不支持 https。

HTTP 集成将向配置的事件端点发送 POST 请求(可以配置多个 URL,用逗号分隔)。事件 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()
下行链路
下行链路消息:
建议将下行链路标记为保留消息,这样命令就不会重复执行。
默认主题是:application/APPLICATION_ID/device/DEV_EUI/command/down
command:请查看设备用户手册中的下行链路命令以获取更多详细信息。
| 主题 | application/APPLICATION_ID/device/DEV_EUI/command/down |
|---|---|
| devEUI | 设备 EUI |
| confirmed | true/false(载荷是否必须作为确认数据下行发送) |
| fPort | 要使用的 FPort(必须 > 0) |
| data | base64 编码数据(明文,将由 ChirpStack 加密) |
示例:
- 重启 SenseCAP S210x LoRaWAN 传感器:
主题:
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"
}