{"id":19660081,"url":"https://github.com/germancoding/wallboxui","last_synced_at":"2026-06-03T23:31:38.231Z","repository":{"id":230930735,"uuid":"743557510","full_name":"GermanCoding/WallboxUI","owner":"GermanCoding","description":"Custom web interface for the Keba KeContact P30 Wallbox","archived":false,"fork":false,"pushed_at":"2025-02-17T00:34:09.000Z","size":1431,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-17T01:25:00.531Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GermanCoding.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-15T13:46:10.000Z","updated_at":"2025-02-17T00:34:11.000Z","dependencies_parsed_at":"2024-06-03T19:45:50.152Z","dependency_job_id":"d2260000-918f-41a8-af2b-ae99c108ccab","html_url":"https://github.com/GermanCoding/WallboxUI","commit_stats":null,"previous_names":["germancoding/wallboxui"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GermanCoding%2FWallboxUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GermanCoding%2FWallboxUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GermanCoding%2FWallboxUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GermanCoding%2FWallboxUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GermanCoding","download_url":"https://codeload.github.com/GermanCoding/WallboxUI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240968955,"owners_count":19886400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T15:45:14.457Z","updated_at":"2026-06-03T23:31:38.225Z","avatar_url":"https://github.com/GermanCoding.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wallbox UI\n\n### Overview\n\nThis is a web interface designed to extract information from a Keba KeContact P30 Wallbox.\nIt was originally designed to enhance an existing P30 c-series\n(which does not have a \"real\" management interface by themselves) it may also prove useful\nfor other series of the P30 wallbox models.\n\nThe idea is that you run this web interface on a small appliance (a server, as raspbery PI, a NAS...) which provides you\nwith real-time data about your wallbox.\n\n### Features\n\n- Retrieve charge session logs from the wallbox for long-term storage, display and backup\n    - Supports all information provided by the Keba UDP protocol: Session start/stop times, charged energy, energy meter\n      at start, charging current, stop reason, RFID authorization code\n- Export of charge sessions as csv (e.g. for billing)\n- Status display of wallbox displaying current information (eletrical information, current charge status, energy meter,\n  cable and system status, and more)\n- Security by default: Includes and requires authentication out of the box\n    - Secured admin-only access for user management\n \n### Screenshots\n\n![Screenshot showing status page](https://github.com/GermanCoding/WallboxUI/assets/4279661/99b252a3-5a3a-4a72-bcb2-dba9560c7a43)\n\n![Screenshot showing charge logs](https://github.com/GermanCoding/WallboxUI/assets/4279661/bcc7073e-e4c4-439d-87b0-71fd1acabf8b)\n\n\n### Deployment (production)\n\nDeploying this should be mostly straightforward. The\nreference deployment currently uses docker-compose. You can deploy this\nvia alternate means as well - I suggest reading through the development documentation\nto get a grip on how stuff works.\n\nFor docker-compose, the following things need to be done:\n\n1. Clone this repository to your local disk, if you haven't already (refer to git clone for details).\n2. Add configuration:\n    - The included compose file loads configuration from a `config.env` file (for backend configuration) and\n      a `db.env` (for database configuration) by default.\n\n      A configuration file may look like this:\n\n      ``config.env``\n        ```\n        WALLBOX_IP=\u003cIP address of your wallbox\u003e\n        DEBUG=False\n        # You need to manually manage HTTPS via a reverse proxy\n        HTTPS=True\n        # The default docker compose spins up a postgres db\n        DB=postgres\n        DB_HOST=db\n        DB_NAME=\u003cyour DB name\u003e\n        DB_USER=postgres\n        DB_PASSWORD=\u003cyour DB password\u003e\n        ALLOWED_HOSTS=\u003cdomain name you're hosting the web UI at\u003e\n        CSRF_TRUSTED_ORIGINS=https://\u003cdomain name you're hosting the web UI at\u003e\n        # Approx 2 seconds on a raspberry pi 3. Increase if you have more computational power.\n        # Larger values increase security against bruteforce password cracking attacks, but slow down logins\n        HASH_ITERATIONS=180000\n        # This URL gets called (HTTP GET) (at least) every hour if wallbox communcation was succesful. Useful for uptime monitoring\n        HEALTHCHECK_URL=\u003cmy monitoring URL\u003e\n        ```\n\n      The docker compose file also spins up a postgres db. Configure (at least) its database name and password (default user\n      is postgres).\n      Refer to the official postgres docker image documentation for more information.\n\n      ``db.env``\n      ```\n      POSTGRES_DB=\u003cyour DB name\u003e\n      POSTGRES_PASSWORD=\u003cyour DB password\u003e\n      ```\n3. Spin up containers: `docker compose up -d --build` (or docker-compose if using the standalone tool instead of the\n   plugin).\n    - This will (re-)build the containers and spin them up.\n    - Verify that stuff is running via the usual `docker ps`, `docker logs` etc commands. You should see 3 containers:\n        - The database container\n        - The backend container (containing a django python server and a python script). This container should indicate\n          successful database connection and communication with the wallbox.\n        - A static web server hosting the vue.js frontend\n4. Configure a reverse proxy:\n    - The reverse proxy can be pretty much anything you like (nginx, Apache, Traefik, caddy...).\n      An example nginx configuration is further down below. In any case, you most provide the following:\n        - Your reverse proxy must provide https (you may get away with setting HTTPS=False in your config and using\n          plain HTTP, but I don't support that use case). Some reverse proxies like caddy provide https out of the box.\n          Let's Encrypt provides free certificates for everything.\n        - You must forward requests to the prefixes `/admin` and `/api` to the backend webserver (listening on\n          127.0.0.1:8000 in the default docker compose). All other path prefixes must be forwarded to the frontend\n          webserver (listening on 127.0.0.1:8001 in the default docker compose).\n\n      Example nginx config (minimal, not really suitable for production):\n    ```\n    server {\n    listen 443 ssl http2;\n    listen [::]:443 ssl http2;\n    \n    server_name \u003cmy domain name\u003e;\n    ssl_certificate \u003cmy ssl cert\u003e;\n    ssl_certificate_key \u003cmy ssl key\u003e;\n    \n    location / {\n        proxy_set_header Host $host;\n        proxy_pass http://127.0.0.1:8001$request_uri;\n    }\n    \n    location /admin {\n        proxy_set_header Host $host;\n        proxy_pass http://127.0.0.1:8000$request_uri;\n    }\n    \n    location /api {\n        proxy_set_header Host $host;\n        proxy_pass http://127.0.0.1:8000$request_uri;\n    }\n    }\n    ```\n5. Create an initial superuser account: The application always requires authentication, so you need credentials. Run\n   ``docker exec -it \u003cbackend container name\u003e python ./manage.py createsuperuser``. You can find out the backend's\n   container name with ``docker ps``. You can now log in using these credentials.\n\n### Development\n\n#### Project architecture overview\n\n- backend: Contains a python django project. This hosts the main application logic, communicates with the wallbox and\n  provides a REST API.\n- frontend: Contains a vuetify/vue.js project. This is an example graphical frontend that communicates with the REST API\n  of the backend.\n\n#### Running development builds\n\n1. Prepare and run the django server:\n    - **one time only** ``pip install -r requirements.txt`` (consider doing this in a python venv if you know how)\n    - ``./manage.py runserver`` (from within the backend directory)\n2. Prepare and run the vite frontend development server:\n    - **one time only** ``npm install`` (requires node.js installed)\n    - ``npm run dev``\n3. Done! (Development setup is deliberately fast. Please note that **insecure** defaults are used since no configuration\n   is given. A default sqlite database will be used for data).\n4. If needed, create a new admin account: ``./manage.py createsuperuser`` (from within the backend directory).\n5. If you want your development instance to communicate with the wallbox, you need to run ``./manage.py wallboxIO``.\n   This requires the wallbox IP address to be provided via enviroment variable, ``WALLBOX_IP``.\n\n### Caveats\n\n- While the backend is language neutral already, the frontend is currently hardcoded to german i18n. Full localization\n  support would be welcome.\n- Missing tests\n\n### Disclaimer\n\nThis project is not affiliated with or supported by © KEBA in any way.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgermancoding%2Fwallboxui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgermancoding%2Fwallboxui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgermancoding%2Fwallboxui/lists"}