1.实验背景
随着城市化进程的加速,住宅小区数量不断增加,居住密度也在逐渐提高。与此同时,社会安全问题也日益凸显,如盗窃、抢劫、破坏公共设施等犯罪行为时有发生,给小区居民的生命财产安全带来了严重威胁。因此,提高小区的安全防范水平,保障居民的安全感成为了迫切需求。近年来,随着物联网、大数据、云计算等技术的快速发展,智能化、信息化已成为现代社会的重要特征。这些技术的应用为小区安全防护提供了新的思路和方法。通过将这些技术应用于小区安全防护系统,可以实现实时监控、智能预警、数据分析等功能,提高小区的安全防范能力和管理水平。
2.实验目标
- 智能门禁与人员管理:
- 全方位视频监控与预警:
- 环境感知与智能报警:
- 数据整合与高效管理:
3.实验步骤
-
3.1实验一:创建产品设备
3.1.1 创建基于 MQTT 协议的产品
步骤一:登录/注册
打开OneNET云平台,首先点击右上角“头像”图标处进行登录/注册,登录/注册完成后点击“开发者中心”。
步骤二:创建产品
进入“开发者中心”界面后,在左侧服务栏中找到“产品开发”,点击打开后,点击“创建产品”。
在弹出的页面中,第一步:选择产品品类“智慧楼宇-智慧楼宇-电子围栏”,第二步:选择“设备接入”的智能化方式。
第三步:在填写信息中,产品名称填写为“智慧小区安防距离探测系统”;所属城市可随便填写;节点类型选择“直连设备”;接入协议选择“MQTT”;数据协议选择“OneJson”;联网方式选择“WIFI”;开发方案选择“自定义方案”,完成以上步骤后,点击“确定”。
3.1.2 创建产品物模型
步骤一:设置物模型
创建产品完成后,点击“产品开发”,进入产品开发界面。
进入“产品开发”界面,点击“设置物模型”。
步骤二:添加系统功能点
点击打开“设置物模型”后,在出现的界面选择“添加系统功能点”。
点击打开“添加系统功能点”后,界面被分为两部分,左边是“功能点列表”,右边是“已选择要添加的功能点”,本实验我们选择“基站定位”和“WIFI定位”,选中后,右侧会出现我们已选择的功能点,添加完后点击“添加”。
步骤三:添加自定义功能点
回到“物模型管理”界面,选择“添加自定义功能点”。
分别添加功能名称为“距离”和“蜂鸣器”的功能点,具体属性如下图所示:
新增完后,点击“保存”,
3.1.3 创建基于 MQTT 的设备
步骤一:添加设备
在产品开发界面,找到刚刚创建的产品,在“操作”栏中,点击打开“设备管理”。
进入“设备管理”界面后,点击“添加设备”。
在弹出的添加设备页面中,添加单个设备,所属产品则选择刚建立的产品名称,设备名称输入Controller,其他信息可自行填写,最后点击“确定”保存当前设备的信息。
再次点击“添加设备”,该设备名称输入Simulator,产品依旧选择刚建立的产品名称,最后点击“确定”保存当前设备的信息。
3.1.4 设备状态及信息查看
步骤一:查看设备运行状态
点击左侧菜单“设备管理”,显示设备列表页面,其中“设备状态”列展示了对应设备的运行状态。初始创建的设备,显示为“未激活”,当实体设备使用该条设备信息接入到 OneNET 平台后,则显示为“在线”,断开与OneNET 平台的连接后,则显示为“离线”,且“最近在线时间”列会记录最后一次上线时间信息。
步骤二:查看设备详细信息
点击设备列表右侧操作项“设备详情”,在设备详情页面,查看设备及归属产品的详细信息。
切换到“属性”页面,可以查看当前设备下的各个物模型功能点实际数据,因为设备是初次创建,所以这些数据还没有记录。
步骤三:查看设备日志
点击左侧菜单“运维监控”展开,“设备日志”子菜单,显示所有设备的日志列表页面,可以选择筛选条件,精细过滤快速查找日志信息。
-
3.2实验二:模拟设备接入
3.2.1 模拟设备接入OneNET 平台
步骤一:获取产品、设备的必要信息
-
产品 ID:点击产品开发管理菜单,在具体产品列表中,找到产品 ID 列,复制其字段信息,注意保持其大小写(后文使用“【产品 ID】”来指代,即表示需用这里复制的实际的产品 ID 字段信息替换。
-
设备名称:点击设备管理菜单,在具体设备列表中,找到设备名称列,本实验中,我们选择“Simulator”设备作为模拟对象,记录该名称,注意保持其大小写。(后文用【设备名称】来指代)。
-
设备密钥:点击设备列表右侧操作项“详情”,在设备详情页面,记录设备密钥信息,注意保持其完整性。(可直接点击“复制”用于粘贴)。
步骤二:使用官方 Token 计算工具,获得验证 token 信息
“Token计算器”所在位置:
- 打开“Token计算器”后,需要修改res、et、Key和version。
在工具页面按下表信息填入各个字段(其中部分参数填写需用上面步骤中获得的信息替换)
点击“Generate”按钮,在工具下方输入框计算产生 token,不要做任何改动,全选复制全部字符串作为{token}。
步骤三:安装并配置 MQTT.fx 工具模拟设备信息
“MQTT.fx 工具”所在位置:
安装完毕后,双击打开运行MQTT.fx 客户端,进入后点击设置按钮,进入配置。
- 设置 Profile Name:可设置一个便于记忆的名字,如“某某产品某某设备接入模拟”
- 设置 Broker Address:mqtts.heclouds.com (MQTT 设备接入平台网址)
- 设置 Broker 端口:1883 (本次实训任务采用非 TLS 加密的 MQTT 连接)
- 设置 Client ID:【设备名称】
在下方的第一个选项页“General”中,设置:
- MQTT 协议版本号:取消默认勾中,确保下方版本选择下拉框可选,并选择为 3.1.1
点击 “User Credentials”选项页,继续设置:
- 设置 User Name:【产品 ID】
- 设置 Password:【token】(前一个步骤中计算得到的 token)
填写完毕后,点击OK 保存连接配置。
步骤四:使用 MQTT.fx 工具模拟设备接入
运行 MQTT.fx 工具,点击选择刚刚保存的连接配置列表项,点击“Connect”,如果一切正常,工具将很快登陆接入OneNET 平台,此时 Connect 按钮变灰,右侧 Disconnect 按钮处于激活状态。
提示:可以点击”Log“ 选项页,查看工具连接服务端的情况,正常连接成功则提示类似如下图红框所示信息。
当工具显示正常连接后,查看OneNET 平台中当前模拟的设备在页面显示为在线状态。
提示:页面的状态不会自动刷新,可以稍微等待后手动刷新页面,确认模拟工具的连接情况与页面上对应设备的状态对应。
步骤五:断开 MQTT.fx 工具模拟,查看 OneNET 平台中设备的状态变化
点击 MQTT 工具窗口中的** “Disconnect”**按钮,断开工具的 MQTT 连接,等待一会儿后,刷新OneNET平台中设备列表页面,查看显示的设备状态信息:可以看到其状态都变为离线。
3.2.2 模拟设备接入OneNET 平台实现属性上报
步骤一:订阅属性上报结果通知消息
打开MQTT.fx 工具,点击“Connect”按钮进行连接,设备上线后,点击模拟工具的“Subscribe”选项页表头,在其中的输入框填写属性上报结果通知topic,属性上报结果回复 topic 为:
$sys/产品 ID/设备名称/thing/property/post/reply
其中产品 ID、设备名称内容,根据实际创建的产品和设备信息替换,将替换后完整的 topic,填入模拟工具“Subscribe”选项页中的输入框。
点击“Subscribe”按钮向平台订阅该主题,平台返回成功后,工具左侧中的已订阅主题列表会有一条记录,且该主题下当前消息数为 0。
注:如点击后工具未反应,则需要排查是否填写了正确的产品 ID 和设备名称(当前工具接入时所用的产品和设备信息是否相一致)
步骤二:发送属性上报消息
点击“Publish”选项页表头,切换到消息发送页,在输入框中填入属性上报 topic 主题,该 topic为:
$sys/产品 ID/设备名称/thing/property/post
同样需要将其中的产品 ID、设备名称替换为实际的信息后填入该输入框。
在下空白编辑区中,输入如下内容:
{
"id": "123",
"version": "1.0",
"params": {
"distance": {
"value": 28.88,
"time": 1599534283111
}
}
}
输入并检查无误后,点击“Publish”按钮。
步骤三:查看属性上报结果
点击“Subscribe”选项页表头,查看之前订阅的属性上报结果通知消息 topic 下,可以看到最新的一条消息,标识了消息的 id 和 code,其中 id 的值为发送时的 id 值,code 值为 200表示该条消息成功送达 OneNET 平台。
步骤四: OneNET 平台中查看设备的属性最新值
回到 OneNET 平台中设备管理页面,进入“Simulator”设备详情,点击属性查看当前设备各个属性的最新数据,确认显示出通过模拟工具上报来的 value 值:
3.2.3 OneNET 平台下发属性值到模拟工具
步骤一:订阅接收平台下发属性数据的 topic
设备侧如需要收到平台下发的数据,需要订阅接收平台下发数据的 topic,该 topic 为:
$sys/产品 ID/设备名称/thing/property/set
点击模拟工具的“Subscribe”选项页表头,在其中的输入框填写平台下发属性数据的 topic。点击“Subcribe”按钮完成订阅,如下所示,成功后订阅列表会多一个新的订阅频道,当前消息数为 0。
步骤二:OneNET 平台下发属性数据
在“设备管理”中选择要下发属性的设备(本任务中选择前面任务中创建的产品和Simulator 设备),点击详情进入设备信息页面,切换功能为“设备调试”。
在下方显示页面中选择“应用模拟器”,勾中属性功能点距离 distance,并填写一个具体数基于 OneNET 的智慧小区安全防护系统值,如 33.3,点击页面下方的** “属性设置”**按钮,完成发送。可以在页面右侧的调试日志中看到下发的日志信息。
步骤三:模拟设备中查看收到的属性数据值
点击模拟工具的“Subscribe”选项页表头,可以看到已订阅列表中,关于平台下发属性数据的topic, 当前消息数是 1。点击右侧消息列表最下方一条消息,可以看到其中的内容信息,收到的值与前一步骤中下发的值相同。
3.2.4 仿真设备信息上传
步骤一:进入设备调试功能
在“设备管理”中选择要下发上报信息的设备(本任务中选择前面任务中创建的产品和 Simulator 设备),点击详情进入设备信息页面,切换功能为“设备调试”。
步骤二:启动设备模拟器
点击“启动调试”按钮。启动后,属性上报 Tab 页展示了当前设备可以上报的数据点,图示仅参考操作的位置示意,不代表所示信息必须保持一样。
步骤三: 输入当前设备的WiFi定位信息上报
向下浏览或通过输入关键字搜索定位到“WiFi定位”属性数据点,勾中前面的选框,并点击右侧下拉展开箭头,在该数据点下的 “热点mac信息”输入 框中输入某个 WiFi 热点的mac地址信息,如dc:fe:18:f2:4c:67|ac:b3:b5:1d:63:80。点击下方的“属性上报”。
观察页面右侧显示的数据上报及平台回应信息,确认数据成功上报。
步骤四: 在设备详情页面查看设备上报的热点位置信息数据
返回设备详情页面,切换“属性”页面,查看设备属性点的数据信息,已经有数据记录。
-
3.3实验三:基于真实设备接入 OneNET 平台
3.3.1 真实设备接入OneNET 平台实现属性上报
步骤一:基于 OneNET 物联网实验箱搭建实训项目终端硬件平台
根据实训场景,选取 OneNET 物联网实验箱“核心模块”以及“Wifi 模块”、“蜂鸣器模块”、“超声波模块”等场景所需的模块进行搭建。
步骤二:终端设备软件系统搭建
- 载入项目三终端设备侧代码工程(该工程代码已经包含了根据实验箱各模块基础集成框架,以及基于 MQTT 的 OneNET 云平台接入能力),载入后直接全编译工程,查看编译结果。
步骤三:修改设备程序的 OneNET 平台网络接入配置参数
修改如下几处代码,让工程具备正确的网络访问以及 OneNET 平台接入验证和适配本次实训任务所需的物模型数据属性上报、写入能力。
- 1.工程相对路径\device\src\net_device.c 约 677 行处,将{wifi}、{password}替换为设备所在 Wifi 网络用户名和密码(将{}括号一起替换,下同)。
#if(PHONE_AP_MODE == 1)
UsartPrintf(USART_DEBUG, "Tips: AT+CWJAP\r\n");
if(!NET_DEVICE_SendCmd("AT+CWJAP=\"{wifi}\",\"{password}\"\r\n", "GOT IP", 400))
//1.更改此处为热点名称和密码
#endif
- 2.工程相对路径\onenet\src\onenet.c 约 56 行处,依次修改{设备密钥}、{产品 id}、{设备名称}为之前步骤中在 OneNET 平台中所创建的产品、设备相关信息,本例中设备名称就是之前步骤中创建的“Controller”设备,并对应填入其设备密钥。
ONETNET_INFO onenet_info = {"", "{设备密钥}", "",
"{产品 id}", "", "",
"183.230.40.96", "1883", 0,
0, 0, 1, 0, 0, 0, 0, 0, 0};
char devicename[32]="{设备名称}";
//2.更改此处产品id、设备名称、设备key
步骤四:修改设备程序的上报属性值映射关系以及 OneNET 平台下发属性生效命令处理代码
- 3.工程相对路径\applications\application.c 约 132 行处,根据之前步骤中在 OneNET 平台中所创建的物模型信息,依次增加属性点标识符以及对应需上报的设备数据变量:
{"beep", &beep_info.beep_status[0], TYPE_BOOL, 1},
{"distance",&Sonic_Info.sonic_distance,TYPE_FLOAT,1},
-
4.工程相对路径\onenet\src\cmd_callback.c 约 51 行处,根据之前步骤中在OneNET 平台 中所创建的物模型信息,增改此处的属性点标识符,对应设置需写入生效的设备数据处理函数名,并同时实现该函数的声明以及具体函数代码,完成写入信息在本地设备上的实际生效逻辑;
以蜂鸣器写入为例,对应修改该变量定义段内某行形如“{“beep”,CALLBACK_Beep},”的信息,逗号前面的字符串标识符为"beep",逗号后的处理方法名为 CALLBACK_Beep。同时在该文件头部,增加 void CALLBACK_Beep(int value);这样的方法声明:
void CALLBACK_Beep(int value);
在文件适当位置增加该方法的具体实现逻辑代码:
代码如下:
void CALLBACK_Beep(int value)
{
switch(value)
{
case 0:BEEP_Ctl(0,BEEP_OFF); break;
case 1:BEEP_Ctl(0,BEEP_ON); break;
default: break;
}
}
步骤五:编译工程,连接下载器烧写程序到设备中
下载成功后设备重新加电,等待一定时间,进入下一步。
步骤六:OneNET 平台侧查看设备状态
登录 OneNET 平 台 ,查看“Controller”设备运行状态为在线,具体操作与前述步骤中查看设备状态相同。若此时设备显示为不在线,则排查前面关于网络接入、OneNET 鉴权等代码修改处是否有误。重复步骤 3、4、5,再次检查并修改,直到本步骤查看状态为上线。
步骤七:OneNET 平台侧查看设备上报数据信息
进入设备详情页面,查看属性表格页展示的各个数据点显示的信息。
3.3.2 下发属性在终端设备上执行生效(设备调试)
步骤一:设备端软硬件环境准备
沿用上一个实训任务中搭建的设备硬件系统,以及继续使用 Keil5 开发工具载入的项目三终端设备侧代码工程(该工程代码在完成上一实训任务后,已经能够接入 OneNET 平台并上报属性点数据)。将设备上电,等待OneNET 平台中显示该设备处于上线状态,进入下一实训步骤。
步骤二:通过 OneNET平台 的设备调试方式进行属性下发
打开设备管理列表页面,选择之前步骤中创建的MQTT产品下的“Controller”设备,点击“详情”进入设备详情页面,并点击 “设备调试”选项,选择“应用模拟器”,下方页面展示了可以设置的属性(物模型中可写的属性功能点)。
先勾选一个功能点,然后设置下发的数值。(以蜂鸣器为例,这是一个 bool 型功能点,勾选后,可设置值为 true、false 两个之一,本次任务选择 true 作为下发数值)点击页面下方的“属性设置”按钮,右侧调试日志展示了下发的报文,设备端也同时将该数值执行生效。
3.3.3 下发属性在终端设备上执行生效(API 调试)
步骤一:设备端软硬件环境准备
步骤同3.3.2步骤一一致。
步骤二:进入“API 调试”功能页面
点击“运维监控”菜单下“API 调试”子菜单,并展开工作页面左列显示的大类调试类别中的“物模型使用”下拉列表,选择“设置设备属性”API项。
在中间页面展示的必填参数中,填写页面中输入必要的参数,填入真实接入的设备“Controller”所对应的相关信息:
其中的params内容填写要设置的属性标识符以及对应设置值,本次任务中设置蜂鸣器状态为true,如下所示:
{
"beep": true
}
点击下方的“执行”按钮,设备端执行下发的属性值(蜂鸣器响),同时右侧列页面刷新显示出调用结果。
3.3.4 基于API 方式实现设备属性下发
步骤一:准备 API 接口调试工具 Postman
提前下载安装好软件。
步骤二:查阅接口文档,了解有关属性下发的 API 调用方式
访问OneNET 官网的“开发中心”,OneNET 平台 专题,通过左侧菜单定位到“设备属性设置”的API接口使用文档页面详细了解相关请求方式以及请求参数填写说明。
具体地址如下:
步骤三:填入必要参数
1、根据API文档的信息,确定设备属性设置的请求方式、请求 url ,填入到 Postman 工具url填写栏,将 Postman工具url填写栏前面的下拉选项改为“POST”。
2、确定请求 body 内容及格式,以蜂鸣器属性值(beep)下发为例, product_id为产品ID,device_name为设备名称,params 为需要下发的结构化数据,同时包含了要下发的“beep”属性点的值,示例中为 true 数据。以键值对形式将上述需要设置的具体参数组装为 body 报文内容,最终填入 Postman 工具的 Body 选项页内。
{
"product_id": "产品id",
"device_name": "Controller", //设备名称
"params":
{
"beep": true //蜂鸣器开
}
}
3、确定请求的 Header 内容,这里需要一个向 OneNET 平台鉴权所需的必要信息字段,就是“authorization ”信息,下面是该信息的一个生成示例,具体生成方式可参考其他实训任务环节中的操作步骤指导,应用侧请求鉴权,res 参数须以“userid/ 用户 ID”的格式填入,版本号须为“2022-05-01”,字段具体内容根据实际情况进行填入。
步骤四:发起 API 请求,查看结果
发起请求前确认当前真实设备已在线,以蜂鸣器属性值(beep)下发为例,通过 postman 发起请求, 通过平台鉴权后,该请求会下发到对应的真实设备,打开蜂鸣器开关,蜂鸣器会按照程序里预置的逻辑进行鸣响。
步骤五:更改 api 报文,对同样属性点,设置新的属性值,并下发
以蜂鸣器属性值(beep)下发为例,更改下发的属性值为 false,报文如下:
{
"product_id": "***********",
"device_name": "Controller",
"params": {
"beep": false
}
}
再次通过 postman 发起请求,通过平台鉴权后,该请求会下发到对应的真实设备,蜂鸣器关闭。
-
3.4实验四:安全防护系统的可视化实现
3.4.1 物联网云平台可视化组件配置运用
步骤一:创建一个可视化项目
在全部产品服务中找到数据可视化View并打开。
注:也可以选择具有一定页面效果的模板比如“模板-智慧园区“,后续根据需要删减部分控件。
步骤二:增加数据源模板
点击左侧菜单“数据管理”下“数据源模板”子菜单,右侧页面中,点击“创建数据源模板”,预先为界面展示距离的变化图表建立一个数据来源模板。
- (1) 名称,设置数据源的名称,注意不能是中文,为
“distance”。 - (2) userId:填写用户ID;
-
(3) accessKey:填写用户的accessKey;该项与上一项均需进入用户中心、“访问权限”页面查看获取。
- (4) 产品ID:为之前任务中创建的产品ID;
- (5) 设备名称:点选输入框,等待平台将上述已经填写的3项内容作为条件匹配查找设备,并将符合的设备以下拉的方式展示,显示了之前实训环节的设备“Controller”,选中该设备。
- (6) 数据流:选择一个设备中可以用于读取的属性功能名作为数据产生点。本例中选择“距离”。点击“创建”按钮,耐心等待平台返回创建结果。
步骤三:编辑可视化页面及各个组件
回到可视化项目列表展示页面,点击已创建好可视化项目缩略图下方的“编辑”按钮。
进入页面编辑状态,选择常规图表中的平滑折线图并添加。
步骤四:设置图表的数据来源
保持折线图处于选择状态(可再次双击折线图,右侧出现属性修改页),现在切换到“数据”属性 Tab页。选择“数据绑定方式”为“数据源”,此时“数据源选择”下拉列表为“请选择”状态,点击“管理数据源”按钮,弹出“数据源管理”页面。点击“数据源模板”Tab 页,展示目前所有的数据源模板,可以看到一条在之前步骤中已经创建好的记录(名称为 distance),点击该记录操作列中最右图标:“以此模板创建数据源”。关闭窗口回到视图编辑页面。
此时“数据源选择”下拉列表会出现一条可选的记录,如“distance_XXXX”,代表以“distance” 模板生成的记录,平台自动追加后缀加以命名。
选择该条记录作为折线图的数据源。
步骤五:设置不使用数据过滤器
点击 “使用数据过滤器”前面的勾选框,去掉勾选,即不使用数据过滤器。点击“数据处理结果”按钮,查看弹出的窗口中展示的数据,这些数据就是设备定时上报的属性点形成的(图例中的 value对应的值,就是上报的间隔距离值)。关闭弹出窗口继续下一步。
步骤六:设置图表的横轴列展示字段名与数据提供字段相匹配
切换回“样式”属性 Tab 页。展开“数据系列”的节点,修改列字段名为“value”,保持与数据源中提供的数值字段“value”相一致。
步骤七:预览可视化视图并回到编辑状态迭代优化视图效果
编辑视图界面,可以看到折线图已显示出实际的折线数据图表,可以点击右上角“预览”按钮,在全页、面状态下查看整个可视化视图的效果。
步骤八:保存视图,完成可视化项目
完成视图编辑后,点击顶部的“保存”按钮(编辑状态和预览状态均可),完成项目保存。