Skip to content

设备链接调试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
    }
}