message.md 15 KB

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