OCPP 1.6-J 配置管理手册:GetConfiguration / ChangeConfiguration 与标准配置键

1. 概述

OCPP 1.6 采用扁平 key-value 配置模型。中央系统(CS/CSMS)通过两条指令管理充电桩(CP)的配置:

指令 方向 作用 特点
GetConfiguration CS → CP 读取配置键当前值 可批量(一次最多 GetConfigurationMaxKeys 个)
ChangeConfiguration CP ← CS 修改配置键的值 一次只能改一个键

核心原则

  • 两条指令的复杂逻辑都发生在 CS 侧,充电桩只需实现 key-value 的读写与校验。
  • 配置键分为必填键可选键 ;可选键不实现时,CP 应在 unknownKey 中返回,或按 unsupported 处理。
  • 除标准键外,厂商会扩展自定义键 (如 ServerURLFreeChargingLockCablePermanently)。运维时建议先用空键列表的 GetConfiguration 拉取该桩全部键,再针对处理。

⚠️ 实践铁律 :OCPP 1.6 里所有 value 都以字符串传输 ,包括数字和布尔值("60""true")。发送 JSON 原生数字(60)是导致 Rejected最常见原因 。键名严格区分大小写

2. GetConfiguration ------ 读取配置

2.1 GetConfiguration.req(CS → CP)

字段 类型 必填 约束 说明
key array of string ⬜ 可选 每项 maxLength: 50 要检索的配置键列表。省略或传空数组时返回该桩支持的全部键

📌 若请求的键数量超过该桩 GetConfigurationMaxKeys 的值,CP 可能直接返回错误。批量拉取前建议先读一次该键。

2.2 GetConfiguration.conf(CP → CS)

字段 类型 必填 约束 说明
configurationKey array ⬜ 可选 --- 已识别的配置键列表
key string maxLength: 50 配置键名称
readonly boolean --- 该键是否为只读(true = 不可通过 ChangeConfiguration 修改)
value string maxLength: 500 该键的当前值(可能为空字符串)
unknownKey array of string 每项 maxLength: 50 请求了但该桩不识别的键列表

2.3 GetConfiguration 实例

请求:读取单个键

csharp 复制代码
[2, "cfg-001", "GetConfiguration", {
  "key": ["HeartbeatInterval", "NumberOfConnectors"]
}]

响应

json 复制代码
[3, "cfg-001", {
  "configurationKey": [
    { "key": "HeartbeatInterval", "readonly": false, "value": "300" },
    { "key": "NumberOfConnectors", "readonly": true, "value": "2" }
  ],
  "unknownKey": []
}]

请求:拉取该桩全部配置(推荐用于设备建档 / 排查)

csharp 复制代码
[2, "cfg-002", "GetConfiguration", {}]

响应(含不识别键的示例)

json 复制代码
[3, "cfg-002", {
  "configurationKey": [
    { "key": "SupportedFeatureProfiles", "readonly": true, "value": "Core,FirmwareManagement,LocalAuthListManagement,Reservation,SmartCharging,RemoteTrigger" },
    { "key": "MeterValuesSampledData", "readonly": false, "value": "Energy.Active.Import.Register,Power.Active.Import" }
  ],
  "unknownKey": ["FakeKeyThatDoesNotExist"]
}]

3. ChangeConfiguration ------ 修改配置

3.1 ChangeConfiguration.req(CS → CP)

