Appearance
4G充电桩开放协议 V1.0
当前版本:V1.0 上一版本:开放协议 V0.9
1 协议基础
1.1 通信链路
开放协议由注册平台分配业务 MQTT 参数后启用。设备先向注册平台登录,注册平台通过 #LOGIN-RETURN 下发业务服务器地址、Topic、productCategory、商户信息、桩编号和业务密钥。
当 productCategory = 5 时,NCS 模板选择开放协议适配器;其它数值选择私有协议适配器。
业务 MQTT 链路使用注册平台下发的 chargerKey 做 AES-128-CBC/PKCS7 加解密,IV 为 16 字节全 0。本文所有业务报文均指解密后的明文协议文本。
1.2 数据结构
| 起始标志 | 指令类型 | 指令序号 | 消息体 |
|---|---|---|---|
# | 英文语义化指令 | idx | 使用逗号分隔的字段列表 |
示例数据:#<指令类型>,<指令序号>,<消息体>
- 指令以
#开头,字段以英文逗号,分隔。- 指令序号
idx由发送方生成,用于匹配请求和响应;设备上行开放协议序号持久化,范围0~65535,溢出后归 0。- 端口号
chn从 1 开始。- 金额单位为分;电量单位为 Wh。
- 功率字段按指令说明使用 W 或
W * 10的整数。- 业务心跳空闲周期固定为 4 分钟,充电中运行调度会按 1 分钟尝试上报。
1.3 数据类型
| 类型 | 参数名 | 说明 |
|---|---|---|
| 数值型 | Number | 十进制数字,用于金额、功率、端口、状态、时间等 |
| 字符型 | String | 以字符形式传输的数据 |
| 列表型 | List | 使用 | 或 , 连接的数据组,按字段说明解析 |
2 设备上行指令
2.1 设备注册 #REGISTER
设备 → 平台:业务 MQTT 就绪后,设备发送一次业务注册报文。
示例报文:#REGISTER,1,123456789012345,864710071234567,460047661234567,89860846123456789000,0.0.5,1,2,0,1,10,60,15000,15000,900,4
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #REGISTER | 固定为 #REGISTER;业务注册指令 |
| 2 | 指令序号 | Number | 1 | 取值 0~65535;设备生成的业务指令序号 |
| 3 | 充电桩注册码 | String | 123456789012345 | 长度 15 字节;优先使用注册平台下发桩编号,无桩编号时使用 IMEI,不足 15 位右侧补 0,超长截取 15 位 |
| 4 | IMEI | String | 864710071234567 | 长度 15 字节;设备 IMEI,不足 15 位右侧补 0,超长截取 15 位 |
| 5 | IMSI | String | 460047661234567 | 长度 15 字节;SIM 卡 IMSI,不足 15 位右侧补 0,超长截取 15 位 |
| 6 | ICCID | String | 89860846123456789000 | 长度 20 字节;SIM 卡 ICCID,不足 20 位右侧补 0,超长截取 20 位 |
| 7 | 固件版本 | String | 0.0.5 | 固件版本,唯一事实来源为项目入口常量封装 |
| 8 | 注册类型 | Number | 1 | 固定为 1;充电桩类型,当前固定为电动自行车充电桩 |
| 9 | 端口数量 | Number | 2 | 1~项目端口数;设备端口数量,由项目入口常量提供 |
| 10 | 计费模型编号 | Number | 0 | 取值 >=0;当前开放协议计费模型 ID |
| 11 | 充满自停开关 | Number | 1 | 取值 0 或 1;充满自停开关,1 开启,0 关闭 |
| 12 | 充满功率阈值 | Number | 10 | 取值 >=0;充满自停功率阈值,单位 W |
| 13 | 充满自停延时 | Number | 60 | 取值 >=0;充满自停延时,单位秒 |
| 14 | 单端口过载阈值 | Number | 15000 | 取值 >0;单端口过载阈值,单位 W |
| 15 | 整桩过载阈值 | Number | 15000 | 取值 >0;整桩过载阈值,单位 W |
| 16 | 最长充电时间 | Number | 900 | 取值 >0;最长充电时间,单位分钟 |
| 17 | 心跳间隔 | Number | 4 | 固定为 4;业务心跳配置值,当前开放协议固定为 4 分钟 |
平台 → 设备:平台可返回业务注册确认,当前固件不解析该响应。
示例报文:#REGISTER,1,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #REGISTER | 固定为 #REGISTER;业务注册响应指令 |
| 2 | 指令序号 | Number | 1 | 取值 0~65535;等同设备上行业务注册序号 |
| 3 | 执行结果 | Number | 1 | 平台自定义;当前固件不解析,仅供平台日志或兼容旧平台使用 |
2.2 心跳 #HEARTBEAT
设备 → 平台:上报充电桩运行数据、计费模型和端口状态。
示例报文:#HEARTBEAT,2,123456789012345,30,0,2,1|1|1234|64,2|0|0|0
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #HEARTBEAT | 固定为 #HEARTBEAT;心跳指令 |
| 2 | 指令序号 | Number | 2 | 取值 0~65535;设备生成的业务指令序号 |
| 3 | 桩编号 | String | 123456789012345 | 长度 15 字节;15 位桩编号,不足补 0,超长截取 |
| 4 | 信号强度 | Number | 30 | 取值 0~31;信号强度,数值越大信号越好 |
| 5 | 计费模型编号 | Number | 0 | 取值 >=0;当前计费模型 ID |
| 6 | 端口数量 | Number | 2 | 1~项目端口数;端口数量 |
| 7 | 端口数据组 | List | 1|1|1234|64 | 与端口数一致;每个端口一个数据组,多个端口用逗号连接;组内字段用 | 分隔 |
端口数据组格式:
port|state|powerInt|balance
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 端口号 | Number | 1 | 1~端口数量;端口号 |
| 2 | 状态 | Number | 1 | 取值 0 或 1;1 表示充电中,0 表示非充电 |
| 3 | 功率整数 | Number | 1234 | 取值 >=0;当前有功功率按 W * 10 后四舍五入取整 |
| 4 | 余额 | Number | 64 | 取值 >=0;当前订单剩余金额,单位分;非充电中为 0 |
平台 → 设备:平台可确认心跳,当前固件不解析该响应。
示例报文:#HEARTBEAT,2
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #HEARTBEAT | 固定为 #HEARTBEAT;心跳响应指令 |
| 2 | 指令序号 | Number | 2 | 取值 0~65535;等同设备上行心跳序号 |
2.3 充电自停 #AUTO-STOP
设备 → 平台:设备因充满、余额用完、超载、拔出、超时等原因结束充电后,上报订单费用明细。
示例报文:#AUTO-STOP,3,2,1,20250101120000123456,30,150,100,24,12,64
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #AUTO-STOP | 固定为 #AUTO-STOP;自停上报指令 |
| 2 | 指令序号 | Number | 3 | 取值 0~65535;设备生成的业务指令序号 |
| 3 | 自停类型 | Number | 2 | 取值 1~3;开放协议自停类型:1 充满/超时/余额类,2 拔出或无余额超时,3 过载 |
| 4 | 端口号 | Number | 1 | 1~端口数量;自停端口号 |
| 5 | 订单编号 | String | 20250101120000123456 | 长度 1~30 字节;无订单为 0;当前订单编号 |
| 6 | 充电时长 | Number | 30 | 取值 >=0;充电时长,单位分钟 |
| 7 | 充电电量 | Number | 150 | 取值 >=0;充电电量,单位 Wh |
| 8 | 预付金额 | Number | 100 | 取值 >=0;订单预付金额,单位分 |
| 9 | 电费 | Number | 24 | 取值 >=0;电费,单位分 |
| 10 | 服务费 | Number | 12 | 取值 >=0;服务费,单位分 |
| 11 | 余额 | Number | 64 | 取值 >=0;订单剩余金额,单位分 |
平台 → 设备:平台确认自停事件。
示例报文:#AUTO-STOP,3,1,20250101120000123456,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #AUTO-STOP | 固定为 #AUTO-STOP;自停确认指令 |
| 2 | 指令序号 | Number | 3 | 取值 0~65535;等同设备上行自停序号 |
| 3 | 端口号 | Number | 1 | 1~端口数量;自停端口号;当前固件从该字段读取端口 |
| 4 | 订单编号 | String | 20250101120000123456 | 长度 1~30 字节;平台确认的订单编号;当前固件不校验该字段 |
| 5 | 执行结果 | Number | 1 | 取值 1 表示成功;1 表示平台确认自停,设备移除待确认自停队列;其它值固件忽略 |
3 平台下行指令
3.1 开启充电 #CHARGE-START
平台 → 设备:平台下发开启充电指令,启动指定端口订单。
示例报文:#CHARGE-START,4,1,20250101120000123456,100
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #CHARGE-START | 固定为 #CHARGE-START;开启充电指令 |
| 2 | 指令序号 | Number | 4 | 取值 0~65535;平台生成的指令序号 |
| 3 | 端口号 | Number | 1 | 1~端口数量;目标端口号 |
| 4 | 订单编号 | String | 20250101120000123456 | 长度 1~30 字节,不能为 0;订单编号,不能为空,不能为 0 |
| 5 | 充电金额 | Number | 100 | 取值 >0;预付金额,单位分,必须大于 0 |
设备 → 平台:返回开启充电结果。
示例报文:#CHARGE-START,4,1,20250101120000123456,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #CHARGE-START | 固定为 #CHARGE-START;开启充电响应指令 |
| 2 | 指令序号 | Number | 4 | 取值 0~65535;等同平台下发序号 |
| 3 | 端口号 | Number | 1 | 1~端口数量;端口号;端口无效时返回 0 |
| 4 | 订单编号 | String | 20250101120000123456 | 长度 1~30 字节;订单无效时按请求值回传 |
| 5 | 执行结果 | Number | 1 | 取值 1~4;执行结果,见下表 |
| result | 说明 |
|---|---|
1 | 成功 |
2 | 金额无效 |
3 | 端口忙、重复请求或启动失败 |
4 | 端口无效或订单编号无效 |
同一端口相同
idx + orderId + amount的重复启动请求会返回3。
3.2 终止充电 #CHARGE-STOP
平台 → 设备:平台下发终止充电指令,结束指定端口订单。
示例报文:#CHARGE-STOP,5,1,20250101120000123456
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #CHARGE-STOP | 固定为 #CHARGE-STOP;终止充电指令 |
| 2 | 指令序号 | Number | 5 | 取值 0~65535;平台生成的指令序号 |
| 3 | 端口号 | Number | 1 | 1~端口数量;目标端口号 |
| 4 | 订单编号 | String | 20250101120000123456 | 长度 1~30 字节,不能为 0;必须与当前端口订单编号一致 |
设备 → 平台:返回终止结果和费用明细;成功响应组包后设备结束充电。
示例报文:#CHARGE-STOP,5,1,1,20250101120000123456,30,150,100,24,12,64
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #CHARGE-STOP | 固定为 #CHARGE-STOP;终止充电响应指令 |
| 2 | 指令序号 | Number | 5 | 取值 0~65535;等同平台下发序号 |
| 3 | 执行结果 | Number | 1 | 取值 1、4、5;执行结果,见下表 |
| 4 | 端口号 | Number | 1 | 1~端口数量;端口号;端口无效时返回 0 |
| 5 | 订单编号 | String | 20250101120000123456 | 长度 1~30 字节;订单编号 |
| 6 | 充电时长 | Number | 30 | 取值 >=0;充电时长,单位分钟;result 为 1 时必填 |
| 7 | 充电电量 | Number | 150 | 取值 >=0;充电电量,单位 Wh;result 为 1 时必填 |
| 8 | 预付金额 | Number | 100 | 取值 >=0;订单预付金额,单位分;result 为 1 时必填 |
| 9 | 电费 | Number | 24 | 取值 >=0;电费,单位分;result 为 1 时必填 |
| 10 | 服务费 | Number | 12 | 取值 >=0;服务费,单位分;result 为 1 时必填 |
| 11 | 余额 | Number | 64 | 取值 >=0;订单剩余金额,单位分;result 为 1 时必填 |
| result | 说明 |
|---|---|
1 | 成功,设备随后结束充电 |
4 | 端口无效或订单编号无效 |
5 | 订单编号与当前端口订单不一致 |
3.3 查询设备 #DEVICE-QUERY
平台 → 设备:查询计费模型、端口数量和全部端口状态。
示例报文:#DEVICE-QUERY,6
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #DEVICE-QUERY | 固定为 #DEVICE-QUERY;查询设备指令 |
| 2 | 指令序号 | Number | 6 | 取值 0~65535;平台生成的指令序号 |
设备 → 平台:返回当前计费模型和端口状态。
示例报文:#DEVICE-QUERY,6,0,2,1,0
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #DEVICE-QUERY | 固定为 #DEVICE-QUERY;查询设备响应指令 |
| 2 | 指令序号 | Number | 6 | 取值 0~65535;等同平台下发序号 |
| 3 | 计费模型编号 | Number | 0 | 取值 >=0;当前计费模型 ID |
| 4 | 端口数量 | Number | 2 | 1~端口数量;端口数量 |
| 5 | 端口1状态 | Number | 1 | 取值 0 或 1;端口 1 状态,1 充电中,0 非充电 |
| ... | 端口N状态 | Number | 0 | 取值 0 或 1;按端口数量继续追加,每个端口一个字段 |
3.4 查询端口 #PORT-QUERY
平台 → 设备:查询指定端口订单、状态和费用。
示例报文:#PORT-QUERY,7,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #PORT-QUERY | 固定为 #PORT-QUERY;查询端口指令 |
| 2 | 指令序号 | Number | 7 | 取值 0~65535;平台生成的指令序号 |
| 3 | 端口号 | Number | 1 | 1~端口数量;目标端口号 |
设备 → 平台:返回端口状态、订单、时长、电量和费用。
示例报文:#PORT-QUERY,7,1,1,20250101120000123456,30,150,100,24,12,64
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #PORT-QUERY | 固定为 #PORT-QUERY;查询端口响应指令 |
| 2 | 指令序号 | Number | 7 | 取值 0~65535;等同平台下发序号 |
| 3 | 端口状态 | Number | 1 | 取值 0~2;0 非充电,1 充电中,2 端口无效 |
| 4 | 端口号 | Number | 1 | 1~端口数量;端口号;端口无效时返回 0 |
| 5 | 订单编号 | String | 20250101120000123456 | 长度 1~30 字节;无订单为 0;当前端口订单编号 |
| 6 | 充电时长 | Number | 30 | 取值 >=0;充电时长,单位分钟 |
| 7 | 充电电量 | Number | 150 | 取值 >=0;充电电量,单位 Wh |
| 8 | 预付金额 | Number | 100 | 取值 >=0;订单预付金额,单位分 |
| 9 | 电费 | Number | 24 | 取值 >=0;电费,单位分 |
| 10 | 服务费 | Number | 12 | 取值 >=0;服务费,单位分 |
| 11 | 余额 | Number | 64 | 取值 >=0;订单剩余金额,单位分 |
3.5 查询计费模型 #RATE-QUERY
平台 → 设备:查询当前计费模型。
示例报文:#RATE-QUERY,8
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #RATE-QUERY | 固定为 #RATE-QUERY;查询计费模型指令 |
| 2 | 指令序号 | Number | 8 | 取值 0~65535;平台生成的指令序号 |
设备 → 平台:返回当前计费模型数据。
示例报文:#RATE-QUERY,8,0,3,1200|1830|2359,E,850|850|850,E,150|150|150,A94F21C8
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #RATE-QUERY | 固定为 #RATE-QUERY;查询计费模型响应指令 |
| 2 | 指令序号 | Number | 8 | 取值 0~65535;等同平台下发序号 |
| 3 | 计费模型编号 | Number | 0 | 取值 >=0;当前计费模型 ID |
| 4 | 计费分组数 | Number | 3 | 取值 1~10;计费分组数量 |
| 5 | 时间阈值列表 | List | 1200|1830|2359 | HHMM,数量等于 groupNum;使用 | 分隔的时间阈值列表,最后一项按实现归一为 2359 |
| 6 | 电费模式 | String | E | 取值 E 或 T;E 按电量计电费,T 按时间计电费 |
| 7 | 电费费率列表 | List | 850|850|850 | 数量等于 groupNum,电费费率 >0;使用 | 分隔的电费费率,单位厘 |
| 8 | 服务费模式 | String | E | 取值 E 或 T;E 按电量计服务费,T 按时间计服务费 |
| 9 | 服务费费率列表 | List | 150|150|150 | 数量等于 groupNum,服务费费率 >=0;使用 | 分隔的服务费费率,单位厘 |
| 10 | 费率摘要 | String | A94F21C8 | rateHash 或等价配置摘要;用于平台确认当前配置内容,可选尾部字段 |
3.6 设置计费模型 #RATE-SET
平台 → 设备:设置当前计费模型。当前固件支持两种格式。
格式一:列表格式
示例报文:#RATE-SET,9,101,3,1200|1830|2359,E,850|850|850,E,150|150|150,A94F21C8
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #RATE-SET | 固定为 #RATE-SET;设置计费模型指令 |
| 2 | 指令序号 | Number | 9 | 取值 0~65535;平台生成的指令序号 |
| 3 | 计费模型编号 | Number | 101 | 取值 >=0;计费模型 ID |
| 4 | 计费分组数 | Number | 3 | 取值 1~10;计费分组数量 |
| 5 | 时间阈值列表 | List | 1200|1830|2359 | HHMM,数量等于 groupNum;使用 | 分隔的时间阈值列表;最后一项会按实现归一为 2359 |
| 6 | 电费模式 | String | E | 取值 E 或 T;电费计费模式 |
| 7 | 电费费率列表 | List | 850|850|850 | 数量等于 groupNum,每项 >0;电费费率列表,单位厘 |
| 8 | 服务费模式 | String | E | 取值 E 或 T;服务费计费模式 |
| 9 | 服务费费率列表 | List | 150|150|150 | 数量等于 groupNum,每项 >=0;服务费费率列表,单位厘 |
| 10 | 费率摘要 | String | A94F21C8 | rateHash 或等价配置摘要;可选尾部字段,携带时设备应校验并在响应中回传 |
格式二:分组展开格式
示例报文:#RATE-SET,10,102,3,E,E,1200,850,150,1830,850,150,2359,850,150,B72D1E90
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #RATE-SET | 固定为 #RATE-SET;设置计费模型指令 |
| 2 | 指令序号 | Number | 10 | 取值 0~65535;平台生成的指令序号 |
| 3 | 计费模型编号 | Number | 102 | 取值 >=0;计费模型 ID |
| 4 | 计费分组数 | Number | 3 | 取值 1~10;计费分组数量 |
| 5 | 电费模式 | String | E | 取值 E 或 T;电费计费模式 |
| 6 | 服务费模式 | String | E | 取值 E 或 T;服务费计费模式 |
| 7 | 第1组结束时间 | Number | 1200 | 取值 0000~2400 的 HHMM;第 1 组结束时间 |
| 8 | 第1组电费费率 | Number | 850 | 取值 >0;第 1 组电费费率,单位厘 |
| 9 | 第1组服务费费率 | Number | 150 | 取值 >=0;第 1 组服务费费率,单位厘 |
| ... | 分组字段 | Number | 2359,850,150 | 按 groupNum 重复;每组 3 个字段,顺序为结束时间、电费费率、服务费费率 |
| 末尾 | 费率摘要 | String | B72D1E90 | rateHash 或等价配置摘要;可选尾部字段,携带时设备应校验并在响应中回传 |
设备 → 平台:返回计费模型设置结果。
示例报文:#RATE-SET,9,1,101,A94F21C8
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #RATE-SET | 固定为 #RATE-SET;设置计费模型响应指令 |
| 2 | 指令序号 | Number | 9 | 取值 0~65535;等同平台下发序号 |
| 3 | 执行结果 | Number | 1 | 取值 1~3;执行结果,见下表 |
| 4 | 计费模型编号 | Number | 101 | rateModelId;实际保存的费率模型编号,可选尾部字段 |
| 5 | 费率摘要 | String | A94F21C8 | rateHash 或等价配置摘要;实际保存的配置摘要,可选尾部字段 |
| result | 说明 |
|---|---|
1 | 成功 |
2 | 参数无效 |
3 | 分组数无效 |
#RATE-SET设置的是设备级费率,只影响后续新订单;正在运行的订单继续使用启动时锁定的费率快照。平台携带rateHash时,设备应按完整配置计算摘要并确认一致,不一致时返回参数无效,不保存部分配置。
3.7 查询工作参数 #PARAM-QUERY
平台 → 设备:查询充电桩当前工作参数。
示例报文:#PARAM-QUERY,11
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #PARAM-QUERY | 固定为 #PARAM-QUERY;查询工作参数指令 |
| 2 | 指令序号 | Number | 11 | 取值 0~65535;平台生成的指令序号 |
设备 → 平台:返回工作参数。
示例报文:#PARAM-QUERY,11,1,10,60,15000,15000,900,4
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #PARAM-QUERY | 固定为 #PARAM-QUERY;查询工作参数响应指令 |
| 2 | 指令序号 | Number | 11 | 取值 0~65535;等同平台下发序号 |
| 3 | 充满自停开关 | Number | 1 | 取值 0 或 1;充满自停开关 |
| 4 | 充满功率阈值 | Number | 10 | 取值 >=0;充满功率阈值,单位 W |
| 5 | 充满自停延时 | Number | 60 | 取值 >=0;充满延时,单位秒 |
| 6 | 单端口过载阈值 | Number | 15000 | 取值 >0;单端口过载阈值,单位 W |
| 7 | 整桩过载阈值 | Number | 15000 | 取值 >0;整桩过载阈值,单位 W |
| 8 | 最长充电时间 | Number | 900 | 取值 >0;最长充电时间,单位分钟 |
| 9 | 心跳间隔 | Number | 4 | 固定为 4;固件固定返回 4 |
3.8 设置工作参数 #PARAM-SET
平台 → 设备:在线修改充电桩工作参数。
示例报文:#PARAM-SET,12,1,10,60,15000,15000,900,4
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #PARAM-SET | 固定为 #PARAM-SET;设置工作参数指令 |
| 2 | 指令序号 | Number | 12 | 取值 0~65535;平台生成的指令序号 |
| 3 | 充满自停开关 | Number | 1 | 取值 0 或 1;充满自停开关 |
| 4 | 充满功率阈值 | Number | 10 | 取值 >=0;充满功率阈值,单位 W |
| 5 | 充满自停延时 | Number | 60 | 取值 >=0;充满延时,单位秒 |
| 6 | 单端口过载阈值 | Number | 15000 | 取值 >0;单端口过载阈值,单位 W |
| 7 | 整桩过载阈值 | Number | 15000 | 取值 >0;整桩过载阈值,单位 W |
| 8 | 最长充电时间 | Number | 900 | 取值 >0;最长充电时间,单位分钟 |
| 9 | 心跳间隔 | Number | 4 | 固定为 4;可选字段;如携带,必须为 4,否则返回参数无效 |
设备 → 平台:返回工作参数设置结果。
示例报文:#PARAM-SET,12,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #PARAM-SET | 固定为 #PARAM-SET;设置工作参数响应指令 |
| 2 | 指令序号 | Number | 12 | 取值 0~65535;等同平台下发序号 |
| 3 | 执行结果 | Number | 1 | 取值 1 或 2;1 成功,2 参数无效 |
3.9 远程重启 #REBOOT
平台 → 设备:远程重启设备。
示例报文:#REBOOT,13
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #REBOOT | 固定为 #REBOOT;远程重启指令 |
| 2 | 指令序号 | Number | 13 | 取值 0~65535;平台生成的指令序号 |
设备 → 平台:返回重启结果,随后约 3 秒执行重启。
示例报文:#REBOOT,13,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #REBOOT | 固定为 #REBOOT;远程重启响应指令 |
| 2 | 指令序号 | Number | 13 | 取值 0~65535;等同平台下发序号 |
| 3 | 执行结果 | Number | 1 | 固定为 1;1 表示设备已接受重启 |
3.10 掉电提醒 #DROP_POWER
设备 → 平台:设备检测掉电时上报掉电提醒和端口状态摘要。
示例报文:#DROP_POWER,15,30,55,2,1|1|1234|64,2|0|0|0
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #DROP_POWER | 固定为 #DROP_POWER;掉电提醒 |
| 2 | 指令序号 | Number | 15 | 取值 0~65535;设备生成的业务指令序号 |
| 3 | 信号强度 | Number | 30 | 取值 0~31;信号强度 |
| 4 | 信号接收功率 | Number | 55 | 模块返回值;信号接收功率 |
| 5 | 端口数量 | Number | 2 | 1~项目端口数;端口数量 |
| 6 | 端口数据组 | List | 1|1|1234|64 | 与端口数一致;多个端口用逗号连接,组内用 | 分隔 |
端口数据组格式:
port|state|powerInt|balance,字段含义与#HEARTBEAT一致。
平台 → 设备:平台可确认掉电提醒,当前设备可忽略该响应。
示例报文:#DROP_POWER,15,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #DROP_POWER | 固定为 #DROP_POWER;掉电提醒响应 |
| 2 | 指令序号 | Number | 15 | 取值 0~65535;等同设备上行序号 |
| 3 | 执行结果 | Number | 1 | 返回码,见下表 |
| result | 说明 |
|---|---|
1 | 平台已接收 |
2 | 平台拒绝或字段无效 |
异常处理:设备端口摘要不完整时不得补默认端口数据;平台无法识别字段时返回 2 或不响应,设备不因响应缺失阻塞掉电处理。
业务影响:用于掉电事件追踪和订单对账辅助,不主动停止端口;实际停充仍由设备掉电保护和恢复流程决定。
3.11 设备绑定 #BIND_DEVICE
平台 → 设备:设置设备绑定状态。
示例报文:#BIND_DEVICE,16,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #BIND_DEVICE | 固定为 #BIND_DEVICE;绑定状态指令 |
| 2 | 指令序号 | Number | 16 | 取值 0~65535;平台生成的指令序号 |
| 3 | 绑定状态 | Number | 1 | 取值 0 或 1;0 解绑,1 绑定 |
设备 → 平台:返回绑定处理结果。
示例报文:#BIND_DEVICE,16,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #BIND_DEVICE | 固定为 #BIND_DEVICE;绑定响应 |
| 2 | 指令序号 | Number | 16 | 取值 0~65535;等同平台下发序号 |
| 3 | 执行结果 | Number | 1 | 返回码,见下表 |
| result | 说明 |
|---|---|
1 | 成功,状态已处理 |
2 | 参数无效 |
3 | 解绑停充处理失败 |
异常处理:绑定状态不是 0/1 时返回 2。解绑时设备应结束所有运行端口;若存在端口无法结束,应返回 3 并保留可追踪状态。
业务影响:绑定成功更新设备业务状态;解绑会结束所有端口充电,平台应准备接收相应停充或自停事件。
3.12 刷卡校验 #CARD_VERIFY
设备 → 平台:用户刷卡后,设备请求平台校验卡 UID。
示例报文:#CARD_VERIFY,17,1,AABB1122
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #CARD_VERIFY | 固定为 #CARD_VERIFY;刷卡校验请求 |
| 2 | 指令序号 | Number | 17 | 取值 0~65535;设备生成的业务指令序号 |
| 3 | 端口号 | Number | 1 | 1~端口数量;刷卡端口 |
| 4 | 卡 UID | String | AABB1122 | 十六进制字符串;卡 UID |
平台 → 设备:返回刷卡校验结果。
示例报文:#CARD_VERIFY,17,1,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #CARD_VERIFY | 固定为 #CARD_VERIFY;刷卡校验响应 |
| 2 | 指令序号 | Number | 17 | 取值 0~65535;等同设备上行序号 |
| 3 | 端口号 | Number | 1 | 1~端口数量;刷卡端口 |
| 4 | 校验结果 | Number | 1 | 返回码,见下表 |
| result | 说明 |
|---|---|
0 | 卡片无效 |
1 | 校验成功 |
2 | 余额不足 |
3 | 端口无效 |
异常处理:端口号无效时平台返回 3;卡 UID 缺失或格式非法时返回 0。设备等待响应超时时按校验失败处理,不启动订单。
业务影响:校验成功后设备可进入刷卡启动流程;失败或超时不得开启充电。
3.13 远程升级 #UPGRADE
平台 → 设备:请求设备进入远程升级流程。
示例报文:#UPGRADE,18
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #UPGRADE | 固定为 #UPGRADE;远程升级指令 |
| 2 | 指令序号 | Number | 18 | 取值 0~65535;平台生成的指令序号 |
设备 → 平台:返回升级受理结果。
示例报文:#UPGRADE,18,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #UPGRADE | 固定为 #UPGRADE;远程升级响应 |
| 2 | 指令序号 | Number | 18 | 取值 0~65535;等同平台下发序号 |
| 3 | 执行结果 | Number | 1 | 返回码,见下表 |
| result | 说明 |
|---|---|
1 | 已接受升级 |
2 | 当前状态不允许升级 |
3 | 升级参数或环境检查失败 |
异常处理:设备存在不能中断的运行状态时返回 2;升级入口检查失败时返回 3,不得进入半升级状态。
业务影响:返回 1 后设备进入升级流程,可能断开业务 MQTT;平台应停止继续下发普通业务指令并等待设备重新注册。
4 兼容说明
#LOGIN仅用于注册平台登录阶段,不属于开放协议业务 MQTT 指令。BILLING-QUERY、BILLING-SET不是当前 NCS 模板实现的开放协议业务指令;计费模型统一使用#RATE-QUERY、#RATE-SET。- 当前开放协议以订单编号贯穿开启、停止、自停流程;订单编号缺失或不匹配会被拒绝。
- 开放协议当前代码尚未实现刷卡、绑定、掉电提醒和远程升级;协议目标已在对应
#*小节中补齐。 - 费率类指令使用
rateModelId和rateHash或等价配置摘要确认设备级配置;设备级费率只影响后续新订单。 #AUTO-STOP平台确认字段位置以当前代码为准:第 3 字段为chn,第 5 字段为result。