OCPP 1.6 协议详解:StatusNotification 状态通知指令
实时监控充电桩状态的核心机制

一、指令概述
StatusNotification(状态通知)是OCPP 1.6协议中用于向中央系统报告充电桩或连接器状态变化的重要指令。通过此指令,中央系统可以实时了解充电桩的运行状态、故障信息和可用性情况。
1.1 指令作用
- **状态监控**:实时报告充电桩和连接器的状态变化
- **故障告警**:及时上报故障信息,便于快速响应
- **可用性管理**:告知中央系统充电桩是否可用
- **运维支持**:为远程运维和故障诊断提供数据支持
1.2 触发时机
- 充电桩或连接器状态发生变化时
- 检测到错误或故障时
- 充电桩启动或重启后
- 网络恢复后重新连接时
- 收到TriggerMessage请求时
二、指令详解
2.1 StatusNotification.req(请求)
充电桩向中央系统发送的状态通知请求,包含以下字段:
| 字段 | 说明 |
|---|---|
| connectorId | 0:表示充电桩主控制器; >0:表示具体充电连接器(如 1、2、3...); |
| status | 连接器当前状态ConnectorId=0 仅支持以下三种:- Available(可用)- Unavailable(不可用)- Faulted(故障) |
| errorCode | 故障错误代码(状态为 Faulted 时使用) |
| timestamp | 状态发生的日期时间,格式为 ISO 8601若省略,默认使用消息接收时间 |
| info | 与错误 / 状态相关的附加描述信息,自由文本格式 |
JSON示例:
javascript
[
2,
"12345",
"StatusNotification",
{
"connectorId": 1,
"errorCode": "NoError",
"status": "Charging",
"timestamp": "2024-01-15T10:30:00Z",
"info": ""
}
]
2.2 StatusNotification.conf(响应)
中央系统对状态通知的响应,不包含任何字段。
JSON示例:
javascript
[
3,
"12345",
{}
]
三、工作流程
3.1 状态变化通知流程

3.2 时序图

3.3 状态转换矩阵
OCPP 1.6定义了详细的状态转换规则:
| 当前状态 | 可转换到的状态 |
|---|---|
| Available | Preparing、Charging、SuspendedEV、SuspendedEVSE、Reserved、Unavailable、Faulted |
| Preparing | Available、Charging、SuspendedEV、SuspendedEVSE、Finishing、Faulted |
| Charging | Available、SuspendedEV、SuspendedEVSE、Finishing、Unavailable、Faulted |
各状态详解:
从 Available 可以转换到:
- Preparing(用户开始使用)
- Charging(直接开始充电,无需授权)
- SuspendedEV(类似Preparing但EV不充电)
- SuspendedEVSE(类似Preparing但EVSE不允许充电)
- Reserved(收到ReserveNow命令)
- Unavailable(收到ChangeAvailability命令)
- Faulted(检测到故障)
从 Preparing 可以转换到:
- Available(用户取消操作)
- Charging(开始充电)
- SuspendedEV(EV不充电)
- SuspendedEVSE(EVSE不允许充电)
- Finishing(超时未完成)
- Faulted(检测到故障)
从 Charging 可以转换到:
- Available(充电结束,无需用户操作)
- SuspendedEV(EV暂停充电)
- SuspendedEVSE(EVSE暂停供电)
- Finishing(用户停止充电)
- Unavailable(计划变为不可用)
- Faulted(检测到故障)
四、重要注意事项
4.1 ConnectorId 0的特殊性
ConnectorId 0代表充电桩主控制器,只能报告以下状态:
- Available(可用)
- Unavailable(不可用)
- Faulted(故障)
ConnectorId > 0可以报告所有9种状态。
4.2 最小状态持续时间
配置键: `MinimumStatusDuration`
- 定义状态稳定的最小持续时间
- 短于此时间的状态变化可以不发送通知
- 用于减少频繁状态切换导致的消息风暴
注意:
- 设置为0不会覆盖制造商的默认最小持续时间
- 设置过高可能导致所有状态通知延迟
4.3 错误处理优先级
EVCommunicationError的特殊处理:
- 只能与Preparing、SuspendedEV、SuspendedEVSE、Finishing状态一起使用
- 应视为警告,而非真正错误
- 充电桩不应进入Faulted状态
- 应进入SuspendedEVSE状态
4.4 离线行为
离线期间的状态变化:
- 只发送当前状态的通知
- 可以报告离线期间发生的错误
- 不应发送历史状态变化事件
- 必须按事件发生顺序发送
网络恢复后:

