# ***IOT采集与控制报文 v1.0.0*** 2022年2月16号 ## 通讯说明: - **所有报文同时支持TCP和UDP报文方式,并且使用TCP和UDP等价,仅仅是通讯方式的区别,其他没有区别;** - **数据上传包可以一次传多个,分隔符使用&,回包的时候&分割的包可能分成多个小包进行回包** 示例: 1101070037;1;report;20010203040506;123;1001;2;11;3.1;12;3.2**&**1101070038;1;report;20010203040506;123;1001;2;11;3.1;12;3.2 - **注:TCP通信为解决半包粘包问题,在包头和包围需要增加左括号和有括号。** TCP示例 (1101070037;1;connect) UDP示例 1101070037;1;connect - **为避免理解偏差,通信双方均使用目前的服务名称**;涉及服务iot-collect,iot-project,iot-client3个服务之间通讯使用;iot-control服务作废,功能合并到iot-collect; IBMS业务: iot-client<--->iot-project<--->iot-collect 资管业务: iot-client<--->iot-collect 有控制业务必须有iot-project服务,没有控制业务的可以省略iot-project服务; - **时间格式统一采用yyyyMMddHHmmss;** - **历史原因,iot服务的文档以及tcp/udp/http通讯中提到的建筑一律为10位的不带Pj的项目id,不再另行说明**; ## 1 心跳类报文 心跳类的报文有3种类,connect/heart/buildingheart。 connect和heart等价,无本质上区别,作为iot-client与 北向服务心跳报文; connect包目前默认5分钟1次,heart包1分钟1次; **心跳包作用:** - 心跳报文作为服务连接正常的判断依据,心跳响应成功后才可以继续各种数据传输; - 通过不断发送心跳防止服务长时间不通讯后断开; - 通过相应回包时间进行时间校准对比; buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控制指令的下发使用,判断被控制信息点的项目是否存在的,控制指令会下发到对应项目的iot-project,一个项目只能部署一份iot-project; ### ***1.1 连接*** **连接包** iot-client --> iot-project/iot-collect | 建筑 | 网关 | 类型 | | ---- | ---- | ------- | | 字符 | 整数 | connect | 示例 1101070037;1;connect **应答包** iot-project/iot-collect -> iot-client | 建筑 | 网关 | 类型 | 时间 | | ---- | ---- | ---------- | ---- | | 字符 | 整数 | connectack | 时间 | 示例 1101070037;1;connectack;20010203040506 ### ***1.2 心跳*** **心跳包** iot-client --> iot-project/iot-collect | 建筑 | 网关 | 类型 | | ---- | ---- | ----- | | 字符 | 整数 | heart | 示例 1101070037;1;heart **应答包** iot-project/iot-collect --> iot-client | 建筑 | 网关 | 类型 | 时间 | | ---- | ---- | -------- | ---- | | 字符 | 整数 | heartack | 时间 | 示例 1101070037;1;heartack;20010203040506 ### ***1.3 项目心跳*** ***项目心跳***包 iot-project -> iot-collect | 建筑 | 网关 | 类型 | | ---- | ---- | ------------- | | 字符 | 整数 | buildingheart | 示例 1101070037;0;buildingheart **应答包** iot-collect --> iot-project | 建筑 | 网关 | 类型 | 时间 | | ---- | ---- | ---------------- | ---- | | 字符 | 整数 | buildingheartack | 时间 | 示例 1101070037;0;buildingheartack;20211227110548 ### ***1.4 点位心跳清单及其有效期*** 判断点位离线使用 数据有效期全部为秒,有效期为负1(-1)代表长期有效,没有过期时间 有效期只支持下面几个-1,120,600,1800,7200,172800,如果设置的不是上述值,会向上取整找到对应的值,比如设置180,会向上取整到600; ``` SECOND_DEFAULT(-1, "默认值,长期有效"), SECOND_120(120, "2分钟"), SECOND_600(600, "10分钟"), SECOND_1800(1800, "30分钟"), SECOND_7200(7200, "2小时"), SECOND_172800(172800, "48小时"); ``` **点位清单包** iot-client --> iot-project | 建筑 | 网关 | 类型 | 时间 | 有效期(秒) | 序号 | 页容量 | 总页数 | 页编号 | 总条数 | 表号1 | 功能1 | 。。。 | | ---- | ---- | ------------- | ---- | ---------- | ---- | ------ | ------ | ------ | ------ | ----- | ----- | ------ | | 字符 | 整数 | pointValidity | 时间 | 整数 | 整数 | 整数 | 整数 | 整数 | 整数 | 字符 | 整数 | 。。。 | 示例 1101070037;1;20010203040506;600;123;123;50;5;5;2;1001;11;1001;12 **应答包** iot-project --> iot-client | 建筑 | 网关 | 类型 | 时间 | 有效期(秒) | 序号 | 页容量 | 总页数 | 页编号 | 总条数 | 表号1 | 功能1 | 。。。 | | ---- | ---- | ---------------- | ---- | ---------- | ---- | ------ | ------ | ------ | ------ | ----- | ----- | ------ | | 字符 | 整数 | pointValidityAck | 时间 | 整数 | 整数 | 整数 | 整数 | 整数 | 整数 | 字符 | 整数 | 。。。 | 示例 1101070037;1;pointValidityAck;20010203040506;600;123;50;5;5;2;1001;11;1001;12 ## 2 采集通讯报文 ### ***2.1 数值数据上传*** **数据上报包** iot-client -> iot-project-->iot-collect | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 数量 | 功能号1 | 数据1 | 功能号2 | 数据2 | 。。。 | | ---- | ---- | ------ | ---- | ---- | ---- | ---- | ------- | ----- | ------- | ----- | ------ | | 字符 | 整数 | report | 时间 | 整数 | 字符 | 整数 | 整数 | 字符 | 整数 | 字符 | 。。。 | 示例 1101070037;1;report;20010203040506;123;1001;2;11;3.1;12;3.2 **应答包** iot-collect -> iot-project --> iot-client | 建筑 | 网关 | 类型 | 时间 | 序号 | | ---- | ---- | --------- | ---- | ---- | | 字符 | 整数 | reportack | 空 | 整数 | 示例 1101070037;1;reportack;;123 数据上传包可以一次传多个,分隔符使用& ### ***2.2 文本数据上传*** **数据上报包** iot-client -> iot-project-->iot-collect | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 数量 | 功能号1 | 数据1 | 。。。 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ------- | ----- | ------ | | 字符 | 整数 | text | 时间 | 整数 | 字符 | 整数 | 整数 | 字符 | 。。。 | 示例 1101070037;1;text;20010203040506;123;1001;2;11;hello;12;world **应答包** iot-collect -> iot-project --> iot-client | 建筑 | 网关 | 类型 | 时间 | 序号 | | ---- | ------- | ---- | ---- | ---- | | 字符 | textack | 字符 | 空 | 整数 | 示例 1101070037;1;textack;;123 数据上传包可以一次传多个,分隔符使用&; ### ***2.3 事件消息上传*** 香港置地火警使用过,目前应该已经没有使用场景了;时间类型的数据不具有表号-功能号标识,无法映射到物理世界物模型. 数据上报包 iot-client -> iot-project-->iot-collect | 建筑 | 网关 | 类型 | 时间 | 序号 | 消息类型 | 消息内容 | | ---- | ---- | --------- | ---- | ---- | -------- | -------- | | 字符 | 整数 | happening | 时间 | 整数 | 字符 | 字符 | 示例 1101070037;1;happening;20010203040506;123;firealarm;{"id":"abc"} 应答包 | 建筑 | 网关 | 类型 | 时间 | 序号 | | ---- | ---- | ------------ | ---- | ---- | | 字符 | 整数 | happeningack | 空 | 整数 | 示例 1101070037;1;happeningack;20010203040506;123;firealarm;{"id":"abc"} ## 3 控制通讯报文 ### ***3.1 点位设置*** 控制点位设置 **点位设置包** iot-collect-->iot-project | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | | ---- | ---- | -------- | ---- | ---- | ---- | ---- | ---- | | 字符 | 整数 | pointset | 空 | 整数 | 字符 | 整数 | 字符 | 示例 1101070037;1;pointset;20010203040506;123;1001;11;3.1 示例 1101070037;1;pointset;20010203040506;123;1001;11;[3.1,3.2,3.3] **应答包** iot-project --> iot-collect | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | 结束时间 | 状态 | | ---- | ---- | ----------- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | | 字符 | 整数 | pointsetack | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 | 示例 1101070037;1;pointsetack;20010203040506;123;1001;11;3.1;20010203040507;success ### 3.2 点位设置下发协议 控制点位下发 **下发包** iot-project --> iot-client | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | | ---- | ---- | ----------- | ---- | ---- | ---- | ---- | ---- | | 字符 | 整数 | senddownset | 空 | 整数 | 字符 | 整数 | 字符 | 示例 1101070037;1;senddownset;20010203040506;123;1001;11;3.1 示例 1101070037;1;senddownset;20010203040506;123;1001;11;[3.1,3.2,3.3] **应答包** iot-client -> iot-project | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | 结束时间 | 状态 | | ---- | ---- | -------------- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | | 字符 | 整数 | senddownsetack | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 | 示例 1101070037;1;senddownsetack;20010203040506;123;1001;11;3.1;20010203040507;success ### ***3.3 点位设置通知同步*** 直接通过iot-project进行的控制设定,通过点位设置通知同步到iot-collect,然后保存到数据库中; **点位设置包** iot-project --> iot-collect | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | 结束时间 | 状态 | | ---- | ---- | -------------- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | | 字符 | 整数 | reportpointset | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 | 示例 1101070037;1;reportpointset;20010203040506;123;1001;11;3.1;; 示例 1101070037;1;reportpointset;20010203040506;123;1001;11;3.1; 20010203040506;failure_point_not_exist **应答包** iot-collect --> iot-project | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | 结束时间 | 状态 | | ---- | ---- | ----------------- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | | 字符 | 整数 | reportpointsetack | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 | 示例 1101070037;1;reportpointsetack;20010203040506;123;1001;11;3.1; 20010203040506;failure_point_not_exist ## 4 作废报文 作废报文都是历史曾经设计支持过的,但是基于以下原因,以后不再支持的报文类型: - 该功能已经删除,pointupload - 该功能没有场景在继续使用,考虑作废, - 已有更好的提供方式,不再推荐使用的功能如presentset,presentreportack,pointupload,virtualpointset - 功能适用场景太有限,考虑不再支持,如pointread 作废的报文以后不再继续提供支持,也不再文档中做过多介绍; ### ***4.1 点位清单上传***(已作废) 点位清单包 采集器 -> 本网关 | 建筑 | 网关 | 类型 | 时间 | 序号 | 页容量 | 总页数 | 页编号 | 总条数 | 表号1 | 功能1 | 。。。 | | -------- | -------- | -------- | -------- | -------- | ---------- | ---------- | ---------- | ---------- | --------- | --------- | ---------- | | 字符 | 整数 | 字符 | 空 | 整数 | 整数 | 整数 | 整数 | 整数 | 字符 | 整数 | 。。。 | 示例 1101070037;1;pointupload;;123;50;5;5;2;1001;11;1001;12 应答包 | 建筑 | 网关 | 类型 | 时间 | 序号 | 页容量 | 总页数 | 页编号 | | -------- | -------- | -------- | -------- | -------- | ---------- | ---------- | ---------- | | 字符 | 整数 | 字符 | 空 | 整数 | 整数 | 整数 | 整数 | 示例 1101070037;1;pointuploadack;;123;50;5;5 ### ***4.2 点位读取***(已作废) 点位读取包 应用软件 -> 采集软件 | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | 字符 | 整数 | 字符 | 空 | 整数 | 字符 | 整数 | 示例 1101070037;1;pointread;;123;1001;11 应答包 | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 结束时间 | 状态 | 数据 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | ---- | | 字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 | 示例 1101070037;1;pointreadack;20010203040506;123;1001;11;20010203040507;success;3.1 1101070037;1;pointreadack;20010203040506;123;1001;11;20010203040507;failure_rrr ### **4.3 读取下发协议(已作废)** 下发包 采集软件 -> 采集器 | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | 字符 | 整数 | 字符 | 空 | 整数 | 字符 | 整数 | 示例 1101070037;1;senddownread;;123;1001;11 应答包 | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 结束时间 | 状态 | 数据 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | ---- | | 字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 | 示例 1101070037;1;senddownreadack;20010203040506;123;1001;11;20010203040507;success;3.1 1101070037;1;senddownreadack;20010203040506;123;1001;11;20010203040507;failure_rrr ### ***4.4 虚拟点位设置下发***(已作废) 点位设置包 上级程序->本网关 | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | 字符 | 整数 | 字符 | 空 | 整数 | 字符 | 整数 | 字符 | 示例 1101070037;0;virtualpointset;20010203040506;123;1001;11;3.1 应答包 | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | 字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符 | 示例 1101070037;0;virtualpointsetack;20010203040506;123;1001;11;3.1 ### ***4.5 查询当前上传值***(已作废) 点位读取包 上级程序 ->本网关 | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | 字符 | 整数 | 字符 | 空 | 整数 | 字符 | 整数 | 示例 1101070037;1;presentreport;20010203040506;123;1001;11 应答包 | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据时间 | 数据 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | | 字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 示例 1101070037;1;presentreportack;20010203040506;123;1001;11;20010203040506;3.1 ### ***4.6 查询当前设置值(已作废)*** 点位读取包 上级程序 ->本网关 | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | | 字符 | 整数 | 字符 | 空 | 整数 | 字符 | 整数 | 示例 1101070037;1;presentset;20010203040506;123;1001;11 应答包 | 建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据时间 | 数据 | 结束时间 | 状态 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -------- | ---- | -------- | ---- | | 字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 | 字符 | 示例 1101070037;1;presentsetack;20010203040506;123;1001;11;20010203040506;3.1; 20010203040506; failure_point_not_exist