OCPP

Referencia del controlador OCPP: el sistema central integrado, los certificados de los puntos de recarga, los tags de conector y la regla de nombres Meter, Status y Transaction.

Ver como Markdown

El controlador OCPP convierte a Ganter Lab en el sistema central de los puntos de recarga de vehículos eléctricos que hablan el Open Charge Point Protocol. Como en LoRaWAN, el sentido está invertido: la estación no se conecta al cargador, es el punto de recarga el que se conecta a Ganter Lab por un WebSocket, se registra solo y empuja su telemetría hacia dentro.

El sistema central integrado arranca cuando el primer dispositivo OCPP habilitado se carga en el connector en ejecución, y se detiene cuando se quita o se deshabilita el último: sin ningún punto de recarga configurado, no hay nada escuchando en el puerto. Añadir uno lo trae de vuelta, sin reiniciar la aplicación. Cada dispositivo que se configura representa un punto de recarga, identificado por el id con el que se conecta.

Preparar el punto de recarga

El punto de recarga es quien llama a esta estación y, de fábrica, no sabe dónde está. La página de cada dispositivo OCPP lleva la tarjeta Preparar el punto de recarga con lo que hay que introducir en los ajustes OCPP del punto de recarga, escrito para esta estación:

Qué configurar en el punto de recarga Qué da la tarjeta
Dirección del sistema central wss://<dirección>:19521/<id-del-punto-de-recarga>, primero con la dirección por el nombre de esta estación (el "Nombre de red" de la configuración del servidor OPC UA integrado, o el nombre del ordenador mientras está vacío), luego una vez por cada dirección IPv4 que esta estación tiene en una red, cada una con un botón de copiar. Un punto de recarga que comprueba el nombre del servidor necesita la dirección por el nombre; uno que no lo comprueba acepta cualquiera de ellas, y entonces basta la de su propia red.
Identidad del punto de recarga El Identificador del dispositivo o, mientras está vacío, el nombre que la estación da al dispositivo. Muchos puntos de recarga añaden su identidad a la dirección por sí mismos: en ellos, introduzca la dirección solo hasta el puerto, y la identidad en su propio campo.
Seguridad TLS con certificado de cliente, lo que OCPP llama perfil de seguridad 3. Los perfiles 1 y 2, que no tienen certificado de cliente, no se aceptan. El certificado del punto de recarga lleva su identidad en el nombre común o en un nombre alternativo DNS (véase Certificados).
Certificado raíz del sistema central La ruta completa de GanterLabConnector-<station>.pem, el certificado raíz de esta estación, que el punto de recarga instala para confiar en el sistema central, con el botón Abrir la carpeta, que muestra el archivo en el explorador de archivos de Windows. El botón funciona en la ventana de la propia estación; en un navegador de otro equipo queda en gris y dice por qué.

La tarjeta está abierta mientras el punto de recarga no se ha conectado desde que se abrió la estación, y se pliega cuando se conecta: se queda en la página para la próxima vez que se configure el punto de recarga. Un punto de recarga cuyo certificado no avala ninguna raíz instalada en Windows se rechaza en su primera conexión y espera en Acceso a los equipos.

El archivo se escribe la primera vez que arranca el sistema central, cuando hay un punto de recarga registrado, y hasta entonces la tarjeta lo dice. Es el mismo archivo para todos los puntos de recarga de esta estación, y no cambia cuando cambian el nombre o las direcciones de la estación (véase El certificado raíz de la estación).

Todo punto de recarga que recibió un archivo de una versión anterior necesita este, instalado una vez. En el primer arranque de esta versión, una estación cuyos puntos de recarga pueden tener un archivo anterior muestra en la tarjeta un aviso, El archivo de esta estación cambió, solo en esa ejecución. El aviso es un recordatorio, no la instrucción: instale el archivo nuevo una vez en cada punto de recarga de una estación que ya tenía puntos de recarga, muestre o no la tarjeta el aviso. Un punto de recarga que comprueba el nombre del servidor acepta la estación a partir de entonces.

El sistema central y los puertos

