Appearance
注册平台
注册平台负责设备首次登录、录入状态确认、业务 MQTT 参数下发、业务密钥下发和测试模式声明。开放协议与私有协议共用该阶段,后续业务协议由
productCategory决定。
1 协议基础
设备启动后先连接注册平台。注册平台确认设备已录入并下发业务 MQTT 参数后,设备保存参数、连接业务 MQTT,再根据 productCategory 选择业务协议适配器:
productCategory = 5:开放协议。productCategory != 5:私有协议。
注册平台链路使用登录 MQTT Topic;业务链路使用注册平台下发的业务 Topic、chargerKey 和 testMode。testMode = 0 时业务数据使用 AES-128-CBC/PKCS7 加解密,IV 为 16 字节全 0;productCategory = 5 且 testMode = 1 时开放协议业务链路使用未加密明文,便于客户调试协议。testMode = 1 不适用于私有协议。
1.1 数据结构
| 起始标志 | 指令类型 | 消息体 |
|---|---|---|
# | 注册平台指令 | 使用逗号分隔的字段列表 |
示例数据:#<指令类型>,<消息体>
2 设备登录 #LOGIN
设备 → 注册平台:设备连接注册平台后发送登录报文。
示例报文:#LOGIN,0,NCS12,0.0.5,864710071234567,460047661234567,89860846123456789000,A
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #LOGIN | 固定为 #LOGIN;设备登录指令 |
| 2 | 指令序号 | Number | 0 | 当前代码固定使用 0 |
| 3 | 项目名称 | String | NCS12 | 入口常量,唯一事实来源为 main.lua |
| 4 | 固件版本 | String | 0.0.5 | 入口常量,唯一事实来源为 main.lua |
| 5 | IMEI | String | 864710071234567 | 设备 IMEI |
| 6 | IMSI | String | 460047661234567 | SIM 卡 IMSI |
| 7 | ICCID | String | 89860846123456789000 | SIM 卡 ICCID |
| 8 | 项目子类型 | String | A | 入口常量,唯一事实来源为 main.lua |
3 登录响应 #LOGIN
注册平台 → 设备:注册平台可直接在 #LOGIN 响应中返回录入状态和业务服务器参数。
示例报文:#LOGIN,0,1,1234,mqtt.goldmel.com,1883,user,password,gm/charger/dev/864710071234567,gm/charger/srv/864710071234567,5,0123456789,123456789012345,1236965080482281,0
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #LOGIN | 固定为 #LOGIN;登录响应指令 |
| 2 | 指令序号 | Number | 0 | 通常回传设备登录序号 |
| 3 | 注册状态 | Number | 1 | 0 表示未录入,设备保持注册平台链路并播放验证码;非 0 表示可进入业务链路 |
| 4 | 验证码 | String | 1234 | 未录入时用于屏显或语音提示;已录入时可用于平台注册校验 |
| 5 | 业务服务器地址 | String | mqtt.goldmel.com | 业务 MQTT 服务器域名或 IP |
| 6 | 业务服务器端口 | Number/String | 1883 | 业务 MQTT 端口 |
| 7 | 业务用户名 | String | user | 业务 MQTT 用户名 |
| 8 | 业务密码 | String | password | 业务 MQTT 密码 |
| 9 | 设备上行 Topic | String | gm/charger/dev/864710071234567 | 设备发布业务报文的 Topic;完整响应建议显式下发 |
| 10 | 平台下行 Topic | String | gm/charger/srv/864710071234567 | 设备订阅业务报文的 Topic;完整响应建议显式下发 |
| 11 | 产品类目 | Number | 5 | 5 选择开放协议;其它数值选择私有协议 |
| 12 | 商户编号 | String | 0123456789 | 业务平台商户标识 |
| 13 | 充电桩编号 | String | 123456789012345 | 业务侧桩编号;业务注册报文优先使用该值 |
| 14 | 业务密钥 | String | 1236965080482281 | 16字节业务链路 AES 密钥 |
| 15 | 测试模式 | Number | 0 | 0 表示业务链路使用 AES;1 仅允许 productCategory = 5 的开放协议业务链路使用明文 |
当前 NCS02-C 代码要求完整业务配置必须包含
testMode。新平台应使用完整响应,避免业务关键配置缺失导致设备拒绝连接业务服务器。
未录入示例:#LOGIN,0,0,1234
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #LOGIN | 固定为 #LOGIN;登录响应指令 |
| 2 | 指令序号 | Number | 0 | 通常回传设备登录序号 |
| 3 | 注册状态 | Number | 0 | 未录入或不可进入业务 |
| 4 | 验证码 | String | 1234 | 设备会进入验证码提示流程 |
4 业务参数下发 #LOGIN-RETURN
注册平台 → 设备:注册平台也可使用 #LOGIN-RETURN 独立下发业务服务器参数。设备解析完成后会向注册平台回传保存结果。
示例报文:#LOGIN-RETURN,mqtt.goldmel.com,1883,user,password,gm/charger/dev/864710071234567,gm/charger/srv/864710071234567,5,0123456789,123456789012345,1236965080482281,0
开放平台测试模式示例:#LOGIN-RETURN,47.92.99.158,18883,saomachong,qrCODE_@Gm.886601,gm/open/up/862288081565176,gm/open/down/862288081565176,5,5,00000000,0542993181565176,1
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #LOGIN-RETURN | 固定为 #LOGIN-RETURN;业务参数下发指令 |
| 2 | 业务服务器地址 | String | mqtt.goldmel.com | 业务 MQTT 服务器域名或 IP |
| 3 | 业务服务器端口 | Number/String | 1883 | 业务 MQTT 端口 |
| 4 | 业务用户名 | String | user | 业务 MQTT 用户名 |
| 5 | 业务密码 | String | password | 业务 MQTT 密码 |
| 6 | 设备上行 Topic | String | gm/charger/dev/864710071234567 | 设备发布业务报文的 Topic |
| 7 | 平台下行 Topic | String | gm/charger/srv/864710071234567 | 设备订阅业务报文的 Topic |
| 8 | 产品类目 | Number | 5 | 5 选择开放协议;其它数值选择私有协议 |
| 9 | 商户编号 | String | 0123456789 | 业务平台商户标识 |
| 10 | 充电桩编号 | String | 123456789012345 | 业务侧桩编号 |
| 11 | 业务密钥 | String | 1236965080482281 | 16字节业务链路 AES 密钥 |
| 12 | 测试模式 | Number | 0 | 0 表示业务链路使用 AES;1 仅允许 productCategory = 5 的开放协议业务链路使用明文 |
当前 NCS02-C 代码要求
#LOGIN-RETURN至少携带 12 个字段,且testMode必须为0或1。字段缺失、testMode非法,或productCategory != 5时下发testMode = 1,设备都会拒绝进入业务链路。
5 参数保存结果 #LOGIN-RETURN
设备 → 注册平台:设备解析并保存业务参数后,向注册平台回传结果。
示例报文:#LOGIN-RETURN,0
| 序号 | 字段名 | 类型 | 示例值 | 说明 |
|---|---|---|---|---|
| 1 | 指令类型 | String | #LOGIN-RETURN | 固定为 #LOGIN-RETURN;业务参数保存结果 |
| 2 | 执行结果 | Number | 0 | 0 保存成功;1 保存失败 |
6 注册流程约束
6.1 当前处理流程
text
设备发送 #LOGIN
-> 注册平台返回 #LOGIN 或 #LOGIN-RETURN
-> login.lua 解析并保存业务参数
-> reg_flow.lua 连接业务 MQTT
-> proto_router.lua 根据 productCategory 选择业务协议
-> charge_sched.lua 发送业务注册和业务心跳6.2 关键约束
productCategory必须由注册平台或有效持久化配置提供;业务协议选择只由该字段决定。testMode必须由注册平台或有效持久化配置提供;0为普通模式,1为开放协议测试模式。chargerKey是16字节业务链路 AES 密钥;普通模式必须使用该密钥加解密,开放协议测试模式保留该字段但业务报文明文传输。- 业务 Topic 建议由注册平台显式下发;仅依赖本地 Topic 拼接属于旧平台兼容路径。
- 当前模板没有独立的“注册阶段业务心跳”。业务 MQTT 就绪后,心跳由协议适配器生成:私有协议为
#0,开放协议为#HEARTBEAT。