字段 类型 必填 约束 说明
key string maxLength: 50 要修改的配置键名称
value string maxLength: 500 配置键的新值(字符串形式

3.2 ChangeConfiguration.conf(CP → CS)

字段 类型 必填 说明
status string(枚举) 配置修改结果,见下表
status 含义 CS 侧应对动作
Accepted 键已设置且立即生效 无需额外动作,可回读校验
Rejected 键存在但值被拒绝(超范围 / 格式错误 / 该桩上为只读) 检查值格式(是否误传 JSON 数字)、范围、只读性
RebootRequired 值已存储,但需重启后才生效 CS 需再下发 Reset(Soft / Hard),重启后用 GetConfiguration 回读确认
NotSupported 该桩完全不支持此键 确认 key 是否为厂商私有键或该桩固件未实现;必要时改用 DataTransfer 扩展

3.3 ChangeConfiguration 实例

请求:修改心跳间隔

csharp 复制代码
[2, "chg-001", "ChangeConfiguration", {
  "key": "HeartbeatInterval",
  "value": "900"
}]

响应:立即生效

csharp 复制代码
[3, "chg-001", { "status": "Accepted" }]

请求:修改计量采样数据项(通常需重启)

csharp 复制代码
[2, "chg-002", "ChangeConfiguration", {
  "key": "MeterValuesSampledData",
  "value": "Energy.Active.Import.Register,Power.Active.Import,Current.Import,Voltage"
}]

响应:需重启生效

csharp 复制代码
[3, "chg-002", { "status": "RebootRequired" }]

典型错误响应示例

csharp 复制代码
[3, "chg-003", { "status": "NotSupported" }]
[3, "chg-004", { "status": "Rejected" }]

4. OCPP 1.6 标准配置键清单

访问权限R = 只读(readonly: true,无法用 ChangeConfiguration 修改);RW = 可读可写。类型boolean / integer / CSL(Comma-Separated List,逗号分隔列表)。必填性:Required = 规范要求 CP 必须支持;Optional = 规范中可选。

4.1 Core(核心,32 个键)

键名 类型 访问 必填性 说明
AllowOfflineTxForUnknownId boolean RW 可选 离线时是否为未知 idTag 启动交易。true 可保证网络中断时站点仍可充电,代价是可能产生无法计费的会话
AuthorizationCacheEnabled boolean RW 可选 是否启用授权缓存(由真实 Authorize 结果自动填充,区别于后端推送的本地授权列表)
AuthorizeRemoteTxRequests boolean R 或 RW 必填 RemoteStartTransaction 前是否需先走一次 Authorize 授权
BlinkRepeat integer(次) RW 可选 信号提示时灯具闪烁次数
ClockAlignedDataInterval integer(秒) RW 必填 时钟对齐电表值间隔(自 00:00:00 起算)。0 = 禁用;900 = 每 15 分钟一次
ConnectionTimeOut integer(秒) RW 必填 从进入 Preparing 到未插枪自动取消交易的超时时长
ConnectorPhaseRotation CSL RW 必填 各枪相对电表的相位序,格式 connectorId.RST,如 0.RST, 1.RST, 2.RTS填错会导致分相电表值与单相负载均衡错误
ConnectorPhaseRotationMaxLength integer R 可选 ConnectorPhaseRotation 的最大项数
GetConfigurationMaxKeys integer R 必填 单次 GetConfiguration.req 可请求的最大键数
HeartbeatInterval integer(秒) RW 必填 无任何 OCPP 交互后发送 Heartbeat 的间隔。BootNotification.conf 的 interval 可覆盖此值
LightIntensity integer(%) RW 可选 充电桩照明亮度百分比
LocalAuthorizeOffline boolean RW 必填 离线时是否使用本地授权列表 / 缓存授权启动交易
LocalPreAuthorize boolean RW 必填 在线时是否用本地授权列表 / 缓存预授权启动,不等 Authorize.conf
MaxEnergyOnInvalidId integer(Wh) RW 可选 idTag 被判定无效后仍允许交付的最大电量
MeterValuesAlignedData CSL RW 必填 时钟对齐 MeterValues 上报的量测项(按 ClockAlignedDataInterval 触发,无论是否插枪
MeterValuesAlignedDataMaxLength integer R 可选 MeterValuesAlignedData 的最大项数
MeterValuesSampledData CSL RW 必填 交易中周期采样的量测项 (按 MeterValueSampleInterval 发送)。默认 Energy.Active.Import.Register
MeterValuesSampledDataMaxLength integer R 可选 MeterValuesSampledData 的最大项数
MeterValueSampleInterval integer(秒) RW 必填 交易中采样 MeterValuesSampledData 的间隔。0 = 禁用,60 为常见合理值
MinimumStatusDuration integer(秒) RW 可选 状态稳定多久后才上报 StatusNotification,用于抑制状态抖动
NumberOfConnectors integer R 必填 该桩的物理枪数(只读,无法修改)
ResetRetries integer(次) RW 必填 Reset 失败后的重试次数
StopTransactionOnEVSideDisconnect boolean RW 必填 车端拔枪时是否停止运行中的交易。false 可能导致会话永不结束
StopTransactionOnInvalidId boolean RW 必填 收到非 Accepted 的授权状态时是否停止进行中的交易
StopTxnAlignedData CSL RW 必填 附加到 StopTransaction 的 transactionData 中的时钟对齐量测项
StopTxnAlignedDataMaxLength integer R 可选 StopTxnAlignedData 的最大项数
StopTxnSampledData CSL RW 必填 附加到 StopTransaction 的 transactionData 中的采样量测项。务必保持简短(整个会话的每个采样都会重复,易产生被后端拒绝的 MB 级报文)
StopTxnSampledDataMaxLength integer R 可选 StopTxnSampledData 的最大项数
SupportedFeatureProfiles CSL R 必填 该桩支持的功能簇列表。取值:CoreFirmwareManagementLocalAuthListManagementReservationSmartChargingRemoteTrigger
SupportedFeatureProfilesMaxLength integer R 可选 SupportedFeatureProfiles 的最大项数
TransactionMessageAttempts integer(次) RW 必填 交易类消息(Start/StopTransaction、MeterValues)后端处理失败后的重试次数
TransactionMessageRetryInterval integer(秒) RW 必填 交易类消息重试的基础等待间隔
UnlockConnectorOnEVSideDisconnect boolean RW 必填 车端拔枪时桩侧是否解锁线缆
WebSocketPingInterval integer(秒) RW 可选 OCPP-J 连接上 WebSocket Ping 帧间隔。0 = 禁用。用于解决 NAT/防火墙断开空闲连接导致的掉线

4.2 LocalAuthListManagement(本地授权列表管理,3 个键)

键名 类型 访问 必填性 说明
LocalAuthListEnabled boolean RW 必填 是否启用本地授权列表
LocalAuthListMaxLength integer R 必填 本地授权列表可存储的最大 idTag 条目数
SendLocalListMaxLength integer R 必填 单条 SendLocalList.req 可携带的最大条目数。超出需分批做差分更新

4.3 Reservation(预约,1 个键)

键名 类型 访问 必填性 说明
ReserveConnectorZeroSupported boolean R 可选 存在且为 true 时,表示该桩支持**对 0 号枪(即整桩/任意枪)**的预约

4.4 SmartCharging(智能充电,5 个键)

键名 类型 访问 必填性 说明
ChargeProfileMaxStackLevel integer R 必填 充电配置可接受的最高 StackLevel(层级越高优先级越高),同时也表示每种用途允许安装的最大充电计划数
ChargingScheduleAllowedChargingRateUnit CSL R 必填 充电计划支持的单位:Current(A)、Power(W)。向只接受 A 的桩发 W 会被拒绝
ChargingScheduleMaxPeriods integer R 必填 单个 ChargingSchedule 允许的最大周期数
ConnectorSwitch3to1PhaseSupported boolean R 可选 存在且为 true 时,支持交易过程中三相/单相切换
MaxChargingProfilesInstalled integer R 必填 同时可安装的充电配置数量上限

4.5 FirmwareManagement(固件管理)

键名 类型 访问 必填性 说明
SupportedFileTransferProtocols CSL R 必填 支持的文件传输协议,如 HTTP,HTTPS,FTP。决定 GetDiagnosticsUpdateFirmwarelocation 可用协议

说明:SupportedFileTransferProtocols 属于 FirmwareManagement 功能簇的配置键,规范中该簇涉及的键极少。若该桩未实现 FirmwareManagement,此键可能不出现在 GetConfiguration 结果中。

4.6 安全扩展键(OCPP 1.6J Security Whitepaper,非规范正文)

以下键来自 OCPP 1.6J Security Whitepaper ,在正文规范中不存在,是否支持取决于固件实现(推荐但非强制):

键名 类型 访问 说明
SecurityProfile integer RW 安全档位:0 = ws 无认证;1 = ws + Basic Auth;2 = wss + Basic Auth;3 = wss + 客户端证书
AuthorizationKey string RW HTTP Basic Auth 密码(SecurityProfile 为 1 或 2 时必填)
CpoName string RW 充电运营商名称,用于证书签发
AdditionalRootCertificateCheck boolean RW 是否对根证书做额外校验
CertificateStoreMaxLength integer R 证书库可容纳的证书数量
CertificateSignedMaxChainSize integer R 证书链最大长度

5. 常见量测项(measurand)取值参考

MeterValuesSampledDataMeterValuesAlignedDataStopTxnSampledDataStopTxnAlignedData 这四个 CSL 键的取值来自同一套 measurand 词汇表:

measurand 说明
Energy.Active.Import.Register 累计有功电能(计费核心,移除它会破坏计费
Power.Active.Import 实时有功功率
Current.Import/Current.Offered 实际 / 可提供电流(三相桩上单项会展开为 3 个值)
Voltage 电压
Temperature 温度
SoC 电池荷电状态(AC 桩通常无此值)
Frequency 频率
Power.Factor 功率因数

⚠️ 陷阱 :只要列表中有一个 measurand 不被支持 ,整个列表就会被拒绝;Wh / kWh 单位不可自行假设;采样间隔过短会产生高昂流量成本。

6. 运维速查与注意事项

6.1 速查表

场景 做法
查询桩的枪数 GetConfigurationNumberOfConnectors(只读)
拉取桩支持的全部配置 GetConfiguration(不传 key 或传空数组)
调整心跳频率 ChangeConfigurationHeartbeatInterval;注意会被 BootNotification.conf 覆盖
调整计量上报粒度 ChangeConfigurationMeterValuesSampledData+MeterValueSampleInterval,通常返回 RebootRequired
修相位序 ChangeConfigurationConnectorPhaseRotation,三相站点务必核对
判断是否支持智能充电 GetConfigurationSupportedFeatureProfiles
排查掉线 GetConfigurationWebSocketPingInterval,为 0 时考虑设为 30--300

6.2 高频问题清单

  1. 改配置返回 ​Rejected → 优先检查 value 是否误传成 JSON 数字/布尔;其次检查范围与是否只读。
  2. 改配置返回 ​RebootRequired → 必须由 CS 再下发一次 Reset,重启后回读确认
  3. 读配置返回 ​unknownKey → 该桩固件未实现该键;核对键名拼写(大小写敏感)是否与规范一致。
  4. NotSupported 与 ​Rejected 的区别 → 前者是键不支持 ,后者是值有问题(键本身存在)。
  5. 厂商私有键 → 标准之外的键(如 ServerURLFreeCharging)仅该厂商桩支持,不可跨厂商复用。

6.3 与其他指令的配合

相关指令 关系
BootNotification .conf 中的 interval覆盖 HeartbeatInterval
Reset 收到 RebootRequired 后必须配合下发
TriggerMessage 可用 DiagnosticsStatusNotification 等触发状态自检,辅助确认配置生效
GetReport/GetVariables(OCPP 2.0.1) 2.0.1 起配置管理改走设备模型变量,与本手册的 key-value 模型完全不同,迁移时需重写
相关推荐
传奇开心果编程1 小时前
【Go入门练中学】第1课:从零开始
后端·学习·golang
isfox1 小时前
Python 的 @classmethod 和 @staticmethod:什么时候用哪个,一次说清楚
后端
薛定谔的算法1 小时前
前端视角秒懂:Java 和 Spring Boot 的关系,就像 JS 和 React
后端
颜进强1 小时前
从零搭一套 WorkBuddy Skill 骨架:调接口 → 生成 HTML 报告的分层设计与流转拆解
前端·后端·ai编程
寒蝉1282 小时前
从真实业务场景看缓存的代价
后端
深蓝AI2 小时前
Agent 记忆层落地实战:抽取、整合、存储、检索,为什么大上下文窗口救不了你
后端·架构
steven1582 小时前
第 17 章 组件与配置问题
后端
dkbnull2 小时前
Spring Boot配置文件敏感信息加密解密
spring boot·后端