Qué Valor
Versiones del protocolo OCPP 1.6, 2.0, 2.0.1 y 2.1 (negociación de subprotocolo WebSocket; JSON)
Escucha Todas las interfaces, puerto TCP 19521, solo TLS
Dirección del punto de recarga wss://<station-address>:19521/<charge-point-id>
Identidad La última parte de la ruta del WebSocket es el id del punto de recarga

La escucha es siempre TLS; una escucha por HTTP sin cifrar se rechaza en todas partes salvo en loopback, que existe solo para las pruebas en proceso. Un punto de recarga se registra solo con su BootNotification (contestado con un intervalo de latido de 60 segundos), y toda tarjeta presentada para autorizar se acepta: Ganter Lab observa la recarga, no gestiona tarifas ni accesos.

Certificados

El lado servidor del apretón de manos TLS presenta un certificado firmado por la raíz propia de esta estación (véase El certificado raíz de la estación). Todo punto de recarga tiene que presentar un certificado de cliente:

  1. Tiene que ser de confianza de una de dos maneras: construye una cadena válida en esta máquina Windows, hasta una raíz instalada en ella, sin errores de política TLS; o usted aprobó este mismo certificado en Acceso a los equipos en la página de este controlador (más abajo). En los dos casos tiene que estar dentro de sus fechas de validez. Una comprobación fallida rechaza la conexión y el diario técnico anota qué comprobación falló.
  2. Su nombre común de sujeto, o un nombre alternativo de sujeto DNS, tiene que nombrar el id del punto de recarga con el que se conecta. Un certificado que nombra un punto de recarga distinto del que va en la ruta de la conexión se rechaza, aunque esté aprobado.

Un apretón de manos sin certificado de cliente se descarta antes de que circule ningún dato.

El certificado raíz de la estación

Qué Valor
La raíz Se crea una vez por perfil, la primera vez que arranca el sistema central o el servidor de red LoRaWAN. Su sujeto es Ganter Lab Connector (<station>), donde <station> es el nombre de red ese día. Nunca caduca y nunca se sustituye sola: cambiar el nombre del ordenador, el nombre de red o las direcciones de la estación la deja como está.
El archivo GanterLabConnector-<station>.pem, solo la parte pública, en la carpeta de datos, en ua\pki\station. Es el mismo archivo para un punto de recarga y para una pasarela LoRaWAN, que lo instala como tc.trust.
El certificado que presenta el sistema central Firmado por esa raíz. Nombra el nombre de red de la estación (el "Nombre de red" de la configuración del servidor OPC UA integrado; el nombre del ordenador mientras está vacío), localhost y cada dirección IPv4 de la estación, así que un punto de recarga que comprueba el nombre del servidor (perfil de seguridad 3) lo acepta. Cuando cambia el nombre de red o una dirección, solo se emite de nuevo este certificado, por sí solo, sin nada que hacer en el punto de recarga.
El certificado del servidor OPC UA No se usa aquí. El servidor OPC UA integrado conserva su propio certificado para los clientes OPC UA.

Una raíz guardada que ya no se puede abrir, por ejemplo porque la escribió otra cuenta de Windows, se sustituye por una nueva. Todo punto de recarga necesita entonces el archivo nuevo, una vez, y la tarjeta lo dice.

Acceso a los equipos

Un punto de recarga cuyo certificado no avala ninguna raíz instalada en Windows, porque es autofirmado o lo emitió la autoridad del propio fabricante, no necesita que esa raíz se instale en este ordenador. Su primera conexión se rechaza, y su certificado espera en Acceso a los equipos, al final de la página del controlador OCPP, la misma tarjeta que lleva la página del controlador OPC UA, hasta que usted decida:

