21 KiB
修订历史
Version | Date | Author | Change expression |
---|---|---|---|
1.0 | 2021-11-25 | 陈驰 | 初始版本 |
概述
本文档主要内容包括:
- 与云端通信的报文格式
- 所有命令模式的指令报文格式:设置参数、查询参数
- dtu_config.json配置文件字段的详细说明
数据格式
DTU与云端通信报文使用json格式
- 云端下行报文
命令模式与modbus模式:
{“msg_id”: msg_id, “data”: “1234”[, “cmd_code”: 0X40, “topic_id”: 1]}
透传模式:
{“msg_id”: msg_id, “data”: “1234”}
字段说明:
msg_id:报文id,一般为时间戳+3位随机数
data:报文消息字段
cmd_code:可选字段,填写对应功能码,并又DTU执行相应的操作,此字段仅在命令模式下生效
topic_id:可选字段,填写mqtt返回需要publish的topic_id,此字段仅在命令模式与使用MQTT/Aliyun/Txyun时生效
- 云端上行报文
命令模式与modbus模式:
{“msg_id”: msg_id, “data”: “1234”[, “cmd_code”: 0X40, “status”: 1]}
透传模式:
{“msg_id”: msg_id, “data”: “1234”}
字段说明:
msg_id:报文id,一般为时间戳+3位随机数,回复报文会使用相同的msg_id
data:报文消息字段
cmd_code:可选字段,填写对应功能码,并又DTU执行相应的操作,此字段仅在命令模式下生效
status:可选字段,仅在命令模式下生效,用于反馈命令是否执行成功
指令说明
协议功能码说明:
1 .查询DTU ,复位DTU,设置参数,数据透传的功能码和返回数据的功能码一致
2.返回数据的状态码可查询对应的状态码表
功能码表
功能码 | 功能 |
---|---|
0x00-0x3f | 查询指令 |
0x00 | 查询IMEI |
0x01 | 查询本机号码 |
0x02 | 查询固件版本号 |
0x03 | 查询信号强度 |
0x04 | 查询当前配置参数 |
0x05 | 诊断查询 |
0X06 | 查询ICCID |
0X07 | 查询ADC电压 |
0X08 | 查询GPIO信息 |
0X10 | 查询温湿度 |
0X11 | 查询网络连接信息 |
0X12 | 查询网络状态 |
0X13 | 查询基站定位信息 |
0x50~0x8f | 设置指令 |
0x50 | 协议短信透传 |
0x51 | 配置密码 |
0x52 | 添加设备识别码IMEI |
0x53 | 登录服务器发送注册信息 |
0x54 | 固件版本号 |
0x55 | 是否启用自动更新 |
0x56 | 日志输出 |
0x57 | 服务器获取配置参数 |
0x58 | 串口参数 |
0x59 | 通道配置参数 |
0x60 | Apn设置 |
0x61 | GPIO设置 |
0x62 | GPS |
0x63 | 数据流 |
0x64 | 预警 |
0x65 | 任务 |
0xfd | 协议终止指令 |
0xfe | DTU启动中,无法接收指令 |
0xff | 复位指令 |
查询指令
查询IMEI
说明:
DTU的IMEI号
功能码: 0x00
返回的数据内容:
{"code": 0x00 , "data": "123456789012345" , "success":1}
字段说明:
字段 | 类型 | 含义 |
---|---|---|
code | str | 状态码(如果查询IMEI失败,可查询状态码表来定位具体错误信息) |
data | str | 返回IMEI |
success | int | 0 失败 1成功 |
查询本机号码
说明:
查询SIM卡的号码
功能码: 0x01
返回的数据内容:
{"code": 0x01 , "data": "17201593988" , "success":1}
字段 | 类型 | 含义 |
---|---|---|
code | Str | 状态码 |
data | str | SIM卡的手机号码 |
success | int | 0 失败 1成功 |
查询固件版本号
说明:
查询当前的固件版本号(当开启fota升级,版本号小于服务器端的固件版本号会进行fota升级)
固件版本号格式为: v 1
功能码: 0x02
返回的数据内容:
{"code": 0x02 , "data": "v 1" , "success":1}
字段 | 类型 | 含义 |
---|---|---|
code | str | 状态码 |
data | str | 固件版本号 |
success | int | 0 失败 1成功 |
查询信号强度
说明:
网络信号强度值范围0~31,值越大表示信号强度越好。
功能码: 0x03
返回的数据内容:
{"code": 0x03 , "data": " CSQ17 " , "success":1}
字段 | 字符串 | 含义 |
---|---|---|
code | str | 状态码 |
data | str | CSQ1~CSQ31 |
success | int | 0 失败 1成功 |
查询当前配置参数
功能码: 0x04
数据内容:
{ "password": "012345",
"data":{}
}
返回的数据内容:
{"code": 0x04 , "data": " req config " , "success":1}
字段 | 字符串 | 含义 |
---|---|---|
code | Str | 状态码 |
data | str | req config |
success | int | 0 失败 1成功 |
诊断查询
说明: 查询当前DTU运行的错误上报信息
功能码: 0x05
返回的数据内容:
{"code":0x05,
"data":[{"func_code": "0x01" , "error_code": " 6001"}],
"success":1}
字段 | 类型 | 含义 |
---|---|---|
code | str | 状态码 |
func_code | str | 功能码 |
error_code | str | 错误码 |
success | int | 0 失败 1成功 |
iccid查询
说明: 查询iccid
功能码: 0x06
返回的数据内容:
{"code":0x06,
"data": "12456465486561516515153",
"status":1}
字段 | 类型 | 含义 |
---|---|---|
code | int | 状态码 |
data | str | 功能码 |
status | str | 0 失败 1成功 |
adc查询
说明: 查询adc
功能码: 0x07
返回的数据内容:
{"code":0x07,
"data": "3.7",
"status":1}`
字段 | 类型 | 含义 |
---|---|---|
code | int | 状态码 |
data | str | adc电压 |
status | str | 0 失败 1成功 |
gpio查询
说明: 查询gpio
功能码: 0x08
返回的数据内容:
{"code":0x08,
"data": "gpio_msg",
"status":1}
字段 | 类型 | 含义 |
---|---|---|
code | int | 状态码 |
data | str | gpio获取的信息 |
status | str | 0 失败 1成功 |
查询温湿度
说明: 查询温湿度
功能码: 0x010
返回的数据内容:
{"code":0x10,
"data": {"temperature": 26.0, "humidity": 60.0},
"status":1}
字段 | 类型 | 含义 |
---|---|---|
code | int | 状态码 |
data | dict | 温湿度信息{"temperature": temp, &##39;humidity&##39;: humid} |
status | str | 0 失败 1成功 |
查询网络连接信息
说明: 查询网络连接信息,每种连接类型返回对应连接状态
功能码: 0x11
返回的数据内容:
{"code":0x11,
"data": "200",
"status":1}
字段 | 类型 | 含义 |
---|---|---|
code | int | 状态码 |
data | str | 网络连接状态 |
status | str | 0 失败 1成功 |
查询网络状态
说明: 查询网络连接状态,返回基站信息
功能码: 0x12
返回的数据内容:
{"code":0x12,
"data": ([], [], [(0, 14071232, 1120, 0, 123….),
"status":1}
字段 | 类型 | 含义 |
---|---|---|
code | int | 状态码 |
data | turple | 基站连接状态 |
status | str | 0 失败 1成功 |
查询基站定位信息
说明: 查询基站定位信息
功能码: 0x13
返回的数据内容:
{"code":0x13,
"data": (117.1138, 31.82279, 550) ,
"status":1}
字段 | 类型 | 含义 |
---|---|---|
code | int | 状态码 |
data | str | 基站定位信息 |
status | str | 0 失败 1成功 |
复位指令
功能码: 0xff
数据内容:
{ Password: "012345",
"data":{}
}
返回的数据内容:
{"code": 0x06 , "data": " reset dtu " , "success":1}
字段 | 类型 | 含义 |
---|---|---|
code | Str | 状态码 |
data | str | reset dtu |
success | int | 0 失败 1成功 |
设置指令
基础设置
协议短信(SMS)透传 message
功能码: 0x50
数据内容:
- 号码:32个字节,标识目的手机号码,如果没有32字节,必须补0x00
- 内容:最大1024字节,为短信数据内容
{
"password":"",
"data":{
message: {"number":"12123123", -- 目标号码
"data:" " -- 发送短信
}
}
}
返回的数据内容:
{"code": 0x50 , "data": " " , "success":1}
字段 | 类型 | 含义 |
---|---|---|
code | str | 状态码 |
data | str | 接收的短信 |
success | int | 0 失败 1成功 |
配置密码 password
说明:
查询IMEI,查询本机号码,查询固件版本号,查询信号强度不需要密码
查询当前配置参数和修改透传绑定的通道需要密码
是否开启自动更新需要密码
功能码: 0x51
数据内容:
{
"password":" ",
"data":{ "password": "012345"}
}
说明:初始密码为固件IMEI的后六位
如 IMEI : 123456789012345 初始密码为 012345
字段 | 含义 |
---|---|
password | 当前密码 |
data | password : 修改后的密码 |
返回的数据内容:
{"code": 0x51 , "data": " " , "success":1}
字段 | 含义 |
---|---|
code | 状态码 |
data | |
success | 0 失败 1成功 |
登录服务器发送注册信息 reg
说明:
首次登陆服务器发送注册信息
功能码: 0x53
数据内容:
{
"password":"",
"data":{"reg": 1}
}
Reg | 值 |
---|---|
0 | 不发送{ "reg": 0} |
1 | { "reg": 1}则首次登录服务器发送下面的json数据: {"csq":rssi,"imei":imei,"iccid":iccid,"ver":version}csq 信号强度imei 固件的imeiiccid SIM卡的iccidver 固件的版本号 |
自定义 | { "reg": "自定义的注册信息"} |
返回的数据内容:
{"code": 0x53 , "data": " " , "success":1}
字段 | 类型 | 含义 |
---|---|---|
code | str | 状态码 |
data | str | send reg |
success | int | 0 失败 1成功 |
固件版本号 version
说明:
修改固件版本号,用于fota升级(当开启fota升级,版本号小于服务器端的固件版本号就会进行fota升级)
功能码: 0x54
数据内容:
{
"password":"",
"data":{
" version ": "100" --- 版本号(使用数字字符串)
}
}
返回的数据内容:
{"code": 0x54 , "data": " " , "success":1}
字段 | 类型 | 含义 |
---|---|---|
code | Str | 状态码 |
data | str | 固件版本号 |
success | int | 0 失败 1成功 |
是否启用自动更新 fota
说明:
Fota升级开关
功能码: 0x55
数据内容:
{
"password":"",
"data":{
"fota": 1 -- 0关闭/ 1 开启(int类型)
}
}
返回的数据内容:
{"code": 0x55 , "data": " fota" , "success":1}
字段 | 类型 | 含义 |
---|---|---|
code | str | 状态码 |
data | str | fota |
success | int | 0 失败 1成功 |
日志输出 nolog
说明:
串口打印日志记录,目前不支持。日志输出连接Debug口
功能码: 0x56
数据内容:
{
"password":"",
"data":{
{"nolog": 1} 是否开启日志 0关闭/1打开(int类型)
}
}
返回的数据内容:
{"code": "20000" , "data": "log " , "success":1}
字段 | 类型 | 含义 |
---|---|---|
code | Str | 状态码 |
data | str | log |
success | int | 0 失败 1成功 |
服务器获取配置参数
功能码: 0x57
数据内容:
{
"password":"",
"data":{
{" service_acquire":0}
}
}
注:本地配置默认开启向服务器获取参数配置
字段 | 类型 | 含义 |
---|---|---|
service_acquire | Int | 是否开启服务器获取参数0关闭/1打开 |
返回的数据内容:
{"code": "20000" , "data": "service acquire " , "success":1}
字段 | 类型 | 含义 |
---|---|---|
code | Str | 状态码 |
data | str | service acquire |
success | int | 0 失败 1成功 |
串口参数 uconf
功能码: 0x58
数据内容:
{"password": ""
"data":{
"uconf": {
"0": {
"baudrate": "115200",
"databits": "8",
"parity": "0",
"stopbits": "1",
"flowctl": "0"
}
}}
返回的数据内容:
{"code": "20000" , "data": " " , "success":1}
字段 | 类型 | 含义 |
---|---|---|
code | Str | 状态码 |
data | str | uconf |
success | int | 0 失败 1成功 |
通道配置参数 conf
功能码: 0x59
数据内容:
{"password":"",
"data":{
"conf":"1": {
"protocol": "aliyun",
"type": "mos",
"keepAlive": "",
"clientID": "0",
"Devicename": "ec600n",
"ProductKey": "gbh26bFEA4M",
"DeviceSecret": "b7ff5acc0671d40adfd0eff57e7605f6",
"ProductSecret": "",
"cleanSession": true,
"qos": "1",
"subscribe": {"0": "/gbh26bFEA4M/ec600n/user/subtest"},
"publish": {"0": "/gbh26bFEA4M/ec600n/user/pubtest"},
"serialID": "0"}
}}
对应通道的配置参数详见6.1.10.1的通道配置详解 :
返回的数据内容:
{"code": "20000" , "data": " " , "success":1}
字段 | 类型 | 含义 |
---|---|---|
code | str | 状态码 |
data | str | conf |
success | int | 0 失败 1成功 |
通道配置详解
HTTP参数
{
"protocol": "http",
"method": "get",
"url": "http://httpbin.org/get",
"reg_data": "",
"timeout": "",
"serialID": 1
}
字段 | 类型 | 含义 |
---|---|---|
http | str | 通信方式http标识 |
method | str | 提交请求的方法 |
url | str | HTTP请求的地址和参数 |
timeout | int | HTTP请求最长等待时间 |
serialD | int | HTTP绑定的串口号(1~2) |
SOCKET tcp参数
{
"protocol": "tcp",
"ping": "",
"heartbeat": 30,
"url": "220.180.239.212",
"port": "8305",
"keepAlive": 300,
"serialID": 2
}
字段 | 类型 | 含义 |
---|---|---|
tcp | str | Socket的tcp协议标识 |
ping | str | 用户自定义的心跳包,只支持数字和字母,建议2-4个字节 |
time | int | 0为关闭心跳包,建议60s-300s |
url | str | socket的地址或域名 |
port | int | socket服务器的端口号 |
KeepAlive | int | 链接超时最大时间单位秒,默认300秒 |
serialD | int | tcp/udp绑定的串口号(1~2) |
SOCKET udp 参数
{
"protocol": "tcp",
"ping": "",
"heartbeat": 30,
"url": "220.180.239.212",
"port": "8305",
"keepAlive": 300,
"serialID": 2
}
字段 | 类型 | 含义 |
---|---|---|
udp | str | Socket的udp协议标识 |
ping | str | 用户自定义的心跳包,只支持数字和字母,建议2-4个字节 |
time | int | 0为关闭心跳包,建议60s-300s |
url | str | socket的地址或域名 |
port | int | socket服务器的端口号 |
KeepAlive | int | 链接超时最大时间单位秒,默认300秒 (60~600) |
serialD | int | tcp/udp绑定的串口号(1~2) |
MQTT参数
{
"protocol": "mqtt",
"clientID": "test_mqtt",
"keepAlive": 0,
"url": "broker-cn.emqx.io",
"port": "1883",
"cleanSession": true,
"subscribe": {"0": "/python/mqtt"},
"publish": {"0": "/python/mqtt"},
"qos": "0",
"retain": "1",
"serialID": "1"
}
字段 | 类型 | 含义 |
---|---|---|
mqtt | str | 表示MQTT协议 |
clentID | str | 自定义客户端ID,使用IMEI做客户端ID此处留空 |
keepAlive | int | 客户端的keepalive超时值。 默认为60秒 |
address | str | MQTT的地址或域名 |
port | int | socket服务器的端口号 |
cleanSession | int | MQTT是否保存会话标志位,0持久会话,1离线自动销毁 |
Sub | str | 订阅主题 |
pub | str | 发布主题 |
qos | int | MQTT的QOS级别,默认0 |
retain | int | MQTT的publish参数retain,默认0 |
serialD | int | MQTT通道捆绑的串口ID (1~3) |
阿里云参数
{
"protocol": "aliyun",
"type": "mos",
"keepAlive": "",
"clientID": "test_mos",
"Devicename": "light01",
"ProductKey": "a1QNbCDxIWM",
"DeviceSecret": "0bceb8010ade0df2e6989982e63f7601",
"ProductSecret": "",
"cleanSession": true,
"qos": "1",
"subscribe": {"0": "/a1QNbCDxIWM/light01/user/get"},
"publish": {"0": "/a1QNbCDxIWM/light01/user/update"},
"serialID": "1"
}
字段 | 类型 | 含义 |
---|---|---|
aliyun | Str | 阿里云IOT的标识 |
type | str | 一型一密tas/一机一密mos |
keepAlive | int | 通信之间允许的最长时间段(以秒为单位),默认为300,范围(60-1200)使用默认值就填""或者" " |
clientID | str | clientID ,自定义字符(不超过64) |
Devicename | str | 设备名称 |
ProductKey | str | 产品密钥 |
DeviceSecret | str | 设备密钥(使用一型一密认证此参数传入"") |
ProductSecret | str | 产品密钥(使用一机一密认证时此参数传入"") |
cleanSession | int | MQTT 保存会话标志位( 0则客户端是持久客户端,当客户端断开连接时,订阅信息和排队消息将被保留, 1代理将在其断开连接时删除有关此客户端的所有信息 ) |
QOS | int | MQTT消息服务质量(默认0,可选择0或1)0:发送者只发送一次消息,不进行重试 1:发送者最少发送一次消息,确保消息到达Broker |
subTopic | str | 订阅主题 |
pubTopic | str | 发布主题 |
serialD | int | MQTT通道捆绑的串口ID (1~3) |
腾讯云参数
{
"protocol": "txyun",
"type": "mos",
"keepAlive": "",
"clientID": "test_tx_mos",
"Devicename": "Smart_test01",
"ProductKey": "H7MBLRYXN9",
"DeviceSecret": "89c7tXT3s3grZTr/YFjxSg==",
"ProductSecret": "",
"cleanSession": true,
"qos": "1",
"subscribe": {"0": "H7MBLRYXN9/Smart_test01/control"},
"publish": {"0": "H7MBLRYXN9/Smart_test01/event"},
"serialID": "1"
}
字段 | 类型 | 含义 |
---|---|---|
txyun | str | 腾讯云IOT的标识 |
type | str | 一型一密tas/一机一密mos |
keepAlive | int | 通信之间允许的最长时间段(以秒为单位),默认为300,范围(60-1200)使用默认值就填""或者" "。 |
clientID | str | clientID ,自定义字符(不超过64) |
Devicename | str | 设备名称 |
ProductKey | str | |
DeviceSecret | str | 设备密钥(使用一型一密认证此参数传入"") |
ProductSecret | str | 产品密钥(使用一机一密认证时此参数传入"") |
cleanSession | int | MQTT 保存会话标志位( 0则客户端是持久客户端,当客户端断开连接时,订阅信息和排队消息将被保留, 1代理将在其断开连接时删除有关此客户端的所有信息 ) |
QOS | int | MQTT消息服务质量(默认0,可选择0或1)0:发送者只发送一次消息,不进行重试 1:发送者最少发送一次消息,确保消息到达Broker |
subTopic | str | 订阅主题 |
pubTopic | str | 发布主题 |
serialD | int | MQTT通道捆绑的串口ID (1~3) |
设置APN
说明:这个指令只适合配置和使用不是同一张卡的场景
功能码: 0x60
数据内容:
{
"password":" ",
"data":{"apn": ["", "", ""]}
}
apn对应列表说明:
列表第一个参数: apn 的名称
列表第二个参数: apn 的用户名
列表第三个参数: apn 的密码
返回的数据内容:
{"code": 0x60 , "status":1}
字段 | 类型 | 含义 |
---|---|---|
code | Str | 状态码 |
data | str | set apn |
success | int | 0 失败 1成功 |
GPIO pins
功能码: 0x61
数据内容:
{"password": " ",
"data":{"pins":[
"pio2", -- 网路指示灯的GPIO (pio1~pio128)
"pio4", -- 与服务器连上后通知GPIO (pio1~pio128)
"pio4" -- 重置DTU参数的GPIO (pio1~pio128)
]}}
返回的数据内容:
{"code": 0x61 , "status":1}
字段 | 类型 | 含义 |
---|---|---|
code | Str | 状态码 |
data | str | set gpio pins |
success | int | 0 失败 1成功 |
OTA
功能码: 0x62
数据内容:
{"password": " ",
"data":{"ota":1
}
返回的数据内容:
{"code": 0x62 , "status":1}
字段 | 类型 | 含义 |
---|---|---|
code | Str | 状态码 |
data | str | OTA状态 |
success | int | 0 失败 1成功 |
参数设置
功能码: 0x63
数据内容:
{"password": " ",
"data":{ 完整配置文件(省略)
}
返回的数据内容:
{"code": 0x63 ,"status":1}
字段 | 类型 | 含义 |
---|---|---|
code | Str | 状态码 |
data | dict | 完整的配置文件 |
status | int | 0 失败 1成功 |