thoughtworks / maeve-csms

MaEVe is an experimental EV Charge Station Management System (CSMS)
Apache License 2.0
86 stars 22 forks source link
e-mobility electric-vehicles

Manager Gateway

MaEVe

MaEVe is an EV charge station management system (CSMS). It began life as a simple proof of concept for implementing ISO-15118-2 Plug and Charge (PnC) functionality and remains a work in progress. It is hoped that over time it will become more complete, but already provides a useful basis for experimentation.

The system currently integrates with Hubject for PnC functionality.

Table of Contents

Documentation

MaEVe is implemented in Go 1.20. Learn more about MaEVe and its existing components through this High-level design document.

Pre-requisites

MaEVe runs in a set of Docker containers. This means you need to have docker, docker-compose and a docker daemon (e.g. docker desktop, colima or rancher) installed and running. Scripts that fetch various tokens use jq. Make sure you have it installed.

Getting started

To get the system up and running:

  1. (cd config/certificates && make)
  2. Run the ./scripts/run.sh script

Charge stations can connect to the CSMS using:

If the charge station is also running in a Docker container then the charge station docker container can connect to the maeve-csms network and the charge station can connect to the CSMS using:

Charge stations can use either OCPP 1.6j or OCPP 2.0.1.

For TLS, the charge station should use a certificate provisioned using the Hubject CPO EST service.

A charge station must first be registered with the CSMS before it can be used. This can be done using the manager API. e.g. for TLS with client certificate, use:

$ curl http://localhost:9410/api/v0/cs/<cs-id> -H 'content-type: application/json' -d '{"securityProfile":2}'

Tokens, which identify a payment method for a non-contract charge, must also be registered with the CSMS before they can be used. This can also be done using the manager API. e.g.:

$ curl http://localhost:9410/api/v0/token -H 'content-type: application/json' -d '{
  "countryCode": "GB",
  "partyId": "TWK",
  "type": "RFID",
  "uid": "DEADBEEF",
  "contractId": "GBTWK012345678V",
  "issuer": "Thoughtworks",
  "valid": true,
  "cacheMode": "ALWAYS"
}'

Troubleshooting

Docker compose doesn't always rebuild the docker images which can cause all kinds of errors. If in doubt, force a rebuild by docker-compose build before launching containers.

java.io.IOException: keystore password was incorrect This error results from incompatibility between java version and openssl; try upgrading your java version.

Configuration

The gateway is configured through command-line flags. The available flags can be viewed using the -h flag.

The manager is configured through a TOML configuration file. An example configuration file can be found in ./config/manager/config.toml. Details of the available configuration options can be found in ./manager/config/README.md.

Contributing

Learn more about how to contribute on this project through Contributing

License

MaEVe is Apache licensed.