星纵网关连接华为云IoTDA
目录
概述
设备接入服务(IoTDA)是华为云的物联网平台,提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务。本文档主要介绍如何将星纵物联LoRaWAN®网关通过MQTT方式对接到华为云IoTDA,并且通过MQTT主题将传感器数据发布到平台。
准备
- 星纵物联LoRaWAN®网关
- 星纵物联LoRaWAN®终端节点
- 华为云物联网平台(IoTDA)
步骤
1. 华为云IoTDA平台配置
华为云IoTDA:https://www.huaweicloud.com/product/iothub.html
- 点击“免费试用”,并登录到控制台;
- 在IoTDA实例页面,找到对应的实例,单击实例进入实例详情页面。
1.1 创建产品
在左侧导航栏,选择“产品”,单击创建产品。产品名称、协议类型、数据格式等参照下图进行设置。
1.2 创建设备
- 在左侧导航栏,选择“设备>所有设备”,点击注册设备,在单设备注册的对话框中,参照下图进行设置。
- 设备创建完成后为未激活,需要在网关上完成相关配置后,才能激活。
1.3 获取平台连接信息
网关MQTT接入物联网平台需要提前获取MQTT接入信息(MQTT服务器地址/MQTT服务端口/客户端ID/用户名/密码)。
- 进入对应设备的详情页,点击MQTT连接参数,即可获取接入信息。
注意:8883为MQTTS的连接端口,若是MQTT连接端口请配置1883。
2. 网关配置
- 确定传感器设备所属的应用,在网关配置页面选择“Network Server>应用”,选择对应应用点击编辑图标进入应用编辑界面。
- 添加数据传输。
- 选择数据传输类型为MQTT。根据华为云IoTDA要求配置MQTT连接信息。点击保存后,重新进入可以看到状态为已连接。
- 华为云平台端查看网关状态为在线。
注意:若未连接成功,请先确认网关的网络状态及连接信息是否填写正确。网关上MQTT服务器端口请填写1883。
3. 数据上报
如下介绍网关如何通过发布Topic将传感器数据上报到华为云IoTDA。传感器以AM103为例。
3.1 Topic定义
- 进入产品详情页,选择“Topic管理”查看系统预置Topic,或者自定义配置Topic,可直接使用系统预置Topic。华为云IoTDA Topic定义详见:https://support.huaweicloud.com/usermanual-iothub/iot_01_0045_2.html
- 可根据是否使用物模型,选择不同的上报主题。
设备消息上报(透传上报) | |
主题 | $oc/devices/{device_id}/sys/messages/up |
用途 | 设备无法按照产品模型中定义的属性格式进行数据上报时,可调用此接口将设备的自定义数据格式上报给平台,平台对该消息不做解析。其中{device_id}需修改为设备ID。 |
设备上报属性(物模型上报) | |
主题 | $oc/devices/{device_id}/sys/properties/report |
用途 | 设备按产品模型中定义的格式将属性数据上报给平台,其中{device_id}需修改为设备ID。 |
3.2 透传上报
- 参考网关内置NS添加节点设备,在网关添加并激活一个传感器设备。
- 进入网关页面,选择“Network Server>应用”,在对应的MQTT应用中将设备消息上报主题$oc/devices/milesight/sys/messages/up配置在Uplink data主题,点击保存。
- 进入华为云IoTDA设备详情页,在“云端运行日志”查看设备消息。
3.3 物模型上报
3.3.1 平台配置
进入产品详情页,选择“模型定义”开发产品模型。单击“自定义模型”,配置产品的服务。
- 在“添加服务”页面,填写“服务ID”、“服务类型”和“服务描述”,单击“确定”。
- “服务ID”:BasicData
- “服务类型”:建议和服务ID保持一致
- “服务描述”:室内空气质量数据
- 在“BasicData”服务右侧区域,单击“添加属性”,填写相关信息后,单击“确定”。
- “属性名称”:temperature
- “属性描述”:温度
- “数据类型”:int(整型)
- “访问权限”:可读、可写
- “取值范围”:0~100
- “步长”:0
- “单位”:不填写
- 根据AM103传感器所上报的数据共增加4个物模型属性。
- 如下为该物模型所能够识别的数据格式,需在网关将上报数据解析为如下格式。
{
"services": [
{
"service_id": "BasicData", //服务ID
"properties": {
"battery": xx, //属性名称
"co2": xx,
"humidity": xx,
"temperature": xx
}
}
]
}
3.3.2 网关配置
- 参考如何在网关上使用编解码器,同时根据华为云IotDA物模型格式要求,自定义创建一个解码器用于将传感器数据解析为平台要求的格式再进行上报。
AM103物模型解码函数:
function Decode(fPort, bytes) {
var decoded = {
services: [
{
service_id: "BasicData",
properties: {}
}
]
};
for (var i = 0; i < bytes.length;) {
var channel_id = bytes[i++];
var channel_type = bytes[i++];
// BATTERY
if (channel_id === 0x01 && channel_type === 0x75) {
decoded.services[0].properties.battery = bytes[i];
i += 1;
}
// TEMPERATURE
else if (channel_id === 0x03 && channel_type === 0x67) {
decoded.services[0].properties.temperature = readInt16LE(bytes.slice(i, i + 2)) / 10;
i += 2;
}
// HUMIDITY
else if (channel_id === 0x04 && channel_type === 0x68) {
decoded.services[0].properties.humidity = bytes[i] / 2;
i += 1;
}
// PIR ACTIVITY
else if (channel_id === 0x05 && channel_type === 0x6A || channel_id === 0x0A && channel_type === 0x6A) {
decoded.services[0].properties.activity = readUInt16LE(bytes.slice(i, i + 2));
i += 2;
}
// LIGHT
else if (channel_id === 0x06 && channel_type === 0x65) {
decoded.services[0].properties.illumination = readUInt16LE(bytes.slice(i, i + 2));
decoded.services[0].properties.infrared_and_visible = readUInt16LE(bytes.slice(i + 2, i + 4));
decoded.services[0].properties.infrared = readUInt16LE(bytes.slice(i + 4, i + 6));
i += 6;
}
// CO2
else if (channel_id === 0x07 && channel_type === 0x7D) {
decoded.services[0].properties.co2 = readUInt16LE(bytes.slice(i, i + 2));
i += 2;
}
// TVOC
else if (channel_id === 0x08 && channel_type === 0x7D) {
decoded.services[0].properties.tvoc = readUInt16LE(bytes.slice(i, i + 2));
i += 2;
}
// PRESSURE
else if (channel_id === 0x09 && channel_type === 0x73) {
decoded.services[0].properties.pressure = readUInt16LE(bytes.slice(i, i + 2)) / 10;
i += 2;
} else {
break;
}
}
return decoded;
}
/* ******************************************
* bytes to number
********************************************/
function readUInt16LE(bytes) {
var value = (bytes[1] << 8) + bytes[0];
return value & 0xffff;
}
function readInt16LE(bytes) {
var ref = readUInt16LE(bytes);
return ref > 0x7fff ? ref - 0x10000 : ref;
}
- 参考网关内置NS添加节点设备,在网关添加并激活一个传感器设备。添加传感器时需选择上一步创建的载荷解码器。
- 选择“Network Server>应用”,在对应的MQTT应用中将设备上报属性主题$oc/devices/milesight/sys/properties/report配置在Uplink data主题,点击保存。
- 进入华为云IoTDA设备详情页,可以看到最新上报的物模型数据。