## 修订历史

| Version | **Date**   | **Author** | **Change expression** |
| :------ | ---------- | ---------- | --------------------- |
| 1.0     | 2021-11-25 | 陈驰      | 初始版本              |

## 概述

本文档主要内容包括：
- 与云端通信的报文格式
- 所有命令模式的指令报文格式：设置参数、查询参数
- dtu_config.json配置文件字段的详细说明

## 数据格式

DTU与云端通信报文使用json格式

- 云端下行报文

命令模式：

`{“msg_id”: msg_id, “data”: “1234”[, “cmd_code”: 40, “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, “modbus”: {"groups": {"num": 0, "cmd": ["0x03", "0x00", "0x00", "0x00", "0x02"]}}}`

字段说明：

msg_id：报文id，一般为时间戳+3位随机数

data：报文消息字段

cmd_code：可选字段，填写对应功能码，并又DTU执行相应的操作，此字段仅在命令模式下生效

topic_id：可选字段，填写mqtt返回需要publish的topic_id，此字段仅在命令模式与使用MQTT/Aliyun/Txyun时生效

modbus：可选字段，此字段仅在modbus模式使用，此字段下有3个子字段：groups，task与command

&ensp;&ensp;&ensp;&ensp;groups：可选字段，在modbus模式下向指定的地址组发送消息

&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;num：配置文件中的地址组编号

&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;cmd：向地址组发送的modbus命令

&ensp;&ensp;&ensp;&ensp;task：可选字段，在modbus模式下执行代码中预置的task任务

&ensp;&ensp;&ensp;&ensp;command：可选字段，在modbus下直接向UART口写入指定modbus命令

- 云端上行报文

命令模式：

`{"msg_id": msg_id, "data": "1234"[, "cmd_code": 40, "status": 1, "password": "123"]}`

透传模式：

`{“msg_id”: msg_id, “data”: “1234”}`

字段说明：

msg_id：报文id，一般为时间戳+3位随机数，回复报文会使用相同的msg_id

data：报文消息字段

cmd_code：可选字段，填写对应功能码，并又DTU执行相应的操作，此字段仅在命令模式下生效

status：可选字段，仅在命令模式下生效，用于反馈命令是否执行成功

## 指令说明

**协议功能码说明：**

**1 ．查询DTU ，复位DTU，设置参数，数据透传的功能码和返回数据的功能码一致**

**2.返回数据的状态码可查询对应的状态码表**

### 功能码表

| 功能码    | 功能            |
|--------|---------------|
| 0-49   | 查询指令          |
| 0      | 查询IMEI        |
| 1      | 查询本机号码        |
| 2      | 查询固件版本号       |
| 3      | 查询信号强度        |
| 4      | 查询当前配置参数      |
| 5      | 诊断查询          |
| 6      | 查询ICCID       |
| 7      | 查询ADC电压       |
| 8      | 查询GPIO信息      |
| 10     | 查询温湿度         |
| 11     | 查询网络连接信息      |
| 12     | 查询网络状态        |
| 13     | 查询基站定位信息      |
| 50~143 | 设置指令          |
| 50     | 协议短信透传        |
| 51     | 配置密码          |
| 52     | 添加设备识别码IMEI   |
| 53     | 登录服务器发送注册信息   |
| 54     | 固件版本号         |
| 55     | 是否启用自动更新      |
| 56     | 日志输出          |
| 57     | 服务器获取配置参数     |
| 58     | 串口参数          |
| 59     | 通道配置参数        |
| 60     | Apn设置         |
| 61     | GPIO设置        |
| 62     | OTA           |
| 63     | 参数设置          |
| 255    | 复位指令          |

## 查询指令

### 查询IMEI

**说明：**

DTU的IMEI号

功能码: 0x00

返回的数据内容：

`{"code": 0 , "data": "123456789012345" , "success":1}`

字段说明:

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | str | 状态码（如果查询IMEI失败，可查询状态码表来定位具体错误信息） |
| data | str | 返回IMEI |
| success | int | 0 失败 1成功 |

### 查询本机号码

**说明：**

查询SIM卡的号码

功能码: 1

返回的数据内容：

`{"code": 1 , "data": "17201593988" , "success":1}`

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | Str | 状态码 |
| data | str | SIM卡的手机号码 |
| success | int | 0 失败 1成功 |

### 查询固件版本号

**说明：**

查询当前的固件版本号（当开启fota升级，版本号小于服务器端的固件版本号会进行fota升级）

固件版本号格式为: v 1

功能码: 2

返回的数据内容：

`{"code": 2 , "data": "v 1" , "success":1}`

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | str | 状态码 |
| data | str | 固件版本号 |
| success | int | 0 失败 1成功 |

### 查询信号强度

