农业大屏通讯文档

来自东骏科技波塞冬平台开发者文档
跳转至: 导航搜索

描述

规约

本文档所述的协议是用以东骏科技有限公司物联网服务平台和慢充设备的数据交互。

客服(技术)联系方式

杭州东骏科技有限公司

电话:0571-87017551

手机:13082852087

兼容性

仅适用于授权设备。

词汇表

端口:充电时使用的接口,设备可以单独控制的电力输出结构。

端口编号:端口的程序代码,和设备编号共用用以表示端口在系统中的唯一值。端口编号必须以数字顺序编码,每台机器端口编号不得跳跃,不得重用。

响应类型:上报服务端的数据响应类型。分为即时响应上报和设备主动上报。

会话ID: 由服务端生成,用以区分不同的命令数据链。

网络通讯协议

本章节内容定义通讯模块和服务器之间的通讯协议。

通讯方式

  1. 数据上报:string字符串
  2. 指令数据:定长报文
  3. 通讯网络协议:TCP

关于粘包

由于服务器操作系统在处理TCP通讯时,将数据包转换成流传输给应用层,在数据频率高或者并发高的情况下很容易出现粘包,单片机受内存限制将不处理粘包,所以服务器在发送数据的时候需要注意的是尽量不要以特别高的频率向单片机发送数据,单片机如果接收到数据有粘包则只能处理前面一包的数据,后面的数据将会被丢弃,服务器可以通过重发机制避免粘包对业务产生影响,同时在很偶尔的情况下服务器发送数据可能出现分包(虽然现在大部分服务器发送慢充这样的数据不会出现分包),如果大量出现分包,请调整服务器网络参数设置,如果同一条数据被分包发送间隔大于2s将被单片机将在接收到后面的数据之前就认为前面的数据是非法的。同时因为服务器内存资源充足,建议服务器尽量对接收数据进行粘包处理。

协议结构

命令结构

定义:服务器发送,通讯模块接收的数据报文。

1 2 3 4 5 6 7

1:开始标识(1byte) “_”

2:报文长度(3byte)(ASCII数字)

3:命令(3byte)(英文大写,第一字节A为保留字段)

4:会话ID(6byte)(每一字节0x00-0x3D之间数字+偏移量0x31,当然如果使用A-Za-z0-9就一定再这个范围之内了,也就满足要求了),每次不同的通讯的会话ID都需要不一样(服务器发起的通讯至少连续的20次通讯不一样,除了特殊说明以外,当然我们的建议还是让每次通讯的会话ID尽可能的不一样),通常设备会在获取到服务器指令执行以后需要回复结果的会返回相同的会话ID给服务器,服务端可以通过会话ID获得设备当前回应的数据是哪一个会话的。同一个会话ID设备会认为是同一次通讯的重复发送,如果设备已经处理了相关的指令,就会丢弃之后相同会话ID的指令。设备由于内存限制,比对的会话ID是之前10次通讯的会话ID,为了可靠期间服务端只要保证连续的20次服务器发起的通讯会话ID不一致就可以了确保设备不会触发丢弃操作而影响指令的执行。另外如果有些命令服务器为了使设备一定收到,但设备只需要执行一次的,这样的命令多次发送用同一会话ID发送就可以了

5:分隔符(1byte) “/”

6:参数(如果没有参数则没有该部分)

7:结束标识(2byte) (0x0D 0x0A)

响应结构

定义:通讯模块发送,服务器接收的报文。

1 2 3 4 5 6 7

1:开始标识(1byte) “_”

2:响应类型(2byte) PG-ping,DV-设备号(IMEI),ID-SIM卡ICCID号,CM-客户端命令,RP-数据上报,RS-命令响应, RJ-Json数据上报

3:命令(3byte)(大写英文,回传服务器请求的命令,如果没有服务器请求则为AAA)

4:会话ID(6byte)(无服务器会话ID则返回”000000”,文档中指令的会话ID有特殊定义的,已定义为准)

5:内容长度(3byte)(ASCII数字)6的长度

6:内容(内容长度可以为空)

7:结束标识(2byte) (0x0D 0x0A)

命令限制

  1. ADV(设备号IMEI号) AID(SIM卡ICCID号) AXT(心跳) AAA(空指令) 为系统内置命令不能用于其他接口
  2. 业务级别的接口命令不得用 A 开头

业务协议

气象站数据上报

上报气象站数据

发送方 通信模块
说明 当气象站启用状态并且地址合法时, 定时获取气象数据, 整合后全量上报, 每1分钟上报一次
开始标志 1byte,“_”
响应类型 2byte,RP
命令 3byte,QXD
会话ID 6byte,A12007
内容长度

温度#/#湿度#/#风向#/#瞬时风速#/#上电后最大风速#/#瞬时雨量#/#累计雨量#/#紫外线#/#光照度#/#大气压

