一.项目背景
1.智慧小区安全防护系统的项目背景主要围绕提升居民的安全感和生活质量,通过集成现代科技手段如物联网、人工智能、大数据等,实现对小区内外环境的全面监控和管理。这些系统不仅包括传统的物理安防措施,如门禁系统、围墙和监控摄像头,还涵盖了高科技的技术安防,如智能感知、人脸识别和视频分析等。
2.智慧小区安全防护系统的建设目标是通过科技手段提高小区的安全管理水平,减少犯罪发生,保护居民的人身和财产安全。例如,通过安装智能门禁系统,可以实现人员和车辆的自动识别和控制,从而提高小区的入出管理效率和安全性。此外,视频监控系统能够实时监控小区内部异常变化,为居民提供额外的安全保障。
3.智慧小区安全防护系统还包括紧急求救系统、火灾报警系统等,这些系统能够在紧急情况下迅速响应,有效地保护居民免受伤害。同时,这些系统的数据收集和处理也支持社区治理的智能化,提高了管理效率和服务质量。
二.实训目标
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、通过中移OneNET物联网开放平台新建产品(MQTT)
1.2.1 创建基于 MQTT 协议的产品
步骤 1 通过中移物联网首页的“全部产品服务”菜单进入 “物联网开放平台”功能页
步骤 2 创建产品
展开左侧菜单“产品开发”功能,点击“创建产品”按钮,进行产品添加。(如已创建了产品,则展
示有产品列表,可继续点击按钮创建)
在弹出的页面中第一步,参考下图信息,选择产品品类(不一定必须一致,符合项目任务背景即可)。
第二步选择智能化方式为“设备接入”方式。
在第三步填写信息中,添加必要的产品信息(标记*号的项)。其中“节点类型”选择“直连设备”,
“接入协议”选择“MQTT”,“数据协议”选择“OneJson”,“联网方式”选“Wi-Fi”,“开发方案”
选择“自定义方案”。其他信息字段,对本次任务实际完成效果没有影响,大家可自行填入合适信息。
1.2.2 根据项目场景创建产品物模型
步骤 1 进入产品开发详情页面
步骤 2 进入物模型管理页面
步骤 3 添加系统功能点
在弹出的添加页面中,选择如下图所示的系统功能点,点击右下角的“添加”按钮完成添加。
步骤 4 添加自定义功能点
点击“添加自定义功能点”,在弹出的添加页面中,按如下各个字段内容,添加项目场景所
需的功能点信息。多个自定义功能点,需每次新增后,再次点击添加。注:标识符字段输入内容
请保持下表加黑内容一致。
步骤 5 检查并保存创建的物模型
检查页面上添加的物模型各功能点信息无误后,点击“保存”按钮,并点击弹出的确认提示
“确定”。则创建的物模型在 OneNET 平台上生效。
1.2.3 创建基于 MQTT 的设备
步骤 1 进入设备管理页面
步骤 2 添加一个设备的信息,用于真实设备接入
在弹出的添加设备页面中,添加单个设备,所属产品则选择刚建立的产品名称,设备名称输入
Controller(注:须按此加黑信息输入,确保与后续步骤填写信息相一致),其他信息可自行填写,
最后点击“确定”保存当前设备的信息。
步骤 3 再添加一个设备的信息,用于模拟工具接入
再次点击“添加设备”,该设备名称输入Simulator(同样请按此信息输入,确保与后续实训
任务相呼应),产品依旧选择刚建立的产品名称,最后点击“确定”保存当前设备的信息。
1.2.4 设备状态及信息查看
步骤 1 查看设备运行状态
点击左侧菜单“设备管理”,显示设备列表页面,其中“设备状态”列展示了对应设备的运行状态。初始创建的设备,显示为“未激活”,当实体设备使用该条设备信息接入到 OneNET 平台后,则显示为“在线”,断开与OneNET 平台的连接后,则显示为“离线”,且“最近在线时间”列会记录最后一次上线时间信息。
步骤 2 查看设备详细信息
切换到“属性”页面,可以查看当前设备下的各个物模型功能点实际数据,下图因为设备是
初次创建,所以这些数据还没有记录。
[图片上传中...(image.png-281ce9-1717487873382-0)]
步骤 3 查看设备日志
[图片上传中...(image.png-2f26f1-1717487917960-0)]
1.3.1 设备分组管理
1.3.1 设备分组管理
步骤 2 为分组添加设备
初始时没有设备存在于该分组中,列表显示为空白。注意分组信息展示的内容,分组也有自己的key, 这个 key 可用于按分组方式接入 OneNET 平台的方式时,计算 Token 的授权凭据。
点击页面右侧“添加设备”按钮,弹出的页面展示了左右两栏设备列表。左侧列出了所有产品下的待添加设备,已加入到某个分组的设备则不会显示。选择左侧之前创建好的设备,右侧会基于 OneNET 的智慧小区安全防护系统 ,自动出现该设备信息,表示已被选择加入到当前分组中。点击下面的“确定”按钮完成将设备加入到分组的操作。
2 智慧小区安全防护系统模拟设备接入
2.2.1 模拟设备接入OneNET 平台
步骤 1 获取产品、设备的必要信息
1、产品 ID:点击产品开发管理菜单,在具体产品列表中,找到产品 ID 列复制其字段信息,注意保持其大小写(后文使用“{产品 ID}”来指代,即表示需用这里复制的实际的产品 ID 字段信息替换,下同)。
2、设备名称:点击设备管理菜单,在具体设备列表中,找到设备名称列,本任务中,我们选择“Simulator”设备作为模拟对象,记录该名称,注意保持大小写。(后文用{设备名称}来指代)
3、设备密钥:点击设备列表右侧操作项“详情”,在设备详情页面,点击“展开”,记录设备密钥信息,注意保持其完整性。(可直接点击“复制”用于粘贴)。
[图片上传中...(image.png-866942-1717488358406-0)]
步骤 2 使用官方 Token 计算工具,获得验证 token 信息
点击“Generate”按钮,在工具下方输入框计算产生 token,不要做任何改动全选复制全部字符串作为{token}。
步骤 3 安装并配置 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}(前一个步骤中确定的产品 ID)
(7) 设置 Password:{token} (前一个步骤中计算得到的 token)
步骤 4 使用 MQTT.fx 工具模拟设备接入
运行 MQTT.fx 工具,点击选择刚刚保存的连接配置列表项击“Connect”,一切正常,工具将很快登陆接入OneNET 平台,此时 Connect 按钮变灰,右侧Disconnect 按钮处于激活状态。
可以点击”Log“ 选项页,查看工具连接服务端的情况,正常连接成功则提示类似如下图红框所示信息。
如有如下图红框所示信息,则相应检查上一步骤中填入的连接配置信息是否正确,并进一步追溯 token计算是否正确,或者更前一步中各个关键信息获取是否正确。
当工具显示正常连接后,查看OneNET 平台中当前模拟的设备在页面显示为在线状态
步骤 5 断开 MQTT.fx 工具模拟,查看 OneNET 平台中设备的状态变化
点击 MQTT 工具窗口中的 “Disconnect”按钮,断开工具的 MQTT 连接,等待一会儿后,刷新OneNET平台中设备列表页面,查看显示的设备状态信息:可以看到其状态都变为离线。
2.2.2 模拟设备接入OneNET 平台实现属性上报
步骤 1 订阅属性上报结果通知消息
为了确保设备上传消息确实被平台所接受处理,模拟设备通过订阅 OneNET 平台中已提前创建好的该 MQTT 设备属性上报的结果回复 topic 主题,来等待获取对应的属性上报结果消息,属性上报结果回复 topic 为:
$sys/产品 ID/设备名称/thing/property/post/reply
其中产品 ID、设备名称内容,根据实际创建的产品和设备信息替换,将替换后完整的 topic,填入模拟工具“Subscribe”选项页中的输入框,如下图所示:
点击“Subscribe”按钮向平台订阅该主题,平台返回成功后,工具左侧中的已订阅主题列表会有一条记录,且该主题下当前消息数为 0。
步骤 2 发送属性上报消息
点击“Publish”选项页表头,切换到消息发送页,在输入框中填入属性上报 topic 主题,该 topic为:
$sys/产品 ID/设备名称/thing/property/post
同样需要将其中的产品 ID、设备名称替换为实际的信息后填入该输入框。
在下空白编辑区中,输入如下内容:
{
"id": "123",
"version": "1.0",
"params": {
"distance": {
"value": 28.88,
"time": 1599534283111
}
}
}
示例中各个字段说明:
输入并检查无误后,点击“Publish”按钮。
步骤 3 查看属性上报结果
点击“Subscribe”选项页表头,查看之前订阅的属性上报结果通知消息 topic 下,收到的消息如下图
示例:
可以看到最新的一条消息,标识了消息的 id 和 code,其中 id 的值为发送时的 id 值,code 值为 200表示该条消息成功送达 OneNET 平台。
步骤 4 OneNET 平台中查看设备的属性最新值
回到 OneNET 平台中设备管理页面,进入“Simulator”设备详情,查看当前设备各个属性的最新数据,确认显示出通过模拟工具上报来的 value 值:
2.2.3 OneNET 平台下发属性值到模拟工具
步骤 1 订阅接收平台下发属性数据的 topic
设备侧如需要收到平台下发的数据,需要订阅接收平台下发数据的 topic,该 topic 为:
$sys/产品 ID/设备名称/thing/property/set
点击模拟工具的“Subscribe”选项页表头,在其中的输入框填写平台下发属性数据的 topic。点击“Subcribe”按钮完成订阅,如下所示,成功后订阅列表会多一个新的订阅频道,当前消息数为 0。
步骤 2 OneNET 平台下发属性数据
在“设备管理”中选择要下发属性的设备(本任务中选择前面任务中创建的产品和Simulator 设备),点击详情进入设备信息页面,切换功能为“设备调试”
在下方显示页面中选择“应用模拟器”,勾中属性功能点距离 distance,并填写一个具体数值,如 33.3,点击页面下方的 “属性设置”按钮,完成发送。可以在页面右侧的调试日志中看到下发的日志信息。
步骤 3 模拟设备中查看收到的属性数据值
点击模拟工具的“Subscribe”选项页表头,可以看到已订阅列表中,关于平台下发属性数据的topic, 当前消息数是 1。点击右侧消息列表最下方一条息,可以看到其中的内容信息,收到的值与前一步骤中下发的值相同。
2.3.1 仿真设备信息上传
步骤 1 进入设备调试功能
在“设备管理”中选择要下发上报信息的设备(本任务中选择前面任务中创建的产品和 Simulator 设备),点击详情进入设备信息页面,切换功能为“设备调试”。
步骤 2 启动设备模拟器
刷新页面提示可以启动调试后,点击“启动调试”按钮。启动后,属性上报 Tab 页展示了当前设备可以上报的数据点,图示仅参考操作的位置示意,不代表所示信息必须保持一样。
步骤 3 输入当前设备的WiFi定位信息上报
向下浏览或通过输入关键字搜索定位到“WiFi定位”属性数据点,勾中前面的选框,并点击右侧下拉展开 箭 头 , 在 该 数 据 点 下 的 “ 热 点 mac 信 息 ” 输 入 框 中 输 入 某 个 WiFi 热 点 的 mac 地 址 信 息 , 如
dc:fe:18:f2:4c:67|ac:b3:b5:1d:63:80。点击下方的“属性上报”。
观察页面右侧显示的数据上报及平台回应信息,确认数据成功上报。
步骤 4 在设备详情页面查看设备上报的热点位置信息数据
返回设备详情页面,切换“属性”页面,查看设备属性点的数据信息,已经有数据记录。
步骤 5 重复为另一个 Controller 设备上报地理位置信息数据
重复步骤 1、2、3、4,但此时选择的设备为“Controller”,其他操作方式与前述步骤一致,返回设备详情页面,查看该设备下的地理位置属性点信息,已经有数据记录。
3基于真实设备接入 OneNET 平台
3.2.1 真实设备接入OneNET 平台实现属性上报
步骤 1 基于 OneNET 物联网实验箱搭建实训项目终端硬件平台
根据实训场景,选取 OneNET 物联网实验箱“核心模块”以及“Wifi 模块”、“蜂鸣器模块”、 “超声波模块”等场景所需的模块进行搭建(建议实验箱背板上只插上这四个模块,其他项目中已经使用过的模块可以取下,确保模块数据干扰)。
步骤 2 终端设备软件系统搭建
(1) 运行 Keil uVision5 应用程序(有关Keil uVision5 应用程序的安装、芯片编译环境配置等步骤参考前述实训项目任务中有关指导说明)。
(2) 载入项目三终端设备侧代码工程(该工程代码已经包含了根据实验箱各模块基础集成框架,以及基于 MQTT 的 OneNET 云平台接入能力),载入后直接全编译工程,查看编译结果。
步骤 3 修改设备程序的 OneNET 平台网络接入配置参数
修改如下几处代码,让工程具备正确的网络访问以及 OneNET 平台接入验证和适配本次实训任务所需的物模型数据属性上报、写入能力。具体代码文件在工程中的位置如下图所示
A. 工程相对路径\device\src\net_device.c 约 677 行处,将{wifi}、{password}替换为设备所在 Wifi 网络用户名和密码(将{}括号一起替换,下同);
B. 工程相对路径\onenet\src\onenet.c 约 56 行处,依次修改{设备密钥}、{产品 id}、{设备名称}为之前步骤中在 OneNET 平台 中所创建的产品、设备相关信息,本例中设备名称就是之前步骤中创建的“Controller”设备,并对应填入其设备密钥;
步骤 4 修改设备程序的上报属性值映射关系以及 OneNET 平台下发属性生效命令处理代码
C. 工程相对路径\applications\application.c 约 132 行处,根据之前步骤中在 OneNET 平台中所创建的物模型信息,依次增加属性点标识符以及对应需上报的设备数据变量,如下所示;
{"beep", &beep_info.beep_status[0], TYPE_BOOL, 1}, {"distance",&Sonic_Info.sonic_distance,TYPE_FLOAT,1},
D. 工程相对路径\onenet\src\cmd_callback.c 约 51 行处,根据之前步骤中在OneNET 平台 中所创建的物模型信息,增改此处的属性点标识符,对应设置需写入生效的设备数据处理函数名,并同时实现该函数的声明以及具体函数代码,完成写入信息在本地设备上的实际生效逻辑;
以蜂鸣器写入为例,对应修改该变量定义段内某行形如
“{“beep”,CALLBACK_Beep},”
的信息,
逗号前面的字符串标识符为"beep",逗号后的处理方法名为 CALLBACK_Beep。同时在该文件头部,增加
void CALLBACK_Beep(int value);
在文件适当位置增加该方法的具体实现逻辑代码:
步骤 5 编译工程,连接下载器烧写程序到设备中
下载器的连接以及烧写过程略。下载成功后设备重新加电,等待一定时间,进入下一步。
步骤 6 OneNET 平台侧查看设备状态
登录 OneNET 平 台 ,查看“Controller”设备运行状态为在线,具体操作与前述步骤中查看设备状态相同,图略。若此时设备显示为不在线,则排查前面关于网络接入、OneNET 鉴权等代码修改处是否有误。重复步骤 3、4、5,再次检查并修改,直到本步骤查看状态为上线。
步骤 7 OneNET 平台侧查看设备上报数据信息
进入设备详情页面,查看属性表格页展示的各个数据点显示的信息。
3.2.2 下发属性在终端设备上执行生效(设备调试)
步骤 1 通过 OneNET平台 的设备调试方式进行属性下发
打开设备管理列表页面,选择之前步骤中创建的MQTT产品下的“Controller”设备,点击“详情”进入设备详情页面,并点击 “设备调试”选项,进入 OneNET 平台 的设备调试功能页面。本任务中,需要切换调试方式为“应用模拟器”,下方页面展示了可以设置的属性(物模型中可写的属性功能点)。
先勾选一个功能点,然后设置下发的数值。(以蜂鸣器为例,这是一个 bool 型功能点,勾选后,可设置值为 true、false 两个之一,本次任务选择 true 作为下发数值)点击页面下方的“属性设置”按钮,右侧调试日志展示了下发的报文,设备端也同时将该数值执行生效。
3.2.3 下发属性在终端设备上执行生效(API 调试)
步骤 1 进入“API 调试”功能页面
在中间页面展示的必填参数中,填写页面中输入必要的参数,如下图所示,本次任务中,填入真实接入的设备“Controller”所对应的相关信息:
其中的params内容填写要设置的属性标识符以及对应设置值,本次任务中设置蜂鸣器状态为true,文本示例参考如下:
{
"beep": true
}
点击下方的“执行”按钮,等待一会儿后,设备端执行下发的属性值(蜂鸣器响),同时右侧列页面刷新显示出调用结果,也就是整个API 模拟调用的报文交互结果.
3.2.4 基于API 方式实现设备属性下发
步骤 1 准备 API 接口调试工具 Postman
步骤 2 查阅接口文档,了解有关属性下发的 API 调用方式
步骤 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": "84qVvid4b5",
"device_name": "Controller",
"params":
{
"beep": true
}
}
3、确定请求的 Header 内容,这里需要一个向 OneNET 平台鉴权所需的必要信息字段,就是“authorization ”信息,下面是该信息的一个生成示例,具体生成方式可参考其他实训任务环节中的操作步骤指导,应用侧请求鉴权,res 参数须以“userid/ 用户 ID”的格式填入,版本号须为“2022-05-01”,字段具体内容根据实际情况进行填入。
步骤 4 发起 API 请求,查看结果
步骤 5 更改 api 报文,对同样属性点,设置新的属性值,并下发
{
"product_id": "***********",
"device_name": "Controller",
"params": {
"beep": false
}
}
再次通过 postman 发起请求,通过平台鉴权后,该请求会下发到对应的真实设备,蜂鸣器关闭。
3.2.5 基于OneNET 云平台的场景联动
步骤 1 进入 OneNET 平台 场景联动管理功能
步骤 2 创建场景联动规则
场景联动是一种开发自动化业务逻辑的编程方式,目前支持设备、时间、第三方数据源等多维度的条件触发,这些触发条件以及执行动作组合起来,形成一套规则。点击页面右上角“新建场景”,填写场景名称,这里我们需要一个“距离太近告警”的场景,点击添加进入下一步。
步骤 3 编辑距离探测告警的联动规则
点击“确定”创建好改场景信息,并修改其启用状态为“开”。
步骤 4 再新增一个联动规则,实现距离安全时取消告警
参考步骤 3 描述,再新增一个联动规则,名称可以为“距离安全取消告警”。该规则的具体条件及动作与步骤3大部分相同,除了其中的条件部分,距离逻辑判断修改为“>”,数值为“20”,执行动作部分,蜂鸣器的数值改为“0”。最后点击“确认”按钮,并同样将该条场景规则的启用状态修改为“开”,完成本次编辑内容。
步骤 5 设备上线,观察场景实现效果
4.安全防护系统的可视化实现
4.2.1 物联网云平台可视化组件配置运用
步骤 1 创建一个可视化项目
步骤 2 增加数据源模板
步骤 3 编辑可视化页面及各个组件
步骤 4 设置图表的数据来源
保持折线图处于选择状态(可再次双击折线图,右侧出现属性修改页),现在切换到“数据”属性 Tab页。选择“数据绑定方式”为“数据源”,此时“数据源选
择”下拉列表为“请选择”状态,点击“管理数据源”按钮,弹出“数据源管理”页面。
此时“数据源选择”下拉列表会出现一条可选的记录,形如“distance_XXXX”,代表以“distance” 模板生成的记录,平台自动追加后缀加以命名。选择该条记录作为折线图的数据源。
步骤 5 设置不使用数据过滤器
点击 “使用数据过滤器”前面的勾选框,去掉勾选,即不使用数据过滤器。点击“数据处理结果”按钮,查看弹出的窗口中展示的数据,这些数据就是设备定时上报的属性点形成的(图例中的 value对应的值,就是上报的间隔距离值)。关闭弹出窗口继续下一步。
步骤 6 设置图表的横轴列展示字段名与数据提供字段相匹配
步骤 7 预览可视化视图并回到编辑状态迭代优化视图效果
如需要修改视图,可以点击顶部右侧出现的“继续编辑”按钮,回到可编辑状态继续修改
步骤 8 保存视图,完成可视化项目
5.使用CoAP接入OneNET平台操作手册
1.创建产品和设备
2.进入产品详情页面,设置产品的物模型,将多余的功能点删除,只保留 Brand, WifiSwitch 和 CarReverseSignal 三个功能点,其中前两者为 属性,后者为 事件。
3.生成设备接入Token
然后使用 Token 生成器,生成设备接入的 Token。注意南向接入时, res 只能是 products/{产品ID}/devices/{设备名称} 的形式。
过期时间可以在搜索引擎中搜索“时间戳”,通过在线工具进行转换。选定的时间一定是一个未来的时刻,建议越大越好。
得到的 Token 如下:
version=2018-10-31&res=products%2FPDQ1GhgWlM%2Fdevices%2FCOAP-DEVICE&et=1669173531&method=md5&sign=XP%2BJ4ZzhvIcbQewsuxBTSw%3D%3D
4.启动OneNET-CoAP-Shell
将 OneNET-CoAP-Shell 项目编译好的 coap-shell-1.1.2-SNAPSHOT.jar 下载到本地,存放到一个目录,比如 *C:* 根目录下。在文件管理器地址栏上输入 cmd 然后回车,启动 cmd 窗口。在窗口中输入如下命令启动 OneNET-CoAP-Shell 命令行工具:
C:\>java -jar coap-shell-1.1.2-SNAPSHOT.jar
启动完成后,应该有如下的打印:
_____ ___ ___ ______ ____
/ ___/__ / _ | / _ \ / __/ / ___ / / /
/ /__/ _ \/ __ |/ ___/ _\ \/ _ \/ -_) / /
\___/\___/_/ |_/_/ /___/_//_/\__/_/_/
CoAP Shell (v1.1.2-SNAPSHOT)
For assistance hit TAB or type "help".
server-unknown:>
5.接下来,首先连接 OneNET 平台,然后进行登录、上报、离线等操作。
第一步:连接平台
server-unknown:>connect coap://studio-coap.heclouds.com:5683
available
第二步:接入平台,完成登录
post /$sys/PDQ1GhgWlM/COAP-DEVICE/login --payload '{"lt":600,"st":"version=2018-10-31&res=products%2FPDQ1GhgWlM%2Fdevices%2FCOAP-DEVICE&et=1669173531&method=md5&sign=XP%2BJ4ZzhvIcbQewsuxBTSw%3D%3D"}' --format 'application/json'
登录成功,返回信息:
----------------------------- Response -----------------------------
POST coap://183.230.102.116:5683/$sys/PDQ1GhgWlM/COAP-DEVICE/login
MID: 17403, Type: ACK, Token: D00FB657D2200BDE, RTT: 29ms
Options: {"Location-Path":"$sys"}
Status : 201-Created, Payload: 8B
............................. Payload ..............................
7D747C9829241C3F
第三步:上报设备属性数据
命令行中执行:
post /$sys/PDQ1GhgWlM/COAP-DEVICE/thing/property/post --payload '{"id": "53725","version": "1.0","params": {"Brand": {"value": "hello"}}}' --format 'application/json' --accept 'application/json' --token '7D747C9829241C3F'
上报成功,返回信息:
----------------------------- Response -----------------------------
POST coap://183.230.102.116:5683/$sys/PDQ1GhgWlM/COAP-DEVICE/thing/property/post
MID: 17404, Type: ACK, Token: 7D747C9829241C3F, RTT: 413ms
Options: {}
Status : 205-Reset Content, Payload: 0B
............................. Payload ..............................
将登录返回得到的 Token 在此指令中携带,并构造上传的 Payload 数据。Payload 部分是 JSON 格式,其键值对的键需要遵从于 OneJSON 协议,详见 官方文档。可以自己手动构建,但比较容易出错,建议使用平台自带的设备模拟器先上传一下数据,得到格式后,再组装到这里的命令行里面。
第四步:上报设备事件数据
输入:
post /$sys/PDQ1GhgWlM/COAP-DEVICE/thing/event/post --payload '{"id":"1637633595439","version":"1.0","params":{"CarReverseSignal":{"value":{"ReverseStatus":true,"ReverseTime":1637633573000,"gnssHead":99.9}}}}' --format 'application/json' --accept 'application/json' --token '7D747C9829241C3F'
上报成功,返回:
----------------------------- Response -----------------------------
POST coap://183.230.102.116:5683/$sys/PDQ1GhgWlM/COAP-DEVICE/thing/event/post
MID: 17405, Type: ACK, Token: 7D747C9829241C3F, RTT: 67ms
Options: {}
Status : 205-Reset Content, Payload: 0B
............................. Payload ..............................
这个 OneJSON 是最容易出错的,自己构造的话,几乎都会出错,这里面有两个主要注意的地方。第一,事件的所有参数,比如这里的三个,一个都不能少,都必须上传数值。第二,时间必须使用 UTC,而且必须精确到毫秒,这个隐藏得比较深,可以从物模型 停车切换时间 的定义中看到,也可以从模拟器的字段提示处看到。
第五步:设备离线
输入 :
post /$sys/PDQ1GhgWlM/COAP-DEVICE/logout --payload '{"st":"version=2018-10-31&res=products%2FPDQ1GhgWlM%2Fdevices%2FCOAP-DEVICE&et=1669173531&method=md5&sign=XP%2BJ4ZzhvIcbQewsuxBTSw%3D%3D"}' --format 'application/json'
离线成功,返回信息:
----------------------------- Response -----------------------------
POST coap://183.230.102.116:5683/$sys/PDQ1GhgWlM/COAP-DEVICE/logout
MID: 17406, Type: ACK, Token: 2C5678B480DA17CB, RTT: 52ms
Options: {"Content-Format":"text/plain"}
Status : 202-Accepted, Payload: 0B
............................. Payload ..............................
四.实训收获
1.根据项目场景创建产品物模型
2.通过模拟设备,实现属性上报和下发命令
3.通过OneNET 平台的“设备调试”和”API调试“实现设备属性下发