**说明：**

网络信号强度值范围0~31，值越大表示信号强度越好。

功能码: 3

返回的数据内容：

`{"code": 3 , "data": " CSQ17 " , "success":1}`

| **字段** | **类型** | **含义** |
| --- |--------| --- |
| code | str    | 状态码 |
| data | str    | CSQ1~CSQ31 |
| success | int    | 0 失败 1成功 |

### 查询当前配置参数

功能码: 4

数据内容：
```
{"password": "012345",
 "cmd_code": 4,
}
```
返回的数据内容：

`{"code": 4 , "data": " req config " , "success":1}`

| **字段** | **字符串** | **含义** |
| --- | --- | --- |
| code | Str | 状态码 |
| data | str | req config |
| success | int | 0 失败 1成功 |

### 诊断查询

说明: 查询当前DTU运行的错误上报信息

功能码: 5

返回的数据内容：
```
{"code":5,

"data":[{"func_code": "5" , "error_code": " 6001"}],

"success":1}
```

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | str | 状态码 |
| func_code | str | 功能码 |
| error_code | str | 错误码 |
| success | int | 0 失败 1成功 |

### iccid查询

说明: 查询iccid

功能码: 6

返回的数据内容：
```
{"code":6,

"data": "12456465486561516515153",

"status":1}
```

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | int | 状态码 |
| data | str | 功能码 |
| status | str | 0 失败 1成功 |

### adc查询

说明: 查询adc

功能码: 7

