在线开发MQTT协议的智慧路灯(MQTTv1.0协议)
场景说明
本文以“智慧路灯”举例,通过MQTT.fx模拟器代替真实设备,为您介绍设备开发全过程。
业务流程
基于MQTT.fx体验平台功能是指以在MQTT.fx模拟器为例,介绍数据上报、命令下发等业务。
1.创建产品。创建一个MQTT协议的产品。
2.创建物模型。通过定义产品物模型,在物联网平台上创建一款路灯产品,支持上报光照强度、下发路灯开关状态命令。
3.创建设备。创建一个MQTT协议的设备。
4.设备认证。使用MQTT.fx模拟设备认证过程。
4.设备入网。使用MQTT.fx模拟设备激活过程。
5.数据上报。使用MQTT.fx向物联网平台上报数据。
6.命令下发。在管理控制台下发命令,远程控制设备。
创建产品
产品是一组具有相同功能的设备集合。
1.登录物联网平台,在控制台首页点击“创建产品”或进入云平台,在左侧导航栏,选择产品管理>点击添加产品。
2.按照以下信息填写,然后点击“确认”,完成产品的创建:
参数 | 内容 |
---|---|
产品名称 | 智慧路灯 |
节点类型 | 设备 |
接入方式 | 设备直连 |
网络类型 | 移动蜂窝数据 |
通信协议 | MQTT |
安全类型 | 一机一密预注册 |
认证加密方式 | AES128 |
数据是否加密 | 加密 |
是否透传 | 非透传 |
消息格式 | JSON |
创建物模型
1.在产品管理列表找到刚创建的产品,进入产品详情页。
2.在产品详情页找到“物模型定义”页面,点击“编辑物模型”,配置产品物模型。
3.在属性定义页,点击添加属性:
a.添加“亮度”属性,填写以下信息:
参数 | 内容 |
---|---|
属性标识 | luminance |
属性名称 | 亮度 |
数据类型 | int32 |
取值范围 | 0-65535 |
步长 | 1 |
单位 | 不填写 |
是否只读 | 否 |
描述 | 路灯亮度 |
b.添加“开关”属性,填写以下信息:
参数 | 描述 |
---|---|
属性标识 | Control |
属性名称 | 路灯开关 |
数据类型 | bool |
布尔值 | 0-关,1-开 |
是否只读 | 否 |
描述 | 路灯开关 |
4.点击“应用配置”,发布物模型。
创建设备
1.登录物联网平台,在控制台首页点击进入云平台,在左侧导航栏,选择设备管理>点击添加设备。
2.按照以下信息填写,然后点击“确认”,完成设备的创建:
参数 | 描述 |
---|---|
所属产品 | 智慧路灯 |
设备ID | lighttest123 |
备注名称 | 测试设备 |
3.设备创建成功后,将自动弹出设备证书弹框。您可以查看、一键复制设备证书信息,包含DeviceID、DeviceSecret、OpenID、ProductID和ProductKey,是设备与物联网平台进行通信的重要身份认证,建议您妥善保管。
设备认证
设备认证用于设备校验平台是否可信,平台检测设备是否合法,以及获取设备入网参数。接下来使用MQTT.fx工具默认设备认证过程。
1.下载并安装MQTT.fx软件。请访问MQTT.fx官网。
2.打开MQTT.fx软件,单击设置图标。
3.参考以下表配置鉴权参数,单击"Apply"。
设备认证通用账号密码生成规则如下:
参数 | 内容 |
---|---|
Broker Address | 填写MQTT[设备对接地址](设备对接地址.md) |
Broker Port | 填写MQTT[设备对接地址](设备对接地址.md)端口 |
Client ID | ${设备ID} |
User Name | AUTH-${OpenID}-${ProductID} |
Password | ${ProductKey} |
4.单击“Connect”,连接成功后在“Subscribe”页订阅平台对认证/入网的消息回复。
订阅-认证/入网Topic:/sys/${OpenID}/${ProductID}/${设备ID}/downlink
5.点击“Publish”页,填写设备认证Topic,在工具中间空白处填写认证上报数据,点击“Publish"。
发布-设备认证Topic:/sys/device/auth
设备认证数据格式和内容如下所示:
{
"MessageId":1231, //消息唯一ID
"HeaderCtrl" : 1, //命令标志,1为设备认证
"Mode":1, //0:不加密,1:加密
"Nonce":10, //随机数
"Payload":{
"OpenID":"63F32D31", //厂商ID
"ProductID":"9D22FC94", //产品ID
"NodeEui":"lighttest123", //设备ID
"Type":2, //安全类型,0:一型一密免注册,1:一型一密预注册,2:一机一密预注册
"Random":"433B990C" //8位十六进制随机数
}
}
6.返回“Subscribe”页,在认证/入网的消息回复Topic下获取入网所需的设备ClientID和DeviceSecret。
设备入网
1.完成认证流程后,立即断开连接,单击设置图标,重新设置入网所需鉴权信息。
2.参考以下表配置鉴权参数,单击"Apply"。
参数 | 内容 |
---|---|
Broker Address | 填写MQTT[设备对接地址](设备对接地址.md) |
Broker Port | 填写MQTT[设备对接地址](设备对接地址.md)端口 |
Client ID | ${设备Client ID} |
User Name | ${OpenID}-${ProductID}-${设备ID} |
Password | ${DeviceSecret} |
3.点击“Connect”,连接成功后在“Subscribe”页订阅平台对认证/入网的消息回复。
订阅-认证/入网Topic:/sys/${OpenID}/${ProductID}/${设备ID}/downlink
4.点击“Publish”页,填写设备入网Topic,在工具中间空白处填写入网上报数据,点击“Publish"。
发布-设备入网Topic:/sys/device/join
设备入网数据格式和内容如下所示:
{
"MessageId": 1231,//消息唯一ID
"HeaderCtrl": 2,//命令标志,2为设备入网
"Mode": 1,//0:不加密,1:加密
"Nonce": 10,//随机数
"Payload": {
"OpenID": "63F32D31", //厂商ID
"ProductID": "9D22FC94",//产品ID
"NodeEui": "lighttest123",//设备ID
"ClientID": "A810E9529A8C4AD2AE198364A4188C80", //设备ClientID
"Type": 2,//安全类型,0:一型一密免注册,1:一型一密预注册,2:一机一密预注册
"Sign": "5DF485D3"//入网签名值
}
}
关于Sign值的计算规则可参考:入网sign值计算示例
5.服务器处理设备入网后,会向Topic:/sys/${63F32D31}/${9D22FC94}/lighttest123/downlink
发送入网回复,可在“Subscribe”页查看。
入网成功回复如下:
{
"HeaderCtrl" : 2,
"Mode" : 1,
"Nonce" : 37,
"Payload" : {
"Code" : 0,//0:入网成功
"SessionID" : "4A6472DA"//用于生成数据传输密钥,如果无需加密可忽略
}
}
6.此时,在物联网平台上已经可以看到该设备已经成功上线。
数据上报
使用MQTT.fx工具向物联网平台上报数据。
1.在“Publish”页的地址栏内填写物模型JSON格式属性上报Topic,在工具中间空白处填写入网上报数据,点击“Publish"。
发布-物模型JSON格式属性上报Topic:/sys/${openId}/${productId}/${deviceId}/model/property/report
数据格式和内容如下所示:
{
"MessageId": 1231 ,
"HeaderCtrl":16, //命令码,16:物模型JSON属性上报
"Mode":1, //0:不加密, 1:加密
"Nonce":10, //1-128 随机数
"Payload":{
"luminance":100, // 物模型属性:亮度
"Control":0 // 物模型属性:路灯开关
}
}
2.上报成功后,可以在物联网平台的对应设备详情-物模型数据页查看设备是否成功上报数据。
命令下发
使用MQTT.fx工具订阅物联网平台下发的数据。
1.在“Subscribe”页订阅平台下发物模型属性设置topic。
订阅-平台下发物模型属性设置Topic:/sys/${openId}/${productId}/${deviceId}/model/property/set
2.在设备详情-物模型数据-属性上报页,选择“设置”‘路灯开关“属性为“开”,点击发送。
3.发送成功后,可以在“Subscribe”页查看命令下发数据。