OCPP

Riferimento del driver OCPP - il sistema centrale integrato, i certificati dei punti di ricarica, i tag dei connettori e la regola di denominazione Meter/Status.

Visualizza come Markdown

Il driver OCPP fa di Ganter Lab il sistema centrale per i punti di ricarica di veicoli elettrici che parlano Open Charge Point Protocol. Come per LoRaWAN, la direzione è rovesciata: la stazione non si collega al caricatore, è il punto di ricarica a collegarsi a Ganter Lab su un WebSocket, a registrarsi e a spingere dentro la propria telemetria.

Il sistema centrale integrato parte quando il primo dispositivo OCPP abilitato viene caricato nel connector in funzione, e si ferma quando l'ultimo viene rimosso o disabilitato: senza alcun punto di ricarica configurato, sulla porta non ascolta proprio nulla. Aggiungerne uno lo fa tornare, senza riavviare l'applicazione. Ogni dispositivo che configuri rappresenta un punto di ricarica, identificato dall'id con cui si collega.

Sistema centrale e porte

Che cosa Valore
Versioni di protocollo OCPP 1.6, 2.0, 2.0.1 e 2.1 (negoziazione del sottoprotocollo WebSocket; JSON)
Ascolto Tutte le interfacce, porta TCP 19521, solo TLS
Indirizzo del punto di ricarica wss://<station-address>:19521/<charge-point-id>
Identità L'ultima parte del percorso WebSocket è l'id del punto di ricarica

L'ascolto è sempre in TLS; un ascolto in HTTP semplice viene rifiutato ovunque tranne che in loopback, che esiste solo per le prove interne al processo. Un punto di ricarica si registra con la sua BootNotification (a cui si risponde con un intervallo di heartbeat di 60 secondi), e ogni badge presentato per l'autorizzazione viene accettato: Ganter Lab osserva la ricarica, non gestisce tariffe né accessi.

Certificati

Il lato server dell'handshake TLS presenta il certificato OPC UA proprio dell'applicazione. Ogni punto di ricarica deve presentare un certificato client:

  1. Deve costruire una catena valida su questa macchina Windows, senza errori di politica TLS; un controllo fallito rifiuta la connessione e il diario registra quale controllo è fallito.
  2. Il suo common name di soggetto oppure un nome alternativo di soggetto DNS deve nominare l'id del punto di ricarica con cui si collega. Un certificato che nomina un punto di ricarica diverso da quello del percorso di connessione viene rifiutato.

Un handshake senza certificato client viene lasciato cadere prima che passi alcun dato.

Campi di connessione

Campo Che cos'è Formato Predefinito
Identificativo L'id del punto di ricarica che questo dispositivo rappresenta: lo stesso id che il caricatore mette alla fine del suo URL di connessione e che porta nel proprio certificato. Testo libero, confrontato senza distinguere maiuscole e minuscole. Vuoto ricade sul nome ripulito del dispositivo. vuoto

Non ci sono campi per host, porta o credenziali: è il caricatore a tenere i dettagli della connessione, e a questa stazione serve solo sapere quale punto di ricarica il dispositivo intende. Non ci sono nemmeno campi per l'intervallo di interrogazione. OCPP funziona a spinta, cioè è il punto di ricarica a inviare i messaggi MeterValues e StatusNotification secondo la propria cadenza, e i tag si aggiornano dagli ultimi dati ricevuti su un ciclo fisso di un secondo.

Un punto di ricarica che non si è ancora collegato, o un connettore che non ha ancora riferito nulla, non ha quindi alcuna lettura, non una lettura fallita. I suoi tag restano vuoti, il dispositivo riferisce che non è stato osservato nulla invece di andare non connesso, e nel diario non viene registrato alcun fallimento: questo è lo stato normale di un punto di ricarica appena configurato che non è ancora arrivato.

Tag

Un tag OCPP legge un connettore del punto di ricarica (connettore nel senso di OCPP: una posizione di presa, numerata da 1). Esistono due generi di tag, distinti dal suffisso del nome del tag, che viene convalidato:

Il nome del tag finisce in Che cosa legge Tipo sensato
Meter L'ultimo valore campionato di contatore che il connettore ha riferito (MeterValues di OCPP). L'unità è quella che il caricatore invia, di solito Wh. Il server conserva gli ultimi 10 campioni e il tag legge il più recente. Un connettore che non ha mai riferito nulla si legge come valore vuoto, non come zero. Float oppure Double
Status Il testo di stato del connettore dall'ultima StatusNotification (per esempio Available, Charging, Faulted). String