温度: 分辨率0.1℃, 偏移+40℃, 例如360(/10)->36(-40)->-4.0℃

湿度: 分辨率0.1%RH, 例如300(/10)->30.0%RH

风向: 分辨率1°, 正北向为0°, 例如90->东

瞬时风速: 分辨率0.1m/s, 当前16s内的平均风速, 例如10->1m/s

最大风速: 分辨率0.1m/s, 从上次上电开始的历史最大值(掉电清除), 例如20->2m/s

瞬时雨量(降雨强度): 分辨率0.1mm/min, 例如100->降雨量每分钟10毫米

累计雨量: 分辨率0.1mm/min, 一直累计到49999后清0, 推荐拿到第一次的值后作为基础值, 后续算差值并重新累计数据

紫外线: 分辨率1uw/cm²

光照度: 分辨率0.1lux, 例如3000->300lux

大气压: 分辨率1帕

为保证精度, 上述数值转化后尽量按小数处理

结束标志 2byte,\r\n(0x0D 0x0A)

土壤数据上报

下位机主动上报

发送方 通信模块
说明 当土壤信息整合后, 每1分钟上报一次
开始标志 1byte,“_”
响应类型 2byte,RP
命令 3byte,STR
会话ID 6byte,A12008
内容长度

土壤EC值#/#土壤PH值#/#土壤湿度#/#土壤温度

土壤EC值: 分辨率1us/cm, 数值范围=0~10000

土壤PH值: 分辨率0.01, 数值范围=0.00-14.00

土壤湿度: 分辨率0.01%, 数值范围=0.0-100.0

土壤温度: 分辨率0.01℃, 数值范围=-40-80℃

结束标志 2byte,\r\n(0x0D 0x0A)

水质数据上报

主动上报数据

发送方 通信模块
说明 当土壤信息整合后, 每1分钟上报一次
开始标志 1byte,“_”
响应类型 2byte,RP
命令 3byte,CSZ
会话ID 6byte,A12009
内容长度

水质EC值#/#液位值#/#溶解氧

水质EC值: 分辨率0.01μS/cm, 数值范围=0~20000.00μS/cm

液位值: 分辨率0.01, 数值范围=0.00~20.00m

溶解氧: 分辨率0.01, 数值范围=0.00~20.00mg/L

结束标志 2byte,\r\n(0x0D 0x0A)

气象站风向较准

下发风向较准指令

发送方 服务端
说明 首次安装或移位后必须要校准零点,

风向标指向正北方稳定3s后平台下发该指令,

校准后推荐再次下发读取风向指令查看风向是否在0°左右, 正北误差不超过5°

开始标志 1byte,“_”
命令 3byte,QXC
会话ID 6byte,服务器生成
内容长度
结束标志 2byte,\r\n(0x0D 0x0A)

风向较准响应

发送方 通信模块
说明 校准指令下发后做出响应, 注意该响应不代表校准执行成功只表示说指令收到了,

后续最好再次下发读取风向指令查看风向是否在0°左右, 正北误差不超过5°

开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,QXC
会话ID 6byte,服务器生成
内容长度 0-失败,1-成功
结束标志 2byte,\r\n(0x0D 0x0A)

平台主动查询气象站数据

查询指令

发送方 服务端
说明 当需要立即获取最新的气象数据时, 可以下发即时查询
开始标志 1byte,“_”
命令 3byte,QXE
会话ID 6byte,服务器生成
内容长度
结束标志 2byte,\r\n(0x0D 0x0A)

响应气象站数据

发送方 通信模块
说明 响应实时全量气象数据
开始标志 1byte,“_”
响应类型 2byte,RS
命令 3byte,QXE
会话ID 6byte,服务器生成
内容长度

温度#/#湿度#/#风向#/#瞬时风速#/#上电后最大风速#/#瞬时雨量#/#累计雨量#/#紫外线#/#光照度#/#大气压

温度: 分辨率0.1℃, 偏移+40℃, 例如360(/10)->36(-40)->-4.0℃

湿度: 分辨率0.1%RH, 例如300(/10)->30.0%RH

风向: 分辨率1°, 正北向为0°, 例如90->东

瞬时风速: 分辨率0.1m/s, 当前16s内的平均风速, 例如10->1m/s

最大风速: 分辨率0.1m/s, 从上次上电开始的历史最大值(掉电清除), 例如20->2m/s

瞬时雨量(降雨强度): 分辨率0.1mm/min, 例如100->降雨量每分钟10毫米

累计雨量: 分辨率0.1mm/min, 一直累计到49999后清0, 推荐拿到第一次的值后作为基础值, 后续算差值并重新累计数据

紫外线: 分辨率1uw/cm²

光照度: 分辨率0.1lux, 例如3000->300lux

大气压: 分辨率1帕

为保证精度, 上述数值转化后尽量按小数处理

结束标志 2byte,\r\n(0x0D 0x0A)