版本说明
版本 | 日期 | 变更内容 | 备注 |
---|---|---|---|
1.0 | |||
1.1 | 2022年2月16日 | 1.增加数据上传有效时间的说明2.通过有效时间判断数据的在离线 | 编写:罗广毅 审核:韩艳辉 |
本协议使用范围是Iot-project,Iot-client,iot-collect 3个服务的通讯数据的规范,为了有效使用本协议建议首先了解TCP和UDP的基础通讯方式。
所有报文同时支持TCP和UDP报文方式,并且使用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示例 (1101070037;1;connect)
UDP示例 1101070037;1;connect
IBMS业务: iot-client<--->iot-project<--->iot-collect
资管业务: iot-client<--->iot-collect
有控制业务必须有iot-project服务,没有控制业务的可以省略iot-project服务;
时间格式统一采用yyyyMMddHHmmss;
历史原因,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推送数据等。 | |
心跳类的报文有3种类,connect/heart/buildingheart。
connect和heart等价,无本质上区别,作为iot-client与 北向服务心跳报文;
connect包目前默认5分钟1次,heart包1分钟1次;
心跳包作用:
buildingheart是iot-project和iot-collect服务的心跳报文,作为云端控制指令的下发使用,判断被控制信息点的项目是否存在的,控制指令会下发到对应项目的iot-project,一个项目只能部署一份iot-project;
Iot-client向Iot-project或Iot-collect通过TCP或UDP的主动发起的。
连接包 iot-client --> iot-project/iot-collect
建筑 | 网关 | 类型 |
---|---|---|
字符 | 整数 | connect |
示例 1101070037;1;connect
应答包 iot-project/iot-collect -> iot-client
建筑 | 网关 | 类型 | 时间 |
---|---|---|---|
字符 | 整数 | connectack | 时间 |
示例 1101070037;1;connectack;20010203040506
Iot-client定时向iot-project/collect发送客户端的存活信息,iot-project/collect如果代表回应说明服务端收到了客户端的信息,心跳周期没有严格定义,根据项目可随便改。
心跳包 iot-client --> iot-project/iot-collect
建筑 | 网关 | 类型 |
---|---|---|
字符 | 整数 | heart |
示例 1101070037;1;heart
应答包 iot-project/iot-collect --> iot-client
建筑 | 网关 | 类型 | 时间 |
---|---|---|---|
字符 | 整数 | heartack | 时间 |
示例 1101070037;1;heartack;20010203040506
此心跳是Iot-project到Iot-collect的心跳,如果做开发iot-client可忽略。
项目心跳包 iot-project -> iot-collect
建筑 | 网关 | 类型 |
---|---|---|
字符 | 整数 | buildingheart |
示例 1101070037;0;buildingheart
应答包 iot-collect --> iot-project
建筑 | 网关 | 类型 | 时间 |
---|---|---|---|
字符 | 整数 | buildingheartack | 时间 |
示例 1101070037;0;buildingheartack;20211227110548
控制使用点位清单,判断点位离线使用点位有效期
数据有效期全部为秒,有效期为负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 | 时间 | 整数 | 整数 | 整数 | 整数 | 整数 | 整数 | 字符 | 整数 | 。。。 |
UDP示例 1101070037;1;pointValidity;20010203040506;600;123;123;50;55;2;1001;11;1001;12
TCP示例 (1101070037;1;pointValidity;20010203040506;600;123;123;50;55;2;1001;11;1001;12)
应答包 iot-project --> iot-client
建筑 | 网关 | 类型 | 时间 | 有效期(秒) | 序号 | 页容量 | 总页数 | 页编号 | 总条数 | 表号1 | 功能1 | 。。。 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
字符 | 整数 | pointValidityAck | 时间 | 整数 | 整数 | 整数 | 整数 | 整数 | 整数 | 字符 | 整数 | 。。。 |
UDP示例 1101070037;1;pointValidityAck;20010203040506;600;123;123;50;55;2;1001;11;1001;12
TCP示例 (1101070037;1;pointValidityAck;20010203040506;600;123;123;50;55;2;1001;11;1001;12)
数值类型的iot数据上报采用
数据上报包 iot-client -> iot-project-->iot-collect
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 数量 | 功能号1 | 数据1 | 功能号2 | 数据2 | 。。。 |
---|---|---|---|---|---|---|---|---|---|---|---|
字符 | 整数 | report | 时间 | 整数 | 字符 | 整数 | 整数 | 字符 | 整数 | 字符 | 。。。 |
UDP示例 1101070037;1;report;20010203040506;123;1001;2;11;3.1;12;3.2
TCP示例 (1101070037;1;report;20010203040506;123;1001;2;11;3.1;12;3.2)
应答包 iot-collect -> iot-project --> iot-client
建筑 | 网关 | 类型 | 时间 | 序号 |
---|---|---|---|---|
字符 | 整数 | reportack | 空 | 整数 |
UDP示例 1101070037;1;reportack;;123
TCP示例 (1101070037;1;reportack;;123)
数据上传包可以一次传多个,分隔符使用&
文本类型的iot数据上报采用
数据上报包 iot-client -> iot-project-->iot-collect
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 数量 | 功能号1 | 数据1 | 。。。 |
---|---|---|---|---|---|---|---|---|---|
字符 | 整数 | text | 时间 | 整数 | 字符 | 整数 | 整数 | 字符 | 。。。 |
UDP示例 1101070037;1;text;20010203040506;123;1001;2;11;hello;12;world
TCP示例 (1101070037;1;text;20010203040506;123;1001;2;11;hello;12;world)
应答包 iot-collect -> iot-project --> iot-client
建筑 | 网关 | 类型 | 时间 | 序号 |
---|---|---|---|---|
字符 | textack | 字符 | 空 | 整数 |
UDP示例 1101070037;1;textack;;123
TCP示例 (1101070037;1;textack;;123)
数据上传包可以一次传多个,分隔符使用&;
事件消息类型的iot数据上报采用,没有表号和功能号
香港置地火警使用过,目前应该已经没有使用场景了;时间类型的数据不具有表号-功能号标识,无法映射到物理世界物模型.
数据上报包 iot-client -> iot-project-->iot-collect
建筑 | 网关 | 类型 | 时间 | 序号 | 消息类型 | 消息内容 |
---|---|---|---|---|---|---|
字符 | 整数 | happening | 时间 | 整数 | 字符 | 字符 |
UDP示例 1101070037;1;happening;20010203040506;123;firealarm;{"id":"abc"}
TCP示例 (1101070037;1;happening;20010203040506;123;firealarm;{"id":"abc"})
应答包
建筑 | 网关 | 类型 | 时间 | 序号 |
---|---|---|---|---|
字符 | 整数 | happeningack | 空 | 整数 |
UDP示例 1101070037;1;happeningack;20010203040506;123;firealarm;{"id":"abc"}
iot-collect-->iot-project 控制下发的指令格式
点位设置包 iot-collect-->iot-project
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 |
---|---|---|---|---|---|---|---|
字符 | 整数 | pointset | 空 | 整数 | 字符 | 整数 | 字符 |
UDP示例 1101070037;1;pointset;20010203040506;123;1001;11;3.1
TCP示例 (1101070037;1;pointset;20010203040506;123;1001;11;3.1)
UDP示例 1101070037;1;pointset;20010203040506;123;1001;11;[3.1,3.2,3.3]
应答包 iot-project --> iot-collect
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | 结束时间 | 状态 |
---|---|---|---|---|---|---|---|---|---|
字符 | 整数 | pointsetack | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 |
UDP示例 1101070037;1;pointsetack;20010203040506;123;1001;11;3.1;20010203040507;success
TCP示例 (1101070037;1;pointsetack;20010203040506;123;1001;11;3.1;20010203040507;success)
ot-project --> iot-client 控制下发的指令格式
下发包 iot-project --> iot-client
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 |
---|---|---|---|---|---|---|---|
字符 | 整数 | senddownset | 空 | 整数 | 字符 | 整数 | 字符 |
UDP示例 1101070037;1;senddownset;20010203040506;123;1001;11;3.1
TCP示例 (1101070037;1;senddownset;20010203040506;123;1001;11;3.1)
UDP示例 1101070037;1;senddownset;20010203040506;123;1001;11;[3.1,3.2,3.3]
应答包 iot-client -> iot-project
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | 结束时间 | 状态 |
---|---|---|---|---|---|---|---|---|---|
字符 | 整数 | senddownsetack | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 |
UDP示例
1101070037;1;senddownsetack;20010203040506;123;1001;11;3.1;20010203040507;success
TCP示例 (1101070037;1;senddownsetack;20010203040506;123;1001;11;3.1;20010203040507;success)
直接通过iot-project进行的控制设定,通过点位设置通知同步到iot-collect,然后保存到数据库中;
点位设置包 iot-project --> iot-collect
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | 结束时间 | 状态 |
---|---|---|---|---|---|---|---|---|---|
字符 | 整数 | reportpointset | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 |
UDP示例 1101070037;1;reportpointset;20010203040506;123;1001;11;3.1;;
UDP示例 1101070037;1;reportpointset;20010203040506;123;1001;11;3.1; 20010203040506;failure_point_not_exist
TCP示例 (1101070037;1;reportpointset;20010203040506;123;1001;11;3.1; 20010203040506;failure_point_not_exist)
应答包 iot-collect --> iot-project
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 | 结束时间 | 状态 |
---|---|---|---|---|---|---|---|---|---|
字符 | 整数 | reportpointsetack | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 |
UDP示例 1101070037;1;reportpointsetack;20010203040506;123;1001;11;3.1; 20010203040506;failure_point_not_exist
TCP示例 (1101070037;1;reportpointsetack;20010203040506;123;1001;11;3.1; 20010203040506;failure_point_not_exist)
作废报文都是历史曾经设计支持过的,但是基于以下原因,以后不再支持的报文类型:
作废的报文以后不再继续提供支持,也不再文档中做过多介绍;
点位清单包 采集器 -> 本网关
建筑 | 网关 | 类型 | 时间 | 序号 | 页容量 | 总页数 | 页编号 | 总条数 | 表号1 | 功能1 | 。。。 |
---|---|---|---|---|---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 空 | 整数 | 整数 | 整数 | 整数 | 整数 | 字符 | 整数 | 。。。 |
UDP示例 1101070037;1;pointupload;;123;50;5;5;2;1001;11;1001;12
应答包
建筑 | 网关 | 类型 | 时间 | 序号 | 页容量 | 总页数 | 页编号 |
---|---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 空 | 整数 | 整数 | 整数 | 整数 |
UDP示例 1101070037;1;pointuploadack;;123;50;5;5
点位读取包 应用软件 -> 采集软件
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 |
---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 空 | 整数 | 字符 | 整数 |
UDP示例 1101070037;1;pointread;;123;1001;11
应答包
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 结束时间 | 状态 | 数据 |
---|---|---|---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 |
UDP示例
1101070037;1;pointreadack;20010203040506;123;1001;11;20010203040507;success;3.1
1101070037;1;pointreadack;20010203040506;123;1001;11;20010203040507;failure_rrr
下发包 采集软件 -> 采集器
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 |
---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 空 | 整数 | 字符 | 整数 |
UDP示例 1101070037;1;senddownread;;123;1001;11
应答包
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 结束时间 | 状态 | 数据 |
---|---|---|---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 |
UDP示例
1101070037;1;senddownreadack;20010203040506;123;1001;11;20010203040507;success;3.1
1101070037;1;senddownreadack;20010203040506;123;1001;11;20010203040507;failure_rrr
点位设置包 上级程序->本网关
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 |
---|---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 空 | 整数 | 字符 | 整数 | 字符 |
UDP示例 1101070037;0;virtualpointset;20010203040506;123;1001;11;3.1
应答包
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据 |
---|---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符 |
UDP示例 1101070037;0;virtualpointsetack;20010203040506;123;1001;11;3.1
点位读取包 上级程序 ->本网关
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 |
---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 空 | 整数 | 字符 | 整数 |
UDP示例 1101070037;1;presentreport;20010203040506;123;1001;11
应答包
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据时间 | 数据 |
---|---|---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 |
UDP示例 1101070037;1;presentreportack;20010203040506;123;1001;11;20010203040506;3.1
点位读取包 上级程序 ->本网关
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 |
---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 空 | 整数 | 字符 | 整数 |
UDP示例 1101070037;1;presentset;20010203040506;123;1001;11
应答包
建筑 | 网关 | 类型 | 时间 | 序号 | 表号 | 功能 | 数据时间 | 数据 | 结束时间 | 状态 |
---|---|---|---|---|---|---|---|---|---|---|
字符 | 整数 | 字符 | 时间 | 整数 | 字符 | 整数 | 字符 | 字符 | 字符 | 字符 |
UDP示例 1101070037;1;presentsetack;20010203040506;123;1001;11;20010203040506;3.1; 20010203040506; failure_point_not_exist