Grupo Qué muestra Qué puede hacer
A la espera de aprobación Cada certificado rechazado, bajo el id del punto de recarga con el que se conectó: su huella digital SHA-256, cuándo lo intentó por última vez y cuántas veces, y sus detalles (sujeto, emisor, nombres de dominio, fechas de validez). Aprobar admite el certificado a partir de la próxima conexión del punto de recarga. Bloquear lo sigue rechazando sin volver a listarlo aquí. Descartar todos los certificados pendientes vacía la lista sin aprobar ni bloquear nada.
Equipos aprobados Los certificados que usted aprobó o importó, con quién decidió y cuándo. Retirar la aprobación cierra la conexión del punto de recarga y devuelve su certificado a la lista. Importar certificado aprueba el certificado público de un punto de recarga antes de su primera conexión.
Equipos bloqueados Los certificados que usted bloqueó. Un certificado bloqueado se rechaza aunque Windows confíe en él. Desbloquear devuelve el certificado a la lista, sin aprobarlo.

Cada certificado se aprueba por sí mismo, nunca la autoridad que lo firmó, así que un segundo punto de recarga del mismo fabricante espera su propia aprobación. Compare la huella digital con la que indica el punto de recarga antes de aprobarlo. Aprobar no cambia qué punto de recarga es el certificado: se sigue admitiendo solo bajo el id del punto de recarga que nombra, y solo dentro de sus fechas de validez. Un certificado en el que Windows ya confía se admite como antes y nunca aparece aquí; nada se aprueba de forma automática.

Las decisiones se guardan en la carpeta de datos de la estación, en ua\pki\ocpp, y sobreviven a un reinicio. Solo a un rol que puede configurar el Connector se le dibujan las órdenes, y estas actúan solo en la ventana de la propia estación: un navegador en otro dispositivo lee la tarjeta sin cambiarla, y ninguna herramienta de un agente aprueba un certificado. La lista guarda hasta 100 certificados a la espera de aprobación; cuando está llena, uno nuevo se sigue rechazando pero no se lista, y la tarjeta lo dice.

Campos de conexión

Campo Qué es Formato Por defecto
Identificador El id del punto de recarga al que representa este dispositivo: el mismo id que el cargador pone al final de su URL de conexión y que lleva en su certificado. Texto libre, comparado sin distinguir mayúsculas de minúsculas. Vacío recae en el nombre saneado del dispositivo. vacío

No hay campos de host, de puerto ni de credenciales: los detalles de la conexión los tiene el cargador, y esta estación solo necesita saber a qué punto de recarga se refiere el dispositivo. Tampoco hay campos de intervalo de sondeo. OCPP funciona empujando (el punto de recarga envía mensajes MeterValues y StatusNotification con su propio calendario) y los tags se refrescan a partir de los últimos datos recibidos en un ciclo fijo de un segundo.

Un punto de recarga que todavía no se ha conectado, o un conector que todavía no ha informado, no tiene, por tanto, ninguna lectura, y no una lectura fallida. Sus tags se quedan vacíos y no se anota ningún fallo: un valor que el punto de recarga todavía no ha enviado es el protocolo funcionando.

El estado de salud del punto de recarga

Como un punto de recarga envía sus valores cuando los tiene, el silencio de sus tags no puede distinguir uno que todavía no ha informado de uno que ya no está. Su estado de salud, el punto de su fila en el árbol y la columna Estado de salud en la página del controlador, sigue en cambio su conexión al sistema central de esta estación:

Situación Estado de salud
Configurado, y no se ha conectado desde que se abrió la estación Sin conexión
Conectado, todavía sin enviar nada En línea
Conectado y enviando En línea, o Parcialmente en línea cuando algunos de los valores que envió no se pueden leer
Se cayó: parado, desenchufado o aislado de la red Sin conexión, hasta que vuelva a conectarse
El sistema central sin escuchar Sin conexión
Deshabilitado Deshabilitado

Mientras el punto de recarga está conectado, un conector que todavía no ha informado no cuenta en su contra. Durante hasta diez segundos después de guardar un cambio en el punto de recarga, o de que arranque el Connector, se lee Aún sin determinar: volver a poner el dispositivo puede reiniciar el sistema central, y el punto de recarga tarda un momento en volver a conectarse.

Tags

Un tag OCPP lee un conector del punto de recarga (conector en el sentido de OCPP: una posición de enchufe, numerada a partir de 1). En OCPP 2.0, 2.0.1 y 2.1 el número es el del EVSE, porque allí los conectores vuelven a numerarse desde 1 dentro de cada EVSE. Existen tres clases de tag, que se distinguen por el sufijo del nombre del tag, que se valida:

