MineCC 前后端接口 - 版本1

接口消息格式

MineCC 前后端接口 顾名思义 就是 前端界面 和 后端服务系统 之间的 通讯接口。


前后端之间 是TCP 长连接。后端 是服务端,前端是客户端


每个消息以 字节 04 (ASCII码 EOT end of transmission)作为结束符,也就是消息边界

消息体内容是JSON格式的编码。

目前消息内容字符都是ascii范围之内的。

如果消息中有中文字符,编码时,采用unicode escape, 防止消息中出现 04字节,搞乱边界


消息格式示例如下,为消息头加消息体,以 字符$ 作为分隔符

BF01|notify-to-frontend|0|1695691644857589${"device-sn":"aaaa0002","humidity":51.85,"temperature":25.56}

消息头

消息头存放消息类型,以 $ 结束

消息头中内容以 | 分隔,依次为 协议版本、消息类型、是否重发消息、消息编号

协议版本

当前协议版本为1, 表示为 BF01

消息类型

描述当前消息的类型,比如

后端通知前端消息:        notify-to-frontend
设备控制消息:           device_control

在项目实战练习说明中,会有各个消息的含义说明

是否重发消息

表示该消息是首次发送还是重发的消息

0 为正常消息, 1 为重发消息

消息编号

用一个无符号整数,作为消息的编号,用来标记消息。

响应消息必须和请求消息使用同一编号


消息编号要保证唯一


消息的编号方式推荐格式: 当前时间戳unix时间(到微秒), 比如,1670243387.279147

业务消息如果需要响应,并且超时,必须重发,重发消息的 编号 和前面的消息一致,并且重发消息头标记。

当接收方发现是重发消息时,应该检验消息体内的业务序列号,确定是否已经处理过。

消息体

消息头后面是消息体,是json的对象格式

比如

{"device-sn":"aaaa0002","humidity":51.85,"temperature":25.56}

这是气温气压计的数据上报消息 的 消息体 内容。

每个字段的含义如下

device-sn : 设备编号

humidity : 空气湿度值

temperature : 空气摄氏温度值

系统数据

目前系统中 模拟接入了如下设备

设备类型: 毒气监测仪
设备编号: aaaa0001

设备类型: 温度湿度计
设备编号: aaaa0002

设备类型: 空气流量仪
设备编号: aaaa0003

设备类型: 水流量表
设备编号: aaaa0004

设备类型: 饮用水箱
设备编号: aaaa0005

设备类型: 摄像头
设备编号: aaaa0006


设备类型: 毒气监测仪
设备编号: aaaa0021

设备类型: 温度湿度计
设备编号: aaaa0022

设备类型: 空气流量仪
设备编号: aaaa0023

设备类型: 水流量表
设备编号: aaaa0024

设备类型: 饮用水箱
设备编号: aaaa0025

设备类型: 摄像头
设备编号: aaaa0026