Contributing
Contributing to this project should be as easy and transparent as possible, whether it's:
- Reporting a bug
- Discussing the current state of the code
- Submitting a fix
- Proposing new features
Getting started
The project uses uv.
- Set up the project with
./scripts/setup.sh. This installs the dependencies and the prek hooks. - Start Home Assistant with
./scripts/develop.sh. - Open http://127.0.0.1:8123 in your browser.
Pull requests
Pull requests are the best way to propose changes to the codebase.
- Fork the repository and create your branch from
develop.mainis the release branch. - Update the documentation in
website/content/index.mdif you changed something user-visible. - Add an entry under
## [Unreleased]in CHANGELOG.md. - Make sure
./scripts/lint.shanduv run pytestpass. - Open the pull request against
develop.
Never use real credentials or customer data (contract account numbers, meter point numbers, ...) in code, tests or
issues. Use the fake data in tests/api_data.py.
Coding style
./scripts/lint.sh runs ruff (format and lint), ty,
yamllint and rumdl. See CLAUDE.md for the project rules.
AI assistant
The project only uses Claude Code as AI assistant. Its rules are in
CLAUDE.md, tests/CLAUDE.md, website/CLAUDE.md and the skills in .claude/skills/.
Documentation
The documentation is a Docusaurus website in website/ and needs Node.js.
The integration page is website/content/index.md:
./scripts/docs.sh # build
./scripts/docs.sh start # live reload
Tests
Tests use pytest. 100% test coverage is enforced, so every new code path needs a test.
uv run pytest
Report bugs
Report a bug by opening a new issue. Great bug reports tend to have:
- A quick summary and/or background
- Steps to reproduce
- What you expected would happen
- What actually happens
- Debug logs (remove credentials and customer data first)
- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)
License
By contributing, you agree that your contributions will be licensed under the Apache License.

