Energy cost
Python package to model your energy bill based on your energy consumption.
This energy bill is calculated based on a Contract or even a ContractHistory, which is a collection of contracts that can change over time.
A contract consists of 5 parts:
supplier: theTariffof your energy supplierdistributor: theTariffof your energy distributorfees: the government fees applicable to you, als defined as aTarifftaxes: the governmentTaxesapplicable to each cost component of your billtimezone: the timezone in which all calculations will be done
You can also specify a region, connection_type, customer_type and distributor_key in your contract, which will automatically fetch the applicable distributor tariffs, fees, taxes and timezone for you from our built in data. If your region is not yet supported, you can contribute the data for your region, see CONTRIBUTING.md for how to do that.
Contracts can be defined in a yaml file, which makes it easy to manage and update your contract over time. See notebooks/contract.ipynb for more info on how to define your contract in a yaml file.
We also have more detailed documentation on the different components of a contract, see notebooks for all available notebooks.
You can find example yaml files for tariffs and taxes in the examples directory.
A lot of tariffs are based on an Index, which is a price that changes over time based on the market price of energy, see notebooks/index.ipynb for more info.
Note on units: all consumption based costs are in €/MWh, all energy values are in MWh. All monetary values are in €.
Note on timezones: every method that takes timestamps as input also takes a timezone as input. All timestamps will be aligned to this timezone, and all outputs will be in this timezone as well. By default, the timezone is set by the regional data, but you can override it in your contract if needed.
Example usage
You can define your contract in a yaml file like this:
supplier:
- start: 2025-01-01T00:00:00+01:00
consumption:
constant_cost: 90.0
region: be_flanders
connection_type: electricity
customer_type: residential
distributor_key: fluvius_imewo
Then, you can use the Contract class to calculate your costs based on your consumption data:
from energy_cost import Contract, Meter, TimeseriesFrame
contract = Contract.from_yaml("../examples/contracts/inline.yml")
consumption = Meter(
measurements=TimeseriesFrame(
{
"timestamp": pd.date_range("2024-01-01T00:00:00+01:00", "2024-03-01T00:00:00+01:00", freq="15min"),
"value": 0.0002,
}
)
)
contract.apply(consumption)
For more detailed examples, see the notebooks in the notebooks directory.
Development
Prerequisites
- Python 3.12+
- uv (fast Python package manager)
1. Install dependencies
uv sync
uv tool install poethepoet
2. Notebooks
You can easilly test the project using our notebooks. They are located in the notebooks directory and can be run with:
poe notebooks
Some notebooks make use of external APIs and require API keys. You can set these in a .env file in the root of the project, using the .env.example file as a template.
If you add new features, please add a new notebook to demonstrate them.
3. Run tests
poe test
4. Code quality (pre-commit)
Pre-commit hooks are configured out of the box. Install them once:
pre-commit install
Every commit will automatically run:
| Tool | Task | Command |
|---|---|---|
| Ruff | Linting + auto-fix | poe lint |
| Ruff | Formatting | poe format |
| ty | Type checking | poe check |
You can also run them manually at any time.
Contributing
Contributions are welcome! See CONTRIBUTING.md for how to get started, including how to add support for new regions.
License
Release files for energy-cost 0.8.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| energy_cost-0.8.2.tar.gz | 6.9 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| energy_cost-0.8.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.0 MB
Release files / energy_cost-0.8.2.tar.gz
| Download URL | energy_cost-0.8.2.tar.gz |
|---|---|
| Size | 6.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f82607e3e6b7a4a6e18513c472dce03c517e3275151d979c03fd6896494db2db
|
|
BLAKE2b-256 checksum How to use checksums |
f07da34e3f159b7db42b3dc6a5a12efa153845aa58de35265470af165a15ead0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / energy_cost-0.8.2-py3-none-any.whl
| Download URL | energy_cost-0.8.2-py3-none-any.whl |
|---|---|
| Size | 7.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d618664eae6d33a68f183626f9a61d3b4d312f49dcd737a6e6b5e9c75ce22422
|
|
BLAKE2b-256 checksum How to use checksums |
9581ab96deb687f04436e0fcd10a3ff516d51297f9f52e67e51d5e85536332bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|