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.
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:
- 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.
- 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.