玩转华为物联网IoTDA服务系列二-智慧路灯场景示例
场景简介
路灯管理系统通过接入IoTDA,监控路灯状态,控制路灯开关(集成了NB模组的智慧路灯)。
该场景主要描述的是设备可以通过LWM2M协议与物联网平台进行交互,应用侧可以到物联网平台订阅设备侧变化的通知,也可以给设备侧下发命令。
核心知识点:产品模型、编辑码插件、订阅推送、属性上报、命令下发。
场景流程
流程解释:
1、创建路灯产品:物联网平台以产品为粒度管理批量设备。用户可以通过平台提供的API接口或控制台创建产品。
2、上传产品模型和编解码插件:产品模型定义了设备的基本属性和命令。您可以通过控制台在线开发产品模型,通过模板离线开发产品模型再上传到控制台,也可以导入公共产品库的模型。
因为NB-IoT设备使用LWM2M协议通信,而平台采用JSON格式的数据。因此需要编解码插件转换数据格式,平台和设备才能互相通信。您可以选择在控制台上在线开发编解码插件,也可以通过离线开发编解码插件再上传到控制台。
3、批量注册路灯设备:平台提供了应用侧API接口可以注册设备,也可以通过控制台批量注册。注册时获取的设备ID,是设备侧与平台交互的唯一标识。
4、创建路灯状态变化的订阅:路灯管理系统可以在平台创建设备变化的通知订阅,需要把callback url即应用回调地址传给平台,平台后续会推送通知到该url。
5、路灯上报亮度:NB-IoT设备是指集成了NB-IoT通信模组的设备,模组集成了华为IoT Tiny SDK,把路灯亮度的消息用二进制码流传输给平台。平台会用编解码插件将二进制码流解码成平台能理解的JAON格式数据。
6、推送路灯亮度变化通知:平台会根据之前应用订阅的回调地址,把订阅的通知类型通过HTTP/HTTPS推送回路灯管理系统(应用侧)。
7、下发关灯命令:路灯管理系统可以根据路灯的状态,给指定或批量设备下发关灯的命令。此处的NB-IoT设备命令下发是异步的,NB-IoT设备不支持同步命令下发,因为NB设备一般低功耗,不是长连接在线,所以一般可以采用缓存命令下发。
8、命令下发给路灯关灯:平台会调用编解码插件进行编码,将命令以二进制码流形式传输给设备。
9、查询命令执行结果:路灯管理系统(应用侧)可以通过平台提供的应用侧API接口,查询指定命令的执行状态,判断命令执行是否成功。这里需要注意的是:平台V5新接口命令下发是同步的,所以不支持(也无需)查询命令状态。只有老接口的V3接口命令下发是异步的,支持查询命令状态。
最佳实践
场景说明
智慧路灯是城市智能化道路上重要一环,智慧路灯的实施具有节约公共照明能耗、减少因照明引起的交通事故等多种社会意义。路灯也是大家在日常生活中可以强烈感知到的公共设施,更易理解其智能化的场景。
在该章节中,我们基于华为一站式开发工具平台,从设备、平台、应用端到端构建一款智慧路灯解决方案样例,带您体验十分钟快速上云。
前期准备
开发板:小熊派开发板(含NB卡、NB模组、智慧路灯功能模块等)
配件:数据线
已安装IoT Link Studio插件。若未安装,请参考IoT Link Studio进行安装。
平台:已开通设备接入服务
硬件连接
插卡的时候卡的缺口朝外插入,并将串口选择开关拨到MCU模式。
创建产品
某一类具有相同能力或特征的设备的集合称为一款产品。除了设备实体,产品还包含该类设备在物联网能力建设中产生的产品信息、产品模型(Profile)、插件等资源。
登录华为云官方网站,访问设备接入服务。
单击“立即使用”进入设备接入控制台。
单击左侧导航栏的产品,单击右上角下拉框,选择新建产品所属的资源空间。
4. 单击右上角的“创建产品”,创建一个基于CoAP协议的产品,填写参数后,单击“立即创建”。
基本信息 |
|
所属资源空间 |
选择您需要归属到的资源空间 |
产品名称 |
自定义,如“BearPi_StreetLight” |
协议类型 |
选择“CoAP” |
数据格式 |
选择“二进制码流” |
厂商名称 |
自定义,如“BearPi” |
功能定义 |
|
选择模型 |
物联网平台提供了三种创建模型的方法,此处使用自定义产品模型的方法 |
所属行业 |
智慧城市 |
设备类型 |
StreetLight |
5.产品创建成功后,单击“详情”进入产品详情页面,进行后面操作。
定义产品模型
在产品详情,“功能定义”页面,单击“自定义功能”,配置产品的服务。
产品模型设计思路:
服务描述 |
服务名称(ServiceID) |
---|---|
实时按键检测 |
Button |
LED灯控制 |
LED |
实时检测光照强度 |
Sensor |
实时检测信号质量 |
Connectivity |
服务能力如下表所示。
能力描述 |
属性名称 |
数据类型 |
数据范围 |
---|---|---|---|
属性列表 |
toggle |
int |
0 ~ 65535 |
能力描述 |
命令名称 |
命令字段 |
字段名称 |
类型 |
数据长度 |
枚举 |
---|---|---|---|---|---|---|
命令列表 |
Set_Led |
下发命令 |
led |
string |
3 |
ON,OFF |
响应命令 |
light_state |
string |
3 |
ON,OFF |
能力描述 |
属性名称 |
数据类型 |
数据范围 |
---|---|---|---|
属性列表 |
luminance |
int |
0 ~ 65535 |
能力描述 |
属性名称 |
数据类型 |
数据范围 |
---|---|---|---|
属性列表 |
SignalPower |
int |
-140 ~ -44 |
ECL |
int |
0 ~ 2 |
|
SNR |
int |
-20 ~ 30 |
|
CellID |
int |
0 ~ 65535 |
新增服务名称Button
1.进入“新增服务”页面,填写服务名称:Button,服务描述后,单击“确认”。
2.在“Button”的下拉菜单下点击“添加属性”,填写相关信息,单击“确认”。
新增服务名称LED
在“功能定义”下点击“添加服务”,填写服务名称:LED,服务描述后,单击“确认”。
在“LED”的下拉菜单下点击“添加命令”,输入命令名称“Set_Led”。
3.在“新增命令”弹框,分别单击“新增输入参数”和“新增输出参数”,填写相关信息后,单击“确认”。
图1 新增输入参数led
图2 新增输出参数light_state
新增服务名称Sensor
在“功能定义”下点击“添加服务”,填写服务名称:Sensor,服务描述后,单击“确认”。
在“Sensor”的下拉菜单下点击“添加属性”,填写相关信息,单击“确认”。
新增服务名称Connectivity
在“功能定义”下点击“添加服务”,填写服务名称:Connectivity,服务描述后,单击“确认”。
在“Connectivity”的下拉菜单下依次点击“添加属性”,分别添加SignalPower,ECL,SNR,CellID属性,填写相关信息,单击“确认”。
图3 新增SignalPower属性
图4 新增ECL属性
图5 新增SNR属性
图6 新增CellID属性
插件开发
1.在产品详情插件开发页面,选择“图形化开发”,单击“图形化开发”。
2.在“在线开发插件”区域,单击“新增消息”。
说明:请按照本文档提供的操作开发编解码插件,确保添加字段的顺序和本文档提供的顺序保持一致。
3.新增消息Report_Connectivity,配置示例如下:
消息名:Report_Connectivity
消息类型:数据上报
添加响应字段:是
响应数据:AAAA0000(默认)
a.在“新增消息”页面,单击“添加字段”,勾选“标记为地址域”,添加地址域字段messageId,然后单击“确认”。
b.单击“添加字段”,添加SignalPower字段,填写相关信息后,单击“确认”。
名字:SignalPower
数据类型:int16s(16位有符号整型)
c.单击“添加字段”,添加ECL字段,填写相关信息后,单击“确认”。
名字:ECL
数据类型:int16s(16位有符号整型)
d.单击“添加字段”,添加SNR字段,填写相关信息后,单击“确认”。
名字:SNR
数据类型:int16s(16位有符号整型)
e.单击“添加字段”,添加CellID字段,填写相关信息后,单击“确认”。
名字:CellID
数据类型:int32s(32位有符号整型)
完成消息Report_Connectivity的配置后,单击“确认”。
4.新增消息Report_Toggle,配置示例如下:
消息名:Report_Toggle
消息类型:数据上报
添加响应字段:是
响应数据:AAAA0000(默认)
a.在“新增消息”页面,单击“添加字段”,勾选“标记为地址域”,添加地址域字段messageId,然后单击“确认”。
b.单击“添加字段”,添加toggle字段,填写相关信息后,单击“确认”。
名字:toggle
数据类型:int16u(16位无符号整型)
完成消息Report_Toggle的配置后,单击“确认”。
5.新增消息Report_Sensor,配置示例如下:
消息名:Report_Sensor
消息类型:数据上报
a.在“新增消息”页面,单击“添加字段”,勾选“标记为地址域”,添加地址域字段messageId,然后单击“确认”。
b.单击“添加字段”,添加data字段,填写相关信息后,单击“确认”。
名字:data
数据类型:int16u(16位无符号整型)
完成消息Report_Sensor的配置后,单击“确认”。
6.新增消息Set_Led,配置示例如下:
消息名:Set_Led
消息类型:命令下发
添加响应字段:是
a.在“新增消息”页面,单击“添加字段”,勾选“标记为地址域”,添加地址域字段messageId,然后单击“确认”。
b.单击“添加字段”,在“添加字段”界面,勾选“标记为响应标识字段”,添加响应标识字段 mid,然后单击“确认”。
c.单击“添加字段”,添加“led”字段,然后单击“确认”。
名字:led
数据类型:string
长度:3
d.在“新增消息”页面,单击“添加响应字段”,添加地址域字段 messageId。在“添加字段”界面,勾选“标记为地址域”,然后单击“确认”。
e.添加响应标识字段mid。在“添加字段”界面,勾选“标记为响应标识字段”,然后单击“确认”。
f.单击“添加响应字段”,添加命令执行状态字段 errcode。在“添加字段”界面,勾选“标记为命令执行状态字段”,然后单击“确认”。
g.单击“添加响应字段”,添加light_state响应字段,填写相关信息,单击“确认”。
名字:light_state
数据类型:string
长度:3
完成消息 Set_Led 的配置后,单击“确认”。
7.拖动右侧“设备模型”区域的属性字段、命令字段和响应字段,与数据上报消息、命令下发消息和命令响应消息的相应字段建立映射关系。
8.单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到物联网平台.
注册设备
本章节介绍集成NB模组设备的注册方法。
在产品详情页面,选择“在线调试”,单击“新增测试设备”,此处新增的是非安全的NB-IoT设备。
在新增测试设备页面,选择“真实设备”,并填写设备名称,设备标识码。
设备名称:Test(自定义即可)
设备标识码:设备的IMEI号,用于设备在接入物联网平台时携带该标识信息完成接入鉴权,可在设备上查看。您也可以将串口开关拨到PC模式,选择STM的端口,波特率设置为9600,输入指令“AT+CGSN=1”获取IMEI号。
设备注册方式:选择不加密。
安装IoT Link Studio插件
IoT Link Studio是针对IoT物联网端侧开发的IDE环境,提供了编译、烧录、调试等一站式开发体验,支持 C、 C++、汇编等多种开发语言,让您快速、高效地进行物联网开发。
访问 https://code.visualstudio.com/ 下载并安装Visual Studio Code。
安装成功后,打开VSCode 插件应用商店,搜索 iotlink 找到IoT Link Studio,然后点击安装。
3.首次启动配置。
IoT Link Studio 首次启动时会自动从网络下载最新的SDK包以及gcc依赖环境,请确保您的网络可用。安装过程中请不要关闭窗口,耐心等待。安装完成后重启VSCode使插件生效。
配置IoT link Studio工程
1.点击VSCode底部工具栏的“Home”。
2.在弹出界面中点击“创建 IoT 工程”,输入工程名称,工程目录,并选择开发板的硬件平台和示例工程模板。
工程名称:QuickStart。
工程目录:D:\。
硬件平台:选择STM32L431_BearPI。
示例工程:选择OC_streetlight_template。
3.点击“确定”,导入完成。
编译并烧录代码
1.点击VSCode底部工具栏的“Build”,等待系统编译完成。编译成功后,界面显示“编译成功”。
2.点击VSCode底部工具栏的“Download”,等待系统烧录完成。烧录成功后,界面显示“烧录成功”。
数据上报
平台和开发板建立连接后,上报光照传感器数据。您也可以改变光照强度,查看设备上报给平台的数据变化。
登录设备接入服务控制台,选择 。
选择前面“注册设备”中添加的设备,单击“查看”进入设备详情,查看上报到平台的数据。
命令下发
登录设备接入服务控制台,选择 。
选择前面“注册设备”中添加的设备,单击“查看”,进入设备详情页面。
选择“命令”页签,单击“命令下发”,选择命令,设置命令参数后,单击“确定”。
4.查看小熊派板子灯被点亮,下发OFF命令后,灯熄灭。
至此,通过该文档的学习,您应该对智慧路灯场景有了一定的了解。接下来,可以在系列后续文章中,可以学习到更多的物联网业务场景。
- 点赞
- 收藏
- 关注作者
评论(0)