返回的数据内容：
```
{"code":7,

"data": "3.7",

"status":1}`
```
| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | int | 状态码 |
| data | str | adc电压 |
| status | str | 0 失败 1成功 |

### gpio查询

说明: 查询gpio

功能码: 8

返回的数据内容：
```
{"code":8,

"data": "gpio_msg",

"status":1}
```

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | int | 状态码 |
| data | str | gpio获取的信息 |
| status | str | 0 失败 1成功 |

### 电池电压查询

说明: 查询gpio

功能码: 9

返回的数据内容：
```
{"code":9,

"data": "3590",

"status":1}
```

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | int | 状态码 |
| data | str | gpio获取的信息 |
| status | str | 0 失败 1成功 |
### 查询温湿度

说明: 查询温湿度

功能码: 10

返回的数据内容：
```
{"code":10,
"data": {"temperature": 26.0, "humidity": 60.0},
"status":1}
```

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | int | 状态码 |
| data | dict | 温湿度信息{"temperature": temp, &#39;humidity&#39;: humid} |
| status | str | 0 失败 1成功 |

### 查询网络连接信息

说明: 查询网络连接信息,每种连接类型返回对应连接状态

功能码: 11

返回的数据内容：
```
{"code":11,
"data": "200",
"status":1}
```

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | int | 状态码 |
| data | str | 网络连接状态 |
| status | str | 0 失败 1成功 |

网络连接状态说明

| **连接类型**  | **含义**                         |
|-----------|--------------------------------|
| http      | 返回http状态码                      |
| tcp/udp   | 参照套接字状态表                       |
| mqtt      | 0：连接成功 1：连接中 2：服务端连接关闭 -1：连接异常 |
| aliyun    | 0：连接成功 1：连接中 2：服务端连接关闭 -1：连接异常 |
| txyun     | 0：连接成功 1：连接中 2：服务端连接关闭 -1：连接异常 |
| quecthing | 参照quecthing连接状态表               |

套接字状态表

| **状态值** | **状态**     | **描述**                                                        |
|------|------------|---------------------------------------------------------------|
|0 | CLOSED     | 套接字创建了，但没有使用这个套接字                                             |
|1 | LISTEN     | 套接字正在监听连接                                                     |
|2 | SYN_SENT   | 套接字正在试图主动建立连接，即发送SYN后还没有收到ACK                                 |
|3 | SYN_RCVD   | 套接字正在处于连接的初始同步状态，即收到对方的SYN，但还没收到自己发过去的SYN的ACK                 |
|4 | ESTABLISHED | 连接已建立                                                         |
|5 | FIN_WAIT_1 | 套接字已关闭，正在关闭连接，即发送FIN，没有收到ACK也没有收到FIN                          |
|6 | FIN_WAIT_2 | 套接字已关闭，正在等待远程套接字关闭，即在FIN_WAIT_1状态下收到发过去FIN对应的ACK              |
|7 | CLOSE_WAIT | 远程套接字已经关闭，正在等待关闭这个套接字，被动关闭的一方收到FIN                            |
|8 | CLOSING    | 套接字已关闭，远程套接字正在关闭，暂时挂起关闭确认，即在FIN_WAIT_1状态下收到被动方的FIN            |
|9 | LAST_ACK   | 远程套接字已关闭，正在等待本地套接字的关闭确认，被动方在CLOSE_WAIT状态下发送FIN                |
|10 | TIME_WAIT  | 套接字已经关闭，正在等待远程套接字的关闭，即FIN、ACK、FIN、ACK都完毕，经过2MSL时间后变为CLOSED状态  |

quecthing连接状态表

|**整型**| **状态编号**   |
|---|------------|
|0 | 未初始化       |
|1 | 已初始化       |
|2 | 正在认证       |
|3 | 认证成功       |
|4 | 认证失败       |
|5 | 正在注册       |
|6 | 注册成功，等待订阅  |
|7 | 注册失败       |
|8 | 已订阅，数据可发送  |
|9 | 订阅失败       |
|10 | 正在注销       |
|11 | 注销成功       |
|12 | 注销失败       |

### 查询网络状态

说明: 查询网络连接状态,返回基站信息

功能码: 12

返回的数据内容：
```
{"code":12,

"data": {"voice_state": 1, "data_state": 1},

"status":1}
```

| **字段** | **类型** | **含义**                                |
| --- | --- |---------------------------------------|
| code | int | 状态码                                   |
| data | turple | voice_state:语音连接状态, data_state:数据连接状态 |
| status | str | 0 失败 1成功                              |

状态说明

| **值** | **状态说明** |
| --- | --- |
| 0  |  not registered, MT is not currently searching an operator to register to |
| 1  |  registered, home network |
| 2  |  not registered, but MT is currently trying to attach or searching an operator to register to |
| 3  |  registration denied |
| 4  |  unknown |
| 5  |  registered, roaming |
| 6  |  egistered for “SMS only”, home network (not applicable) |
| 7  |  registered for “SMS only”, roaming (not applicable) |
| 8  |  attached for emergency bearer services only |
| 9  |  registered for “CSFB not preferred”, home network (not applicable) |
| 10  | registered for “CSFB not preferred”, roaming (not applicable) |
| 11  | emergency bearer services only |

### 查询基站定位信息

说明: 查询基站定位信息

功能码: 13

返回的数据内容：
```
{"code":13,

"data": (117.1138, 31.82279, 550) ,

"status":1}
```

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | int | 状态码 |
| data | str | 基站定位信息 |
| status | str | 0 失败 1成功 |

## 复位指令

功能码: 255

数据内容：
```
{ Password: "012345",

"code":255,

"data":{}

}
```

返回的数据内容：

无

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | Str | 状态码 |
| data | str | reset dtu |
| success | int | 0 失败 1成功 |

## 设置指令

### 基础设置

#### 协议短信(SMS)透传 message

功能码: 50

数据内容：

- 号码：32个字节，标识目的手机号码,如果没有32字节，必须补0x00
- 内容：最大1024字节，为短信数据内容
```
{

"password":"",

"data":{

message: {"number":"12123123", -- 目标号码

"sms_msg:" " -- 发送短信

}
}
}
```

返回的数据内容：

`{"code": 50 , "data": " " , "success":1}`

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | str | 状态码 |
| data | str | 接收的短信 |
| success | int | 0 失败 1成功 |

#### 配置密码 password

**说明：**

查询IMEI,查询本机号码，查询固件版本号，查询信号强度不需要密码

查询当前配置参数和修改透传绑定的通道需要密码

是否开启自动更新需要密码

功能码: 51

数据内容：
```
{
"password":" ",
"data":{"new_password": "012345"}
}
```
说明：初始密码为固件IMEI的后六位

如 IMEI : 123456789012345 初始密码为 012345

| **字段** | **含义** |
| --- | --- |
| password | 当前密码 |
| data | password : 修改后的密码 |

返回的数据内容：

`{"code": 51 , "data": " " , "success":1}`

| **字段** | **含义** |
| --- | --- |
| code | 状态码 |
| data |
 |
| success | 0 失败 1成功 |

#### 登录服务器发送注册信息 reg

**说明：**

首次登陆服务器发送注册信息

功能码: 53

数据内容：
```
{
"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": 53 , "data": " " , "success":1}`

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | str | 状态码 |
| data | str | send reg |
| success | int | 0 失败 1成功 |

#### 固件版本号 version

**说明：**

修改固件版本号，用于fota升级（当开启fota升级，版本号小于服务器端的固件版本号就会进行fota升级）

固件版本号仅支持整数

功能码: 54

数据内容：
```
{
"password":"",
"data":{
"version ": "100" --- 版本号（使用数字字符串）
}
}
```

返回的数据内容：

`{"code": 54 , "data": " " , "success":1}`

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | Str | 状态码 |
| data | str | 固件版本号 |
| success | int | 0 失败 1成功 |

#### 是否启用自动更新 fota

**说明：**

Fota升级开关

功能码: 55

数据内容：
```
{
"password":"",
"data":{
"fota": 1 -- 0关闭/ 1 开启（int类型）
}
}
```
返回的数据内容：

`{"code": 55 , "data": " fota" , "success":1}`

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | str | 状态码 |
| data | str | fota |
| success | int | 0 失败 1成功 |

#### 日志输出 nolog

**说明：**

串口打印日志记录,目前不支持。日志输出连接Debug口

功能码: 56

数据内容：
```
{
"password":"",
"data":{
{"nolog": 1} 是否开启日志 0关闭/1打开（int类型）
}
}
```
返回的数据内容：

`{"code": "20000" , "data": "log " , "success":1}`

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | Str | 状态码 |
| data | str | log |
| success | int | 0 失败 1成功 |

#### 服务器获取配置参数

功能码: 57

数据内容：
```
{
"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

功能码: 58

**在透传模式下无法设置串口参数**

数据内容：
```
{"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

功能码: 59

**在透传模式下无法设置串口参数**

数据内容：
```
{"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": "udp",
"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) |

###### 移远云参数
```
{
"protocol": "quecthing",
"keepAlive": "",  // lifetime
"ProductKey": " a1QNbCDxIWM ",
"ProductSecret": "",
"qos": "1",
"SessionFlag": "",
"sendMode": "phy",
"serialID": "1",
}
```
| **字段** | **类型** | **含义** |
| --- | --- | --- |
| quecthing | str | 腾讯云IOT的标识 |
| keepAlive | int | 通信之间允许的最长时间段（以秒为单位）,默认为120，范围（60-1200）使用默认值就填""或者" "。 |
| ProductKey | str |产品id|
| ProductSecret | str | 产品密钥|
| QOS | int | MQTT消息服务质量（默认0，可选择0或1）0：发送者只发送一次消息，不进行重试 1：发送者最少发送一次消息，确保消息到达Broker |
| SessionFlag | bool | 配置与云平台通信的数据是否采用session加密（默认值为False），True：加密，False：加密 |
| sendMode | str | 移远云数据收发模式，phy：物模型，pass：透传 |
| serialD | int | MQTT通道捆绑的串口ID (1~3) |


移远云开发说明请点击以下连接获取文档：

[Quectel_移远通信物联网设备管理平台设备接入_应用指导_(Python)_2.9.0.pdf](https://quec-pro-oss.oss-cn-shanghai.aliyuncs.com/documentCenter/Quectel_%E7%A7%BB%E8%BF%9C%E9%80%9A%E4%BF%A1%E7%89%A9%E8%81%94%E7%BD%91%E8%AE%BE%E5%A4%87%E7%AE%A1%E7%90%86%E5%B9%B3%E5%8F%B0%E8%AE%BE%E5%A4%87%E6%8E%A5%E5%85%A5_%E5%BA%94%E7%94%A8%E6%8C%87%E5%AF%BC_(Python)_2.9.0.pdf)

## 设置APN

说明：这个指令只适合配置和使用不是同一张卡的场景

**在透传模式下无法设置串口参数**

功能码: 60

数据内容：
```
{
"password":" ",
"data":{"apn": ["", "", ""]}
}
```
apn对应列表说明:

列表第一个参数: apn 的名称

列表第二个参数: apn 的用户名

列表第三个参数: apn 的密码

返回的数据内容：

`{"code": 60 , "status":1}`

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | Str | 状态码 |
| data | str | set apn |
| success | int | 0 失败 1成功 |

## GPIO pins

功能码: 61

**在透传模式下无法设置串口参数**

pins的长度必须为3

数据内容：
```
{"password": " ",
"data":{"pins":[
"1", -- 网路指示灯的GPIO (pio1~pio128)
"2", -- 与服务器连上后通知GPIO (pio1~pio128)
"3" -- 重置DTU参数的GPIO (pio1~pio128)
]}}
```
返回的数据内容：

`{"code": 61 , "status":1}`

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | Str | 状态码 |
| data | str | set gpio pins |
| success | int | 0 失败 1成功 |

## OTA

功能码: 62

数据内容：
```
{"password": " ",
"data":{"ota":1
}
```
返回的数据内容：

`{"code": 62 , "status":1}`

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | Str | 状态码 |
| data | str | OTA状态 |
| status | int | 0 失败 1成功 |

## 参数设置

功能码: 63

数据内容：
```
{"password": " ",
"data":{"dtu_config":{完整配置文件内容}
}
```

完整配置文件参照《DTU上手说明》

返回的数据内容：

`{"code": 63 , "status":1}`

| **字段** | **类型** | **含义** |
| --- | --- | --- |
| code | Str | 状态码 |
| status | int | 0 失败 1成功 |