El nombre del tag termina en Qué lee Tipo sensato
Meter El valor de medidor muestreado más reciente que informó el conector (MeterValues de OCPP; en OCPP 2.x, también los valores que trae un TransactionEvent durante una recarga). La unidad es la que envíe el cargador, típicamente Wh. El servidor conserva las últimas 10 muestras y el tag lee la más nueva. Un conector que nunca ha informado se lee como un valor vacío, no como cero. Float o Double
Status El texto de estado del conector de la última StatusNotification (por ejemplo Available, Faulted). En OCPP 2.x, un EVSE con más de un conector se lee como el más revelador de ellos: Faulted gana a Occupied, Occupied a Reserved, Reserved a Available, y Available a Unavailable. Un EVSE que aún no ha informado un estado se lee como un valor vacío. String
Transaction El número de la transacción en curso en el conector, que es lo que piden los comandos RemoteStopTransaction y GetTransactionStatus: en OCPP 1.6, el número que esta estación dio a la transacción al empezar; en OCPP 2.x, el identificador propio de la estación de recarga, tal cual lo envió. Se rellena cuando empieza una transacción y se vacía cuando termina, así que sin ninguna en curso se lee como texto vacío. Hasta que una transacción empiece o termine después de que el punto de recarga se conecte, se lee como valor vacío, porque puede que ya hubiera una en curso. String

Un nombre sin ninguno de estos sufijos lo rechaza la validación: llame a los tags Connector1Meter, Connector1Status y Connector1Transaction.

Campo Qué hace Valores Por defecto
Conector El número que lee este tag: el del conector en OCPP 1.6, el del EVSE en OCPP 2.x. 1 o más 1
Tipo de dato El tipo OPC UA con el que se expone el valor. Int32, Float, Double, String Float

Los tags OCPP son de solo lectura: el campo de acceso no ofrece ninguna opción con escritura, y una escritura se rechaza en vez de fingirse. Mandar sobre un punto de recarga es un comando propio, descrito a continuación, y no un valor escrito en un tag.

Comandos

A un punto de recarga se le manda además de leerlo. Cada dispositivo OCPP lleva los comandos de abajo como métodos sobre el dispositivo en el espacio de direcciones OPC UA propio de esta estación, así que un cliente OPC UA conectado a esta estación emite uno llamando al método.

Todos los comandos toman el id del punto de recarga como primer argumento, y devuelven como resultado la respuesta del propio punto de recarga.

Comando Más argumentos Qué hace
ChangeAvailability ConnectorId, Type (Operative o Inoperative) Pone un conector en servicio o lo retira.
ChangeConfiguration Key, Value Fija una clave de configuración en el punto de recarga (OCPP 1.6).
ClearCache ninguno Vacía la caché de autorización del punto de recarga.
GetConfiguration Key Lee una clave de configuración (OCPP 1.6).
RemoteStartTransaction IdTag Arranca una sesión de recarga para un token.
RemoteStopTransaction TransactionId Detiene una sesión en marcha.
GetTransactionStatus TransactionId Pregunta si una transacción sigue en marcha (OCPP 2.x).
Reset ninguno Reinicia el punto de recarga.
UnlockConnector ConnectorId Libera el cable de un conector.
SetChargingProfile ConnectorId, Limit, NumberOfPhases Fija un límite de potencia de recarga, en vatios. ConnectorId 0 limita el punto de recarga entero; otro número fija el límite por defecto de las sesiones que carga ese conector.
SetVariables ComponentName, VariableName, AttributeType, AttributeValue Fija una variable de un componente (OCPP 2.x).
GetVariables ComponentName, VariableName, AttributeType Lee una variable de un componente (OCPP 2.x).

AttributeType es uno de Actual, Target, MinSet, MaxSet.

De dónde sale el TransactionId. RemoteStopTransaction y GetTransactionStatus actúan sobre una transacción, nombrada por su número. Léalo en el tag Transaction del conector en el que carga la sesión (el EVSE en OCPP 2.x), por ejemplo Connector1Transaction, y páselo tal como se lee. Un texto vacío ahí significa que no hay ninguna transacción en curso en ese conector.

