一、实验背景
1. 智慧小区工作需求:
小区管理复杂,道路多,安防压力大而且人数较少,需要借助技术手段实现高效、便捷、智能的管理目标。
2. 现状:
不同小区环境各异,监管盲点多,内部结构松散,单靠人工不能保障足够的安全需,利用智慧小区安全防护系统是有效措施。
二、实验目的
1. 基于真实设备,搭建软硬件环境,接入 OneNET 平台并实现设备属性上报。
2. 通过 OneNET 平台的“设备调试”实现设备属性下发。
3. 通过 OneNET 平台的“API 调试”实现设备属性下发。
4. 直接基于 API 方式实现设备属性下发。
三、实验步骤
模拟设备接入平台
1. 创建新产品, 添加“Simulator”和“Controller”两个设备。
2. 设置物模型参数。
3. 配置 MQTT.fx 软件,连接设备,使其在线。
1.先生成tiken
2.并配置 MQTT.fx 工具模拟设备信息
点击界面设置图标,进入客户端配置页面:
(1) 设置 Profile Name:可设置一个容易记忆的名字
(2) 设置 Broker Address:mqtts.heclouds.com (MQTT 设备接入平台网址)
(3) 设置 Broker 端口:1883 (本次实训任务采用非 TLS 加密的 MQTT 连接)
(4) 设置 Client ID:{设备名称}(前一个步骤中确定的设备名称填入此处)
在下方的第一个选项页“General”中,设置:
(5) MQTT 协议版本号:取消默认勾中,确保下方版本选择下拉框可选,并选择为 3.1.1
点击 “User Credentials”选项页, 继续设置:
(6) 设置 User Name:(前一个步骤中确定的产品 ID)
(7) 设置 Password:(前一个步骤中计算得到的 token)
点击OK 保存连接配置,点"Connect"进行连接,使设备在线;
3. 构建 Topic 类,接入实验,使参数上报到云平台。
$sys/产品 ID/设备名称/thing/property/post/reply
其中产品 ID、设备名称内容,根据实际创建的产品和设备信息替换,将替换后完整的 topic,填入模拟工具“Subscribe”选项页中的输入框,如下图所示:
点击“Subscribe”按钮向平台订阅该主题,平台返回成功后,工具左侧中的已订阅主题列表会有一条记录,且该主题下当前消息数为 0。
点击“Publish”选项页表头,切换到消息发送页,在输入框中填入属性上报 topic 主题,该 topic为:$sys/产品 ID/设备名称/thing/property/post
在下空白编辑区中,输入如下内容:
"id": "123",
"version": "1.0",
"params": {
"distance": {
"value": 28.88,
"time": 1599534283111//当前时刻的时间戳,可不写
}
}
}
4. 点击“设备调试”,属性设置,进行下发命令;在 MQTT.fx\Subscribe 中查看平台下发的参数。
在“设备管理”中选择要下发属性的设备(本任务中选择前面任务中创建的产品和Simulator 设备),点击详情进入设备信息页面,切换功能为“设备调试”在下方显示页面中选择“应用模拟器”,勾中属性功能点距离 distance,并填写一个具体数值,点击页面下方的 “属性设置”按钮,完成发送。可以在页面右侧的调试日志中看到下发的日志信息。
点击模拟工具的“Subscribe”选项页表头,可以看到已订阅列表中,关于平台下发属性数据的topic, 当前消息数是 1。点击右侧消息列表最下方一条消息,可以看到其中的内容信息,收到的值与前一步骤中下发的值相同。
四、实物设备接入 OneNET 平台实现属性上报
1. 基于 OneNET 物联网实验箱搭建实训项目终端硬件平台,完成设备搭建。
2. 修改工程程序,编译工程,烧写程序到设备中。
修改设备程序的 OneNET 平台网络接入配置参数
- 工程相对路径\device\src\net_device.c 约 677 行处,将{wifi}、{password}替换为设备所在 Wifi 网络用户名和密码;
- 工程相对路径\onenet\src\onenet.c 约 56 行处,依次修改{设备密钥}、{产品 id}、{设备名称}为之前步骤中在 OneNET 平台 中所创建的产品、设备相关信息,本例中设备名称就是之前步骤中创建的“Controller”设备,并对应填入其设备密钥;
修改设备程序的上报属性值映射关系以及 OneNET 平台下发属性生效命令处理代码
- 工程相对路径\applications\application.c 约 132 行处,根据之前步骤中在 OneNET 平台中所创建的物模型信息,依次增加属性点标识符以及对应需上报的设备数据变量,如下所示;
{"beep", &beep_info.beep_status[0], TYPE_BOOL, 1}, {"distance",&Sonic_Info.sonic_distance,TYPE_FLOAT,1},
- 工程相对路径\onenet\src\cmd_callback.c 约 51 行处,根据之前步骤中在OneNET 平台 中所创建的物模型信息,增改此处的属性点标识符,对应设置需写入生效的设备数据处理函数名,并同时实现该函数的声明以及具体函数代码,完成写入信息在本地设备上的实际生效逻辑;
以蜂鸣器写入为例,对应修改该变量定义段内某行形如“{“beep”,CALLBACK_Beep},”的信息,逗号前面的字符串标识符为"beep",逗号后的处理方法名为 CALLBACK_Beep。同时在该文件头部,增加 void CALLBACK_Beep(int value);这样的方法声明:
在文件适当位置增加该方法的具体实现逻辑代码:
3. 在 OneNET 平台侧查看设备状态和上报数据信息。
二、下发属性在终端设备上执行生效(设备调试)
1. 进入 OneNET 选择产品和设备进入设备调试功能页面,选择应用模拟器可以对设备进行属性配置。
2. 勾选功能点,设置下发数值,点击“属性设置”按钮,设备端执行生效。
其中的params内容填写要设置的属性标识符以及对应设置值,本次任务中设置蜂鸣器状态为true,文本示例参考如下:
三、下发属性在终端设备上执行生效(API 调试)
1. 点击“运维监控”菜单下“API 调试”子菜单,并展开工作页面左列显示的大类调试类别中的“物模型使用”下拉列表,选择“设置设备属性”API项
2.在中间页面展示的必填参数中,填入设备“Controller”所对应的相关信息
点击“执行”按钮,设备端执行下发的属性值。
其中的params内容填写要设置的属性标识符以及对应设置值,设置蜂鸣器状态为true
{
"beep": true
}
四、基于 API 方式实现设备属性下发
1、根据API文档的信息,确定设备属性设置的请求方式、请求 url
将 Postman工具url填写栏前面的下拉选项为“POST”。确定请求的 Header 内容,这里需要一个向 OneNET 平台鉴权所需的必要信息字段,就是“authorization ”信息,将之前token计算器生成的信息填写“authorization ”中
2、确定请求 body 内容及格式
以蜂鸣器属性值(beep)下发为例, product_id为产品ID,device_name为设备名称,params 为需要下发的结构化数据,同时包含了要下发的“beep”属性点的值,示例中为 true 数据。
通过平台鉴权后,该请求会下发到对应的真实设备,打开蜂鸣器开关
代码如下
{
"product_id": "84qVvid4b5",
"device_name": "Controller",
"params":
{
"beep": true
}
}
更改下发的属性值为 false,报文如下
{
"product_id": "84qVvid4b5",
"device_name": "Controller",
"params":
{
"beep": false
}
}
再次通过 postman 发起请求,通过平台鉴权后,该请求会下发到对应的真实设备,蜂鸣器关闭
五、基于 OneNET 云平台的场景联动
1. 点击“数据流转”菜单下“场景联动”子菜单,进入场景联动管理功能页面。点击页面右上角“新建场景”,填写场景名称,需要一个“距离太近告警”的场景,点击添加进入下一步
2. 新增联动规则:名称为“距离安全取消告警”
1、触发方式:“设备触发”
2、选择产品分组:“选择产品”
3、选择具体产品:选择之前实训任务中创建的MQTT产品名称
4、选择设备: 选择该产品下的Controller设备
5、选择信息源类型:“设备功能点”
6、选择功能:选择该产品下的“距离”数据点
基于 OneNET 的智慧小区安全防护系统 第 11 页
7、修改关系运算符:“<”
8、数值:填入“5”(双引号不要填)。
其次点击增加“执行动作”,在“动作一”内容中,依次选择:
1、选择动作类型:“设备执行”
2、选择产品分组:“选择产品”
3、选择具体产品:选择之前实训任务中创建的MQTT产品名称
4、选择设备: 选择该产品下的Controller设备
5、选择功能:选择该产品下的“蜂鸣器”
6、数据值选择“1”。
点击“确定”创建好改场景信息,并修改其启用状态为“开”。
再新增一个联动规则,名称可以为“距离安全取消告警”。该规则的具体条件及动
作与步骤3大部分相同,除了其中的条件部分,距离逻辑判断修改为“>”,数值为“20”,执行动作部分,蜂鸣器的数值改为“0”。最后点击“确认”按钮
并同样将该条场景规则的启用状态修改为“开”
3. 设备上线,观察场景实现效果。
近距离遮挡超声波模块的距离探测器探头,稍等一定时间后,蜂鸣器模块鸣叫,移开超声波模块遮挡, 再稍等一定时间后,蜂鸣器模块停止鸣叫。
六、物联网云平台可视化组件配置运用
1.创建一个可视化项目:需要在OneNET平台上创建一个可视化项目。
从平台全部产品服务的菜单列表中,点击”数据可视化 view“菜单后,点击“立即试用”按钮进入。在弹出的模板选择页面中,选择一个2D项目模板下的“空白模板”作为本次项目可视化的基础模板,并填写项目名称和描述。
注:也可以选择具有一定页面效果的模板比如“模板-智慧园区“,后续根据需要删减控件。
2.增加数据源模板:
点击左侧菜单“数据管理”下的“数据源模板”子菜单,在右侧页面中点击“创建数据源模板”,为界面展示距离的变化图表建立一个数据来源模板。在展开的配置项中,先设定第一项的“数据类型”为“物联网平台”,然后依次填写带“*”的所有项,包括名称、userId、accessKey、产品ID、设备名称和数据流等。点击“创建”按钮,耐心等待平台返回创建结果。
3.编辑可视化页面及各个组件:
回到可视化项目列表展示页面,点击已创建好可视化项目缩略图下方的“编辑”按钮,进入页面编辑状态。如果是采用已有模板,则需将页面多余的控件加以删除,保留背景等基础效果;如果是空白模板,则直接添加本次实训所需的控件,如常规图表中的平滑折线图。添加后,效果如图所示。
4.设置图表的数据来源:
保持折线图处于选择状态(可再次双击折线图,右侧出现属性修改页),现在切换到“数据”属性Tab页。选择“数据绑定方式”为“数据源”,此时“数据源选择”下拉列表为“请选择”状态,点击“管理数据源”按钮,弹出“数据源管理”页面。
点击“数据源模板”Tab页,展示目前所有的数据源模板,可以看到一条在之前步骤中已经创建好的记录(名称为distance),点击该记录操作列中最右图标:“以此模板创建数据源”。关闭窗口回到视图编辑页面。
此时“数据源选择”下拉列表会出现一条可选的记录,如“distance_XXXX”,代表以“distance” 模板生成的记录,平台自动追加后缀加以命名。选择该条记录作为折线图的数据源。
5.设置不使用数据过滤器:
点击“使用数据过滤器”前面的勾选框,去掉勾选,即不使用数据过滤器。点击“数据处理结果”按钮,查看弹出的窗口中展示的数据,这些数据就是设备定时上报的属性点形成的(图例中的value对应的值,就是上报的间隔距离值)。关闭弹出窗口继续下一步。
6.设置图表的横轴列展示字段名与数据提供字段相匹配:
现在切换回“样式”属性Tab页。展开“数据系列”的节点,修改列字段名为“value”,保持与数据源中提供的数值字段“value”相一致。
7.预览可视化视图并回到编辑状态迭代优化视图效果:
编辑视图界面,可以看到折线图已显示出实际的折线数据图表,可以点击右上角“预览”按钮,在全页面状态下查看整个可视化视图的效果。如需要修改视图,可以点击顶部右侧出现的“继续编辑”按钮,回到可编辑状态继续修改。
8.保存视图,完成可视化项目:
完成视图编辑后,点击顶部的“保存”按钮(编辑状态和预览状态均可),完成项目保存。
四、总结
- 设备接入与属性交互:通过创建产品与设备、配置MQTT客户端和构建Topic类,实现了模拟设备接入OneNET平台,并完成了设备属性的上报与平台下发属性的调试。
- 平台功能应用:利用OneNET平台的“设备调试”功能实现了属性下发,并通过MQTT客户端接收了平台下发的数据。同时,使用“API调试”功能通过填写关键参数,实现了基于API的设备属性下发。
- 场景联动与实时监控:建立了基于距离阈值的场景联动规则,当距离小于设定阈值时触发蜂鸣器告警,展示了OneNET平台设备数据联动的应用。并通过OneNET可视化组件创建项目,绑定了数据源,实现了设备上报距离数据的实时展示。
- 系统集成与实训成果:完成了智慧小区安全防护系统的综合实训,整合了设备接入、属性上报、平台下发、API控制、场景联动和可视化展示等功能,提升了小区的安全管理水平和智能化程度。