在线开发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软件,单击设置图标。

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.完成认证流程后,立即断开连接,单击设置图标,重新设置入网所需鉴权信息。

mqtt.fx设置

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”页查看命令下发数据。

属性设置

results matching ""

    No results matching ""