Skip to content

Charging Station Management System for electric vehicles - OCPP 2.0.1. compliant

License

Notifications You must be signed in to change notification settings

wenchan3918/ocpp-csms

 
 

Repository files navigation

OCPP CSMS (OCPP 2.0.1.)

Charging station Management system for electric vehicle charging stations.

Based on: OCPP-2.0.1 (Full protocol documentation: openchargealliance.org/downloads)

_ Under development _

Working principle

E.g. incoming BootNotificationRequest:

charging station -> websocket-service -> GCP Pub/Sub topic "BootNotificationRequest" -> device-service

charging station <- websocket-service <- GCP Pub/Sub topic "BootNotificationResponse" <- device-service

Functional features:

  • Implemented OCPP messages:
Implemented OCPP Messages Microservice name
BootNotificationRequest, BootNotificationResponse device-service
HeartbeatRequest, HeartbeatResponse device-service
StatusNotificationRequest, StatusNotificationResponse device-service
TransactionEventRequest, TransactionEventResponse transaction-service
AuthorizeRequest, AuthorizeResponse user-service

Technical features:

  • microservice-based architecture
  • GO: managing multiple websocket connections easily with goroutines, multithreading would be more tedious in many other languages
  • Google Firestore for simple data persistence
  • Google Cloud Pub/Sub for async messaging between services (using watermill.io)
  • REST API for managing charging station information (API description: swaggerhub.com)

Quick Start

  1. Create a Google Cloud Platform project. Follow the google guide.

  2. Create a service account and create JSON credentials for it. Follow the google guide (see the "Service account credentials" section). When you create the service account, under "select a role" choose Pub/Sub AdminFirebase AdminCloud Datastore OwnerFirestore Service Agent and Firebase Rules Firestore Service Agent (note: for production use, you may want to restrict these to lower roles, needs to be tested).

P 3. Enable Cloud Pub/Sub APICloud Firestore API and Cloud Datastore API.

  • Set from APIs & Services -> Enabled APIs & services -> +ENABLE APIS AND SERVICES
  1. Enable Datastore from https://console.cloud.google.com/datastore/welcome?project={YOUR_PROJECT_ID}

5.Once you have the JSON credentials, place them in the following directories, under the name 'PRIVATE.json':

  • credentials/PRIVATE.json

Note: you can use the same service account and the same JSON credentials file in all places, or you can create separate ones for extra security if you want

  1. Create a Cloud Firestore database Follow the google guide

  2. In the docker-compose.yml file, replace chargerevolutioncloud name with the project id of your own GCP project.

  3. Install docker and docker-compose if you haven't already

  4. If you are deploying on a remote machine or VPS, open up port 3000 and port 5000 so you can access the system from your own machine.

Important: For actual deployment you should add a reverse proxy layer or some other security measure to protect your open port. A good place to start: How To Deploy a Go Web Application with Docker and Nginx on Ubuntu 18.04

  1. Build and run the docker images with

    docker compose up --build
    

    or

    docker compose up --build -d
    

    to hide console output

  2. The device service should now be running on localhost:5000. Use Postman or some other tool to send a post request and create a charging station (API description: swaggerhub.com) For example, you can send something like this in the request payload:

    POST: localhost:5000/chargingstations/create

    {
        "id": "CS123",
        "serialNumber": "5",
        "model": "CS-5500",
        "vendorName": "ChargerMaker Inc.",
        "firmwareVersion": "1.8",
        "modem": {
            "iccid": "24",
            "imsi": "24"
        },
        "location": {
            "lat": 41.366446,
            "lng": -38.1854651
        }
    }
    

    If this is successful, a collection named "chargingstations" and a document named "CS123" should have been created in the Firestore database of your project.

    Can here see the data from https://console.cloud.google.com/datastore/welcome?project={YOUR_PROJECT_ID}

  3. The websocket service should be running on localhost:3000. Connect to port 3000 as a websocket client (use the station id you have created in the previous step):

    ws://{HOST}:3000/ocpp/{stationid}

    Tip: Postman now supports websocket connections (beta version), but only on the Windows desktop app I believe. This could be useful for testing. Or you can have a look at my basic charging station simulator: gregszalay/ocpp-charging-station-simulator

To-do

  • secure websocket connections (wss)
  • full implementation of all basic messages (reset, getconfig etc.)

About

Charging Station Management System for electric vehicles - OCPP 2.0.1. compliant

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 71.9%
  • HTML 26.8%
  • Other 1.3%