Appearance
4G充电桩开放协议 V0.9
1 协议基础
1.1 通信方式
充电桩和充电运营管理系统之间采用MQTT-3.1.1。MQTT服务器连接参数格式如下:
| 连接参数 | 示例数据 | 说明 |
|---|---|---|
| MQTT服务器域名 | mqtt.xxxxx.com | 可自定义 |
| MQTT服务器端口 | 1883 | 可自定义 |
| MQTT服务器用户名 | Username | 可自定义 |
| MQTT服务器密码 | Password | 可自定义 |
| MQTT服务器上行Topic | gm/open/up/<IMEI> | 可自定义,充电桩上报数据Topic |
| MQTT服务器下行Topic | gm/open/dn/<IMEI> | 可自定义,平台下发数据Topic |
| Client ID | IMEI |
1.2 数据结构
| 起始标志 | 指令类型 | 指令序号 | 消息体 |
|---|---|---|---|
示例数据:#<指令类型>,<指令序号>,<消息体> |
- 指令序号默认值为0,顺序增加,数据溢出(指令序号>0xFFFF)后归0。
- 数据采用AES128-CBC-PKCS7加密,加密内容为数据全文,加密参数联系厂商获取。
1.3 数据类型
| 类型 | 参数名 | 说明 |
|---|---|---|
| 数值型 | Number | 可线性调节类型的数据 |
| 字符型 | String | 以字符形式传输的数据 |
| 列表型 | List | 使用|分隔的数据组 |
2 充电桩业务通信指令
2.1 登录验证
充电桩→平台:充电桩上电后上报参数和出厂设置
示例报文:#LOGIN,1,123456789012345,864710071234567,460047661234567,898608461234567890,0.0.5,1,1,0,1,10,60,15000,15000,720
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #LOGIN | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 充电桩注册码编号 | 字符型 | 123456789012345 | 15字节出厂二维码编号 |
| 4 | IMEI | String | 864710071234567 | 15字节设备标识 |
| 5 | ISMI | String | 460047661234567 | 15字节 |
| 6 | ICCID | String | 898608461234567890 | 20字节 |
| 7 | 充电桩固件版本号 | String | 0.0.5 | 按照"X.X.X"定义,X表示1位数字 |
| 8 | 充电桩类型 | Number | 1 | 1=电动自行车充电桩 |
| 9 | 充电桩端口数量 | Number | 1 | 支持1~12个端口 |
| 10 | *计费模型编号 | String | 0 | 预设值0,计费模型唯一标识 |
| 11 | 充电自停开关 | Number | 1 | 预设值1=开启;0=关闭 |
| 12 | 充电自停触发功率 | Number | 10 | 预设值10W,功率低于10W触发自停计时 |
| 13 | 充电自停时延 | Number | 60 | 触发并持续60S后充电桩停止充电 |
| 14 | 端口最大功率 | Number | 15000 | 预设值15KW,端口超载保护功率 |
| 15 | 充电桩最大功率 | Number | 15000 | 预设值15KW,充电桩超载保护功率 |
| 16 | 最大单次充电时长 | Number | 720 | 预设值720分钟 |
平台→充电桩:平台接收并创建充电桩档案
示例报文:#LOGIN,1,1,1735704000
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #LOGIN | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 执行结果 | Number | 1 | 0=验证失败;1=验证成功 |
| 4 | 时间戳 | Number | 1735704000 | UTC时间戳 |
2.2 心跳
充电桩→平台:上报充电桩运行数据,校验联网状态,充电桩多次未收到响应会尝试重连MQTT服务器。
示例报文:#HEARTBEAT,1,12345678,30,0,2,1|1234|5|100,2|0|0|0
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #HEARTBEAT | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 充电桩注册码编号 | String | 123456789012345 | |
| 4 | 信号强度 | Number | 30 | 0~31,数值越大信号越好 |
| 5 | 计费模型编号 | String | 0 | 充电桩当前计费模型编号 |
| 6 | 充电端口数量 | Number | 1 | 支持最多12个端口 |
| 7 | *端口1数据组 | List | 1|1|1234|64 | 端口号|工作状态|有功功率|剩余金额 |
| ... | ... | ... | ... | 端口号|工作状态|有功功率|剩余金额 |
*端口数据为字符'|'分隔的字符串,格式如下:
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 端口号 | Number | 1 | 1~12 |
| 2 | 工作状态 | Number | 1 | 0=空闲;1=占用(充电中) |
| 3 | 有功功率 | Number | 1234 | 123.4W |
| 4 | 剩余金额 | Number | 64 | 剩余金额0.64元 |
平台→充电桩:平台确认心跳数据,更新在线状态。
示例报文:#HEARTBEAT,1
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #HEARTBEAT | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
2.3 查询充电桩
平台→充电桩:查询充电桩端口运行状态与计费模板
示例报文:#DEVICE-QUERY,1
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #DEVICE-QUERY | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
*建议每次扫码开启充电之前进行状态查询,计费模型不一致时需要同步计费模型。
充电桩→平台:返回校验结果,一致则可直接开启充电,否则需同步计费模板。
示例报文:#DEVICE-QUERY,1,101,1,0
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #DEVICE-QUERY | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 计费模型编号 | String | 101 | 计费模型唯一标识 |
| 4 | 充电端口数量 | Number | 1 | 支持1~12个端口 |
| 5 | 端口1工作状态 | Number | 0 | 0=空闲;1=充电中;2=故障 |
2.4 开启充电
平台→充电桩:平台下发开启充电指令,启动指定端口的充电订单。
示例报文:#CHARGE-START,1,1,20250101120000123456,100
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #CHARGE-START | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 端口号 | Number | 1 | 1~12 |
| 4 | 订单编号 | String | 20250101120000123456 | 长度<=30字节,每笔订单编号不可重复 |
| 5 | 充电金额 | Number | 100 | 1元 |
充电桩→平台:返回开启充电结果及剩余订单剩余金额。
示例报文:#CHARGE-START,1,1,20250101120000123456,1
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #CHARGE-START | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 端口号 | Number | 1 | 1~12 |
| 4 | 订单编号 | String | 20250101120000123456 | 长度<=30字节,每笔订单编号不可重复 |
| 5 | 执行结果 | Number | 1 | 1=开启充电成功 2=开启充电失败,充电金额无效 3=开启充电失败,充电编号重复 4=开启充电失败,充电编号无效 |
2.5 终止充电
平台→充电桩:平台下发终止充电指令,结束指定端口的充电订单。
示例报文:#CHARGE-STOP,1,1,20250101120000123456
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #CHARGE-STOP | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 端口号 | Number | 1 | 1~12 |
| 4 | 订单编号 | String | 20250101120000123456 | 订单开启时传入的编号 |
充电桩→平台:返回终止充电结果及费用明细。
示例报文:#CHARGE-STOP,1,1,1,20250101120000123456,30,150,100,24,12,64
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #CHARGE-STOP | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 执行结果 | Number | 1 | 1=结束充电成功 4=结束充电失败,充电编号无效 5=结束充电失败,充电编号未找到 |
| 4 | 端口号 | Number | 1 | 1~12 |
| 5 | 订单编号 | String | 20250101120000123456 | |
| 6 | 充电时长 | Number | 30 | 充电时长30分钟 |
| 7 | 充电量 | Number | 150 | 充入电量0.15度 |
| 8 | 订单预付金额 | Number | 100 | 用户支付1元 |
| 9 | 电费 | Number | 24 | 电费0.24元 |
| 10 | 服务费 | Number | 12 | 服务费0.12元 |
| 11 | 订单剩余金额 | Number | 64 | 剩余金额0.64元 |
2.6 充电自停
充电桩→平台:充电桩上报自停事件及费用明细。
示例报文:#AUTO-STOP,1,2,1,20250101120000123456,30,150,100,24,12,64
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #AUTO-STOP | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 自停类型 | Number | 2 | 1=充满自停 2=充电完成(充电金额用完) 3=超载保护 |
| 4 | 端口号 | Number | 1 | 1~12 |
| 5 | 订单编号 | String | 20250101120000123456 | 订单开启时传入的编号 |
| 6 | 充电时长 | Number | 30 | 充电时长30分钟 |
| 7 | 充电量 | Number | 150 | 充入电量0.15度 |
| 8 | 订单预付金额 | Number | 100 | 用户支付1元 |
| 9 | 电费 | Number | 24 | 电费0.24元 |
| 10 | 服务费 | Number | 12 | 服务费0.12元 |
| 11 | 订单剩余金额 | Number | 64 | 剩余金额0.64元 |
平台→充电桩:平台确认自停事件并结束订单
示例报文:#AUTO-STOP,1,1,20250101120000123456,1
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #AUTO-STOP | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 端口号 | Number | 1 | 1~12 |
| 4 | 订单编号 | String | 20250101120000123456 | 长度<=30字节,每笔订单编号不可重复 |
| 5 | 执行结果 | Number | 1 | 1=充电自停成功 |
2.7 查询充电端口
平台→充电桩:查询充电端口工作状态。
示例报文:#PORT-QUERY,1,1
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #PORT-QUERY | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 端口号 | Number | 1 | 1~12 |
充电桩→平台:返回充电端口工作状态。
示例报文:#PORT-QUERY,1,1,0,1234,5,100
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #PORT-QUERY | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 端口号 | Number | 1 | 1~12 |
| 4 | 工作状态 | Number | 0 | 0=空闲;1=充电中;2=故障 |
| 5 | 有功功率 | Number | 1234 | 123.4W |
| 6 | 充电时长 | Number | 5 | 充电时长5分钟 |
| 7 | 剩余金额 | Number | 100 | 剩余金额1元 |
2.8 查询计费模型
平台→充电桩:查询充电桩当前计费模型。
示例报文:#BILLING-QUERY,1
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #BILLING-QUERY | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
充电桩→平台:返回当前计费模型数据。
示例报文:#BILLING-QUERY,1,101,1,100,4,800-1200-1800-2400,500-587-687-287,1,4,300-500-800-2200,120-150-220-270
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #BILLING-QUERY | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 计费模型编号 | String | 101 | 计费模型唯一标识 |
| 4 | 充电类型 | Number | 1 | 1=按电量收费 |
| 5 | 支付金额 | Number | 100 | 100=1元 |
| 6 | 电费数量 | Number | 4 | |
| 7 | 电费分段 | List | 800-1200-1800-2400 | 按时间分段计费:默认00:00~24:00 |
| 8 | 电费费率 | List | 500-587-687-287 | 0:00~8:00电费0.500元/度,8:00~12:00电费0.587元/度,12:00~18:00电费0.687元/度,18:00~24:00电费0.287元/度 |
| 9 | 服务费单位 | Number | 1 | 1=元/小时 2=元/度 |
| 10 | 服务费数量 | Number | 4 | |
| 11 | 服务费分段 | List | 300-500-800-2200 | 按功率分段计费:默认2200W |
| 12 | 服务费费率 | List | 120-150-220-270 | 0~300W服务费0.12元/小时(或元/度) |
2.9 设置计费模型
平台→充电桩:平台下发计费模型配置指令。
示例报文:#BILLING-SET,1,101,1,100,4,800-1200-1800-2400,500-587-687-287,1,4,300-500-800-2200,120-150-220-270
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #BILLING-SET | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 计费模型编号 | String | 101 | 计费模型唯一标识 |
| 4 | 充电类型 | Number | 1 | 1=按电量收费 |
| 5 | 支付金额 | Number | 100 | 100=1元 |
| 6 | 电费数量 | Number | 4 | |
| 7 | 电费分段 | List | 800-1200-1800-2400 | 按时间分段计费:默认00:00~24:00 |
| 8 | 电费费率 | List | 500-587-687-287 | |
| 9 | 服务费单位 | Number | 1 | 1=元/小时 2=元/度 |
| 10 | 服务费数量 | Number | 4 | |
| 11 | 服务费分段 | List | 300-500-800-2200 | 按功率分段计费:默认2200W |
| 12 | 服务费费率 | List | 120-150-220-270 |
充电桩→平台:返回计费模型配置执行结果。
示例报文:#BILLING-SET,1,1
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #BILLING-SET | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 执行结果 | Number | 1 | 1=计费模型设置成功 2=计费模型设置失败 |
2.10 查询工作参数
平台→充电桩:查询充电桩运行参数。
示例报文:#PARAM-QUERY,1
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #PARAM-QUERY | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
充电桩→平台:返回执行结果。
示例报文:#PARAM-QUERY,1,1,10,60,9000,9000,720
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #PARAM-QUERY | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 充电自停开关 | Number | 1 | 默认值1=开启;0=关闭 |
| 4 | 充电自停触发功率 | Number | 10 | 默认值10W,功率低于10W触发自停计时 |
| 5 | 充电自停触发时延 | Number | 60 | 触发并持续60S后充电桩停止充电 |
| 6 | 端口最大功率 | Number | 9000 | 预设值9000W,端口超载保护功率 |
| 7 | 充电桩最大功率 | Number | 9000 | 预设值9000W,充电桩超载保护功率 |
| 8 | 最大单次充电时长 | Number | 720 | 默认值720分钟 |
| 9 | 心跳间隔 | Number | 10 | 10分钟 |
2.11 设置工作参数
平台→充电桩:在线修改充电桩运行参数,无特定需求可不做修改。
示例报文:#PARAM-SET,1,0,10,60,8000,8000,900
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #PARAM-SET | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 充电自停开关 | Number | 0 | 0=关闭,充电端口无功率时不再自停 |
| 4 | 充电自停触发功率 | Number | 10 | 功率低于10W触发充电自停计时 |
| 5 | 充电自停触发时延 | Number | 60 | 自停计时60S后充电桩停止充电 |
| 6 | 端口最大功率 | Number | 8000 | 8KW,端口超载保护功率 |
| 7 | 充电桩最大功率 | Number | 8000 | 8KW,充电桩超载保护功率 |
| 8 | 最大单次充电时长 | Number | 900 | 充电时长900分钟后充电自停 |
| 9 | 心跳间隔 | Number | 10 | 10分钟 |
充电桩→平台:返回参数配置执行结果。
示例报文:#PARAM-SET,1,1
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #PARAM-SET | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 执行结果 | Number | 1 | 1=参数设置成功 2=参数设置失败,参数异常 |
2.12 远程重启
平台→充电桩:充电桩接收到指令3秒以后重新启动。
示例报文:#REBOOT,1
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #REBOOT | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
充电桩→平台:返回执行结果。
示例报文:#REBOOT,1,1
| 序号 | 参数名称 | 数据类型 | 示例数据 | 备注 |
|---|---|---|---|---|
| 1 | 起始标识+指令类型 | String | #REBOOT | |
| 2 | 指令序号 | 数值型 | 1 | 0-65535,持久化存储 |
| 3 | 执行结果 | Number | 1 | 0=重启失败;1=重启成功 |