OCPP
Referência do driver OCPP: o sistema central embutido, certificados de ponto de recarga, tags de conector e a regra de nomeação Meter/Status.
O driver OCPP faz do Ganter Lab o sistema central de pontos de recarga de veículos elétricos que falam o Open Charge Point Protocol. Como no LoRaWAN, o sentido é invertido: a estação não conecta ao carregador, o ponto de recarga conecta ao Ganter Lab por um WebSocket, se registra e empurra a telemetria dele para cá.
O sistema central embutido inicia quando o primeiro dispositivo OCPP habilitado é carregado no connector em execução, e para quando o último é removido ou desabilitado: sem nenhum ponto de recarga configurado, nada escuta na porta. Adicionar um o traz de volta, sem reiniciar a aplicação. Cada dispositivo que você configura representa um ponto de recarga, identificado pelo id sob o qual ele conecta.
Sistema central e portas
| O quê | Valor |
|---|---|
| Versões de protocolo | OCPP 1.6, 2.0, 2.0.1 e 2.1 (negociação de subprotocolo no WebSocket; JSON) |
| Escuta | Todas as interfaces, porta TCP 19521, só TLS |
| Endereço do ponto de recarga | wss://<station-address>:19521/<charge-point-id> |
| Identidade | A última parte do caminho do WebSocket é o id do ponto de recarga |
A escuta é sempre TLS; uma escuta em HTTP simples é recusada em qualquer lugar, exceto no loopback, que existe só para testes em processo. Um ponto de recarga se registra com a BootNotification dele (respondida com um intervalo de heartbeat de 60 segundos), e todo crachá apresentado para autorização é aceito: o Ganter Lab observa a recarga, ele não gerencia tarifas nem acesso.
Certificados
O lado servidor do handshake TLS apresenta o certificado OPC UA da própria aplicação. Todo ponto de recarga precisa apresentar um certificado de cliente:
- Ele precisa formar uma cadeia válida nesta máquina Windows, sem erros de política TLS; uma conferência que falha recusa a conexão, e o diário registra qual conferência falhou.
- O nome comum do titular dele, ou um nome alternativo de titular do tipo DNS, precisa nomear o id do ponto de recarga sob o qual ele conecta. Um certificado que nomeia um ponto de recarga diferente do que está no caminho da conexão é recusado.
Um handshake sem certificado de cliente é descartado antes de qualquer dado passar.
Campos de conexão
| Campo | O que é | Formato | Padrão |
|---|---|---|---|
| Identificador | O id do ponto de recarga que este dispositivo representa: o mesmo id que o carregador põe no fim da URL de conexão dele e carrega no certificado dele. | Texto livre, comparado ignorando maiúsculas e minúsculas. Vazio recai no nome higienizado do dispositivo. | vazio |
Não há campos de host, porta ou credencial: o carregador guarda os detalhes da conexão, e esta estação só precisa saber a qual ponto de recarga o dispositivo se refere. Também não há campos de intervalo de leitura. O OCPP é baseado em push (o ponto de recarga envia mensagens MeterValues e StatusNotification na agenda dele) e as tags se atualizam a partir dos últimos dados recebidos, num ciclo fixo de um segundo.
Um ponto de recarga que ainda não conectou, ou um conector que ainda não reportou, portanto, não tem leitura, e não uma leitura que falhou. As tags dele ficam vazias, o dispositivo relata que nada foi observado, em vez de ficar offline, e nenhuma falha é registrada no diário: este é o estado normal de um ponto de recarga que acabou de ser configurado e ainda não chegou.
Tags
Uma tag OCPP lê um conector do ponto de recarga (conector no sentido do OCPP: uma posição de plugue, numerada a partir de 1). Existem dois tipos de tag, distinguidos pelo sufixo do nome da tag, que é validado:
| O nome da tag termina em | O que ela lê | Tipo sensato |
|---|---|---|
Meter |
O valor de medição amostrado mais recente que o conector reportou (MeterValues do OCPP). A unidade é o que o carregador enviar, tipicamente Wh. O servidor guarda as últimas 10 amostras e a tag lê a mais nova. Um conector que nunca reportou lê como valor vazio, não como zero. | Float ou Double |
Status |
O texto de estado do conector, da última StatusNotification (por exemplo Available, Charging, Faulted). |
String |
Um nome sem nenhum dos dois sufixos é recusado pela validação: dê às tags nomes como
Connector1Meter e Connector1Status.
| Campo | O que faz | Valores | Padrão |
|---|---|---|---|
| Connector | O número do conector no ponto de recarga que esta tag lê. | 1 ou mais | 1 |
| Tipo de dado | O tipo OPC UA em que o valor é exposto. | Int32, Float, Double, String | Float |
Tags OCPP são somente leitura: o campo de acesso não oferece escolha gravável, e uma escrita é recusada em vez de fingida. Comandar um ponto de recarga é um comando próprio, descrito a seguir, e não um valor escrito numa tag.
Comandos
Um ponto de recarga é comandado além de lido. Cada dispositivo OCPP carrega os comandos abaixo como métodos no dispositivo, dentro do espaço de endereços OPC UA desta estação, então qualquer coisa que consiga chamar um método consegue disparar um: um cliente OPC UA, ou uma ação do Logic que o chame.
Todo comando recebe o id do ponto de recarga como primeiro argumento, e devolve a resposta do próprio ponto de recarga como resultado.
| Comando | Outros argumentos | O que faz |
|---|---|---|
| ChangeAvailability | ConnectorId, Type (Operative ou Inoperative) |
Coloca um conector em serviço ou fora de serviço. |
| ChangeConfiguration | Key, Value | Define uma chave de configuração no ponto de recarga (OCPP 1.6). |
| ClearCache | nenhum | Limpa o cache de autorização do ponto de recarga. |
| GetConfiguration | Key | Lê uma chave de configuração (OCPP 1.6). |
| RemoteStartTransaction | IdTag | Inicia uma sessão de recarga para um token. |
| RemoteStopTransaction | TransactionId | Encerra uma sessão em andamento. |
| GetTransactionStatus | TransactionId | Pergunta se uma transação ainda está rodando (OCPP 2.x). |
| Reset | nenhum | Reinicia o ponto de recarga. |
| UnlockConnector | ConnectorId | Libera o cabo de um conector. |
| SetChargingProfile | ConnectorId, Limit, NumberOfPhases | Define um limite de potência de recarga. |
| SetVariables | ComponentName, VariableName, AttributeType, AttributeValue | Define uma variável de um componente (OCPP 2.x). |
| GetVariables | ComponentName, VariableName, AttributeType | Lê uma variável de um componente (OCPP 2.x). |
O AttributeType é um entre Actual, Target, MinSet, MaxSet.
Esperar a resposta. Um comando não está terminado quando a estação o enviou. A estação segura a chamada aberta até o ponto de recarga responder exatamente à ordem que ela enviou, casada pelo identificador de correlação que viaja com ela, e só então relata sucesso e devolve a resposta. Três coisas a encerram de outro jeito, cada uma relatada como falha com o seu motivo:
- O ponto de recarga não está conectado, ou a conexão dele não está aberta. Nada é enviado.
- O ponto de recarga responde com um erro OCPP, por exemplo um comando que ele não implementa. O código de erro é o motivo.
- Passam 30 segundos sem resposta nenhuma. Um comando que ninguém respondeu é uma falha, nunca um sucesso.
Um comando disparado para um ponto de recarga que nenhum dispositivo carrega, ou que não está conectado, é recusado de imediato, em vez de enfileirado.
Descoberta
O Descobrir no driver OCPP lista os pontos de recarga conectados no momento ao
sistema central, e ler os canais de um candidato propõe uma tag Meter e uma
tag Status por conector que o ponto de recarga tenha reportado até ali.
O primeiro ponto de recarga é sempre configurado à mão. Nada consegue conectar antes de o sistema central escutar, e ele só escuta depois que existe um dispositivo OCPP aqui, então uma varredura numa instalação sem nenhum ponto de recarga configurado não acha nada e diz isso. Adicione esse primeiro dispositivo com o id sob o qual o carregador vai conectar; depois disso, um carregador que já conectou pode ser descoberto. O fluxo geral de descoberta está descrito na página Connector.
O id é comparado ignorando maiúsculas e minúsculas, no certificado, no caminho da
conexão e contra o dispositivo: um carregador que conecta como cp-a com um certificado
que nomeia CP-A é o mesmo ponto de recarga que um dispositivo cujo Identificador diz CP-A.