La référence du protocole OCPP 1.6J.
Ce que se disent une borne et son backoffice : les 28 messages avec leurs champs et un exemple, les 43 clés de configuration, ce qu’une borne peut mesurer et ce qui tourne mal en pratique.
Qu’est-ce que OCPP 1.6J ?
OCPP, l’Open Charge Point Protocol, est un standard libre et ouvert de l’Open Charge Alliance. Il définit comment une borne communique avec le logiciel qui la gère : le Central System dans la spécification, le backoffice sur le marché.
Dans la version 1.6J, la borne ouvre un WebSocket vers le backoffice, et les deux côtés s’y envoient des messages JSON. La borne rapporte son statut, ses valeurs de compteur et ses sessions. Le backoffice démarre et arrête les sessions, modifie les réglages et fixe des limites de charge.
Comme le standard est ouvert, une borne qui le parle peut aussi se connecter à d’autres backoffices qui le parlent, selon le modèle, le firmware et la configuration. C’est ce qui vous permet de mélanger les marques sur un même site et de transférer une borne vers un autre backoffice. Pour faire tourner une borne sur plusieurs backoffices en même temps, utilisez l’OCPP Proxy.
- Un standard ouvertLibre d’implémentation, maintenu par l’Open Charge Alliance.
- WebSocket et JSONUne connexion qui reste ouverte, avec des messages structurés.
- 28 messagesRépartis en six profils de fonctionnalités, de Core à Remote Trigger.
- Dans les deux sensLa borne et le backoffice lancent chacun leurs propres messages.
Les 28 messages OCPP 1.6
Chaque message est une requête d’un côté et une réponse de l’autre, reliées par un identifiant de message unique.
Core
Requis. Opérations fondamentales de la borne : autorisation, transactions, rapports de statut, configuration et contrôle à distance de base.
Demande l’autorisation d’un idTag avant de permettre la recharge.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| idTag | string | Requis | L’identifiant à autoriser. 20 caractères au maximum. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| idTagInfo | object | Requis | Informations d’autorisation pour l’idTag. |
| status | string | Requis | Statut d’autorisation. Valeurs possibles : Accepted, Blocked, Expired, Invalid, ConcurrentTx. |
| expiryDate | string | Optionnel | Date et heure après lesquelles l’idTag doit être considéré comme expiré. Une date et une heure. |
| parentIdTag | string | Optionnel | idTag parent pour l’autorisation de groupe. 20 caractères au maximum. |
Exemple
[2, "7f83df9c", "Authorize", {
"idTag": "04A2B3C4D5E6F7"
}][3, "7f83df9c", {
"idTagInfo": {
"status": "Accepted"
}
}]Dans OCPP 2.0.1 : Authorize
Envoyé après le démarrage pour s’enregistrer auprès du backoffice.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| chargePointVendor | string | Requis | Fabricant de la borne. 20 caractères au maximum. |
| chargePointModel | string | Requis | Modèle de la borne. 20 caractères au maximum. |
| chargePointSerialNumber | string | Optionnel | Numéro de série de la borne. 25 caractères au maximum. |
| chargeBoxSerialNumber | string | Optionnel | Numéro de série du boîtier de charge. 25 caractères au maximum. |
| firmwareVersion | string | Optionnel | Version du firmware de la borne. 50 caractères au maximum. |
| iccid | string | Optionnel | ICCID de la carte SIM. 20 caractères au maximum. |
| imsi | string | Optionnel | IMSI de la carte SIM. 20 caractères au maximum. |
| meterType | string | Optionnel | Type du compteur d’énergie. 25 caractères au maximum. |
| meterSerialNumber | string | Optionnel | Numéro de série du compteur d’énergie. 25 caractères au maximum. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Statut d’enregistrement. Valeurs possibles : Accepted, Pending, Rejected. |
| currentTime | string | Requis | Heure actuelle du Central System. Une date et une heure. |
| interval | integer | Requis | Intervalle de Heartbeat en secondes. |
Exemple
[2, "392b5b40", "BootNotification", {
"chargePointVendor": "ExampleVendor",
"chargePointModel": "ExampleModel",
"firmwareVersion": "1.4.2"
}][3, "392b5b40", {
"status": "Accepted",
"currentTime": "2026-10-06T09:30:00Z",
"interval": 300
}]Dans OCPP 2.0.1 : BootNotification
Modifie la disponibilité d’un point de charge.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| connectorId | integer | Requis | ID du point de charge (0 = toute la borne). |
| type | string | Requis | Changement de disponibilité demandé. Valeurs possibles : Inoperative, Operative. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Résultat de la demande de changement de disponibilité. Valeurs possibles : Accepted, Rejected, Scheduled. |
Exemple
[2, "be3dcf2e", "ChangeAvailability", {
"connectorId": 1,
"type": "Operative"
}][3, "be3dcf2e", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : ChangeAvailability
Modifie une clé de configuration sur la borne.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| key | string | Requis | Clé de configuration à modifier. 50 caractères au maximum. |
| value | string | Requis | Nouvelle valeur de la clé de configuration. 500 caractères au maximum. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Résultat de la modification de configuration. Valeurs possibles : Accepted, Rejected, RebootRequired, NotSupported. |
Exemple
[2, "6fdf2255", "ChangeConfiguration", {
"key": "MeterValueSampleInterval",
"value": "60"
}][3, "6fdf2255", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : SetVariables
Vide le cache d’autorisation de la borne.
Requête
Aucun champ : la requête est vide.
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Résultat de la demande de vidage du cache. Valeurs possibles : Accepted, Rejected. |
Exemple
[2, "e993e844", "ClearCache", {}][3, "e993e844", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : ClearCache
Échange de données propre au fabricant.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| vendorId | string | Requis | Identifie le fabricant. 255 caractères au maximum. |
| messageId | string | Optionnel | Identification complémentaire du message. 50 caractères au maximum. |
| data | string | Optionnel | Données propres au fabricant. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Résultat du transfert de données. Valeurs possibles : Accepted, Rejected, UnknownMessageId, UnknownVendorId. |
| data | string | Optionnel | Données de réponse propres au fabricant. |
Exemple
[2, "e1a403d5", "DataTransfer", {
"vendorId": "com.example"
}][3, "e1a403d5", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : DataTransfer
Récupère des clés de configuration de la borne.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| key | array | Optionnel | Liste des clés de configuration à récupérer. Chaque élément fait 50 caractères au maximum. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| configurationKey | array | Optionnel | Liste des clés de configuration connues. |
| key | string | Requis | Nom de la clé de configuration. 50 caractères au maximum. |
| readonly | boolean | Requis | Indique si la clé est en lecture seule. |
| value | string | Optionnel | Valeur actuelle de la clé. 500 caractères au maximum. |
| unknownKey | array | Optionnel | Liste des clés demandées qui sont inconnues. Chaque élément fait 50 caractères au maximum. |
Exemple
[2, "02bd00f5", "GetConfiguration", {
"key": [
"MeterValueSampleInterval"
]
}][3, "02bd00f5", {
"configurationKey": [
{
"key": "MeterValueSampleInterval",
"readonly": false,
"value": "60"
}
]
}]Dans OCPP 2.0.1 : GetBaseReport et GetVariables
Message périodique de maintien de connexion, qui indique au backoffice que la borne est en ligne.
Requête
Aucun champ : la requête est vide.
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| currentTime | string | Requis | Heure actuelle du Central System. Une date et une heure. |
Exemple
[2, "83622997", "Heartbeat", {}][3, "83622997", {
"currentTime": "2026-10-06T09:30:00Z"
}]Dans OCPP 2.0.1 : Heartbeat
Envoie des relevés de compteur périodiques ou déclenchés.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| connectorId | integer | Requis | ID du point de charge (0 = compteur principal). |
| meterValue | array | Requis | Une ou plusieurs valeurs de compteur avec horodatage. |
| timestamp | string | Requis | Horodatage de la valeur de compteur. Une date et une heure. |
| sampledValue | array | Requis | Une ou plusieurs valeurs échantillonnées. |
| value | string | Requis | La valeur mesurée. |
| context | string | Optionnel | Contexte du relevé. Valeurs possibles : Interruption.Begin, Interruption.End, Sample.Clock, Sample.Periodic, Transaction.Begin, Transaction.End, Trigger, Other. |
| format | string | Optionnel | Format de la valeur. Valeurs possibles : Raw, SignedData. |
| measurand | string | Optionnel | Type de mesure. Valeurs possibles : Energy.Active.Export.Register, Energy.Active.Import.Register, Energy.Reactive.Export.Register, Energy.Reactive.Import.Register, Energy.Active.Export.Interval, Energy.Active.Import.Interval, Energy.Reactive.Export.Interval, Energy.Reactive.Import.Interval, Power.Active.Export, Power.Active.Import, Power.Offered, Power.Reactive.Export, Power.Reactive.Import, Power.Factor, Current.Import, Current.Export, Current.Offered, Voltage, Frequency, Temperature, SoC, RPM. |
| phase | string | Optionnel | Phase à laquelle s’applique la mesure. Valeurs possibles : L1, L2, L3, N, L1-N, L2-N, L3-N, L1-L2, L2-L3, L3-L1. |
| location | string | Optionnel | Emplacement de la mesure. Valeurs possibles : Cable, EV, Inlet, Outlet, Body. |
| unit | string | Optionnel | Unité de mesure. Valeurs possibles : Wh, kWh, varh, kvarh, W, kW, VA, kVA, var, kvar, A, V, K, Celcius, Celsius, Fahrenheit, Percent. |
| transactionId | integer | Optionnel | Transaction à laquelle s’appliquent ces valeurs de compteur. |
Réponse
Aucun champ : la réponse est vide.
Exemple
[2, "80a15023", "MeterValues", {
"connectorId": 1,
"meterValue": [
{
"timestamp": "2026-10-06T09:30:00Z",
"sampledValue": [
{
"value": "19840",
"measurand": "Energy.Active.Import.Register",
"unit": "Wh"
}
]
}
],
"transactionId": 4521
}][3, "80a15023", {}]Dans OCPP 2.0.1 : MeterValues
Démarre une session de recharge à distance.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| idTag | string | Requis | L’identifiant à utiliser pour cette session. 20 caractères au maximum. |
| connectorId | integer | Optionnel | Point de charge sur lequel démarrer. |
| chargingProfile | object | Optionnel | Profil de charge à appliquer à cette session. |
| chargingProfileId | integer | Requis | Identifiant unique de ce profil de charge. |
| stackLevel | integer | Requis | Niveau de priorité du profil (plus il est élevé, plus le profil est prioritaire). |
| chargingProfilePurpose | string | Requis | Finalité du profil de charge. Valeurs possibles : ChargePointMaxProfile, TxDefaultProfile, TxProfile. |
| chargingProfileKind | string | Requis | Type de planning. Valeurs possibles : Absolute, Recurring, Relative. |
| chargingSchedule | object | Requis | Le planning de charge. |
| chargingRateUnit | string | Requis | Unité du taux de charge (ampères ou watts). Valeurs possibles : A, W. |
| chargingSchedulePeriod | array | Requis | Liste des périodes du planning. |
| startPeriod | integer | Requis | Début de la période, en secondes depuis le début du planning. |
| limit | number | Requis | Limite de puissance ou de courant pendant cette période. Par pas de 0,1. |
| numberPhases | integer | Optionnel | Nombre de phases à utiliser pour la charge. |
| duration | integer | Optionnel | Durée du planning en secondes. |
| startSchedule | string | Optionnel | Date et heure de début du planning. Une date et une heure. |
| minChargingRate | number | Optionnel | Taux de charge minimal pris en charge. Par pas de 0,1. |
| transactionId | integer | Optionnel | Transaction à laquelle s’applique ce profil. |
| recurrencyKind | string | Optionnel | Fréquence de récurrence des profils récurrents. Valeurs possibles : Daily, Weekly. |
| validFrom | string | Optionnel | Date et heure à partir desquelles le profil est valable. Une date et une heure. |
| validTo | string | Optionnel | Date et heure après lesquelles le profil n’est plus valable. Une date et une heure. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Indique si la borne a accepté la demande. Valeurs possibles : Accepted, Rejected. |
Exemple
[2, "b7e2ef8a", "RemoteStartTransaction", {
"idTag": "04A2B3C4D5E6F7",
"connectorId": 1
}][3, "b7e2ef8a", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : RequestStartTransaction
Arrête une session de recharge à distance.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| transactionId | integer | Requis | ID de la transaction à arrêter. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Indique si la borne a accepté la demande. Valeurs possibles : Accepted, Rejected. |
Exemple
[2, "7fb0afb2", "RemoteStopTransaction", {
"transactionId": 4521
}][3, "7fb0afb2", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : RequestStopTransaction
Redémarre la borne (Hard ou Soft).
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| type | string | Requis | Type de redémarrage à effectuer. Valeurs possibles : Hard, Soft. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Indique si la borne a accepté le redémarrage. Valeurs possibles : Accepted, Rejected. |
Exemple
[2, "526d688f", "Reset", {
"type": "Soft"
}][3, "526d688f", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : Reset
Informe le backoffice qu’une session de recharge a démarré.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| connectorId | integer | Requis | Point de charge sur lequel la transaction a démarré. |
| idTag | string | Requis | Identifiant utilisé pour démarrer la transaction. 20 caractères au maximum. |
| meterStart | integer | Requis | Valeur du compteur au début de la transaction (Wh). |
| timestamp | string | Requis | Horodatage du début de la transaction. Une date et une heure. |
| reservationId | integer | Optionnel | ID de la réservation utilisée. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| idTagInfo | object | Requis | Informations d’autorisation pour l’idTag. |
| status | string | Requis | Statut d’autorisation. Valeurs possibles : Accepted, Blocked, Expired, Invalid, ConcurrentTx. |
| expiryDate | string | Optionnel | Date et heure après lesquelles l’idTag doit être considéré comme expiré. Une date et une heure. |
| parentIdTag | string | Optionnel | idTag parent pour l’autorisation de groupe. 20 caractères au maximum. |
| transactionId | integer | Requis | ID de transaction attribué par le Central System. |
Exemple
[2, "2410a6a5", "StartTransaction", {
"connectorId": 1,
"idTag": "04A2B3C4D5E6F7",
"meterStart": 12500,
"timestamp": "2026-10-06T09:30:00Z"
}][3, "2410a6a5", {
"idTagInfo": {
"status": "Accepted"
},
"transactionId": 4521
}]Dans OCPP 2.0.1 : TransactionEvent
Rapporte le statut actuel et les éventuelles erreurs d’un point de charge.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| connectorId | integer | Requis | Point de charge dont le statut est rapporté. |
| errorCode | string | Requis | Code d’erreur (NoError en l’absence d’erreur). Valeurs possibles : ConnectorLockFailure, EVCommunicationError, GroundFailure, HighTemperature, InternalError, LocalListConflict, NoError, OtherError, OverCurrentFailure, PowerMeterFailure, PowerSwitchFailure, ReaderFailure, ResetFailure, UnderVoltage, OverVoltage, WeakSignal. |
| status | string | Requis | Statut actuel du point de charge. Valeurs possibles : Available, Preparing, Charging, SuspendedEVSE, SuspendedEV, Finishing, Reserved, Unavailable, Faulted. |
| info | string | Optionnel | Informations complémentaires en texte libre sur le statut. 50 caractères au maximum. |
| timestamp | string | Optionnel | Horodatage du changement de statut. Une date et une heure. |
| vendorId | string | Optionnel | Identifiant propre au fabricant. 255 caractères au maximum. |
| vendorErrorCode | string | Optionnel | Code d’erreur propre au fabricant. 50 caractères au maximum. |
Réponse
Aucun champ : la réponse est vide.
Exemple
[2, "d9b0420e", "StatusNotification", {
"connectorId": 1,
"errorCode": "NoError",
"status": "Available"
}][3, "d9b0420e", {}]Dans OCPP 2.0.1 : StatusNotification
Informe le backoffice qu’une session de recharge s’est arrêtée.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| transactionId | integer | Requis | ID de la transaction arrêtée. |
| timestamp | string | Requis | Horodatage de l’arrêt de la transaction. Une date et une heure. |
| meterStop | integer | Requis | Valeur du compteur à la fin de la transaction (Wh). |
| idTag | string | Optionnel | Identifiant qui a demandé l’arrêt. 20 caractères au maximum. |
| reason | string | Optionnel | Motif de l’arrêt de la transaction. Valeurs possibles : EmergencyStop, EVDisconnected, HardReset, Local, Other, PowerLoss, Reboot, Remote, SoftReset, UnlockCommand, DeAuthorized. |
| transactionData | array | Optionnel | Tableau d’objets MeterValue (même structure que MeterValues.meterValue). |
| timestamp | string | Requis | Horodatage de la valeur de compteur. Une date et une heure. |
| sampledValue | array | Requis | Une ou plusieurs valeurs échantillonnées. |
| value | string | Requis | La valeur mesurée. |
| context | string | Optionnel | Contexte du relevé. Valeurs possibles : Interruption.Begin, Interruption.End, Sample.Clock, Sample.Periodic, Transaction.Begin, Transaction.End, Trigger, Other. |
| format | string | Optionnel | Format de la valeur. Valeurs possibles : Raw, SignedData. |
| measurand | string | Optionnel | Type de mesure. Valeurs possibles : Energy.Active.Export.Register, Energy.Active.Import.Register, Energy.Reactive.Export.Register, Energy.Reactive.Import.Register, Energy.Active.Export.Interval, Energy.Active.Import.Interval, Energy.Reactive.Export.Interval, Energy.Reactive.Import.Interval, Power.Active.Export, Power.Active.Import, Power.Offered, Power.Reactive.Export, Power.Reactive.Import, Power.Factor, Current.Import, Current.Export, Current.Offered, Voltage, Frequency, Temperature, SoC, RPM. |
| phase | string | Optionnel | Phase à laquelle s’applique la mesure. Valeurs possibles : L1, L2, L3, N, L1-N, L2-N, L3-N, L1-L2, L2-L3, L3-L1. |
| location | string | Optionnel | Emplacement de la mesure. Valeurs possibles : Cable, EV, Inlet, Outlet, Body. |
| unit | string | Optionnel | Unité de mesure. Valeurs possibles : Wh, kWh, varh, kvarh, W, kW, VA, kVA, var, kvar, A, V, K, Celcius, Celsius, Fahrenheit, Percent. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| idTagInfo | object | Optionnel | Informations d’autorisation pour l’idTag. |
| status | string | Requis | Statut d’autorisation. Valeurs possibles : Accepted, Blocked, Expired, Invalid, ConcurrentTx. |
| expiryDate | string | Optionnel | Date et heure après lesquelles l’idTag doit être considéré comme expiré. Une date et une heure. |
| parentIdTag | string | Optionnel | idTag parent pour l’autorisation de groupe. 20 caractères au maximum. |
Exemple
[2, "b380dc07", "StopTransaction", {
"transactionId": 4521,
"timestamp": "2026-10-06T09:30:00Z",
"meterStop": 19840,
"idTag": "04A2B3C4D5E6F7"
}][3, "b380dc07", {
"idTagInfo": {
"status": "Accepted"
}
}]Dans OCPP 2.0.1 : TransactionEvent
Déverrouille un point de charge à distance.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| connectorId | integer | Requis | Point de charge à déverrouiller. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Résultat de la demande de déverrouillage. Valeurs possibles : Unlocked, UnlockFailed, NotSupported. |
Exemple
[2, "882ccab0", "UnlockConnector", {
"connectorId": 1
}][3, "882ccab0", {
"status": "Unlocked"
}]Dans OCPP 2.0.1 : UnlockConnector
Gestion du firmware
Mises à jour du firmware et envoi des diagnostics pour la maintenance à distance des bornes.
Demande à la borne d’envoyer ses journaux de diagnostic.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| location | string | Requis | URI vers laquelle envoyer les diagnostics. Une adresse (URI). |
| retries | integer | Optionnel | Nombre de tentatives d’envoi. |
| retryInterval | integer | Optionnel | Secondes entre deux tentatives. |
| startTime | string | Optionnel | Début de la plage horaire pour la collecte des journaux. Une date et une heure. |
| stopTime | string | Optionnel | Fin de la plage horaire pour la collecte des journaux. Une date et une heure. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| fileName | string | Optionnel | Nom du fichier de diagnostic. 255 caractères au maximum. |
Exemple
[2, "da7920cd", "GetDiagnostics", {
"location": "ftp://files.example.com/diagnostics/"
}][3, "da7920cd", {}]Dans OCPP 2.0.1 : GetLog
Rapporte le statut d’un envoi de diagnostics.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Statut actuel de l’envoi des diagnostics. Valeurs possibles : Idle, Uploaded, UploadFailed, Uploading. |
Réponse
Aucun champ : la réponse est vide.
Exemple
[2, "d1c853b4", "DiagnosticsStatusNotification", {
"status": "Uploaded"
}][3, "d1c853b4", {}]Dans OCPP 2.0.1 : LogStatusNotification
Rapporte le statut d’une mise à jour du firmware.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Statut actuel de la mise à jour du firmware. Valeurs possibles : Downloaded, DownloadFailed, Downloading, Idle, InstallationFailed, Installing, Installed. |
Réponse
Aucun champ : la réponse est vide.
Exemple
[2, "dc9afcb2", "FirmwareStatusNotification", {
"status": "Installed"
}][3, "dc9afcb2", {}]Dans OCPP 2.0.1 : FirmwareStatusNotification
Demande à la borne de télécharger et d’installer un nouveau firmware.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| location | string | Requis | URI depuis laquelle télécharger le firmware. Une adresse (URI). |
| retrieveDate | string | Requis | Date et heure après lesquelles la borne doit récupérer le firmware. Une date et une heure. |
| retries | integer | Optionnel | Nombre de tentatives de téléchargement. |
| retryInterval | integer | Optionnel | Secondes entre deux tentatives. |
Réponse
Aucun champ : la réponse est vide.
Exemple
[2, "a57cc6a2", "UpdateFirmware", {
"location": "ftp://files.example.com/fw-1.4.3.bin",
"retrieveDate": "2026-10-07T02:00:00Z"
}][3, "a57cc6a2", {}]Dans OCPP 2.0.1 : UpdateFirmware
Liste d’autorisation locale
Gérer une liste d’autorisation locale sur la borne pour l’authentification hors ligne.
Récupère le numéro de version de la liste d’autorisation locale.
Requête
Aucun champ : la requête est vide.
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| listVersion | integer | Requis | Numéro de version actuel de la liste d’autorisation locale. |
Exemple
[2, "ccf23a29", "GetLocalListVersion", {}][3, "ccf23a29", {
"listVersion": 1
}]Dans OCPP 2.0.1 : GetLocalListVersion
Envoie une mise à jour complète ou partielle de la liste d’autorisation locale.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| listVersion | integer | Requis | Numéro de version de cette mise à jour de la liste. |
| updateType | string | Requis | Indique s’il s’agit d’un remplacement complet ou d’une mise à jour différentielle. Valeurs possibles : Differential, Full. |
| localAuthorizationList | array | Optionnel | Liste des entrées d’autorisation. |
| idTag | string | Requis | L’identifiant à autoriser. 20 caractères au maximum. |
| idTagInfo | object | Optionnel | Informations d’autorisation pour l’idTag. |
| status | string | Requis | Statut d’autorisation. Valeurs possibles : Accepted, Blocked, Expired, Invalid, ConcurrentTx. |
| expiryDate | string | Optionnel | Date et heure après lesquelles l’idTag doit être considéré comme expiré. Une date et une heure. |
| parentIdTag | string | Optionnel | idTag parent pour l’autorisation de groupe. 20 caractères au maximum. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Résultat de la mise à jour de la liste locale. Valeurs possibles : Accepted, Failed, NotSupported, VersionMismatch. |
Exemple
[2, "a23c9563", "SendLocalList", {
"listVersion": 1,
"updateType": "Full",
"localAuthorizationList": [
{
"idTag": "04A2B3C4D5E6F7",
"idTagInfo": {
"status": "Accepted"
}
}
]
}][3, "a23c9563", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : SendLocalList
Réservation
Réserver à l’avance un point de charge pour un utilisateur précis.
Annule une réservation existante.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| reservationId | integer | Requis | ID de la réservation à annuler. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Indique si la réservation a été annulée. Valeurs possibles : Accepted, Rejected. |
Exemple
[2, "63258356", "CancelReservation", {
"reservationId": 7
}][3, "63258356", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : CancelReservation
Crée une réservation sur un point de charge précis.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| connectorId | integer | Requis | Point de charge à réserver (0 = aucun point de charge précis). |
| expiryDate | string | Requis | Date et heure d’expiration de la réservation. Une date et une heure. |
| idTag | string | Requis | Identifiant pour lequel la réservation est faite. 20 caractères au maximum. |
| reservationId | integer | Requis | ID unique de cette réservation. |
| parentIdTag | string | Optionnel | idTag parent pour la réservation de groupe. 20 caractères au maximum. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Résultat de la demande de réservation. Valeurs possibles : Accepted, Faulted, Occupied, Rejected, Unavailable. |
Exemple
[2, "62a25d78", "ReserveNow", {
"connectorId": 1,
"expiryDate": "2026-10-06T10:00:00Z",
"idTag": "04A2B3C4D5E6F7",
"reservationId": 7
}][3, "62a25d78", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : ReserveNow
Charge intelligente
Définir et gérer des profils de charge pour l’équilibrage de charge, l’intégration solaire et la charge programmée.
Supprime un ou plusieurs profils de charge de la borne.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| id | integer | Optionnel | ID du profil de charge à supprimer. |
| connectorId | integer | Optionnel | Point de charge dont les profils doivent être supprimés. |
| chargingProfilePurpose | string | Optionnel | Finalité des profils à supprimer. Valeurs possibles : ChargePointMaxProfile, TxDefaultProfile, TxProfile. |
| stackLevel | integer | Optionnel | Niveau de priorité (stackLevel) des profils à supprimer. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Indique si des profils ont été supprimés. Valeurs possibles : Accepted, Unknown. |
Exemple
[2, "2c436739", "ClearChargingProfile", {}][3, "2c436739", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : ClearChargingProfile
Demande le planning de charge combiné d’un point de charge.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| connectorId | integer | Requis | Point de charge pour lequel obtenir le planning. |
| duration | integer | Requis | Durée en secondes du planning demandé. |
| chargingRateUnit | string | Optionnel | Unité souhaitée pour le planning. Valeurs possibles : A, W. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Indique si la borne peut fournir le planning. Valeurs possibles : Accepted, Rejected. |
| connectorId | integer | Optionnel | Point de charge auquel s’applique le planning. |
| scheduleStart | string | Optionnel | Date et heure de début du planning composite. Une date et une heure. |
| chargingSchedule | object | Optionnel | Le planning de charge composite. |
| chargingRateUnit | string | Requis | Unité du taux de charge (ampères ou watts). Valeurs possibles : A, W. |
| chargingSchedulePeriod | array | Requis | Liste des périodes du planning. |
| startPeriod | integer | Requis | Début de la période, en secondes depuis le début du planning. |
| limit | number | Requis | Limite de puissance ou de courant pendant cette période. Par pas de 0,1. |
| numberPhases | integer | Optionnel | Nombre de phases à utiliser pour la charge. |
| duration | integer | Optionnel | Durée du planning en secondes. |
| startSchedule | string | Optionnel | Date et heure de début du planning. Une date et une heure. |
| minChargingRate | number | Optionnel | Taux de charge minimal pris en charge. Par pas de 0,1. |
Exemple
[2, "50bc203f", "GetCompositeSchedule", {
"connectorId": 1,
"duration": 3600
}][3, "50bc203f", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : GetCompositeSchedule
Envoie un profil de charge à la borne.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| connectorId | integer | Requis | Point de charge auquel s’applique le profil. |
| csChargingProfiles | object | Requis | Le profil de charge à installer. |
| chargingProfileId | integer | Requis | Identifiant unique de ce profil de charge. |
| stackLevel | integer | Requis | Niveau de priorité du profil (plus il est élevé, plus le profil est prioritaire). |
| chargingProfilePurpose | string | Requis | Finalité du profil de charge. Valeurs possibles : ChargePointMaxProfile, TxDefaultProfile, TxProfile. |
| chargingProfileKind | string | Requis | Type de planning. Valeurs possibles : Absolute, Recurring, Relative. |
| chargingSchedule | object | Requis | Le planning de charge. |
| chargingRateUnit | string | Requis | Unité du taux de charge (ampères ou watts). Valeurs possibles : A, W. |
| chargingSchedulePeriod | array | Requis | Liste des périodes du planning. |
| startPeriod | integer | Requis | Début de la période, en secondes depuis le début du planning. |
| limit | number | Requis | Limite de puissance ou de courant pendant cette période. Par pas de 0,1. |
| numberPhases | integer | Optionnel | Nombre de phases à utiliser pour la charge. |
| duration | integer | Optionnel | Durée du planning en secondes. |
| startSchedule | string | Optionnel | Date et heure de début du planning. Une date et une heure. |
| minChargingRate | number | Optionnel | Taux de charge minimal pris en charge. Par pas de 0,1. |
| transactionId | integer | Optionnel | Transaction à laquelle s’applique ce profil. |
| recurrencyKind | string | Optionnel | Fréquence de récurrence des profils récurrents. Valeurs possibles : Daily, Weekly. |
| validFrom | string | Optionnel | Date et heure à partir desquelles le profil est valable. Une date et une heure. |
| validTo | string | Optionnel | Date et heure après lesquelles le profil n’est plus valable. Une date et une heure. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Indique si le profil a été accepté. Valeurs possibles : Accepted, Rejected, NotSupported. |
Exemple
[2, "01be9b20", "SetChargingProfile", {
"connectorId": 1,
"csChargingProfiles": {
"chargingProfileId": 10,
"stackLevel": 0,
"chargingProfilePurpose": "TxDefaultProfile",
"chargingProfileKind": "Relative",
"chargingSchedule": {
"chargingRateUnit": "A",
"chargingSchedulePeriod": [
{
"startPeriod": 0,
"limit": 16.0
}
]
}
}
}][3, "01be9b20", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : SetChargingProfile
Déclenchement à distance
Demander à la borne d’envoyer un message précis à la demande.
Demande à la borne d’envoyer immédiatement un message précis.
Requête
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| requestedMessage | string | Requis | Le message que la borne doit envoyer. Valeurs possibles : BootNotification, DiagnosticsStatusNotification, FirmwareStatusNotification, Heartbeat, MeterValues, StatusNotification. |
| connectorId | integer | Optionnel | Point de charge pour lequel le message doit être envoyé. |
Réponse
| Champ | Type | Usage | Contenu |
|---|---|---|---|
| status | string | Requis | Indique si la borne enverra le message. Valeurs possibles : Accepted, Rejected, NotImplemented. |
Exemple
[2, "4c736efd", "TriggerMessage", {
"requestedMessage": "StatusNotification"
}][3, "4c736efd", {
"status": "Accepted"
}]Dans OCPP 2.0.1 : TriggerMessage
Aucun message ne correspond à cette recherche.
Clés de configuration OCPP 1.6
ChangeConfiguration définit une clé à la fois sur une borne, et GetConfiguration les relit. C’est ici que se décide la plus grande partie du comportement réel d’une borne : la fréquence d’arrivée des valeurs de compteur, ce qu’elles contiennent, si une session survit à une coupure réseau, comment un câble se déverrouille.
Comment l’appel se comporte
- Chaque valeur est une chaîneLes nombres et les booléens aussi : "60", "true". Un nombre JSON enfreint le schéma du message, et une borne qui vérifie le schéma répond par un CallError.
- Écrivez les noms de clés comme la spécificationLa spécification considère que les noms de clés ne sont pas sensibles à la casse, mais toutes les bornes ne suivent pas cette règle : écrivez donc MeterValuesSampledData, et non metervaluessampleddata.
- Certaines clés exigent un redémarrageLa borne répond RebootRequired, et c’est à vous d’envoyer un Reset.
- Les fabricants ajoutent leurs propres clésGetConfiguration avec une liste de clés vide renvoie toutes les clés que la borne prend en charge, y compris celles du fabricant. Les clés que vous demandez par leur nom et qu’elle ne reconnaît pas reviennent dans unknownKey.
Les quatre réponses
- Accepted
- La clé est définie et active immédiatement.
- Rejected
- La clé existe mais la valeur a été refusée : hors plage, mauvais format, ou en lecture seule sur cette borne.
- RebootRequired
- La valeur est enregistrée mais ne s’applique qu’au redémarrage de la borne.
- NotSupported
- La borne n’implémente pas du tout cette clé.
Les 43 clés, par profil de fonctionnalités
| Clé | Type | Accès | Ce qu’elle fait |
|---|---|---|---|
| Core34 | |||
| AllowOfflineTxForUnknownIdOptionnelle dans la spécification | boolean | Lecture et écriture | Indique si la borne démarre une transaction pour un idTag inconnu lorsqu’elle est hors ligne.Avec true, un site continue de recharger pendant une coupure réseau, au prix de sessions que vous ne pourrez peut-être facturer à personne. |
| AuthorizationCacheEnabledOptionnelle dans la spécification | boolean | Lecture et écriture | Indique si la borne met en cache le résultat des appels Authorize précédents.À distinguer de la Local Auth List : le cache se remplit à partir d’autorisations réelles, la liste est envoyée par le backend. |
| AuthorizeRemoteTxRequests | boolean | Lecture | Indique si la borne autorise l’idTag d’un RemoteStartTransaction avant de démarrer.Avec true, un démarrage à distance depuis l’application exige encore un aller-retour Authorize : un idTag invalide fait donc échouer le démarrage. |
| BlinkRepeatOptionnelle dans la spécification | integer | Lecture et écriture | Nombre de clignotements du voyant de la borne pendant une séquence de clignotement. |
| ClockAlignedDataInterval | integer | Lecture et écriture | Intervalle des valeurs de compteur alignées sur l’horloge, compté à partir de minuit. 0 les désactive.900 donne un relevé à chaque quart d’heure. C’est cette clé qui alimente MeterValuesAlignedData, et elle tourne qu’une voiture soit branchée ou non. |
| ConnectionTimeOut | integer | Lecture et écriture | Durée pendant laquelle la borne attend que le conducteur branche la voiture après l’autorisation, avant de libérer le point de charge. |
| ConnectorPhaseRotation | CSL | Lecture et écriture | Rotation des phases par point de charge, en notation connectorId.RST, par exemple 0.RST, 1.RST, 2.RTS.Une erreur ici donne des valeurs de compteur par phase fausses et un équilibrage de charge monophasé faux. À vérifier sur tout site triphasé. |
| ConnectorPhaseRotationMaxLengthOptionnelle dans la spécification | integer | Lecture | Nombre maximal d’éléments dans ConnectorPhaseRotation. |
| GetConfigurationMaxKeys | integer | Lecture | Nombre maximal de clés qu’une seule requête GetConfiguration peut demander.Demandez-en davantage et la borne peut répondre par une erreur. Envoyez GetConfiguration sans aucune clé pour obtenir tout ce qu’elle prend en charge. |
| HeartbeatInterval | integer | Lecture et écriture | Fréquence à laquelle la borne envoie un Heartbeat quand rien d’autre ne se passe.La réponse au BootNotification peut remplacer cette valeur. Sur une carte SIM facturée à l’usage, un heartbeat court est un coût de données discret qui s’accumule. |
| LightIntensityOptionnelle dans la spécification | integer | Lecture et écriture | Luminosité de l’éclairage de la borne, en pourcentage. |
| LocalAuthorizeOffline | boolean | Lecture et écriture | Indique si la borne autorise à partir de sa liste locale ou de son cache lorsqu’elle est hors ligne. |
| LocalPreAuthorize | boolean | Lecture et écriture | Indique si la borne démarre une transaction à partir de la liste locale ou du cache lorsqu’elle est en ligne, sans attendre le backend.Réduit l’attente à la borne, au prix d’un backend qui n’a plus le dernier mot sur chaque démarrage. |
| MaxEnergyOnInvalidIdOptionnelle dans la spécification | integer | Lecture et écriture | Énergie que la borne fournit encore après qu’une autorisation s’est révélée invalide. |
| MeterValuesAlignedData | CSL | Lecture et écriture | Grandeurs mesurées envoyées dans les MeterValues alignées sur l’horloge, selon le ClockAlignedDataInterval.Même vocabulaire de grandeurs que MeterValuesSampledData, autre déclencheur : l’horloge, et non la session. |
| MeterValuesAlignedDataMaxLengthOptionnelle dans la spécification | integer | Lecture | Nombre maximal de grandeurs mesurées dans MeterValuesAlignedData. |
| MeterValuesSampledData | CSL | Lecture et écriture | Grandeurs mesurées échantillonnées pendant une transaction et envoyées dans MeterValues, selon le MeterValueSampleInterval.La clé la plus utile de cette page. Voir l’analyse détaillée plus bas. |
| MeterValuesSampledDataMaxLengthOptionnelle dans la spécification | integer | Lecture | Nombre maximal de grandeurs mesurées dans MeterValuesSampledData.Lisez-la avant de construire une longue liste : dépassez-la et la borne rejette l’ensemble. |
| MeterValueSampleInterval | integer | Lecture et écriture | Fréquence à laquelle la borne échantillonne MeterValuesSampledData pendant une transaction. 0 désactive l’échantillonnage.60 est une valeur par défaut raisonnable. En dessous de 30, avec une longue liste de grandeurs, vous générez beaucoup de trafic pour très peu d’informations en plus. |
| MinimumStatusDurationOptionnelle dans la spécification | integer | Lecture et écriture | Durée minimale pendant laquelle la borne reste dans un statut avant de rapporter le suivant.Utile contre les statuts qui oscillent, sur les bornes qui passent sans cesse de Preparing à Available. |
| NumberOfConnectors | integer | Lecture | Nombre de points de charge physiques sur cette borne. |
| ResetRetries | integer | Lecture et écriture | Nombre de nouvelles tentatives de la borne après un redémarrage échoué. |
| StopTransactionOnEVSideDisconnect | boolean | Lecture et écriture | Indique si débrancher côté voiture arrête la transaction en cours.Avec false, la session reste ouverte après le retrait du câble : c’est ainsi qu’on se retrouve avec des sessions qui ne finissent jamais. |
| StopTransactionOnInvalidId | boolean | Lecture et écriture | Indique si la borne arrête la transaction quand le backend rejette l’idTag. |
| StopTxnAlignedData | CSL | Lecture et écriture | Grandeurs mesurées alignées sur l’horloge, ajoutées au transactionData de StopTransaction. |
| StopTxnAlignedDataMaxLengthOptionnelle dans la spécification | integer | Lecture | Nombre maximal de grandeurs mesurées dans StopTxnAlignedData. |
| StopTxnSampledData | CSL | Lecture et écriture | Grandeurs mesurées échantillonnées, ajoutées au transactionData de StopTransaction.Gardez cette liste courte. Tout ce qu’elle contient est répété pour chaque échantillon de toute la session dans un seul payload StopTransaction : c’est ainsi que des bornes produisent des messages d’arrêt de plusieurs mégaoctets que les backends rejettent. |
| StopTxnSampledDataMaxLengthOptionnelle dans la spécification | integer | Lecture | Nombre maximal de grandeurs mesurées dans StopTxnSampledData. |
| SupportedFeatureProfiles | CSL | Lecture | Profils de fonctionnalités que cette borne implémente, par exemple Core, FirmwareManagement, SmartCharging.La réponse honnête à la question de ce qu’une borne sait faire. Lisez-la avant de promettre la charge intelligente à un client. |
| SupportedFeatureProfilesMaxLengthOptionnelle dans la spécification | integer | Lecture | Nombre maximal d’éléments dans SupportedFeatureProfiles. |
| TransactionMessageAttempts | integer | Lecture et écriture | Nombre de nouvelles tentatives d’envoi d’un message de transaction que le backend n’a pas acquitté. |
| TransactionMessageRetryInterval | integer | Lecture et écriture | Attente de base entre ces tentatives. La borne la multiplie par le numéro de la tentative. |
| UnlockConnectorOnEVSideDisconnect | boolean | Lecture et écriture | Indique si le câble se déverrouille à la borne quand il est débranché côté voiture. |
| WebSocketPingIntervalOptionnelle dans la spécification | integer | Lecture et écriture | Intervalle des trames ping WebSocket sur la connexion OCPP-J.La solution discrète pour les bornes qui passent sans cesse hors ligne derrière un NAT ou un pare-feu qui ferme les connexions inactives. |
| Liste d’autorisation locale3 | |||
| LocalAuthListEnabled | boolean | Lecture et écriture | Indique si la liste d’autorisation locale est utilisée. |
| LocalAuthListMaxLength | integer | Lecture | Nombre d’entrées que peut contenir la liste d’autorisation locale. |
| SendLocalListMaxLength | integer | Lecture | Nombre d’entrées qui tiennent dans un seul message SendLocalList.Une liste plus longue doit être envoyée en plusieurs mises à jour différentielles. |
| Réservation1 | |||
| ReserveConnectorZeroSupportedOptionnelle dans la spécification | boolean | Lecture | Indique si la borne accepte une réservation sur le point de charge 0, c’est-à-dire sur n’importe quel point de charge. |
| Charge intelligente5 | |||
| ChargeProfileMaxStackLevel | integer | Lecture | Niveau de priorité (stack level) le plus élevé que la borne accepte sur un profil de charge. Le niveau le plus élevé l’emporte. |
| ChargingScheduleAllowedChargingRateUnit | CSL | Lecture | Unités que la borne accepte dans un planning de charge : courant (A), puissance (W), ou les deux.Envoyez un profil en watts à une borne qui n’accepte que les ampères et il est rejeté. Cette clé vous indique laquelle utiliser. |
| ChargingScheduleMaxPeriods | integer | Lecture | Nombre maximal de périodes dans un planning de charge. |
| ConnectorSwitch3to1PhaseSupportedOptionnelle dans la spécification | boolean | Lecture | Indique si la borne peut basculer entre charge triphasée et charge monophasée.Détermine si vous pouvez descendre sous le minimum triphasé au lieu de mettre la charge complètement en pause. |
| MaxChargingProfilesInstalled | integer | Lecture | Nombre de profils de charge pouvant être installés en même temps. |
Aucune clé ne correspond à cette recherche.
MeterValuesSampledData : ce que mesure une borne
Une seule clé, MeterValuesSampledData, détermine la télémétrie que vous obtenez d’une session de recharge. C’est une liste de grandeurs mesurées séparées par des virgules, et la borne échantillonne chaque élément à l’intervalle défini par MeterValueSampleInterval, puis les envoie dans un message MeterValues. Laissez-la à sa valeur par défaut et vous obtenez un seul relevé d’énergie cumulée, suffisant pour facturer, et rien d’autre : pas de courbe de puissance, pas de courant par phase, pas de tension, aucun moyen de voir si une limite de charge intelligente a été appliquée.
Elle ne fonctionne jamais seule. MeterValueSampleInterval fixe la fréquence d’envoi, MeterValuesSampledDataMaxLength plafonne le nombre de grandeurs que vous pouvez lister, StopTxnSampledData décide lesquelles sont répétées dans StopTransaction, et MeterValuesAlignedData utilise le même vocabulaire sur un calendrier d’horloge plutôt que par session.
Les grandeurs mesurées
Chacune de ces grandeurs peut figurer dans la liste. Celles qu’une borne prend en charge dépendent de son matériel : une borne murale AC ne remonte généralement pas l’état de charge, et une borne basique peut n’avoir que le registre d’énergie.
| Measurand | Unité | Généralement sur | Ce qu’elle vous donne |
|---|---|---|---|
| Energy.Active.Import.Register | Wh | AC et DC | Énergie cumulée prélevée sur le réseau, lue directement sur le registre du compteur. La valeur par défaut quand MeterValuesSampledData est vide, et celle sur laquelle repose presque tout calcul de facturation. |
| Energy.Active.Export.Register | Wh | Compatible V2G | Énergie cumulée réinjectée, pour les installations bidirectionnelles. |
| Energy.Active.Import.Interval | Wh | AC et DC | Énergie importée depuis l’échantillon précédent, plutôt qu’un total cumulé. |
| Energy.Reactive.Import.Register | varh | Selon le compteur | Énergie réactive importée cumulée. |
| Power.Active.Import | W | AC et DC | Puissance active instantanée. Ce que vous tracez pour voir une courbe de charge, et ce à quoi réagit la gestion de charge. |
| Power.Offered | W | AC et DC | Puissance que la borne offre actuellement à la voiture. Comparez-la à Power.Active.Import pour voir si une limite est réellement appliquée. |
| Power.Reactive.Import | var | Selon le compteur | Puissance réactive instantanée. |
| Power.Factor | rapport | Selon le compteur | Rapport entre la puissance active et la puissance apparente. |
| Current.Import | A | AC et DC | Courant prélevé. Généralement remonté par phase : cette seule grandeur peut donc donner trois valeurs par échantillon. |
| Current.Offered | A | AC et DC | Limite de courant que la borne signale à la voiture. L’indication directe que votre profil de charge intelligente a été appliqué. |
| Current.Export | A | Compatible V2G | Courant réinjecté, pour les installations bidirectionnelles. |
| Voltage | V | AC et DC | Tension d’alimentation, par phase sur les bornes triphasées. Utile pour repérer une phase perdue ou une mauvaise connexion. |
| Frequency | Hz | Selon le compteur | Fréquence du réseau. La spécification ne prévoit pas de champ unit pour cette grandeur. |
| Temperature | Celsius | Selon la borne | Température à la borne ou au point de charge. Explique une réduction de puissance par temps chaud avant que quelqu’un ne parle de panne. |
| SoC | % | DC, ou ISO 15118 en AC | État de charge de la batterie de la voiture. Présent seulement quand la voiture le transmet réellement, ce qu’elle ne fait généralement pas en recharge AC simple. |
| RPM | tr/min | Rare | Vitesse du ventilateur, sur les bornes qui la remontent. |
Aucune grandeur ne correspond à cette recherche.
Listes qui fonctionnent
Copiez-en une dans la valeur d’un appel ChangeConfiguration. Commencez avec peu d’éléments, et ajoutez des grandeurs une fois que la borne les accepte.
- Facturation uniquement
Le minimum qui produit encore une facture correcte. La valeur par défaut sur la plupart des bornes.
Energy.Active.Import.Register - Télémétrie standard
Valeur par défaut raisonnable pour un site AC géré : une courbe de puissance, le courant et la tension par phase pour le diagnostic.
Energy.Active.Import.Register, Power.Active.Import, Current.Import, Voltage - Charge intelligente
Ajoute les valeurs offertes, pour voir si un profil est réellement appliqué au lieu de le supposer.
Energy.Active.Import.Register, Power.Active.Import, Power.Offered, Current.Import, Current.Offered, Voltage - Recharge rapide DC
Ajoute l’état de charge et la température, que les bornes DC remontent bien et qui expliquent la plupart des réductions de puissance.
Energy.Active.Import.Register, Power.Active.Import, Current.Import, Voltage, SoC, Temperature
Ce qui tourne mal
- Une seule grandeur invalide fait rejeter toute la liste
Les bornes valident la liste comme un tout. Si un seul élément n’est pas pris en charge, vous obtenez Rejected ou NotSupported pour l’ensemble, sans indication de celui qui a échoué. Définissez la liste une grandeur à la fois pour trouver la coupable, ou lisez d’abord MeterValuesSampledDataMaxLength et la documentation du fabricant.
- Une grandeur peut donner trois valeurs
Current.Import et Voltage sont remontés par phase : sur une borne triphasée, ils arrivent chacun sous forme de trois entrées sampledValue, étiquetées L1, L2, L3 ou L1-N, etc. Une liste de six grandeurs peut facilement donner une douzaine de valeurs par échantillon. La taille du payload augmente plus vite que la longueur de la liste ne le laisse penser.
- Wh contre kWh
Le registre d’énergie est en Wh par défaut, mais le champ unit peut indiquer kWh, et certains firmwares le font. Lisez l’unité au lieu de la supposer, sinon vous obtenez une facture fausse d’un facteur mille.
- Un intervalle court a un coût
Un MeterValueSampleInterval de 10 secondes avec une longue liste signifie des centaines de messages par session. Sur une carte SIM facturée à l’usage, cela coûte de l’argent, et sur un grand site, cela représente une vraie charge pour le backend. 60 secondes est une bonne valeur par défaut, 300 pour les sites où seule la forme de la courbe compte.
- StopTxnSampledData, le piège du payload
Tout ce qui y figure est répété, pour chaque échantillon de toute la session, dans un seul message StopTransaction. Une longue liste sur une longue session produit un payload assez gros pour que les backends le rejettent ou le tronquent, et la transaction ne se clôture alors pas proprement. Limitez-la au registre d’énergie, sauf raison précise.
- Retirez le registre d’énergie et la facturation ne fonctionne plus
Si Energy.Active.Import.Register ne figure pas dans la liste, les valeurs de compteur périodiques ne contiennent aucun total cumulé. La plupart des backends se rabattent alors sur meterStart et meterStop des messages de transaction, et toute session dont le StopTransaction se perd devient impossible à facturer. Gardez-le toujours dans la liste.
- Le SoC n’est généralement pas disponible en AC
L’état de charge vient de la voiture, via ISO 15118 ou le protocole de recharge DC. Sur une simple borne murale AC sans Plug and Charge, la voiture ne le transmet pas : demander le SoC est donc soit rejeté, soit sans résultat utile.
- Lisez le champ context
Chaque sampledValue porte un context : Sample.Periodic, Transaction.Begin, Transaction.End, Sample.Clock ou Trigger. Une valeur à Transaction.Begin est un registre de départ, pas une consommation. C’est en traitant chaque échantillon comme périodique que des sessions finissent comptées deux fois.
Questions sur OCPP 1.6J
OCPP 1.6J est la version 1.6 de l’Open Charge Point Protocol dans sa forme JSON. La borne ouvre un WebSocket vers son backoffice, et les deux côtés s’y envoient des messages JSON. L’Open Charge Alliance a publié la version 1.6 en 2015, et la plupart des bornes la prennent encore en charge : dans notre base de données des bornes, 483 des 495 bornes dont la version OCPP est connue prennent en charge la 1.6.
Elles transportent les mêmes messages d’une manière différente. La 1.6J envoie du JSON sur un WebSocket que la borne garde ouvert : la borne n’a donc besoin que d’une connexion sortante. La 1.6S envoie du SOAP sur HTTP, et le backoffice doit alors aussi pouvoir joindre la borne.
La 2.0.1 est une version plus récente, avec son propre jeu de messages. Elle décrit les réglages d’une borne dans un modèle d’équipement (device model), intègre des profils de sécurité, remplace StartTransaction et StopTransaction par TransactionEvent et ajoute des messages pour Plug and Charge (ISO 15118). Les deux ne se mélangent pas : une borne et son backoffice conviennent d’une seule version à l’ouverture de la connexion. Dans notre base de données des bornes, 102 bornes indiquent la 2.0.1, en plus ou à la place de la 1.6. Tous les messages 2.0.1 et 2.1 figurent dans la référence OCPP 2.0.1 et 2.1.
L’Open Charge Alliance la publie gratuitement sur son site web, avec un schéma JSON pour chaque message. Cette référence suit cette spécification. Là où les deux diffèrent, c’est la spécification qui fait foi.
Par le profil Smart Charging. Le backoffice envoie SetChargingProfile avec un planning de limites en ampères ou en watts. Un ChargePointMaxProfile plafonne toute la borne, un TxDefaultProfile s’applique à chaque nouvelle session et un TxProfile à une session en cours. Quand deux profils de même finalité se chevauchent, celui dont le stackLevel est le plus élevé l’emporte. La façon dont Plugchoice s’en sert est décrite sur la page de la charge intelligente.
Cherchez-la dans la base de données des bornes : 775 bornes, avec les versions OCPP que nous connaissons et la source de chacune. La fiche technique de la borne l’indique généralement aussi, souvent sous la forme OCPP 1.6J ou OCPP 1.6 JSON.
Dans les réglages de la borne, souvent dans l’application d’installation ou sur sa page web locale, saisissez l’URL WebSocket du backoffice (elle commence par ws:// ou wss://) et l’ID de la borne, l’identité du charge point. La borne ouvre la connexion et envoie un BootNotification. Dès que le backoffice répond Accepted, la borne est en ligne et envoie un StatusNotification pour chaque point de charge.
Plugchoice et OCPP
- Un backoffice gratuitConnectez une borne OCPP 1.6J et gérez-la dans le portail web.
- L’applicationPropriétaires et installateurs pilotent la même borne depuis leur téléphone.
- L’OCPP ProxyUne borne sur plusieurs backoffices en même temps.
- BackofficesLes backoffices que vous choisissez dans une liste quand vous connectez une borne.
Lectures complémentaires
Cette page pour les assistants IA
Toute la référence, chaque message et chaque clé de configuration, dans un seul fichier en texte brut qu’un assistant peut lire d’un coup.
Faites tourner vos bornes OCPP sur Plugchoice
Connectez gratuitement vos bornes OCPP 1.6J à Plugchoice et gérez-les dans le portail web, dans l’application et via l’API.