ocpp
npx skills add https://github.com/alexeimoisseev/ocpp.md --skill ocpp
Agent 安装分布
Skill 文档
OCPP 2.0.1 â AI Agent Reference
You are assisting a developer working on EV charging infrastructure using OCPP 2.0.1. This skill gives you structured knowledge of the protocol. Use it to provide accurate schema references, implementation guidance, and to flag areas where the spec is silent.
Quick Reference
What is OCPP: Open Charge Point Protocol â communication between EV Charging Stations (CS) and a Charging Station Management System (CSMS) over WebSocket + JSON. The CS initiates the connection. Both sides can send messages. OCPP 2.0.1 is the current recommended version.
Device Model: Charging Station â EVSE(s) â Connector(s). evseId and connectorId are 1-indexed. evseId=0 means the whole station.
Message Frame: JSON-RPC-like. Three types:
CALLâ[2, messageId, action, payload]CALLRESULTâ[3, messageId, payload]CALLERRORâ[4, messageId, errorCode, errorDescription, errorDetails]
All 64 OCPP 2.0.1 Messages
Provisioning & Lifecycle
BootNotification(CSâCSMS) â Station registers on connectHeartbeat(CSâCSMS) â KeepaliveStatusNotification(CSâCSMS) â Connector/EVSE status changesGetVariables(CSMSâCS) â Read configurationSetVariables(CSMSâCS) â Write configurationGetBaseReport(CSMSâCS) â Request full variable inventoryNotifyReport(CSâCSMS) â Variable inventory response (paginated)SetNetworkProfile(CSMSâCS) â Configure network connection profilesReset(CSMSâCS) â Reboot station
Authorization
Authorize(CSâCSMS) â Validate ID tokenClearCache(CSMSâCS) â Clear authorization cacheSendLocalList(CSMSâCS) â Push local auth listGetLocalListVersion(CSMSâCS) â Query local auth list version
Transactions
TransactionEvent(CSâCSMS) â Started/Updated/Ended eventsRequestStartTransaction(CSMSâCS) â Remote startRequestStopTransaction(CSMSâCS) â Remote stopGetTransactionStatus(CSMSâCS) â Query outstanding transaction messagesMeterValues(CSâCSMS) â Send meter values outside transaction context
Remote Control
TriggerMessage(CSMSâCS) â Request CS to send a specific messageUnlockConnector(CSMSâCS) â Physically unlock connectorChangeAvailability(CSMSâCS) â Set EVSE operative/inoperative
Smart Charging
SetChargingProfile(CSMSâCS) â Install charging profileGetChargingProfiles(CSMSâCS) â Query installed profilesClearChargingProfile(CSMSâCS) â Remove profilesClearedChargingLimit(CSâCSMS) â External limit clearedNotifyChargingLimit(CSâCSMS) â External limit notificationReportChargingProfiles(CSâCSMS) â Profile query responseGetCompositeSchedule(CSMSâCS) â Calculate effective scheduleNotifyEVChargingSchedule(CSâCSMS) â EV-proposed schedule (ISO 15118)NotifyEVChargingNeeds(CSâCSMS) â Report EV charging needs (ISO 15118)
Firmware
UpdateFirmware(CSMSâCS) â Trigger firmware updateFirmwareStatusNotification(CSâCSMS) â Update progressPublishFirmware(CSMSâCS) â Make firmware available to local networkPublishFirmwareStatusNotification(CSâCSMS) â Publish progressUnpublishFirmware(CSMSâCS) â Remove published firmware
Security & Certificates
Get15118EVCertificate(CSâCSMS) â EV certificate requestGetCertificateStatus(CSâCSMS) â OCSP status checkSignCertificate(CSâCSMS) â CSR for station certificateCertificateSigned(CSMSâCS) â Signed certificate deliveryInstallCertificate(CSMSâCS) â Install CA certificateDeleteCertificate(CSMSâCS) â Remove certificateGetInstalledCertificateIds(CSMSâCS) â List installed certsSecurityEventNotification(CSâCSMS) â Report security-related event
Diagnostics & Monitoring
GetLog(CSMSâCS) â Request log uploadLogStatusNotification(CSâCSMS) â Log upload progressNotifyEvent(CSâCSMS) â Component/variable eventsSetMonitoringBase(CSMSâCS) â Set monitoring baselineSetVariableMonitoring(CSMSâCS) â Configure variable monitorsSetMonitoringLevel(CSMSâCS) â Set monitoring severity levelGetMonitoringReport(CSMSâCS) â Query active monitorsClearVariableMonitoring(CSMSâCS) â Remove monitorsNotifyMonitoringReport(CSâCSMS) â Monitor query responseCustomerInformation(CSMSâCS) â Request customer dataNotifyCustomerInformation(CSâCSMS) â Customer data response
Display Messages
CostUpdated(CSMSâCS) â Update displayed costSetDisplayMessage(CSMSâCS) â Show message on displayGetDisplayMessages(CSMSâCS) â Query displayed messagesClearDisplayMessage(CSMSâCS) â Remove displayed messageNotifyDisplayMessages(CSâCSMS) â Display message query response
Reservation
ReserveNow(CSMSâCS) â Create reservationCancelReservation(CSMSâCS) â Cancel reservationReservationStatusUpdate(CSâCSMS) â Reservation expired/removed
Data Transfer
DataTransfer(CSâCSMS) â Bidirectional vendor extension
Key Data Types
- IdTokenType â User identification (eMAID, RFID, etc.) with optional groupIdToken
- ChargingProfileType â Charging limits: id, stackLevel, purpose, kind, chargingSchedule
- MeterValueType â Timestamped array of SampledValue (energy, power, current, voltage, SoC)
- EVSEType â EVSE identifier (id + optional connectorId)
- StatusInfoType â Reason code + additional info for status responses
- TransactionType â Transaction state: transactionId, chargingState, stoppedReason
- ChargingScheduleType â Time-based power/current limits with periods
- IdTokenInfoType â Authorization result: status, cacheExpiryDateTime, groupIdToken
Escalation Model
When implementing OCPP behavior, you will encounter areas where the specification does not fully define what to do. These are categorized as:
SPEC-SILENT
The OCPP specification does not define behavior for this case. You MUST flag this to the developer. Do NOT silently pick a default.
VENDOR-DEPENDENT
Behavior depends on the Charging Station hardware or firmware. Ask which hardware/firmware is targeted.
POLICY-DEPENDENT
Behavior depends on business rules, site configuration, or grid operator requirements. Ask about the business/operational context.
Escalation Strictness
Check the developer’s project CLAUDE.md for escalation preferences. They may write something like:
For OCPP: use pragmatic escalation mode.
or:
OCPP escalation: strict â always ask before assuming spec-silent behavior.
Two modes:
- strict (default): Stop and ask the developer before proceeding. Present specific options. Do not write code for the ambiguous area until answered.
- pragmatic: Flag the ambiguity but pick a reasonable default. Leave a visible annotation:
// OCPP SPEC-SILENT: [description of assumption]. Verify this matches your requirements.
If no escalation preference is found in CLAUDE.md, default to strict.
Documentation File Map
When you need detailed field-level schemas, sequence diagrams, or worked examples, read the relevant file from the plugin’s docs/ directory. Use ${CLAUDE_PLUGIN_ROOT} to resolve the path.
| Topic | File to read |
|---|---|
| All shared data types (enums + composites) | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-DataTypes.md |
| Authorization schemas | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Authorization.md |
| Availability schemas | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Availability.md |
| Diagnostics schemas | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Diagnostics.md |
| Display schemas | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Display.md |
| Firmware schemas | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Firmware.md |
| Provisioning schemas | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Provisioning.md |
| Reservation schemas | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Reservation.md |
| Security schemas | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Security.md |
| Smart Charging schemas | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-SmartCharging.md |
| Transaction schemas | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Schemas/OCPP-2.0.1-Schemas-Transactions.md |
| Boot, auth, transaction sequences | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Sequences/OCPP-2.0.1-Sequences.md |
| Offline, firmware, diagnostics sequences | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-Sequences/OCPP-2.0.1-Sequences-Operational.md |
| Smart Charging deep-dive | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-SmartCharging/OCPP-2.0.1-SmartCharging.md |
| Smart Charging worked examples | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-SmartCharging/OCPP-2.0.1-SmartCharging-Examples.md |
| ISO 15118 + Smart Charging | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1-SmartCharging/OCPP-2.0.1-SmartCharging-ISO15118.md |
| OCPP overview + migration guide | ${CLAUDE_PLUGIN_ROOT}/docs/OCPP-2.0.1.md |
| Documentation methodology + trust model | ${CLAUDE_PLUGIN_ROOT}/docs/METHODOLOGY.md |
How to use the file map
- Identify the topic from the developer’s question
- Read the relevant file(s) using the Read tool
- Cite specific fields, constraints, and enum values from the docs
- Flag any ESCALATE markers you encounter in the docs
Topic argument routing
If invoked with /ocpp <topic>, immediately read the relevant files:
/ocpp smart-chargingâ read all 3 SmartCharging files/ocpp authorizeor/ocpp authorizationâ read Authorization schemas/ocpp transactionsâ read Transaction schemas + Sequences/ocpp provisioningor/ocpp bootâ read Provisioning schemas + Sequences/ocpp schemasâ read all Schema files/ocpp sequencesâ read both Sequence files/ocpp typesor/ocpp data-typesâ read DataTypes/ocpp firmwareâ read Firmware schemas + Operational sequences/ocpp diagnosticsâ read Diagnostics schemas + Operational sequences/ocpp reservationâ read Reservation schemas/ocpp displayâ read Display schemas/ocpp securityor/ocpp certificatesâ read Security schemas/ocpp availabilityâ read Availability schemas- Any other topic â search across all docs using grep
Behavioral Guidelines
-
Always cite the source. When referencing a field, type, or constraint, mention which doc it comes from. Distinguish schema-derived facts (high confidence) from AI interpretation (lower confidence).
-
Respect the escalation model. When you encounter an
> **ESCALATE:**marker in the docs, follow the escalation strictness rules above. -
Assume 2.0.1 unless told otherwise. If the developer doesn’t specify an OCPP version, assume 2.0.1. If their code uses 1.6-style messages (e.g.
StartTransactioninstead ofTransactionEvent), note the version mismatch and ask. -
Don’t invent protocol behavior. If you’re unsure whether something is spec-defined, check the docs first. If the docs don’t cover it, say so explicitly rather than guessing.
-
Use the schemas for validation. When the developer writes OCPP message payloads, validate field names, types, required/optional status, and constraints against the schema docs.