项目四 智慧小区安全防护系统实训报告

##**一.项目背景**

1.社会发展和科技进步的需求:

随着科技的不断发展和人们生活水平的提高,对居住环境的安全性和智能化要求日益增强。城市化进程加速,小区人口密度增大,治安形势变得更为复杂,需要更高效、精准的安防手段来保障居民的生命财产安全。

2.传统安防措施的局限性:

传统小区的安防措施往往存在诸多局限性,如监控覆盖不全面、响应不及时、信息孤立等问题。这些问题使得传统安防措施无法满足现代小区对安全性的高要求。

3.先进信息技术的支撑:

先进的信息技术,如物联网、人工智能、大数据等的快速发展,为智慧小区安防系统的建设提供了技术支撑。通过将各类智能设备和系统进行整合,可以实现对小区的全方位实时监控、智能预警和快速响应。

4.居民生活品质的追求:

居民对生活品质的追求也促使小区管理者不断提升安防水平。他们希望拥有一个更加安全、便捷、舒适的居住环境,这就要求安防系统不仅具备强大的防护功能,还要具备良好的用户体验和交互性。

5.政策支持与推动:

各级政府也积极推动智慧小区的建设,通过政策支持和资金投入,鼓励小区管理者采用先进的安防技术和系统,提升小区的安全性和智能化水平。

#二.实训目标

##1.创建智慧小区安全防护系统产品设备

####1.1 实训目的

1、通过中移OneNET物联网开放平台新建产品(MQTT);

2、根据项目场景创建产品物模型;

3、创建基于MQTT 的云平台设备;

4、查看设备运行状态及数据。

##2.智慧小区安全防护系统模拟设备接入

###2.1 实训目的

1、通过模拟工具调试设备接入;

2、通过模拟设备,实现属性上报;

3、OneNET 平台下发属性值(命令)到模拟设备;

##3.基于真实设备接入 OneNET 平台

###3.1 实训目的

1、基于真实设备,搭建软硬件环境,接入 OneNET 平台并实现设备属性上报;

2、通过OneNET 平台的“设备调试”实现设备属性下发;

3、通过OneNET 平台的“API 调试”实现设备属性下发;

4、直接基于API 方式实现设备属性下发;

##4.安全防护系统的可视化实现

###4.1 实训目的

1、学会OneNET 平台数据可视化编辑器的使用;

2、能够进行可视化数据源的配置;

3、对智慧小区安全防护系统进行可视化展现。

##**三.实训过程**

##1.创建智慧小区安全防护系统产品设备

###1.1实训过程

1.1.1、通过中移OneNET物联网开放平台新建产品(MQTT)

(1) 通过中移物联网首页的“全部产品服务”菜单进入 “物联网开放平台”功能页

