Bläddra i källkod

更新iot文档

luoguangyi 2 år sedan
förälder
incheckning
8cc293ddfe
3 ändrade filer med 185 tillägg och 38 borttagningar
  1. 114 0
      docs/iot/description.md
  2. BIN
      docs/iot/img/img6.png
  3. 71 38
      docs/iot/message.md

+ 114 - 0
docs/iot/description.md

@@ -498,6 +498,120 @@ command.cycle.minute=15
 
 
 
+## 8.iot数据质量需求修改
+
+1.http接口查询实时iot数据数据,超过时间阈值没有实时数据的返回结果中iot数据信息字段不存在或者为null;
+
+返回示例:
+
+```
+{
+  "building": "1101070037",
+  "points": [
+    {
+      "virtual": false,
+      "building": "1101070037",
+      "operation": null,
+      "meter": "1001",
+      "funcid": 10101,
+      "data": null,
+      "receivetime": null,
+      "status": null,
+      "endtime": null
+    }
+  ],
+  "receivetime": "20201224192034",
+  "status": "finish:success"
+}
+```
+
+或者:
+
+```
+{
+  "building": "1101070037",
+  "points": [
+    {
+      "virtual": false,
+      "building": "1101070037",
+      "meter": "1001",
+      "funcid": 10101,
+    }
+  ],
+  "receivetime": "20201224192034",
+  "status": "finish:success"
+}
+```
+
+2.websocket推送实时数据的,数据返回空字符串;
+
+示例
+有数据:{"data":"20220211100937;107911;903;0.0","type":"iot"}
+无数据:{"data":"20220211100937;107911;903;","type":"iot"}
+
+3.Hbase数据库中保存的原始数据不保存掉线为空(null)的数据,基于3点考虑:一个是为了排查问题方便,知道最近一次有效数据的时间,一个是兼容之前部分能源业务直连Hbase数据库的场景,一个是不影响分进度计算逻辑
+
+4.数据质量的判断依赖于两点:
+
+iot-client上报信息点为数值类型且信息点包含有效期,如果iot-client没有升级或者没有上报,那么认为所有数据都是有效的,有效判读去上报时间,与iot数据时间无关;iot链路上有iot-project服务;
+(集团业务如果使用的iot-client-->iot-collect的链路,不会进行发数据质量的判断,iot数据质量判断在边缘项目iot-project中判断,也就是只有
+iot-client-->iot-projecr-->iot-collect的链路做数据质量的逻辑
+iot-project如果接受多个项目的数据的情况,数据质量判断值判断只判断配置文件中配置的单个项目,避免多项目数据质量判断的压力和时效性问题)
+
+5.服务重启说明
+
+当前版本的服务重启后会自动加载Hbase最新的数据放入缓存,但是为了保证数据指令有效,未来版本中:
+a. iot-project重启,需要iot-client发送全部最新数据;  iot-client-->iot-project-->iot-collect
+ iot-client与iot-project的心跳丢失后iot-client负责上传的数据需要内存中对应的数据写null,hbase中不做数据更新。iot-collect重启,iot-project中需要推送全量数据到iot-collect;
+
+6.分精度数据保持原逻辑不变,离线及其不可靠的空数据不会计入分精度计算;
+
+7.控制业务之前依赖的是控制心跳,此次升级以后增加了新的信息点和有效期上传报文机制,采集和控制的信息点及其判断统统以最新点位心跳机制,原有的控制心跳作废;
+iot-control云端控制服务作废,iot-collect同时负责采集和控制;
+下发控制的时候,如果数据的值为null,控制下发的报文应该反馈离线不能控制,保证逻辑和之前一致。
+
+8.本地升级不会考虑提议中重复数据多次上报的问题,即使数据不变的iot数据也要定时不断上报;
+
+9.采集数据不经过iot-cilent直达iot-project/iot-collect的数据,不会进行点位清单及其有效期上传,所以最新数据长期有效
+
+10 有效期约束
+
+为了高效及时的判断海量设备离线,可以基于定时任务,轮训,redis的zset,DelayQueue延迟队列,MQ等,但是效率和资源占用都不够友好,
+计划使用时间轮算法判断,需要设置几个固定的时间轮进行判断:
+分精度类型,支持 1min、5min、15min、1h、1d,有效期的时间轮设置为分精度的2倍(2min、10min、30min、2h、2d)
+比如设备上报频率是1分钟1次,有效期设置为2min,2分钟多几秒就会收到数据就会收到设备离线的iot数据
+数据有效期至少是上报周期的2倍以上
+
+11 为了兼容可能出现的同一个点位的采集和控制不是一个客户端的情况,约定如下:因为采集控制使用同一个信息点心跳,采集的哪个客户都最后发的包就回包给谁,控制的优先认心跳,哪个客户端最近发过点位有效期的心跳,就优先控制到哪个客户端,并且一个命令一会控制一次;
+
+12 报文格式参考报文格式文档
+
+13 数据质量判断时候处理好有效期和数据降频的冲突问题,不能因为降频产生不必要的离线数据;
+
+**部分疑问说明:**
+
+1.心跳间隔超过多长时间后认为丢失心跳,需要重新连接?
+服务之间会长期保持连接,如果连接断开了,下次发数据的时候就会自动重新连接,重新建立连接的时候客户侧会向服务侧推一次送全量数据;
+TCP断开连接那么久认为心跳丢失;服务重新连接是客户端行为,服务侧不做约束;
+
+2.有效期支持自定义
+
+为了实现的高效性和简洁,暂时不支持自定义有效期,只支持分精度类型x2的固定几个有效期,具体参考报文格式文档;如果明确目前不能满足需求,及时沟通调整;
+
+3.文档完善
+服务接口文档,通讯协议,服务说明文档,服务部署文档已经详细提供;
+具体细节对接判断流程图等,考虑到投入产出,暂时不做更详细书写,有具体疑问问题的会及时解答并根据情况更新文档;
+
+4.关于数据质量判断带来的性能压力说明,如果都用2分钟有效期的话,压力有多大?
+实时的数据质量判断在云端会有可预见的压力,所以目前实现的数据质量实现强依赖于边缘侧iot-project服务,数据质量的判断和产生都在iot-project服务中产生;
+所有数据有效期都是2分钟,那么数据上传的频率都要小于等于1分钟,较大的iot数据的压力主要在Hbase侧,尤其是分精度的计算压力,服务本身压力可以处理;
+
+最新问题讨论
+问题1:信息点有效期第一次约定中是说明有效期内没有收到新的报文生成离线判断,但是服务离线的情况下还继续等到有效期才生成离线数据不合理;
+可以使用服务侧心跳判定(实现复杂一些,判断要等到心跳结束,判断不及时,需要额外线程监听心跳)
+可以使用TCP连接断开判定(判断实时,实现简单,UDP不支持判断)
+初步考虑使用TCP连接实时判断+有效期结束保底判断相结合,UDP的只依赖有效期判断
+
 ## 附录1:部分文档地址
 
 [数据与计算基础知识](https://thoughts.teambition.com/workspaces/5f7001fdd8b0840016e073e7/docs/5ff7f3faeaa1190001062c6a)

BIN
docs/iot/img/img6.png


+ 71 - 38
docs/iot/message.md

@@ -2,13 +2,20 @@
 
 
 
-# ***IOT采集与控制报文 v1.0.0***
+# ***IOT采集与控制的TCP/UDP报文***
 
- 2022年2月16号
+版本说明
+
+| 版本 | 日期          | 变更内容                                                   | 备注                       |
+| ---- | ------------- | ---------------------------------------------------------- | -------------------------- |
+| 1.0  |               |                                                            |                            |
+| 1.1  | 2022年2月16日 | 1.增加数据上传有效时间的说明2.通过有效时间判断数据的在离线 | 编写:罗广毅  审核:韩艳辉 |
 
 ## 通讯说明:
 
-- **所有报文同时支持TCP和UDP报文方式,并且使用TCP和UDP等价,仅仅是通讯方式的区别,其他没有区别;**
+- 本协议使用范围是Iot-project,Iot-client,iot-collect 3个服务的通讯数据的规范,为了有效使用本协议建议首先了解TCP和UDP的基础通讯方式。
+
+- **所有报文同时支持TCP和UDP报文方式,并且使用TCP和UDP等价,仅仅是通讯方式的区别,其他没有区别;本文档只是TCP/UDP通讯的报文格式及约定**
 
 - **数据上传包可以一次传多个,分隔符使用&,回包的时候&分割的包可能分成多个小包进行回包**
 
@@ -16,9 +23,9 @@
 
 - **注:TCP通信为解决半包粘包问题,在包头和包围需要增加左括号和有括号。**
 
-  TCP示例	(1101070037;1;connect)
+  **TCP示例	(1101070037;1;connect)**
 
-  UDP示例	1101070037;1;connect
+  **UDP示例	1101070037;1;connect**
 
 - **为避免理解偏差,通信双方均使用目前的服务名称**;涉及服务iot-collect,iot-project,iot-client3个服务之间通讯使用;iot-control服务作废,功能合并到iot-collect;
 
@@ -32,6 +39,20 @@
 
 - **历史原因,iot服务的文档以及tcp/udp/http通讯中提到的建筑一律为10位的不带Pj的项目id,不再另行说明**;
 
+- iot-collect与iot-project/iot-client是一对多的关系,iot-project与iot-client是一对多的关系,一个项目只能启动一份iot-project;
+
+- **服务列表**
+
+  | 服务名称    | 服务说明                                                     | 说明 |
+  | ----------- | ------------------------------------------------------------ | ---- |
+  | iot-client  | iot采集集成,一般对接子系统数据的程序或直接隐身为4-6代采集器或第三方应用等;负责集成各种IOT数据,对接各种二方、三方系统,各种协议的数据 |      |
+  | iot-project | 可理解为处理边缘数据到云端数据的中间转发程序;边缘端IOT数据,上传下达的转发服务,所有iot数据都是传输到iot-project,然后再转发到iot-collect,只是上传下达的搬运工,不生产数据,也不处理数据。iot-project也可以提供边缘端的一些实时数据查询和websocket推送能力; |      |
+  | iot-collect | 云端采集控制程序,云端处理动态数据到Hbase数据库的应用模块或应用程序;这个服务是几个服务中唯一对业务方提供接口的服务,iot-collec提供主要接口:查询采集实时数据、查询分精度数据、采集值统计下发控制指令、查询指令结果,实时websocket推送数据等。 |      |
+
+## **通讯流程**
+
+![](http://assets.processon.com/chart_image/620e13207d9c0807ec9462bf.png)
+
 ## 1 心跳类报文
 
 心跳类的报文有3种类,connect/heart/buildingheart。
@@ -50,6 +71,8 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 
 ### ***1.1 连接***
 
+Iot-client向Iot-project或Iot-collect通过TCP或UDP的主动发起的。
+
 **连接包**	iot-client --> iot-project/iot-collect
 
 | 建筑 | 网关 | 类型    |
@@ -68,6 +91,8 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 
 ### ***1.2 心跳***
 
+Iot-client定时向iot-project/collect发送客户端的存活信息,iot-project/collect如果代表回应说明服务端收到了客户端的信息,心跳周期没有严格定义,根据项目可随便改。
+
 **心跳包**	iot-client --> iot-project/iot-collect
 
 | 建筑 | 网关 | 类型  |
@@ -86,6 +111,8 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 
 ### ***1.3 项目心跳***
 
+此心跳是Iot-project到Iot-collect的心跳,如果做开发iot-client可忽略。
+
 ***项目心跳***包	iot-project -> iot-collect
 
 | 建筑 | 网关 | 类型          |
@@ -102,9 +129,9 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 
 示例	1101070037;0;buildingheartack;20211227110548
 
-### ***1.4 点位心跳清单及其有效期***
+### ***1.4 点位清单及其有效期***
 
-判断点位离线使用
+控制使用点位清单,判断点位离线使用点位有效期
 
 数据有效期全部为秒,有效期为负1(-1)代表长期有效,没有过期时间
 
@@ -125,7 +152,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ------------- | ---- | ---------- | ---- | ------ | ------ | ------ | ------ | ----- | ----- | ------ |
 | 字符 | 整数 | pointValidity | 时间 | 整数       | 整数 | 整数   | 整数   | 整数   | 整数   | 字符  | 整数  | 。。。 |
 
-示例	1101070037;1;20010203040506;600;123;123;50;5;5;2;1001;11;1001;12
+UDP示例	1101070037;1;20010203040506;600;123;123;50;5;5;2;1001;11;1001;12
 
 **应答包** iot-project --> iot-client  
 
@@ -133,19 +160,21 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ---------------- | ---- | ---------- | ---- | ------ | ------ | ------ | ------ | ----- | ----- | ------ |
 | 字符 | 整数 | pointValidityAck | 时间 | 整数       | 整数 | 整数   | 整数   | 整数   | 整数   | 字符  | 整数  | 。。。 |
 
-示例	1101070037;1;pointValidityAck;20010203040506;600;123;50;5;5;2;1001;11;1001;12
+UDP示例	1101070037;1;pointValidityAck;20010203040506;600;123;50;5;5;2;1001;11;1001;12
 
 ## 2 采集通讯报文
 
 ### ***2.1 数值数据上传***
 
+数值类型的iot数据上报采用
+
 **数据上报包**	iot-client -> iot-project-->iot-collect
 
 | 建筑 | 网关 | 类型   | 时间 | 序号 | 表号 | 数量 | 功能号1 | 数据1 | 功能号2 | 数据2 | 。。。 |
 | ---- | ---- | ------ | ---- | ---- | ---- | ---- | ------- | ----- | ------- | ----- | ------ |
 | 字符 | 整数 | report | 时间 | 整数 | 字符 | 整数 | 整数    | 字符  | 整数    | 字符  | 。。。 |
 
-示例	1101070037;1;report;20010203040506;123;1001;2;11;3.1;12;3.2
+UDP示例	1101070037;1;report;20010203040506;123;1001;2;11;3.1;12;3.2
 
 **应答包** iot-collect -> iot-project -->  iot-client
 
@@ -153,19 +182,21 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | --------- | ---- | ---- |
 | 字符 | 整数 | reportack | 空   | 整数 |
 
-示例	1101070037;1;reportack;;123
+UDP示例	1101070037;1;reportack;;123
 
 数据上传包可以一次传多个,分隔符使用&
 
 ### ***2.2 文本数据上传***
 
+文本类型的iot数据上报采用
+
 **数据上报包**	iot-client -> iot-project-->iot-collect
 
 | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 数量 | 功能号1 | 数据1 | 。。。 |
 | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ------- | ----- | ------ |
 | 字符 | 整数 | text | 时间 | 整数 | 字符 | 整数 | 整数    | 字符  | 。。。 |
 
-示例	1101070037;1;text;20010203040506;123;1001;2;11;hello;12;world
+UDP示例	1101070037;1;text;20010203040506;123;1001;2;11;hello;12;world
 
 **应答包** iot-collect -> iot-project -->  iot-client
 
@@ -173,12 +204,14 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ------- | ---- | ---- | ---- |
 | 字符 | textack | 字符 | 空   | 整数 |
 
-示例	1101070037;1;textack;;123
+UDP示例	1101070037;1;textack;;123
 
 数据上传包可以一次传多个,分隔符使用&;
 
 ### ***2.3 事件消息上传***
 
+事件消息类型的iot数据上报采用,没有表号和功能号
+
 香港置地火警使用过,目前应该已经没有使用场景了;时间类型的数据不具有表号-功能号标识,无法映射到物理世界物模型.
 
 数据上报包	iot-client -> iot-project-->iot-collect
@@ -187,7 +220,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | --------- | ---- | ---- | -------- | -------- |
 | 字符 | 整数 | happening | 时间 | 整数 | 字符     | 字符     |
 
-示例	1101070037;1;happening;20010203040506;123;firealarm;{"id":"abc"}
+UDP示例	1101070037;1;happening;20010203040506;123;firealarm;{"id":"abc"}
 
 应答包
 
@@ -195,13 +228,13 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ------------ | ---- | ---- |
 | 字符 | 整数 | happeningack | 空   | 整数 |
 
-示例	1101070037;1;happeningack;20010203040506;123;firealarm;{"id":"abc"}
+UDP示例	1101070037;1;happeningack;20010203040506;123;firealarm;{"id":"abc"}
 
 ## 3 控制通讯报文
 
 ###  ***3.1 点位设置***
 
-控制点位设置
+iot-collect-->iot-project 控制下发的指令格式
 
 **点位设置包**	iot-collect-->iot-project
 
@@ -209,9 +242,9 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | -------- | ---- | ---- | ---- | ---- | ---- |
 | 字符 | 整数 | pointset | 空   | 整数 | 字符 | 整数 | 字符 |
 
-示例	1101070037;1;pointset;20010203040506;123;1001;11;3.1
+UDP示例	1101070037;1;pointset;20010203040506;123;1001;11;3.1
 
-示例	1101070037;1;pointset;20010203040506;123;1001;11;[3.1,3.2,3.3]
+UDP示例	1101070037;1;pointset;20010203040506;123;1001;11;[3.1,3.2,3.3]
 
 **应答包** iot-project --> iot-collect
 
@@ -219,11 +252,11 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ----------- | ---- | ---- | ---- | ---- | ---- | -------- | ---- |
 | 字符 | 整数 | pointsetack | 时间 | 整数 | 字符 | 整数 | 字符 | 字符     | 字符 |
 
-示例	1101070037;1;pointsetack;20010203040506;123;1001;11;3.1;20010203040507;success
+UDP示例	1101070037;1;pointsetack;20010203040506;123;1001;11;3.1;20010203040507;success
 
 ### 3.2 点位设置下发协议
 
-控制点位下发
+ot-project -->  iot-client 控制下发的指令格式
 
 **下发包**	 iot-project -->  iot-client
 
@@ -231,9 +264,9 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ----------- | ---- | ---- | ---- | ---- | ---- |
 | 字符 | 整数 | senddownset | 空   | 整数 | 字符 | 整数 | 字符 |
 
-示例	1101070037;1;senddownset;20010203040506;123;1001;11;3.1
+UDP示例	1101070037;1;senddownset;20010203040506;123;1001;11;3.1
 
-示例	1101070037;1;senddownset;20010203040506;123;1001;11;[3.1,3.2,3.3]
+UDP示例	1101070037;1;senddownset;20010203040506;123;1001;11;[3.1,3.2,3.3]
 
 **应答包** iot-client -> iot-project
 
@@ -241,7 +274,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | -------------- | ---- | ---- | ---- | ---- | ---- | -------- | ---- |
 | 字符 | 整数 | senddownsetack | 时间 | 整数 | 字符 | 整数 | 字符 | 字符     | 字符 |
 
-示例
+UDP示例
 
 1101070037;1;senddownsetack;20010203040506;123;1001;11;3.1;20010203040507;success
 
@@ -255,9 +288,9 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | -------------- | ---- | ---- | ---- | ---- | ---- | -------- | ---- |
 | 字符 | 整数 | reportpointset | 时间 | 整数 | 字符 | 整数 | 字符 | 字符     | 字符 |
 
-示例	1101070037;1;reportpointset;20010203040506;123;1001;11;3.1;;
+UDP示例	1101070037;1;reportpointset;20010203040506;123;1001;11;3.1;;
 
-示例	1101070037;1;reportpointset;20010203040506;123;1001;11;3.1; 20010203040506;failure_point_not_exist
+UDP示例	1101070037;1;reportpointset;20010203040506;123;1001;11;3.1; 20010203040506;failure_point_not_exist
 
 **应答包**   iot-collect --> iot-project
 
@@ -265,7 +298,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ----------------- | ---- | ---- | ---- | ---- | ---- | -------- | ---- |
 | 字符 | 整数 | reportpointsetack | 时间 | 整数 | 字符 | 整数 | 字符 | 字符     | 字符 |
 
-示例	1101070037;1;reportpointsetack;20010203040506;123;1001;11;3.1; 20010203040506;failure_point_not_exist
+UDP示例	1101070037;1;reportpointsetack;20010203040506;123;1001;11;3.1; 20010203040506;failure_point_not_exist
 
 
 
@@ -288,7 +321,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | -------- | -------- | -------- | -------- | -------- | ---------- | ---------- | ---------- | ---------- | --------- | --------- | ---------- |
 | 字符 | 整数 | 字符 | 空   | 整数 | 整数   | 整数   | 整数   | 整数   | 字符  | 整数  | 。。。 |
 
-示例	1101070037;1;pointupload;;123;50;5;5;2;1001;11;1001;12
+UDP示例	1101070037;1;pointupload;;123;50;5;5;2;1001;11;1001;12
 
 应答包
 
@@ -296,7 +329,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | -------- | -------- | -------- | -------- | -------- | ---------- | ---------- | ---------- |
 | 字符 | 整数 | 字符 | 空   | 整数 | 整数   | 整数   | 整数   |
 
-示例	1101070037;1;pointuploadack;;123;50;5;5
+UDP示例	1101070037;1;pointuploadack;;123;50;5;5
 
 ### ***4.2 点位读取***(已作废)
 
@@ -306,7 +339,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
 | 字符 | 整数 | 字符 | 空   | 整数 | 字符 | 整数 |
 
-示例	1101070037;1;pointread;;123;1001;11
+UDP示例	1101070037;1;pointread;;123;1001;11
 
 应答包
 
@@ -314,7 +347,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | ---- |
 | 字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符     | 字符 | 字符 |
 
-示例
+UDP示例
 
 1101070037;1;pointreadack;20010203040506;123;1001;11;20010203040507;success;3.1
 
@@ -328,7 +361,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
 | 字符 | 整数 | 字符 | 空   | 整数 | 字符 | 整数 |
 
-示例	1101070037;1;senddownread;;123;1001;11
+UDP示例	1101070037;1;senddownread;;123;1001;11
 
 应答包
 
@@ -336,7 +369,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | ---- |
 | 字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符     | 字符 | 字符 |
 
-示例
+UDP示例
 
 1101070037;1;senddownreadack;20010203040506;123;1001;11;20010203040507;success;3.1
 
@@ -350,7 +383,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
 | 字符 | 整数 | 字符 | 空   | 整数 | 字符 | 整数 | 字符 |
 
-示例	1101070037;0;virtualpointset;20010203040506;123;1001;11;3.1
+UDP示例	1101070037;0;virtualpointset;20010203040506;123;1001;11;3.1
 
 应答包
 
@@ -358,7 +391,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
 | 字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符 |
 
-示例	1101070037;0;virtualpointsetack;20010203040506;123;1001;11;3.1
+UDP示例	1101070037;0;virtualpointsetack;20010203040506;123;1001;11;3.1
 
 ### ***4.5 查询当前上传值***(已作废)
 
@@ -368,7 +401,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
 | 字符 | 整数 | 字符 | 空   | 整数 | 字符 | 整数 |
 
-示例	1101070037;1;presentreport;20010203040506;123;1001;11
+UDP示例	1101070037;1;presentreport;20010203040506;123;1001;11
 
 应答包
 
@@ -376,7 +409,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -------- | ---- |
 | 字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符     | 字符 |
 
-示例	1101070037;1;presentreportack;20010203040506;123;1001;11;20010203040506;3.1
+UDP示例	1101070037;1;presentreportack;20010203040506;123;1001;11;20010203040506;3.1
 
 ### ***4.6 查询当前设置值(已作废)***
 
@@ -386,7 +419,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
 | 字符 | 整数 | 字符 | 空   | 整数 | 字符 | 整数 |
 
-示例	1101070037;1;presentset;20010203040506;123;1001;11
+UDP示例	1101070037;1;presentset;20010203040506;123;1001;11
 
 应答包
 
@@ -394,7 +427,7 @@ buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控
 | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | -------- | ---- |
 | 字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符     | 字符 | 字符     | 字符 |
 
-示例	1101070037;1;presentsetack;20010203040506;123;1001;11;20010203040506;3.1; 20010203040506; failure_point_not_exist
+UDP示例	1101070037;1;presentsetack;20010203040506;123;1001;11;20010203040506;3.1; 20010203040506; failure_point_not_exist