模拟智慧路灯与平台通信
场景说明
本文以“智慧路灯”为示例,通过MQTT.fx设备模拟器模拟智慧路灯,给您介绍基于IoTDA平台实现一款智慧路灯联接到平台、上报光照强度数据、以及平台下发开灯命令给智慧路灯三个场景。
前提条件
业务流程
基于MQTT.fx体验平台功能是指使用MQTT.fx模拟器工具,进行数据上报、命令下发等业务的体验。您可点此下载MQTT.fx(默认是64位操作系统,如果是32位操作系统,单击此处下载MQTT.fx),安装MQTT.fx工具。整体的业务流程如下:
- 创建产品。在控制台上创建一个MQTT协议的智慧路灯产品。通过定义产品模型,构建一款路灯设备,支持上报光照强度、下发路灯开关状态命令。
- 注册设备。在控制台上注册一个MQTT协议的智慧路灯设备。
- 设备建链。使用MQTT.fx模拟智慧路灯,完成连接鉴权,激活在物联网平台上注册的设备。
- 数据上报。使用MQTT.fx模拟智慧路灯向物联网平台上报路灯光照强度数据。
- 命令下发。在管理控制台下发路灯开关命令,远程控制MQTT.fx模拟智慧路灯。
创建产品
- 登录管理控制台,单击左侧导航栏“产品”,单击页面左侧的“创建产品”。
图2 产品-创建产品
- 创建一个协议类型为MQTT协议、设备类型为StreetLamp的产品,参考页面提示填写参数后,单击“确定”。
图3 创建产品-MQTT
开发产品模型
- 找到新增的产品,单击产品进入产品界面。
- 在产品详情“模型定义”页面,单击“自定义模型”,配置产品的服务。
图4 自定义模型-MQTT
- 新增服务类型“BasicData”。
- 在“添加服务”页面,根据页面提示填写“服务ID”、“服务类型”和“服务描述”,单击“确定”。
图5 添加服务-BasicData
- 在“BasicData”服务列表右侧区域,单击“新增属性”,填写相关信息后,单击“确定”。
图6 新增属性-luminance
- 在“添加服务”页面,根据页面提示填写“服务ID”、“服务类型”和“服务描述”,单击“确定”。
- 新增服务类型“LightControl”。
- 在“模型定义”下单击“添加服务”,根据页面提示填写后,单击“确定”。
- “服务ID”:LightControl
- “服务类型”:建议和服务ID保持一致
- “服务描述”:路灯开关控制
- 在“LightControl”的下拉菜单下单击“添加命令”,输入命令名称“Switch”。
图7 新增命令-Switch
- 在“新增命令”页面,单击“新增输入参数”,填写相关信息后,单击“确定”。
图8 新增命令参数-value
- 在“模型定义”下单击“添加服务”,根据页面提示填写后,单击“确定”。
注册设备
- 在设备接入控制台页面,选择左侧导航栏“设备 > 所有设备”,单击页面右上角的“注册设备”。
图9 所有设备-注册设备
- 根据页面提示信息填写参数,然后单击“确定”。
参数名称
说明
所属资源空间
确保和所属产品归属在同一个资源空间。
所属产品
选择对应产品。
设备标识码
即nodeID,设备唯一物理标识。可自定义,由英文字母和数字组成。
设备名称
即device_name,可自定义。
设备认证类型
选择“密钥”。
密钥
此处如不填写,物联网平台会自动生成。
图10 单设备注册-MQTT
- 成功注册设备后,平台会自动生成设备ID和密钥,请妥善保管好设备ID(deviceId)和密钥(deviceSecret),用于设备接入。
图11 设备-注册设备成功
通过MQTT.fx模拟智慧路灯连接平台
使用MQTT.fx工具激活在物联网平台上注册的设备。
- 下载MQTT.fx(默认是64位操作系统,如果是32位操作系统,单击此处下载MQTT.fx),安装MQTT.fx工具。
- 进入设备详情页面,找到“MQTT连接参数”,单击查看,查看其中的clientId、username、password和hostname。
图12 设备-设备详情
图13 设备-设备详情-MQTT连接参数
- 打开MQTT.fx软件,单击设置图标。
图14 MQTT.fx设置
- 参考下表配置鉴权参数,然后单击“Apply”,再单击“Cancel”退出配置界面。
图15 配置鉴权参数
- 单击“Connect”,看到MQTT.fx界面右上角圆圈转为绿色,即说明设备模拟器鉴权连接成功。设备连接成功后,在物联网平台可以看到设备处于在线状态。
图16 设备模拟器连接成功
图17 设备在线
光照强度数据上报
使用MQTT.fx工具向物联网平台上报光照强度数据。设备若通过MQTT通道上报数据,需要发给指定的topic,上报消息的topic格式为:$oc/devices/{device_id}/sys/properties/report,其中对于一机一密设备,使用deviceId接入时需填写为设备注册成功后返回的deviceId值。
- 填写接口地址,此处以$oc/devices/{device_id}/sys/properties/report为例。
图18 填写接口地址
- 在工具中间的空白处填写上报的数据后,单击“Publish”。
表2 设备服务数据列表 字段名
必选/可选
类型
参数描述
services
必选
List<ServiceProperty>
设备服务数据列表(具体结构参考下表ServiceProperty定义表)
表3 ServiceProperty定义表 字段名
必选/可选
类型
参数描述
service_id
必选
String
设备服务的ID。
properties
必选
Object
设备服务的属性列表,具体字段在设备关联的产品模型中定义。
eventTime
可选
String
设备采集数据UTC时间(格式:yyyyMMddTHHmmssZ),如:20161219T114920Z。
设备上报数据不带该参数或参数格式错误时,则数据上报时间以平台时间为准。
请求示例如下:
{ "services": [{ "service_id": "BasicData", "properties": { "luminance": 30 } } ] }
- 可以在设备详情页中查看设备是否成功上报数据。如下图,显示光照强度luminance已更新为30。
图19 查看上报数据-MQTT
远程下发开灯命令
在管理控制台下发开灯命令,远程控制智慧路灯。
- 选择“详情”进入设备详情页面。 ,找到新建的设备,单击
- 单击“云端下发”页签,单击“命令下发”,选择命令为LightControl: Switch,value为ON,下发开灯命令。
图20 命令下发-同步命令下发
图21 命令下发-LightControl
MQTT协议设备仅支持同步命令下发,NB-IoT设备仅支持异步命令下发。
- MQTT.fx模拟器中选择
,输入命令下发Topic,订阅后则可以查看到下发的命令参数。命令下发Topic格式为:$oc/devices/{device_id}/sys/commands/#。如下图所示,MQTT.fx模拟器成功收到command_name为Switch的命令,value为ON。图22 查看下发的命令参数
如果Console界面提示命令请求超时,是因为下发的同步命令需要设备侧及时回报响应消息,而MQTT.fx并无自动上报命令响应消息的功能。命令响应内容请参考平台命令下发。