![image.png](https://upload-images.jianshu.io/upload_images/29624267-437c660a06c51c18.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

(2)创建产品

展开左侧菜单“产品开发”功能,点击“创建产品”按钮,进行产品添加。(如已创建了产品,则展

示有产品列表,可继续点击按钮创建)

![be4a9027fe08ddb0915f34de46dca74a.png](https://upload-images.jianshu.io/upload_images/29624267-4a9ffcd9f8263e47.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

1.1.2、根据项目场景创建产品物模型;

![943ee0c18fbbb5631d0fd8249dbe925c.png](https://upload-images.jianshu.io/upload_images/29624267-dc0593bb99b0f66e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

1.1.3、创建基于 MQTT 的设备;

![8ac70b387bbac3143dec405523e15053.png](https://upload-images.jianshu.io/upload_images/29624267-dffe48fa7a962e0d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

1.1.4、设备状态及信息查看

步骤 1 查看设备运行状态

点击左侧菜单“设备管理”,显示设备列表页面,其中“设备状态”列展示了对应设备的运行状态。初始创建的设备,显示为“未激活”,当实体设备使用该条设备信息接入到 OneNET 平台后,则显示为“在线”,断开与OneNET 平台的连接后,则显示为“离线”,且“最近在线时间”列会记录最后一次上线时间信息。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-aa89b3573d4cb4b1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![image.png](https://upload-images.jianshu.io/upload_images/29624267-cc99ac087af7d701.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 2 查看设备详细信息

点击设备列表右侧操作项“详情”,在设备详情页面,查看设备及归属产品的详细信息。这里的信息,后续任务步骤中会使用到。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-922b9fd21d20be5d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

切换到“属性”页面,可以查看当前设备下的各个物模型功能点实际数据,下图因为设备是初次创建,所以这些数据还没有记录。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-ec49522a8b994e30.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 3 查看设备日志

OneNET 平台提供了核心服务全链路日志,包括设备上下线、设备上行消息、

下行消息、业务处理消息(物模型调用、存储、规则引擎、HTTP 推送、MQ

推送)等。日志列表提供了强大灵活的搜索功能,可查询设备日志详细信息,

进行故障分析。

点击左侧菜单“运维监控”展开,“设备日志”子菜单,显示所有设备的

日志列表页面,可以选择筛选条件,精细过滤快速查找日志信息。因为当前设

备是初次创建,相关日志信息还没有,下图是一个已经产生日志记录的设备日志查询列表。在未来实训环节,我们将通过这里的功能方便便捷查找传输的数据值, 或者快速定位问题。![image.png](https://upload-images.jianshu.io/upload_images/29624267-470ccbdbe53ae406.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![image.png](https://upload-images.jianshu.io/upload_images/29624267-415cf27d08d2c9a2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###1.2拓展实训部分

1.2.1设备分组管理

步骤 1 创建设备分组

支持设备分组功能,可以将不同产品下的不同设备组合在一起,即增加一个跨产品的自定义设备组合。每个设备最多添加进一个分组,通过用户自定义的分组,标记特征,从而实现设备资源的重新组合以方便特定应用场景下的物联网项目应用。点击左侧“设备分组”子菜单进入分组管理页面,点击右侧“添加分组”,在弹出的页面中填写分组名称,点击“新建”完成分组创建。![image.png](https://upload-images.jianshu.io/upload_images/29624267-ff2859c734ffc486.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![image.png](https://upload-images.jianshu.io/upload_images/29624267-1d9c20456ca10e6c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

点击创建好的分组信息列表操作列中的“详情”,进入当前设备分组信息页面。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-6721b31d6faea455.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 2 为分组添加设备

初始时没有设备存在于该分组中,列表显示为空白。注意分组信息展示的内容,分组也有自己的key, 这个 key 可用于按分组方式接入 OneNET 平台的方式时,计算 Token 的授权凭据。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-f1f9bcb59bc7f940.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

点击页面右侧“添加设备”按钮,弹出的页面展示了左右两栏设备列表。左侧列出了所有产品下的待添加设备,已加入到某个分组的设备则不会显示。选择左侧之前创建好的设备,右侧会自动出现该设备信息,表示已被选择加入到当前分组中。点击下面的“确定”按钮完成将设备加入到分组的操作。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-1934c15ded7240b2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

##2.智慧小区安全防护系统模拟设备接入

###2.1实训步骤

2.1.1模拟设备接入OneNET 平台

步骤 1使用官方 Token 计算工具,获得验证 token 信息

下载并运行“实训资料包\工具包\Token 计算器”路径下的“tokenV2.0.exe”

![image.png](https://upload-images.jianshu.io/upload_images/29624267-29080cd4da06d8bd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 2安装并配置 MQTT.fx 工具模拟设备信息

下载并安装“实训资料包\工具包\MQTT 客户端”路径下的“mqttfx-1.7.1-windows-x64.exe”应用程序。安装完毕后,双击桌面建立的MQTT.fx 快捷方式,运行MQTT.fx 客户端:

![image.png](https://upload-images.jianshu.io/upload_images/29624267-50c8b3b557e277f4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

设置配置页面

![b9ea5f3eac1e5dde378f841f7bae4518.png](https://upload-images.jianshu.io/upload_images/29624267-11012ef52d658dfe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![fc1ead3d9660076c308ed78929186c20.png](https://upload-images.jianshu.io/upload_images/29624267-90a744088b251d83.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 3 使用 MQTT.fx 工具模拟设备接入

![f1afab3731a56af77b8f82729df42838.png](https://upload-images.jianshu.io/upload_images/29624267-c97a6d905adafa28.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

查看在线状态

![3a5e2989ecd9c8809140a9a8696dca05.png](https://upload-images.jianshu.io/upload_images/29624267-c26212ef906b5b76.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 4 断开 MQTT.fx 工具模拟,查看 OneNET 平台中设备的状态变化

![56cdb40c7e81276a61441324980d0fc1.png](https://upload-images.jianshu.io/upload_images/29624267-a2d9cfd0ed96169d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

查看在线状态

![01104f6ea1056aab98b998e9803fb040.png](https://upload-images.jianshu.io/upload_images/29624267-474ba864f1988638.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.1.2模拟设备接入OneNET 平台实现属性上报

步骤 1 订阅属性上报结果通知消息

首先根据前述步骤完成模拟工具 MQTT.fx 模拟一个设备(本任务为 Simulator)接入 OneNET 平台,在平台侧页面中查看到设备为上线状态。点击模拟工具的“Subscribe”选项页表头,在其中的输入框填写属性上报结果通知topic。

这是为了确保设备上传消息确实被平台所接受处理,模拟设备通过订阅 OneNET 平台中已提前创建好的该 MQTT 设备属性上报的结果回复 topic 主题,来等待获取对应的属性上报结果消息,属性上报结果回复 topic 为:

######$sys/产品 ID/设备名称/thing/property/post/reply

![f6e5eeb5e5d3c21aa474987d367d34be.png](https://upload-images.jianshu.io/upload_images/29624267-d069a1ca226abb62.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 2 发送属性上报消息

点击“Publish”选项页表头,切换到消息发送页,在输入框中填入属性上报 topic 主题,该 topic为:

######$sys/产品 ID/设备名称/thing/property/post

![image.png](https://upload-images.jianshu.io/upload_images/29624267-a8509dda3682061b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

在下空白编辑区中,输入如下内容:

~~~

{

          "id": "123",

          "version": "1.0",

                      "params": {

                                    "distance": {

                                                    "value": 28.88,

                                                    "time": 1599534283111

                                                      }

                                      }

}

~~~

输入并检查无误后,点击“Publish”按钮。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-1d99a0f1bb84956d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 3 查看属性上报结果

![24242aaec3c46f95262237a5be77cbfb.png](https://upload-images.jianshu.io/upload_images/29624267-0a44ed67c3210f29.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 4 OneNET 平台中查看设备的属性最新值

![f98d65c64429562e24de098e35eeffc2.png](https://upload-images.jianshu.io/upload_images/29624267-62a188ad1385a693.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.1.3OneNET 平台下发属性值到模拟工具

步骤 1 订阅接收平台下发属性数据的 topic

设备侧如需要收到平台下发的数据,需要订阅接收平台下发数据的 topic,该 topic 为:

######$sys/产品 ID/设备名称/thing/property/set

点击模拟工具的“Subscribe”选项页表头,在其中的输入框填写平台下发属性数据的 topic。点击“Subcribe”按钮完成订阅,如下所示,成功后订阅列表会多一个新的订阅频道,当前消息数为 0。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-f5fa5fdc07466f4f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 2 OneNET 平台下发属性数据

在“设备管理”中选择要下发属性的设备(本任务中选择前面任务中创建的产品和

Simulator 设备),点击详情进入设备信息页面,切换功能为“设备调试”在下方显示页面中选择“应用模拟器”,勾中属性功能点距离 distance,并填写一个具体数值,如 33.3,点击页面下方的 “属性设置”按钮,完成发送。可以在页面右侧的调试日志中看到下发的日志信息。

![8d184f6c06f94fa1b5ff4aa432b726a2.png](https://upload-images.jianshu.io/upload_images/29624267-0943199cb2659cb4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 3 模拟设备中查看收到的属性数据值

![abf2d02817977f03e0c235317f1da670.png](https://upload-images.jianshu.io/upload_images/29624267-e046100d4d3ff71e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###2.2拓展实训部分

2.2.1仿真设备信息上传

步骤 1 进入设备调试功能

在“设备管理”中选择要下发上报信息的设备(本任务中选择前面任务中创建的产品和 Simulator 设备),点击详情进入设备信息页面,切换功能为“设备调试”。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-bbe3ea770574f6c0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 2 启动设备模拟器 

刷新页面提示可以启动调试后,点击“启动调试”按钮。启动后,属性上报 Tab 页展示了当前设备可以上报的数据点,图示仅参考操作的位置示意,不代表所示信息必须保持一样。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-4c9e9b704cb0fa82.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 3 输入当前设备的WiFi定位信息上报

向下浏览或通过输入关键字搜索定位到“WiFi定位”属性数据点,勾中前面的选框,并点击右侧下拉展开 箭 头 , 在 该 数 据 点 下 的 “ 热 点 mac 信 息 ” 输 入 框 中 输 入 某 个 WiFi 热 点 的 mac 地 址 信 息 , 如dc:fe:18:f2:4c:67|ac:b3:b5:1d:63:80。点击下方的“属性上报”。

![d3628af952ea75d7969e51c17f70be13.png](https://upload-images.jianshu.io/upload_images/29624267-27b75d5e83a25aa7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

观察页面右侧显示的数据上报及平台回应信息,确认数据成功上报。

步骤 4 在设备详情页面查看设备上报的热点位置信息数据

![217e6f2fc87de9933d2ca9bcf036a29f.png](https://upload-images.jianshu.io/upload_images/29624267-af5755ca77c76898.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 5 重复为另一个 Controller 设备上报地理位置信息数据

重复步骤 1、2、3、4,但此时选择的设备为“Controller”,其他操作方式与前述步骤一致,返回设备详情页面,查看该设备下的地理位置属性点信息,已经有数据记录。

##3.基于真实设备接入 OneNET 平台

###3.1实训步骤

3.1.1真实设备接入OneNET 平台实现属性上报

步骤 1 基于 OneNET 物联网实验箱搭建实训项目终端硬件平台

根据实训场景,选取 OneNET 物联网实验箱“核心模块”以及“Wifi 模块”、“蜂鸣器模块”、 “超声波模块”等场景所需的模块进行搭建

步骤 2 终端设备软件系统搭建

(1) 运行 Keil uVision5 应用程序(有关Keil uVision5 应用程序的安装、芯片编译环境配置等步骤参考前述实训项目任务中有关指导说明)。

(2) 载入项目三终端设备侧代码工程(该工程代码已经包含了根据实验箱各模块基础集成框架,以及基于 MQTT 的 OneNET 云平台接入能力),载入后直接全编译工程,查看编译结果。具体工程的打开以及编译等操作参考前述实训项目中操作描述。如下图所示表示编译没有错误。

![d070e08769a92ba6c8d6bc59111f3aa7.png](https://upload-images.jianshu.io/upload_images/29624267-de4bee7d8d9672bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤3修改设备程序的OneNET平台网络接入配置参数

修改如下几处代码,让工程具备正确的网络访问以及OneNET平台接入验证和适配本次实训任务所需的物模型数据属性上报、写入能力。具体代码文件在工程中的位置如下图所示![image.png](https://upload-images.jianshu.io/upload_images/29624267-ac947e083ad03eb9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

A. 工程相对路径\device\src\net_device.c 约 677 行处,将{wifi}、{password}替换为设备所在 Wifi 网络用户名和密码(将{}括号一起替换,下同);

![aa5766f652190df741e035e6b1a1734c.png](https://upload-images.jianshu.io/upload_images/29624267-53aefbafadc6a6eb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

~~~

#if(PHONE_AP_MODE == 1)

UsartPrintf(USART_DEBUG, "Tips: AT+CWJAP\r\n");

if(!NET_DEVICE_SendCmd("AT+CWJAP=\"*********\",\"********\"\r\n", "GOT IP", 400))

#endif

~~~

B. 工程相对路径\onenet\src\onenet.c 约 56 行处,依次修改{设备密钥}、{产品 id}、{设备名称}为之前步骤中在 OneNET 平台 中所创建的产品、设备相关信息,本例中设备名称就是之前步骤中创建的“Controller”设备,并对应填入其设备密钥;![6f23119abceea7bc47df4f2cb5c8e783.png](https://upload-images.jianshu.io/upload_images/29624267-51c824e9730c0680.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

~~~

ONETNET_INFO onenet_info = {"", "*******************************", "",

"***************", "", "",

"183.230.40.96", "1883", 0,

0, 0, 1, 0, 0, 0, 0, 0, 0};

char devicename[32]="Controller";

~~~

步骤 4 修改设备程序的上报属性值映射关系以及 OneNET 平台下发属性生效命令处理代码

C. 工程相对路径\applications\application.c 约 132 行处,根据之前步骤中在 OneNET 平台中所创建的物模型信息,依次增加属性点标识符以及对应需上报的设备数据变量,如下所示;

![image.png](https://upload-images.jianshu.io/upload_images/29624267-f458092771da1703.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

~~~

DATA_STREAM data_stream[] = {

{"$OneNET_LBS", &data_lbs, TYPE_LBS, 0},

{"$OneNET_LBS_WIFI", &data_lbs_wifi, TYPE_LBS_WIFI, 0},

{"beep", &beep_info.beep_status[0], TYPE_BOOL, 1},

{"distance", &Sonic_Info.sonic_distance, TYPE_FLOAT, 1},

};

unsigned char data_stream_cnt = sizeof(data_stream) / sizeof(data_stream[0]);

~~~

D. 工程相对路径\onenet\src\cmd_callback.c 约 51 行处,根据之前步骤中在OneNET 平台 中所创建的物模型信息,增改此处的属性点标识符,对应设置需写入生效的设备数据处理函数名,并同时实现该函数的声明以及具体函数代码,完成写入信息在本地设备上的实际生效逻辑;![image.png](https://upload-images.jianshu.io/upload_images/29624267-a0f61eefdb58b74e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

~~~

CMD_CALLBACK_INFO cmd_callback_info[] = {

{"beep", CALLBACK_Beep},

{"int_test", CALLBACK_Test},

};

unsigned char cmd_cb_cnt = sizeof(cmd_callback_info) / sizeof(cmd_callback_info[0]);

~~~

以蜂鸣器写入为例,对应修改该变量定义段内某行形如“{“beep”,CALLBACK_Beep},”的信息,逗号前面的字符串标识符为"beep",逗号后的处理方法名为 CALLBACK_Beep。同时在该文件头部,增加 void CALLBACK_Beep(int value);这样的方法声明:

![image.png](https://upload-images.jianshu.io/upload_images/29624267-307ff12980cdb030.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

~~~

void CALLBACK_Beep(int value);

void CALLBACK_Test(int value);

~~~

在文件适当位置增加该方法的具体实现逻辑代码:

![image.png](https://upload-images.jianshu.io/upload_images/29624267-37040ebb082f3cc6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

~~~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;

}

}

~~~

步骤 5 编译工程,连接下载器烧写程序到设备中

下载器的连接以及烧写过程略。下载成功后设备重新加电,等待一定时间,进入下一步。

步骤 6 OneNET 平台侧查看设备状态

![image.png](https://upload-images.jianshu.io/upload_images/29624267-6c9e304db806ee1d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 7 OneNET 平台侧查看设备上报数据信息

![83a5dfb390c226edb662c1166b0b7a66.png](https://upload-images.jianshu.io/upload_images/29624267-1ee989c7cdba1afe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###3.2实训步骤

3.2.1下发属性在终端设备上执行生效(设备调试)

步骤 1 设备端软硬件环境准备

沿用上一个实训任务中搭建的设备硬件系统,以及继续使用 Keil5 开发工具载入的项目三终端设备侧代码工程(该工程代码在完成上一实训任务后,已经能够接入 OneNET 平台并上报属性点数据)。

将设备上电,等待OneNET 平台 中显示该设备处于上线状态,进入下一实训步骤。

步骤 2 通过 OneNET平台 的设备调试方式进行属性下发

打开设备管理列表页面,选择之前步骤中创建的MQTT产品下的“Controller”设备,点击“详情”进入设备详情页面,并点击 “设备调试”选项,进入 OneNET 平台 的设备调试功能页面。本任务中,需要切换调试方式为“应用模拟器”,下方页面展示了可以设置的属性(物模型中可写的属性功能点)。![image.png](https://upload-images.jianshu.io/upload_images/29624267-e983f156d358a0e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![image.png](https://upload-images.jianshu.io/upload_images/29624267-09ffd20b2ffe8e6a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

先勾选一个功能点,然后设置下发的数值。(以蜂鸣器为例,这是一个 bool 型功能点,勾选后,可设置值为 true、false 两个之一,本次任务选择 true 作为下发数值)点击页面下方的“属性设置”按钮,右侧调试日志展示了下发的报文,设备端也同时将该数值执行生效。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-7c17766a7c7f66e9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

3.2.2下发属性在终端设备上执行生效(API 调试)

步骤 1 设备端软硬件环境准备

沿用上一个实训任务中搭建的设备硬件系统,以及继续使用 Keil5 开发工具载入的项目三终端设备侧代码工程(该工程代码在完成上一实训任务后,已经能够接入 OneNET 平台并上报属性点数据)。将设备上电,等待OneNET 平台 中显示该设备处于在线状态,进入下一实训步骤。

步骤 2 进入“API 调试”功能页面

点击“运维监控”菜单下“API 调试”子菜单,并展开工作页面左列显示的大类调试类别中的“物模型使用”下拉列表,选择“设置设备属性”API项,如下图所示:![image.png](https://upload-images.jianshu.io/upload_images/29624267-ed39cdb8ef0b549b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

在中间页面展示的必填参数中,填写页面中输入必要的参数,如下图所示,本次任务中,填入真实接入的设备“Controller”所对应的相关信息:![image.png](https://upload-images.jianshu.io/upload_images/29624267-047fa5715fcff6ff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![36fd4a9615cdf884b775d5c3b0de1e06.png](https://upload-images.jianshu.io/upload_images/29624267-fe96878d9a80c34b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

其中的params内容填写要设置的属性标识符以及对应设置值,本次任务中设置蜂鸣器状态为true,文本示例参考如下:

~~~

{

    "beep": true

}

~~~

![89dc31bf54ad9df494331d042eec7149.png](https://upload-images.jianshu.io/upload_images/29624267-5c1ea48a6303bbc2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

点击下方的“执行”按钮,等待一会儿后,设备端执行下发的属性值(蜂鸣器响),同时右侧列页面刷新显示出调用结果,也就是整个API 模拟调用的报文交互结果。

3.2.3基于API 方式实现设备属性下发

步骤 1 准备 API 接口调试工具 Postman

推荐使用 Postman 工具,下文的操作均以该工具作为实训操作对象,其他支持 http 协议的工具也可以使用,可参考下文描述对应调整参数填写方式。

步骤 2 查阅接口文档,了解有关属性下发的 API 调用方式

点击前面任务中API“设置设备属性”参数填写页面左上角的“查看API文档”链接,查看右侧显示的API文档,了解“设置设备属性”这个API的调用方式及对应的请求、响应相关参数信息。![image.png](https://upload-images.jianshu.io/upload_images/29624267-e2029fde9c8e217e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

也可以访问OneNET 官网的“开发中心”,OneNET 平台 专题,通过左侧菜单定位到“设备属性设置”的API接口使用文档页面详细了解相关请求方式以及请求参数填写说明。![image.png](https://upload-images.jianshu.io/upload_images/29624267-6515124475992a13.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

以“设置设备属性”为例,对应文档地址为:

https://open.iot.10086.cn/doc/v5/fuse/detail/1418该帮助页面详细说明了请求方式以及请求参数填写说明,如下图所示:![image.png](https://upload-images.jianshu.io/upload_images/29624267-3369727e6c218759.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 3 填入必要参数

1、根据API文档的信息,确定设备属性设置的请求方式、请求 url ,填入到 Postman 工具url填写栏,将 Postman工具url填写栏前面的下拉选项为“POST”。

2、确定请求 body 内容及格式,以蜂鸣器属性值(beep)下发为例, product_id为产品ID,device_name为设备名称,params 为需要下发的结构化数据,同时包含了要下发的“beep”属性点的值,示例中为 true 数据。以键值对形式将上述需要设置的具体参数组装为 body 报文内容,最终填入 Postman 工具的 Body 选项页内。

~~~

{

    "product_id": "********",

      "device_name": "Controller",

      "params":

            {

                "beep": true

            }

~~~

3、确定请求的 Header 内容,这里需要一个向 OneNET 平台鉴权所需的必要信息字段,就是“authorization ”信息,下面是该信息的一个生成示例,具体生成方式可参考其他实训任务环节中的操作步骤指导,应用侧请求鉴权,res 参数须以“userid/ 用户 ID”的格式填入,版本号须为“2022-05-01”,字段具体内容根据实际情况进行填入。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-619720f19311d8e8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 4 发起 API 请求,查看结果

发起请求前确认当前真实设备已在线,以蜂鸣器属性值(beep)下发为例,通过 postman 发起请求, 通过平台鉴权后,该请求会下发到对应的真实设备,打开蜂鸣器开关,蜂鸣器会按照程序里预置的逻辑进行鸣响。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-2ea5dd2d5885ee8d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 5 更改 api 报文,对同样属性点,设置新的属性值,并下发

以蜂鸣器属性值(beep)下发为例,更改下发的属性值为 false,报文如下:

~~~

{

        "product_id": "***********",

        "device_name": "Controller",

        "params": {

                          "beep": false

                  }

}

~~~

再次通过 postman 发起请求,通过平台鉴权后,该请求会下发到对应的真实设备,蜂鸣器关闭

![image.png](https://upload-images.jianshu.io/upload_images/29624267-c76b1ae77a3d9c0c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

3.2.4 基于OneNET 云平台的场景联动

步骤 1 进入 OneNET 平台 场景联动管理功能

检查实验箱目前搭建的硬件系统是“核心模块”以及“Wifi 模块”、“蜂鸣器模块”、 “超声波模块”等模块,烧写程序上电运行。

确保用户已登录 OneNET 云平台,进入 OneNET 平台 控制台页面,点击“数据流转”菜单下“场景联动”子菜单,进入场景联动管理功能页面。

步骤 2 创建场景联动规则

场景联动是一种开发自动化业务逻辑的编程方式,目前支持设备、时间、第三方数据源等多维度的条件

触发,这些触发条件以及执行动作组合起来,形成一套规则。点击页面右上角“新建场景”,填写场景名

称,这里我们需要一个“距离太近告警”的场景,点击添加进入下一步。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-febc9690255ce1ec.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 3 编辑距离探测告警的联动规则

1、触发方式:“设备触发”

2、选择产品分组:“选择产品”

3、选择具体产品:选择之前实训任务中创建的MQTT产品名称

4、选择设备: 选择该产品下的Controller设备

5、选择信息源类型:“设备功能点”

6、选择功能:选择该产品下的“距离”数据点

7、修改关系运算符:“<”

8、数值:填入“5”(双引号不要填)。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-3636fb77934c7763.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

其次点击增加“执行动作”,在“动作一”内容中,依次选择:

1、选择动作类型:“设备执行”

2、选择产品分组:“选择产品”

3、选择具体产品:选择之前实训任务中创建的MQTT产品名称4、选择设备:选择该产品下的Controller设备

5、选择功能:选择该产品下的“蜂鸣器”

6、数据值选择“1”。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-12440a0f07395b95.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

点击“确定”创建好改场景信息,并修改其启用状态为“开”。

![bc244cbfaf2e8f4707f20ad71d889e24.png](https://upload-images.jianshu.io/upload_images/29624267-b6643c643321f0ab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤4再新增一个联动规则,实现距离安全时取消告警

参考步骤3描述,再新增一个联动规则,名称可以为“距离安全取消告警”。该规则的具体条件及动作与步骤3大部分相同,除了其中的条件部分,距离逻辑判断修改为“>”,数值为“20”,执行动作部分,蜂鸣器的数值改为“0”。最后点击“确认”按钮,并同样将该条场景规则的启用状态修改为“开”,完  成本次编辑内容。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-5afe7e9bfeec0cf3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤5设备上线,观察场景实现效果

检查实验箱目前搭建的硬件系统是“核心模块”以及“Wifi模块”、“蜂鸣器模块”、“超声波模块”等模块,烧写程序为项目三配套工程代码,上电运行。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-44c3358defef1da2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

##4.安全防护系统的可视化实现

###4.1实训步骤

4.1.1物联网云平台可视化组件配置运用

步骤 1 创建一个可视化项目

可视化能力是 OneNET 平台重点打造的基于物联网设备大数据的增值服务能力,可以从平台全部产品服务的菜单列表中,点击”数据可视化 view“菜单后,点击“立即试用”按钮进入。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-e62795b3d1f1b663.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![image.png](https://upload-images.jianshu.io/upload_images/29624267-144f1744e721db81.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

首先新增一个可视化项目,在弹出的模板选择页面,选择一个 2D 项目模板下的“空白模板”作为本次项目可视化的基础模板,填写位于右侧的项目名称、项目描述后,点击“确定”完成可视化项目创建。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-bb0d73e156ff13bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![image.png](https://upload-images.jianshu.io/upload_images/29624267-7c4747d15c55c56d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 2 增加数据源模板

点击左侧菜单“数据管理”下“数据源模板”子菜单,右侧页面中,点击“创建数据源模板”,预先为界面展示距离的变化图表建立一个数据来源模板

![image.png](https://upload-images.jianshu.io/upload_images/29624267-3093d5b79d58f877.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

在展开的配置项中,先设定第一项的“数据类 ”

型为“物联网平台”,这时页面会切换为配置从

“物联网平台”抓取数据所需的必要信息。依次填

写带“*”的所有项:

(1) 名称,设置数据源的名称,注意不能是中文,该名称将作为关键字与数据一起传递到可视化组件页面中解析。比如下图所示,设为“distance”。

(2) userId:填写用户ID;

(3) accessKey:填写用户的accessKey;该项与上一项均需进入用户中心、“访问权限”页面查看获取。

(4) 产品ID:为之前任务中创建的产品ID;

(5) 设备名称:点选输入框,等待平台将上述已经填写的3项内容作为条件匹配查找设备,并将符合的设备以下拉的方式展示,以本次任务为例,显示了之前实训环节的设备“Controller”,选中该设备。注:如这里提示获取设备列表失败,则相应检查(2)、(3)、(4)中填写的信息是否正确。

(6) 数据流:选择一个设备中可以用于读取的属性功能名作为数据产生点。本例中选择“距离”。点击“创建”按钮,耐心等待平台返回创建结果。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-decab07186730c60.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![image.png](https://upload-images.jianshu.io/upload_images/29624267-68e91e1971ea30b7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤 3 编辑可视化页面及各个组件

![image.png](https://upload-images.jianshu.io/upload_images/29624267-de1d0cee4fe224b4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

回到可视化项目列表展示页面,点击已创建好可视化项目缩略图下方的“编辑”按钮,进入页面编辑状态,如果是采用已有模板,则需将页面多余的控件加以删除,保留背景等基础效果,如果是空白模板,则直接添加本次实训所需的控件:常规图表中的平滑折线图,如下图,添加后效果如图所示。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-0d4febd2d0f10c25.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

双击添加的控件,右侧出现对应控件的“样式”属性修改 Tab 页,根据项目看板展示效果所需,自行展开具体的属性列表项,调整各项属性,达到最优显示效果。

步骤4设置图表的数据来源

保持折线图处于选择状态(可再次双击折线图,右侧出现属性修改页),现在切换到“数据”属性Tab页。选择“数据绑定方式”为“数据源”,此时“数据源选择”下拉列表为“请选择”状态,点击“管理数据源”按钮,弹出“数据源管理”页面。

点击“数据源模板”Tab页,展示目前所有的数据源模板,可以看到一条在之前步骤中已经创建好的记录(名称为distance),点击该记录操作列中最右图标:“以此模板创建数据源”。关闭窗口回到视图编辑页面。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-79b33fd4b5615c80.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![image.png](https://upload-images.jianshu.io/upload_images/29624267-032c9f1b1411dcc3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

此时“数据源选择”下拉列表会出现一条可选的记录,形如“distance_XXXX”,代表以“distance”模板生成的记录,平台自动追加后缀加以命名。选择该条记录作为折线图的数据源。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-4263cddcd48ac9dc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤5设置不使用数据过滤器

点击“使用数据过滤器”前面的勾选框,去掉勾选,即不使用数据过滤器。点击“数据处理结果”按钮,查看弹出的窗口中展示的数据,这些数据就是设备定时上报的属性点形成的(图例中的value对应的值,就是上报的间隔距离值)。关闭弹出窗口继续下一步。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-3ca30497600a0f82.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤6设置图表的横轴列展示字段名与数据提供字段相匹配

现在切换回“样式”属性Tab页。展开“数据系列”的节点,修改列字段名为“value”,保持与数据源中提供的数值字段“value”相一致。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-ceb4fedba9afbd0c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤7预览可视化视图并回到编辑状态迭代优化视图效果

编辑视图界面,可以看到折线图已显示出实际的折线数据图表,可以点击右上角“预览”按钮,在全页面状态下查看整个可视化视图的效果。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-d42a73c98961b5c0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

如需要修改视图,可以点击顶部右侧出现的“继续编辑”按钮,回到可编辑状态继续修改。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-08039a14f6a3ab51.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤8保存视图,完成可视化项目

完成视图编辑后,点击顶部的“保存”按钮(编辑状态和预览状态均可),完成项目保存。

###4.2拓展实训

4.2.1设备地理位置可视化展现

步骤1新增一个数据源模板

参考前述实训任务中数据源模板创建步骤,填入必要的信息,“名称”项填入“location”,“数据流”项,从现有设备中选择“地理位置”属性点。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-989ff8ec3dbf4326.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤2为可视化视图添加地理位置组件

编辑前述实训任务中创建的可视化视图页面,选择控件列表中的“地图”、“基础地图”控件放入页面中。调整控件大小并摆放在整个视图的合理位置。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-47c41f2b960829e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤3设置地图控件的数据来源

选中地图控件,右侧属性页切换到“数据”Tab页。参考前述实训任务中数据源配置的方式,从已有的数据源模板“location”创建出所需的数据源,如下图形如location_XXXX。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-3fd38118e03f68a2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

点击“数据处理结果”按钮,查看弹出的窗口中展示的数据,是否形如下图所示,这里的数据就是之前实训任务中通过仿真方式模拟上报的设备经纬度信息(图例中的value对应的值,有2个字段,分别是经度和维度)。关闭弹出窗口继续下一步。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-510ce104b559bfb8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

步骤4预览并持续编辑可视化视图,保存完成项目

回到编辑视图界面,可以看到地图控件已显示出定位经纬度附近的地图信息,并有红色标记标识出定位点,可以点击右上角“预览”按钮,在全页面状态下查看整个可视化视图的效果。同样可反复切换到编辑页面继续优化,最终点击保存完成项目。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-74b3cac54f83525c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

##**四.实训结果**

###4.1近距离遮挡超声波模块的距离探测器探头,稍等一定时间后,蜂鸣器模块鸣叫,移开超声波模块遮挡,再稍等一定时间后,蜂鸣器模块停止鸣叫。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-841ce363e00f9806.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![19f7b04f281c23a2e24a7caacdb5df79.png](https://upload-images.jianshu.io/upload_images/29624267-88e94ef17e294116.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![19f7b04f281c23a2e24a7caacdb5df79.png](https://upload-images.jianshu.io/upload_images/29624267-f5469c574113d98e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###4.2对智慧小区安全防护系统进行可视化展现。

![image.png](https://upload-images.jianshu.io/upload_images/29624267-74b3cac54f83525c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • ## 【博主推荐】1元学习《Django零基础到项目实战》视频教程:http://dwz.cn/VHRVxWfC ...
    陈奕迅fans阅读 141评论 0 0
  • 一、Gitlab需要的涉及部署的信息 序号名称信息图例1用户名your user name用户名例图查看2密码yo...
    解语者阅读 203评论 0 0
  • > 正所谓前人栽树,后人乘凉,树越大,当然越荫凉,所以我就来啦(●'◡'●)。 > > 感谢[Huxpro](ht...
    雁旖之芗阅读 1,439评论 0 1
  • # 001--初识汇编 我们在学习逆向开发之前,我们要了解一个基本的逆向原理.首先我们是逆向iOS系统上面的APP...
    冢虎_779e阅读 349评论 0 0
  • 1)开始菜单中输入"打开或关闭",找到"打开或关闭Window功能",如下图所示![](http://upload...
    ZhouMac阅读 1,204评论 1 4