4.5 状态持久化
Unavailable状态的持久性:
- 通过ChangeAvailability命令设置的Unavailable状态必须在重启后保持
- 充电桩可以使用Unavailable状态用于其他内部目的
- 固件更新期间
- 等待初始Accepted注册状态期间
4.6 Occupied状态的拆分
OCPP 1.6的重要变化:
OCPP 1.5中的Occupied状态在1.6中被拆分为5个更详细的状态:
- Preparing
- Charging
- SuspendedEV
- SuspendedEVSE
- Finishing
好处:
- 提供更详细的状态信息
- 便于中央系统精确监控
- 改善用户体验
影响:
- 会发送更多的StatusNotification消息
- 可以通过MinimumStatusDuration优化
五、实际应用场景
5.1 场景一:正常充电流程状态变化
-
Available → Preparing(用户刷卡)
-
Preparing → Charging(插枪,开始充电)
-
Charging → SuspendedEV(EV电池满,暂停取电)
-
SuspendedEV → Charging(EV继续取电)
-
Charging → Finishing(用户刷卡停止)
-
Finishing → Available(用户拔枪离开)
5.2 场景二:智能充电场景
-
Charging(正常充电)
-
Charging → SuspendedEVSE(电网负荷高,智能充电限制)
-
SuspendedEVSE → Charging(电网负荷降低,恢复充电)
-
Charging → Finishing(充电完成)
5.3 场景三:故障处理
-
Charging(正常充电)
-
Charging → Faulted(检测到过流故障)
-
运维人员远程诊断
-
故障排除
-
Faulted → Available(恢复正常)
5.4 场景四:预约充电
-
Available → Reserved(中央系统发送ReserveNow)
-
Reserved → Preparing(预约用户到达刷卡)
-
Preparing → Charging(开始充电)
-
Charging → Finishing → Available(充电完成)
5.5 场景五:远程设置为不可用
-
Available(正常使用)
-
中央系统发送ChangeAvailability
-
Available → Unavailable( scheduled,当前有交易)
-
交易结束
-
Unavailable(生效)
-
运维完成后,中央系统再次发送ChangeAvailability
-
Unavailable → Available(恢复可用)
5.6 场景六:离线状态同步
-
充电桩离线
-
离线期间:Charging → Finishing → Available
-
网络恢复
-
发送BootNotification
-
发送StatusNotification(当前状态:Available)
-
中央系统更新状态
六、最佳实践
6.1 状态报告策略
- **及时性**:状态变化后尽快报告
- **准确性**:确保报告的状态准确反映实际情况
- **完整性**:报告所有必要的状态信息
- **优化性**:合理使用MinimumStatusDuration减少冗余消息
6.2 错误处理
- **详细记录**:在info字段提供详细的错误描述
- **分级处理**:区分错误和警告
- **自动恢复**:实现自动故障恢复机制
- **远程支持**:支持远程故障诊断
6.3 性能优化
- **消息去重**:避免重复发送相同状态
- **批量处理**:合理批量处理状态变化
- **超时设置**:设置合理的响应超时时间
- **重试机制**:实现可靠的重试机制
6.4 用户体验
- **状态显示**:在充电桩显示屏上清晰显示当前状态
- **错误提示**:提供友好的错误提示信息
- **多语言支持**:支持多种语言的错误提示
- **帮助信息**:提供故障处理和联系信息
七、常见问题
Q1: 什么时候需要发送StatusNotification?
A:
- 充电桩或连接器状态发生变化时
- 检测到错误或故障时
- 充电桩启动或重启后(如果状态变化)
- 网络恢复后(报告当前状态)
- 收到TriggerMessage请求时
Q2: ConnectorId 0和ConnectorId > 0有什么区别?
A:
- ConnectorId 0代表充电桩主控制器,只能报告Available、Unavailable、Faulted三种状态
- ConnectorId > 0代表具体连接器,可以报告所有9种状态
Q3: 如何处理频繁的状态变化?
A:
- 使用MinimumStatusDuration配置键
- 设置合理的最小持续时间
- 短于此时间的状态变化可以不发送通知
- 但要注意不要设置过大导致状态更新延迟
Q4: EVCommunicationError是什么?
A:
- 表示与电动汽车的通信失败
- 可能是Mode 3或其他通信协议问题
- 应视为警告而非真正错误
- 充电桩应进入SuspendedEVSE状态而非Faulted
Q5: 离线期间如何处理状态通知?
A:
- 只记录当前状态
- 网络恢复后发送当前状态的通知
- 可以报告离线期间发生的错误
- 不应发送历史状态变化事件
- 必须按事件发生顺序发送
八、总结
StatusNotification是OCPP 1.6协议中实现充电桩实时监控的核心指令。正确实现StatusNotification指令需要注意:
- **状态准确**:确保报告的状态准确反映实际情况
- **及时上报**:状态变化后尽快发送通知
- **错误分级**:正确区分错误和警告
- **优化策略**:合理使用MinimumStatusDuration减少冗余消息
- **离线处理**:正确处理离线期间的状态同步
- **用户体验**:提供清晰的状态显示和错误提示
通过合理实现StatusNotification指令,可以实现对充电桩的实时监控和快速故障响应,提高运维效率和用户满意度。
相关阅读:
- OCPP1.6协议字段解析 - ChangeAvailability 平台控制充电桩或指定枪口的可用状态-CSDN博客
- OCPP 1.6 协议详解:BootNotification 启动通知指令-CSDN博客
- 深度解析 OCPP 协议 Uplink 命令处理器:OcppUplinkCmdExe 继承类设计与实践-CSDN博客
参考文档:
END
如果觉得这份基础知识点总结清晰,别忘了动动小手点个赞👍,再关注一下呀~ 后续还会分享更多有关开发问题的干货技巧,同时一起解锁更多好用的功能,少踩坑多提效!🥰 你的支持就是我更新的最大动力,咱们下次分享再见呀~🌟