Un nome senza nessuno dei due suffissi viene rifiutato dalla convalida: chiama i tag come Connector1Meter e Connector1Status.

Campo Che cosa fa Valori Predefinito
Connettore di ricarica Il numero del connettore sul punto di ricarica che questo tag legge. 1 o più 1
Tipo di dato Il tipo OPC UA con cui il valore viene esposto. Int32, Float, Double, String Float

I tag OCPP sono di sola lettura: il campo dell'accesso non offre alcuna scelta scrivibile, e una scrittura viene rifiutata invece che simulata. Comandare un punto di ricarica è un comando a sé, descritto qui sotto, non un valore scritto su un tag.

Comandi

Un punto di ricarica si comanda oltre che leggere. Ogni dispositivo OCPP porta i comandi qui sotto come metodi sul dispositivo nello spazio degli indirizzi OPC UA proprio di questa stazione, così qualunque cosa sappia chiamare un metodo ne può emettere uno: un client OPC UA, oppure un'azione di Logic che lo chiama.

Ogni comando prende l'id del punto di ricarica come primo argomento e restituisce come risultato la risposta propria del punto di ricarica.

Comando Altri argomenti Che cosa fa
ChangeAvailability ConnectorId, Type (Operative oppure Inoperative) Mette o toglie di servizio un connettore.
ChangeConfiguration Key, Value Imposta una chiave di configurazione sul punto di ricarica (OCPP 1.6).
ClearCache nessuno Svuota la cache di autorizzazione del punto di ricarica.
GetConfiguration Key Legge una chiave di configurazione (OCPP 1.6).
RemoteStartTransaction IdTag Avvia una sessione di ricarica per un gettone.
RemoteStopTransaction TransactionId Ferma una sessione in corso.
GetTransactionStatus TransactionId Chiede se una transazione è ancora in corso (OCPP 2.x).
Reset nessuno Riavvia il punto di ricarica.
UnlockConnector ConnectorId Rilascia il cavo da un connettore.
SetChargingProfile ConnectorId, Limit, NumberOfPhases Imposta un limite di potenza di ricarica.
SetVariables ComponentName, VariableName, AttributeType, AttributeValue Imposta una variabile di un componente (OCPP 2.x).
GetVariables ComponentName, VariableName, AttributeType Legge una variabile di un componente (OCPP 2.x).

AttributeType è uno tra Actual, Target, MinSet, MaxSet.

Aspettare la risposta. Un comando non è finito quando la stazione lo ha inviato. La stazione tiene aperta la chiamata finché il punto di ricarica non risponde proprio all'ordine che ha inviato, riconosciuto dall'identificatore di correlazione che viaggia con esso, e solo allora riferisce che è riuscito e restituisce la risposta. Tre cose lo chiudono altrimenti, ciascuna riferita come fallimento con il suo motivo:

  • Il punto di ricarica non è collegato, oppure la sua connessione non è aperta. Non viene inviato nulla.
  • Il punto di ricarica risponde con un errore OCPP, per esempio per un comando che non implementa. Il codice di errore è il motivo.
  • Passano 30 secondi senza alcuna risposta. Un comando a cui nessuno ha risposto è un fallimento, mai un successo.

Un comando emesso per un punto di ricarica che nessun dispositivo porta, oppure che non è collegato, viene rifiutato subito invece di essere messo in coda.

Rilevamento

Rileva sul driver OCPP elenca i punti di ricarica attualmente collegati al sistema centrale, e leggere i canali di un candidato propone un tag Meter e un tag Status per ogni connettore che il punto di ricarica ha riferito finora.

Il primo punto di ricarica si configura sempre a mano. Nulla si può collegare prima che il sistema centrale ascolti, e lui ascolta solo quando qui esiste un dispositivo OCPP, quindi una scansione di un'installazione senza alcun punto di ricarica configurato non trova nulla e lo dice. Aggiungi quel primo dispositivo con l'id con cui il caricatore si collegherà; dopo di che, un caricatore che si è collegato si può rilevare. Il flusso generale del rilevamento è descritto nella pagina Connector.

L'id viene confrontato senza distinguere maiuscole e minuscole, nel certificato, nel percorso di connessione e rispetto al dispositivo: un caricatore che si collega come cp-a con un certificato che nomina CP-A è lo stesso punto di ricarica di un dispositivo il cui Identificativo si legge CP-A.