Un catálogo para todas las versiones. Los comandos conservan los nombres de arriba sea cual sea la versión que hable el punto de recarga, y la estación envía cada uno en la forma que define esa versión. En OCPP 2.0, 2.0.1 y 2.1 los conectores se agrupan bajo EVSE, y el número que se pasa como ConnectorId indica el EVSE.

Comando En OCPP 1.6 En OCPP 2.0, 2.0.1 y 2.1
ChangeAvailability Actúa sobre el conector indicado; 0 es el punto de recarga entero. Actúa sobre el EVSE indicado; 0 es la estación de recarga entera.
RemoteStartTransaction Envía el IdTag, y el punto de recarga elige el conector. Sale como RequestStartTransaction, con el IdTag como token central y un identificador de arranque propio; la estación de recarga elige el EVSE.
RemoteStopTransaction El TransactionId es el número que esta estación dio a la sesión al empezar. Sale como RequestStopTransaction; el TransactionId es el identificador propio de la estación de recarga, que se pasa tal cual como texto.
Reset Un reinicio completo. Un reinicio inmediato.
UnlockConnector Libera el conector indicado. Libera el primer conector del EVSE indicado.
SetChargingProfile 0 fija el perfil máximo del punto de recarga; otro conector recibe un perfil por defecto. 0 fija el perfil máximo de la estación de recarga; otro EVSE recibe un perfil por defecto.
ChangeConfiguration, GetConfiguration Como en la tabla de arriba. No forman parte de estas versiones: la estación de recarga contesta con un error, y el comando falla.
GetTransactionStatus, SetVariables, GetVariables No forman parte de esta versión: el punto de recarga contesta con un error, y el comando falla. Como en la tabla de arriba.

Esperar la respuesta. Un comando no ha terminado cuando la estación lo ha enviado. La estación mantiene la llamada abierta hasta que el punto de recarga contesta a la orden exacta que se envió, emparejada por el identificador de correlación que viaja con ella, y solo entonces informa de éxito y devuelve la respuesta. Tres cosas lo terminan de otra manera, y cada una se informa como un fallo con su motivo:

  • El punto de recarga no está conectado, o su conexión no está abierta. No se envía nada.
  • El punto de recarga contesta con un error OCPP, por ejemplo un comando que no implementa. El código de error es el motivo.
  • Pasan 30 segundos sin ninguna respuesta. Un comando que nadie contestó es un fallo, nunca un éxito.

Un comando emitido para un punto de recarga que ningún dispositivo representa, o que no está conectado, se rechaza en el acto en lugar de encolarse.

Descubrimiento

Descubrir en el controlador OCPP lista los puntos de recarga conectados ahora mismo al sistema central, y leer los canales de un candidato propone un tag Meter, un tag Status y un tag Transaction por cada conector del que el punto de recarga haya informado hasta ese momento.

El primer punto de recarga se configura siempre a mano. Nada se puede conectar antes de que el sistema central escuche, y solo escucha una vez que existe aquí un dispositivo OCPP, así que una exploración de una instalación sin ningún punto de recarga configurado no encuentra nada y lo dice. Añada ese primer dispositivo con el id con el que se va a conectar el cargador; a partir de ahí, un cargador que se haya conectado se puede descubrir. El recorrido general del descubrimiento se describe en la página Connector.

El id se compara sin distinguir mayúsculas de minúsculas, en el certificado, en la ruta de la conexión y frente al dispositivo: un cargador que se conecta como cp-a con un certificado que nombra CP-A es el mismo punto de recarga que un dispositivo cuyo Identificador se lee CP-A.

Un punto de recarga que ya tiene vuelve a leer sus conectores desde su propia página: Descubrir tags, en la cabecera de su tarjeta de tags, ofrece los tags Meter, Status y Transaction de cada conector del que informó mientras estaba conectado y para el que el dispositivo todavía no tiene tag (vea Descubrir los tags de un dispositivo).