智慧小区安全防护系统——真实设备接入报告
杨小龙
1.项目背景
随着时代的进步与科学技术的快速发展,我们对于智慧化的生活越来越需要,而我们更需要的是安全,安全的重要性不言而喻。智能小区的建设融合了一系列现代化高新技术,是IC卡技术、通信技术、计算机技术经过深度融合与集成之后而形成的一种结果,同时也是社会发展、时代进步、科学技术水平提升环境下的必然产物。智能小区使用多种高科技手段,达到防火、防盗、防煤气泄漏等安全要求,小区本身的安防系统建立采取点、线和面的立体防护,确保做到“防患于未然”。让智能小区里的住户拥有居家安全感。
2.项目目标
1、基于真实设备,搭建软硬件环境,接入 OneNET 平台并实现设备属性上报;
2、通过 OneNET 平台的“设备调试”实现设备属性下发;
3、通过 OneNET 平台的“API 调试”实现设备属性下发;
4、直接基于 API 方式实现设备属性下发;
3.项目步骤
第一步:基于 OneNET 物联网实验箱搭建实训项目终端硬件平台
在实验箱背板上插入这四个模块(“核心模块”、“Wifi 模块”、“蜂鸣器模块”、 “超
声波模块”)搭建场景。
第二步:在Keil5中修改项目三代码
步骤一:
工程相对路径\device\src\net_device.c 约 677 行处,将{热点名称}、{热点密码}替换为设备所在 Wifi 网络用户名和密码(将{}括号一起替换,下同);
步骤二:
工程相对路径\onenet\src\onenet.c 约 56 行处,依次修改{产品key}、{产品 id}、{设备名称}为之前步骤中在 OneNET Studio 中所创建的产品、设备相关信息,本例中设备名称就是之前步骤中创建的“controller”设备,并对应填入其设备密钥;
步骤三:
工程相对路径\applications\application.c 约 132 行处,增加属性点标识符以及对应需上报的设备数据变量,如下所示;
{"beep", &beep_info.beep_status[0], TYPE_BOOL, 1},
{"distance",&Sonic_Info.sonic_distance,TYPE_FLOAT,1},
步骤四:
工程相对路径\onenet\src\cmd_callback.c 约 51 行处,添加代码“{“beep”,CALLBACK_Beep},”
,逗号前面的字符串标识符为"beep",逗号后的处理方法名为 CALLBACK_Beep。
步骤五:
同时在该文件头部,增加void CALLBACK_Beep(int value);
这样的方法声明
步骤六:
在文件适当位置增加该方法的具体实现逻辑代码:
第三步:编译工程,连接下载器烧写程序到设备中
下载器的连接以及烧写过程略。下载成功后设备重新加电,等待一定时间,进入下一步。
第四步: 在OneNET 平台查看设备状态
登录 OneNET Studio,查看“controller”设备运行状态为在线。若此时设备显示为不在线,则排查前面关于网络接入、OneNET 鉴权等代码修改处是否有误。重复步骤 3、4、5,再次检查并修改,直到本步骤查看状态为上线。
第五步:在OneNET 平台查看设备上报数据信息
进入设备详情页面,查看属性表格页展示的各个数据点显示的信息,重点关注距离(标识符“distance”)、蜂鸣器状态(标识符“beep”)等属性点,是否已经有数值上报。(下图仅为示例参考)
第六步:通过 OneNETStudio 的设备调试方式进行属性下发
选择MQTT产品下的 “controller” 设备,切换调试方式为 “应用模拟器”。
勾选蜂鸣器功能点,点击true下发数值,再点击页面下方的“属性设置”按钮,右侧调试日志展示了下发的报文,设备端也同时将该数值执行生效(蜂鸣器开始鸣叫)。
注 1:如设备端没有生效,需要分析上一实训任务中,有关属性下发的命令执行代码是否正确添加。
注 2:调试日志中会有超时等响应报文,这是因为设备收到属性下发后没有在规定时间内返回确认,OneNET 平台会认为设备响应超时从而给 API 请求端回复超时报文。
注 3:设备执行属性设置动作后,可以修改设置值为“false”, 再次下发,使设备端生效新的值。
第七步:下发属性在终端设备上执行生效(API 调试)
点击“运维监控”菜单下“API 调试”子菜单,并将工作页面左列显示的两大类调试类别中“应用开发类”下拉列表展开。往下滚动到“设备属性设置”功能项,点击使之处于选中状态,在中间一列展示的必填参数中,填写页面中输入必要的参数,如下图所示,本次任务中,填入真实接入的设备“controller”所对应的相关信息,同时其中的 params 内容填写要设置的属性标识符以及对应设置值,本次任务中设置蜂鸣器状态为 false,文本示例参考:
{
"beep": false
}
设备端蜂鸣器收到命令关闭
第八步:基于 API 方式实现设备属性下发
步骤一 使用API调试工具Postman,并填入必要参数:
(1)确定设备属性设置的请求方式为 post,请求 url 为:
http://openapi.heclouds.com/application?action=SetDeviceProperty&version=1
填入到 Postman 工具上面页面的请求 url 输入框中,修改左侧请求提交方式是 POST
(2)确定请求 body 内容及格式,project_id、product_id、device_name 等关键参数的值均可参考前述任务中相同的查看方式通过 OneNET Studio 页面获得,以键值对形式将上述需要设置的具体参数组装为 body 报文内容,最终填入 Postman 工具的 Body 选项页内。
{
"project_id": "gZtv5W",
"product_id": "I971NKjoBg",
"device_name": "controller",
"params": {
"beep": true
}
}
(3)确定请求的 Header 内容,这里需要一个向 OneNET 平台鉴权所需的必要信息字段,就是“authorization ”信息(注意大小写须一致),该信息可以使用“token计算工具”生成,生成方式如下图:
补充Headers其余内容。
步骤二 发起 API 请求,查看结果:
发起请求前确认当前真实设备已在线,以蜂鸣器属性值(beep)下发为例,通过postman 发起请求,通过平台鉴权后,该请求会下发到对应的真实设备,打开蜂鸣器开关,蜂鸣器会按照程序里预置的逻辑进行鸣响。
更改“beep”属性值为false
{
"project_id": "gZtv5W",
"product_id": "I971NKjoBg",
"device_name": "controller",
"params": {
"beep": false
}
}
发送请求后蜂鸣器会按照程序预置的逻辑关闭鸣响
第九步:基于 OneNET 云平台的场景联动
步骤一 进入 OneNET Studio 场景联动管理功能:
进入 OneNET Studio 控制台页面,直接在“Studio 使用概览”中点击“我的项目”下已建立的项目名进入项目管理功能。
注:如用户没有创建过有关项目,OneNET Studio 提示需先创建项目,可参考之前实训任务 1 拓展任务中有关项目管理的操作步骤完成项目创建、设备添加等准备工作后,进入下一个实训环节。
然后直接点击“场景联动”子菜单,进入场景联动管理功能页面。
步骤二 创建场景联动规则:
点击功能页面右侧“添加规则”按钮,在滑出的页面规则名称中输入“距离探测告警”,点击“添加”按钮完成规则创建。
步骤三 编辑距离探测告警的联动规则:
点击创建好的这条规则的操作列中“编辑规则”功能入口,进入具体编辑页面,因为是初次进入,这里展示的触发条件以及执行动作内容为空,点击右侧的“编辑规则”按钮,在滑出的页面中具体编辑:
首先编辑触发条件:
(1)执行限制:满足全部条件执行
(2)触发方式:“设备数据触发”
(3)产品:之前实训任务中创建的产品
(4)设备:之前加入到项目里的“controller”
(5)功能:之前物模型中的“间隔距离”属性点
(6)数值判断条件:逻辑判断选“<”,数值填入“5”
其次编辑执行动作:
(1)动作类型:选择“设备执行”
(2)产品:之前实训任务中创建的产品
(3)设备:之前加入到项目里的“controller”
(4)功能:之前物模型中的“蜂鸣器”属性点
(5)布尔:选择“true - 1”
最后点击“完成”按钮,确认本次编辑内容。
步骤四 再新增一个联动规则,实现距离安全时取消告警:
参考步骤 2 描述,再新增一个联动规则,名称可以为“距离安全取消告警”。
参考步骤 3 描述,编辑该规则的具体条件及动作,参考如下:
编辑触发条件:
(1)执行限制:满足全部条件执行
(2)触发方式:“设备数据触发”
(3)产品:之前实训任务中创建的产品
(4)设备:之前加入到项目里的“controller”
(5)功能:之前物模型中的“间隔距离”属性点
(6)数值判断条件:逻辑判断选“>”,数值填入“10”
编辑执行动作:
(1)动作类型:选择“设备执行”
(2)产品:之前实训任务中创建的产品
(3)设备:之前加入到项目里的“controller”
(4)功能:之前物模型中的“蜂鸣器”属性点
(5)布尔:选择“false - 0”
最后点击“完成”按钮,确认本次编辑内容。
步骤五 设备上线,观察场景实现效果:
近距离遮挡超声波模块的距离探测器探头,稍等一定时间后,蜂鸣器模块鸣叫,移开超声波模块遮挡,约 15 秒钟后,蜂鸣器模块停止鸣叫。
注:如设备未按场景联动的规则逻辑执行,可通过规则页面的“联动日志查询”tab 页查看具体原因。响应日志会有 Fail 的失败日志,这是因为场景联动触发后,执行的属性下发后没有在规定时间内收到设备端的执行返回确认(该部分代码在示例工程代码中未实现),OneNET 平台会认为设备响应超时从而判断为失败。
4.项目总结
在本次项目实验中,基于真实设备接入 OneNET 平台,实现了通过OneNET 平台对设备属性下发并且还实现了直接基于 API 方式实现设备属性下发。通过拓展实训部分体验了基于 OneNET 云平台的场景联动。经过这次的实验使得我对OneNET云平台的使用更加熟练,对实验实施的流程思路更清晰。也让我明白了OneNET云平台还有更多的功能等着我去探索。