The goal of this project is to create a java application that will connect to two systems: a remote server (via permanent web socket) and a local wallbox (UDP messges). The application will collect information from the wallbox (UDP) and transmit them to the server (JSON/websocket). The server will provide a charging plan in return. The plan will be executed by the application by sending control messages to the wallbox. Meter data must be transmitted back to the server every minute.
The web socket / endpoint exists on a given URL. I will also provide a wallbox on a static IP, so the entire application can be created and tested from anywhere in the world, no specific hardware is necessary. The final application shall work on a raspberry pi, so it should run from command line.
The JSON/Websocket protocol is part of a standard called "OCPP" and is defined here: [url removed, login to view]
ONLY A SMALL SUBSET OF THE OCPP 2.0 PROTOCOL NEEDS TO BE IMPLEMENTED, just to support the following use cases:
The first phase (this project) should contain the following use cases:
- connect to the web socket endpoint
- register as a new client ("pairing", submit a unique ID) - bootConf in the above document
- send a "heartbeat" (alive) message every 300 seconds
- receive configuration data (JSON format - contains for example the IP of the wallbox)
- connect to the wallbox and read data (current energy, vehicle connected yes/no, current state)
- submit the data to back the web socket endpoint every minute (as JSON)
- send control messages to the wallbox (start, stop, resume, reset)
- receive a charging plan and execute (inform the wallbox about any change in the plan when the time has come)
The next phase (paid separately, follow up):
- Add authentication (the wallbox has an RFID reader and can submit the ID of the token)
- Add functions for logging and improved remote configuration
- Support multiple wallboxes with one client application.
The third phase (paid separately)
- Support different vendors of wallboxes (each vendor has a different way of communication) and map it to the same web socket / JSON format ("OCPP standard")