设备链接调试TCP接入
TCP 帧结构
markdown
## TCP 帧结构
+--------+--------+--------+--------+--------+---------+---------+
| Magic | Ver | Type | Flags | Length | Payload | CRC16 |
+--------+--------+--------+--------+--------+---------+---------+
| 2Byte | 1Byte | 1Byte | 1Byte | 2Byte | N Byte | 2Byte |
+--------+--------+--------+--------+--------+---------+---------+
Magic 固定 0xAA55
Ver 协议版本 默认0x01
Type 帧类型
Flags 标志位 第一个比特位1:是否加密 第二个比特位1:是否下行(平台到设备)
Length Payload 长度
CRC16 CRC-16校验码 CRC初始值0 多项式0x18005
## Type 帧类型
0x01 登录包 设备 发起
0x02 心跳包 设备或平台 发起
0x03 指令包 平台 发起
0x04 定时上报包 设备发起
0x11 端口透传数据包 设备或平台 发起
0x13 端口透传会话控制 平台 发起
0x14 端口透传状态上报 设备 发起
## Flags 标志位
第一个比特位1: 是否加密Payload 登录包不加密 加密密钥索引,使用登录包密钥ID, 后续数据使用加密上报2进制数据
第一个比特位2: 是否下行(平台到设备)TCP登录包 Payload
设备请求
json
{
"id": 201, // 消息序号
"method": "login", // 登录包
"data":{
"projectKey":"asdfa234.adsff", // 项目key
"accessToken":"adsf.sdf", // 设备访问令牌 加密填写加密后的HEX字符串
"keyId":"" // 加密密钥索引 空字符串不加密
}
}平台响应
json
{
"id": 201, // 消息序号
"method": "login", // 登录包
"code":200 // 200 代表成功,默认值。非 200 代表失败。
}TCP心跳包 Payload
TCP定时上报包 Payload
设备请求
json
{
"id": 201, // 消息序号
"method": "report", // 上报
"data":{
"param1":"value1", // 数据1
}
}平台响应
json
{
"id": 201, // 消息序号
"method": "report", // 上报
"code":200 // 200 代表成功,默认值。非 200 代表失败。
}TCP 指令包 Payload
TCP重启指令
平台下发
json
{
"id": 201, // 消息序号
"method": "cmd", // 指令包
"data":{
"fun":"reboot", // 指令函数
"params":{ // 指令参数
}
}
}设备响应
json
{
"id": 201, // 消息序号
"method": "cmd", // 指令包
"code":200 // 200 代表成功,默认值。非 200 代表失败。
"data":{
"fun":"reboot", // 指令函数
"params":{ // 响应参数
}
}
}TCP控制台下发数据
平台下发
json
{
"id": 201, // 消息序号
"method": "cmd", // 指令包
"data":{
"fun":"ctrl", // 指令函数
"params":{ // 指令参数
"in":"" // 输入文本 hex编码
}
}
}设备响应
json
{
"id": 201, // 消息序号
"method": "cmd", // 指令包
"code":200 // 200 代表成功,默认值。非 200 代表失败。
"data":{
"fun":"ctrl", // 指令函数
"params":{ // 响应参数
"out":"" // 输出文本 hex编码
}
}
}TCP修改参数
平台下发
json
{
"id": 201, // 消息序号
"method": "cmd", // 指令包
"data":{
"fun":"set", // 指令函数
"params":{ // 指令参数
"param1":"value1", // 参数1
"param2":"value2", // 参数1
}
}
}设备响应
json
{
"id": 201, // 消息序号
"method": "cmd", // 指令包
"code":200 // 200 代表成功,默认值。非 200 代表失败。
"data":{
"fun":"set", // 指令函数
"params":{ // 响应参数
}
}
}TCP查询参数
平台下发
json
{
"id": 201, // 消息序号
"method": "cmd", // 指令包
"data":{
"fun":"get", // 指令函数
"params":{ // 指令参数
"key":"param1,param2,param3", // 参数列表 英文逗号分隔
}
}
}设备响应
json
{
"id": 201, // 消息序号
"method": "cmd", // 指令包
"code":200 // 200 代表成功,默认值。非 200 代表失败。
"data":{
"fun":"get", // 指令函数
"params":{ // 响应参数
"param1":"value1", // 参数1
"param2":"value2", // 参数1
}
}
}TCP端口透传相关包
TCP端口透传数据包
平台或设备发起
markdown
+------------+------------+------------+
| token | tunnelId | raw_data |
+------------+------------+------------+
| 8 bytes | 4 bytes | raw_data |
+------------+------------+------------+
token 端口透传会话ID 8个字节字符
tunnelId 串口透传忽略,TCP端口转发需要填写(多路复用),TCP链接ID 4个字节,大端字节序,
rawData 原始数据TCP端口透传会话控制
平台下发,设备回复
json
// 平台接收新tcp链接, 平台下发
{
"id": 2,
"method":"platform_tcp_create",
"data":{
"token":"token_001",
"tunnelId":1, // 平台端链路ID
"tcpRemoteHost":"192.168.2.33", // 设备端tcp透传远程地址
"tcpRemotePort":80, // 设备端tcp透传远程地址
}
}
// 平台接收新tcp链接, 设备回复
{
"id":22,
"method":"platform_tcp_create",
"code":200, // 200 代表成功,默认值。非 200 代表失败。
"data":{
"token":"token_001",
"tunnelId":1, // 平台端链路ID
}
}
// 平台接收tcp链接关闭, 平台下发
{
"id": 2,
"method":"platform_tcp_close",
"data":{
"token":"token_001",
"tunnelId":1
}
}
// 平台接收tcp链接关闭, 设备回复
{
"id":2,
"method":"platform_tcp_close",
"code":200, // 200 代表成功,默认值。非 200 代表失败。
"data":{
"token":"token_001",
"tunnelId":1
}
}
// 平台接收新串口透传, 平台下发
{
"id": 2,
"method":"platform_serial_create",
"data":{
"token":"token_001",
"tunnelId":1, // 平台端链路ID
"serialPort":"/dev/serial01",// 串口透传串口地址 COM1
"serialBaud":9600, // 串口透传波特率
"serialDataBits":8 // 串口透传数据位 5,6,7,8
"serialStopBits":0, // 串口透传停止位 1,2
"serialParity":0, // 串口透传校验位0:NONE无校验,1:ODD奇校验,2:EVEN偶校验
}
}
// 平台接收新串口透传, 设备回复
{
"id":2,
"method":"platform_serial_create",
"code":200, // 200 代表成功,默认值。非 200 代表失败。
"data":{
"token":"token_001",
"tunnelId":1, // 平台端链路ID
"serialPort":"/dev/serial01",// 串口透传串口地址 COM1
"serialBaud":9600, // 串口透传波特率
"serialDataBits":8 // 串口透传数据位 5,6,7,8
"serialStopBits":0, // 串口透传停止位 1,2
"serialParity":0, // 串口透传校验位0:NONE无校验,1:ODD奇校验,2:EVEN偶校验
}
}
// 平台接收关闭串口透传, 平台下发
{
"id": 2,
"method":"platform_serial_close",
"data":{
"token":"token_001",
"tunnelId":1, // 平台端链路ID
}
}
// 平台接收关闭串口透传, 设备回复
{
"id":2,
"method":"platform_serial_close",
"code":200, // 200 代表成功,默认值。非 200 代表失败。
"data":{
"token":"token_001",
"tunnelId":1, // 平台端链路ID
}
}
// 平台查询链路列表, 平台下发
{
"id": 2,
"method":"platform_query_tunnel",
"data":{
"token":"token_001",
}
}
// 平台查询链路列表, 设备回复
{
"id":2,
"method":"platform_query_tunnel",
"code":200, // 200 代表成功,默认值。非 200 代表失败。
"data":{
"token":"token_001",
"tunnelIds":[1] // 平台端链路ID列表
}
}TCP端口透传状态上报
设备上报,平台回复
json
// 设备上报关闭tcp透传, 设备上报
{
"id": 2,
"method":"device_tcp_close",
"data":{
"token":"token_001",
"tunnelId":1, // 平台端链路ID
"msg":"tcp lost" // 设备端端口原因
}
}
// 设备上报关闭tcp透传, 平台回复
{
"id":2,
"method":"device_tcp_close",
"code":200, // 200 代表成功,默认值。非 200 代表失败。
"data":{
"token":"token_001",
"tunnelId":1, // 平台端链路ID
}
}
// 设备上报关闭串口透传, 设备上报
{
"id": 2,
"method":"device_serial_close",
"data":{
"token":"token_001",
"tunnelId":1, // 平台端链路ID
"msg":"tcp lost" // 设备端端口原因
}
}
// 设备上报关闭串口透传, 平台回复
{
"id":2,
"method":"device_serial_close",
"code":200, // 200 代表成功,默认值。非 200 代表失败。
"data":{
"token":"token_001",
"tunnelId":1, // 平台端链路ID
}
}