This project is an OCPP (Open Charge Point Protocol) backend built using Django and Django Channels. It manages WebSocket connections from EV chargers and processes OCPP 1.6 messages.
- Django backend
- Django Channels (ASGI) for WebSockets
- Python OCPP 1.6 library
+-----------------+ WebSocket (OCPP 1.6) +--------------------+
| | -------------------------------------> | |
| EV Charger | | Django Channels |
| (Charge Point) | <------------------------------------- | Consumer |
+-----------------+ OCPP Responses | (WebSocket Handler) |
/ +--------------------+
/
/ forwards messages to
/
+----------------------------+
| OCPPHandler |
| - Validate OCPP Actions |
| - Process OCPP Messages |
+----------------------------+
|
|
persists state to / retrieves session
|
+----------------------------+
| ChargerSession |
| - Maintain connection info |
| - Last heartbeat timestamp |
| - Charger status |
+----------------------------+
- WebSocket-based communication with EV chargers using OCPP 1.6.
- Tracks charger sessions and handles heartbeat, boot notifications, and more.
- RESTful API for charger management.
- Simulator script (
ocpp_simulator.py) to test the system.
ocpp_backend
├── chargers # Charger app handling OCPP messages
│ ├── chargerSession.py # Handles charger session state
│ ├── consumers.py # WebSocket consumer for charger connections
│ ├── ocpp_handler.py # Processes OCPP messages
│ ├── models.py # Database models
│ ├── routing.py # WebSocket routing
│ ├── views.py # REST API views
│ ├── admin.py, apps.py, tests.py # Django app files
├── ocpp_backend # Main Django project folder
│ ├── settings.py # Project settings
│ ├── asgi.py # ASGI server configuration (WebSockets)
│ ├── urls.py # URL routing
│ ├── wsgi.py # WSGI server configuration
├── ocpp_simulator.py # Simulator for testing OCPP messages
├── manage.py # Django management script
├── requirments.txt # Dependencies
git clone git@github.com:Mostafa95/ocpp_module.git
cd ocpp_backendpython3 -m venv env
source env/bin/activate
pip install -r requirments.txtpython manage.py migrate
python manage.py runserverThe Django server will start at http://127.0.0.1:8000/
To enable WebSocket communication for chargers:
daphne -b 0.0.0.0 -p 8000 ocpp_backend.asgi:application -v2This will listen for WebSocket connections at:
ws://127.0.0.1:8000/ws/ocpp/<charger_id>/
You can simulate an EV charger connecting to the backend:
python ocpp_simulator.pyThis will send test OCPP messages (e.g., BootNotification, Heartbeat) to the server.
ws://127.0.0.1:8000/ws/ocpp/<charger_id>/- Handles OCPP 1.6 messages
- Expects JSON-formatted messages
| Method | Endpoint | Description |
|---|---|---|
| GET | /chargers/ |
List all chargers |
| GET | /chargers/<id>/status |
Retrieve charger details |
| GET | get_logs/ |
retrieve logs |
For further issues, check the logs using:
tail -f logs/events.log