keba-keenergy-api


Namekeba-keenergy-api JSON
Version 1.12.7 PyPI version JSON
download
home_pageNone
SummaryA Python wrapper for the KEBA KeEnergy API.
upload_time2024-08-24 12:27:08
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseApache-2.0 license
keywords api keba keenergy
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ![coverage-badge](https://raw.githubusercontent.com/superbox-dev/KEBA-KeEnergy-API/main/coverage.svg)
[![CI](https://github.com/superbox-dev/KEBA-KeEnergy-API/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/superbox-dev/KEBA-KeEnergy-API/actions/workflows/ci.yml)
[![Version](https://img.shields.io/pypi/pyversions/keba-keenergy-api.svg)](https://pypi.python.org/pypi/keba-keenergy-api)

[![license-url](https://img.shields.io/pypi/l/keba-keenergy-api.svg)](https://github.com/superbox-dev/KEBA-KeEnergy-API/blob/main/LICENSE)
![Typing: strict](https://img.shields.io/badge/typing-strict-green.svg)
![Code style: black](https://img.shields.io/badge/code%20style-black-black)
![Code style: Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v1.json)

# KEBA KeEnergy API

A Python wrapper for the KEBA KeEnergy API.

## Getting started

```bash
pip install keba-keenergy-api
```

## Usage

```python
import asyncio
from typing import Any

from keba_keenergy_api import KebaKeEnergyAPI
from keba_keenergy_api.constants import HeatCircuit


async def main() -> None:
    client = KebaKeEnergyAPI(host="YOUR-IP-OR-HOSTNAME", ssl=True)

    # Get current outdoor temperature
    outdoor_temperature: float = await client.get_outdoor_temperature()

    # Get heat circuit temperature from heat circuit 2
    heat_circuit_temperature: float = await client.heat_circuit.get_temperature(position=2)

    # Read multiple values
    data: dict[str, tuple[float | int | str]] = await client.read_data(
        request=[
            HeatCircuit.TEMPERATURE,
            HeatCircuit.DAY_TEMPERATURE,
        ],
    )

    # Enable "day" mode for heat circuit 2
    await client.heat_circuit.set_operating_mode(mode="day", position=2)

    # Write multiple values
    await client.write_data(
        request={
            HeatCircuit.DAY_TEMPERATURE: (20, None, 5),  # Write heat circuit on position 1 and 3 
            HeatCircuit.NIGHT_TEMPERATURE: (16,),  # Write night temperature on position 1
        },
    )


asyncio.run(main())
```

By default, the library creates a new connection to `KEBA KeEnergy API` with each coroutine. If you are calling a large number of coroutines, an `aiohttp ClientSession()` can be used for connection pooling:


```python
import asyncio

from keba_keenergy_api import KebaKeEnergyAPI

from aiohttp import ClientSession

async def main() -> None:
    async with ClientSession() as session:
        client = KebaKeEnergyAPI(host="YOUR-IP-OR-HOSTNAME", session=session, ssl=True)
        ...

asyncio.run(main())
```


### API endpoints

| Endpoint                                        | Description                                  |
|-------------------------------------------------|----------------------------------------------|
| `.read_data(request, position, human_readable)` | Get multiple values with one http request.   |
| `.write_data(request)`                          | Write multiple values with one http request. |

#### System

| Endpoint                                           | Response       | Description                                                                                                        |
|----------------------------------------------------|----------------|--------------------------------------------------------------------------------------------------------------------|
| `.get_info()`                                      | `str`          | Get system information.                                                                                            |
| `.get_device_info()`                               | `str`          | Get device information.                                                                                            |
| `.get_outdoor_temperature()`                       | `float`        | Get outdoor temperature.                                                                                           |
| `.get_operating_mode(position, human_readable)`    | `int` or `str` | Get operating mode as integer (0 is `STANDBY`, 1 is `SUMMER`, 2 is `AUTO_HEAT`, 3 is `AUTO_COOL` and 4 is `AUTO`). |
| `.set_operating_mode(0, position, human_readable)` | `int` or `str` | Set operating mode.                                                                                                |


#### Hot water tank

| Endpoint                                           | Request/Response | Description                                                                           |
|----------------------------------------------------|------------------|---------------------------------------------------------------------------------------|
| `.get_lower_limit_temperature(position)`           | `int`            | Get lower limit temperature.                                                          |
| `.get_upper_limit_temperature(position)`           | `int`            | Get upper limit temperature.                                                          |
| `.get_temperature(position)`                       | `float`          | Get temperature.                                                                      |
| `.get_operating_mode(position, human_readable)`    | `int` or `str`   | Get operating mode as integer (0 is `OFF`, 1 is `AUTO`, 2 is `DAY` and 3 is `NIGHT`). |
| `.set_operating_mode(0, position, human_readable)` | `int` or `str`   | Set operating mode.                                                                   |
| `.get_min_temperature(position)`                   | `float`          | Get minimum temperature.                                                              |
| `.set_min_temperature(20, position)`               | `float`          | Set minimum temperature.                                                              |
| `.get_max_temperature(position)`                   | `float`          | Get maximum temperature.                                                              |
| `.set_max_temperature(22, position)`               | `float`          | Set maximum temperature.                                                              |
| `.get_heat_request(position)`                      | `int` or `str`   | Get heat request.                                                                     |

### Heat pump

| Endpoint                                         | Response       | Description                                                                   |
|--------------------------------------------------|----------------|-------------------------------------------------------------------------------|
| `.get_name(position)`                            | `str`          | Get head pump model name.                                                     |
| `.get_state(position, human_readable)`           | `int` or `str` | Get heat pump state as integer (0 is `STANDBY`, 1 is `FLOW` and 2 is `AUTO`). |
| `.get_operating_mode(position, human_readable)`  | `int` or `str` | Get operating mode as integer (0 is `OFF`, 1 is `ON`, 2 is `BACKUP`).         |
| `.get_circulation_pump(position)`                | `float`        | Get circulation pump in percent.                                              |
| `.get_inflow_temperature(position)`              | `float`        | Get inflow temperature.                                                       |
| `.get_reflux_temperature(position)`              | `float`        | Get reflux temperature.                                                       |
| `.get_source_input_temperature(position)`        | `float`        | Get source input temperature.                                                 |
| `.get_source_output_temperature(position)`       | `float`        | Get source output temperature.                                                |
| `.get_compressor_input_temperature(position)`    | `float`        | Get compressor input temperature.                                             |
| `.get_compressor_output_temperature(position)`   | `float`        | Get compressor output temperature.                                            |
| `.get_compressor(position)`                      | `float`        | Get compressor in percent.                                                    |
| `.get_high_pressure(position)`                   | `float`        | Get high pressure.                                                            |
| `.get_low_pressure(position)`                    | `float`        | Get low pressure.                                                             |
| `.get_heat_request(position)`                    | `int` or `str` | Get heat request.                                                             |

### Heat circuit

| Endpoint                                        | Request/Response | Description                                         |
|-------------------------------------------------|----------------|-----------------------------------------------------|
| `.get_temperature(position)`                    | `float`        | Get temperature.                                    |
| `.get_day_temperature(position)`                | `float`        | Get day temperature.                                |
| `.set_day_temperature(20, position)`            | `float`        | Set day temperature.                                |
| `.get_day_temperature_threshold(position)`      | `float`        | Get day temperature threshold.                      |
| `.get_night_temperature(position)`              | `float`        | Get night temperature.                              |
| `.set_night_temperature(16, position)`          | `float`        | Set night temperature.                              |
| `.get_night_temperature_threshold(position)`    | `float`        | Get night temperature threshold.                    |
| `.get_holiday_temperature(position)`            | `float`        | Get holiday temperature.                            |
| `.set_holiday_temperature(14, position)`        | `float`        | Set holiday temperature.                            |
| `.get_temperature_offset(position)`             | `float`        | Get temperature offset.                             |
| `.set_temperature_offset(2, position)`          | `float`        | Set temperature offset.                             |
| `.get_operating_mode(position, human_readable)` | `int` or `str` | Get operating mode (0 is `OFF` and 3 is `HEAT_UP`). |
| `.set_operating_mode(3, position)`              | `int` or `str` | Set operating mode.                                 |
| `.get_heat_request(position)`                   | `int` or `str` | Get heat request.                                   |
| `.get_external_cool_request(position)`          | `int` or `str` | Get external cool request.                          |
| `.get_external_heat_request(position)`          | `int` or `str` | Get external heat request.                          |

## Changelog

The changelog lives in the [CHANGELOG.md](CHANGELOG.md) document. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

## Contributing

We're happy about your contributions to the project!

You can get started by reading the [CONTRIBUTING.md](CONTRIBUTING.md).

## Donation

We put a lot of time into this project. If you like it, you can support us with a donation.

[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/F2F0KXO6D)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "keba-keenergy-api",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "Michael Hacker <mh@superbox.one>",
    "keywords": "api, keba, keenergy",
    "author": null,
    "author_email": "Michael Hacker <mh@superbox.one>",
    "download_url": "https://files.pythonhosted.org/packages/a6/a2/31035e1bd8c80cf4c9a6ccad1fc4e81ac2b6f62d873b2458f3fddd0e0336/keba_keenergy_api-1.12.7.tar.gz",
    "platform": null,
    "description": "![coverage-badge](https://raw.githubusercontent.com/superbox-dev/KEBA-KeEnergy-API/main/coverage.svg)\n[![CI](https://github.com/superbox-dev/KEBA-KeEnergy-API/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/superbox-dev/KEBA-KeEnergy-API/actions/workflows/ci.yml)\n[![Version](https://img.shields.io/pypi/pyversions/keba-keenergy-api.svg)](https://pypi.python.org/pypi/keba-keenergy-api)\n\n[![license-url](https://img.shields.io/pypi/l/keba-keenergy-api.svg)](https://github.com/superbox-dev/KEBA-KeEnergy-API/blob/main/LICENSE)\n![Typing: strict](https://img.shields.io/badge/typing-strict-green.svg)\n![Code style: black](https://img.shields.io/badge/code%20style-black-black)\n![Code style: Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v1.json)\n\n# KEBA KeEnergy API\n\nA Python wrapper for the KEBA KeEnergy API.\n\n## Getting started\n\n```bash\npip install keba-keenergy-api\n```\n\n## Usage\n\n```python\nimport asyncio\nfrom typing import Any\n\nfrom keba_keenergy_api import KebaKeEnergyAPI\nfrom keba_keenergy_api.constants import HeatCircuit\n\n\nasync def main() -> None:\n    client = KebaKeEnergyAPI(host=\"YOUR-IP-OR-HOSTNAME\", ssl=True)\n\n    # Get current outdoor temperature\n    outdoor_temperature: float = await client.get_outdoor_temperature()\n\n    # Get heat circuit temperature from heat circuit 2\n    heat_circuit_temperature: float = await client.heat_circuit.get_temperature(position=2)\n\n    # Read multiple values\n    data: dict[str, tuple[float | int | str]] = await client.read_data(\n        request=[\n            HeatCircuit.TEMPERATURE,\n            HeatCircuit.DAY_TEMPERATURE,\n        ],\n    )\n\n    # Enable \"day\" mode for heat circuit 2\n    await client.heat_circuit.set_operating_mode(mode=\"day\", position=2)\n\n    # Write multiple values\n    await client.write_data(\n        request={\n            HeatCircuit.DAY_TEMPERATURE: (20, None, 5),  # Write heat circuit on position 1 and 3 \n            HeatCircuit.NIGHT_TEMPERATURE: (16,),  # Write night temperature on position 1\n        },\n    )\n\n\nasyncio.run(main())\n```\n\nBy default, the library creates a new connection to `KEBA KeEnergy API` with each coroutine. If you are calling a large number of coroutines, an `aiohttp ClientSession()` can be used for connection pooling:\n\n\n```python\nimport asyncio\n\nfrom keba_keenergy_api import KebaKeEnergyAPI\n\nfrom aiohttp import ClientSession\n\nasync def main() -> None:\n    async with ClientSession() as session:\n        client = KebaKeEnergyAPI(host=\"YOUR-IP-OR-HOSTNAME\", session=session, ssl=True)\n        ...\n\nasyncio.run(main())\n```\n\n\n### API endpoints\n\n| Endpoint                                        | Description                                  |\n|-------------------------------------------------|----------------------------------------------|\n| `.read_data(request, position, human_readable)` | Get multiple values with one http request.   |\n| `.write_data(request)`                          | Write multiple values with one http request. |\n\n#### System\n\n| Endpoint                                           | Response       | Description                                                                                                        |\n|----------------------------------------------------|----------------|--------------------------------------------------------------------------------------------------------------------|\n| `.get_info()`                                      | `str`          | Get system information.                                                                                            |\n| `.get_device_info()`                               | `str`          | Get device information.                                                                                            |\n| `.get_outdoor_temperature()`                       | `float`        | Get outdoor temperature.                                                                                           |\n| `.get_operating_mode(position, human_readable)`    | `int` or `str` | Get operating mode as integer (0 is `STANDBY`, 1 is `SUMMER`, 2 is `AUTO_HEAT`, 3 is `AUTO_COOL` and 4 is `AUTO`). |\n| `.set_operating_mode(0, position, human_readable)` | `int` or `str` | Set operating mode.                                                                                                |\n\n\n#### Hot water tank\n\n| Endpoint                                           | Request/Response | Description                                                                           |\n|----------------------------------------------------|------------------|---------------------------------------------------------------------------------------|\n| `.get_lower_limit_temperature(position)`           | `int`            | Get lower limit temperature.                                                          |\n| `.get_upper_limit_temperature(position)`           | `int`            | Get upper limit temperature.                                                          |\n| `.get_temperature(position)`                       | `float`          | Get temperature.                                                                      |\n| `.get_operating_mode(position, human_readable)`    | `int` or `str`   | Get operating mode as integer (0 is `OFF`, 1 is `AUTO`, 2 is `DAY` and 3 is `NIGHT`). |\n| `.set_operating_mode(0, position, human_readable)` | `int` or `str`   | Set operating mode.                                                                   |\n| `.get_min_temperature(position)`                   | `float`          | Get minimum temperature.                                                              |\n| `.set_min_temperature(20, position)`               | `float`          | Set minimum temperature.                                                              |\n| `.get_max_temperature(position)`                   | `float`          | Get maximum temperature.                                                              |\n| `.set_max_temperature(22, position)`               | `float`          | Set maximum temperature.                                                              |\n| `.get_heat_request(position)`                      | `int` or `str`   | Get heat request.                                                                     |\n\n### Heat pump\n\n| Endpoint                                         | Response       | Description                                                                   |\n|--------------------------------------------------|----------------|-------------------------------------------------------------------------------|\n| `.get_name(position)`                            | `str`          | Get head pump model name.                                                     |\n| `.get_state(position, human_readable)`           | `int` or `str` | Get heat pump state as integer (0 is `STANDBY`, 1 is `FLOW` and 2 is `AUTO`). |\n| `.get_operating_mode(position, human_readable)`  | `int` or `str` | Get operating mode as integer (0 is `OFF`, 1 is `ON`, 2 is `BACKUP`).         |\n| `.get_circulation_pump(position)`                | `float`        | Get circulation pump in percent.                                              |\n| `.get_inflow_temperature(position)`              | `float`        | Get inflow temperature.                                                       |\n| `.get_reflux_temperature(position)`              | `float`        | Get reflux temperature.                                                       |\n| `.get_source_input_temperature(position)`        | `float`        | Get source input temperature.                                                 |\n| `.get_source_output_temperature(position)`       | `float`        | Get source output temperature.                                                |\n| `.get_compressor_input_temperature(position)`    | `float`        | Get compressor input temperature.                                             |\n| `.get_compressor_output_temperature(position)`   | `float`        | Get compressor output temperature.                                            |\n| `.get_compressor(position)`                      | `float`        | Get compressor in percent.                                                    |\n| `.get_high_pressure(position)`                   | `float`        | Get high pressure.                                                            |\n| `.get_low_pressure(position)`                    | `float`        | Get low pressure.                                                             |\n| `.get_heat_request(position)`                    | `int` or `str` | Get heat request.                                                             |\n\n### Heat circuit\n\n| Endpoint                                        | Request/Response | Description                                         |\n|-------------------------------------------------|----------------|-----------------------------------------------------|\n| `.get_temperature(position)`                    | `float`        | Get temperature.                                    |\n| `.get_day_temperature(position)`                | `float`        | Get day temperature.                                |\n| `.set_day_temperature(20, position)`            | `float`        | Set day temperature.                                |\n| `.get_day_temperature_threshold(position)`      | `float`        | Get day temperature threshold.                      |\n| `.get_night_temperature(position)`              | `float`        | Get night temperature.                              |\n| `.set_night_temperature(16, position)`          | `float`        | Set night temperature.                              |\n| `.get_night_temperature_threshold(position)`    | `float`        | Get night temperature threshold.                    |\n| `.get_holiday_temperature(position)`            | `float`        | Get holiday temperature.                            |\n| `.set_holiday_temperature(14, position)`        | `float`        | Set holiday temperature.                            |\n| `.get_temperature_offset(position)`             | `float`        | Get temperature offset.                             |\n| `.set_temperature_offset(2, position)`          | `float`        | Set temperature offset.                             |\n| `.get_operating_mode(position, human_readable)` | `int` or `str` | Get operating mode (0 is `OFF` and 3 is `HEAT_UP`). |\n| `.set_operating_mode(3, position)`              | `int` or `str` | Set operating mode.                                 |\n| `.get_heat_request(position)`                   | `int` or `str` | Get heat request.                                   |\n| `.get_external_cool_request(position)`          | `int` or `str` | Get external cool request.                          |\n| `.get_external_heat_request(position)`          | `int` or `str` | Get external heat request.                          |\n\n## Changelog\n\nThe changelog lives in the [CHANGELOG.md](CHANGELOG.md) document. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).\n\n## Contributing\n\nWe're happy about your contributions to the project!\n\nYou can get started by reading the [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Donation\n\nWe put a lot of time into this project. If you like it, you can support us with a donation.\n\n[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/F2F0KXO6D)\n",
    "bugtrack_url": null,
    "license": "Apache-2.0 license",
    "summary": "A Python wrapper for the KEBA KeEnergy API.",
    "version": "1.12.7",
    "project_urls": {
        "Issue tracker": "https://github.com/superbox-dev/KEBA-KeEnergy-API/issues",
        "Source code": "https://github.com/superbox-dev/KEBA-KeEnergy-API"
    },
    "split_keywords": [
        "api",
        " keba",
        " keenergy"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "615bdf48e7d5ef4180a49bee1a9741d8c4cdb153c91e205127f4e15061b202ee",
                "md5": "166b026a7c1fd3a5adb7a67c0ad57285",
                "sha256": "21d5587858639ffbe1bf23c70285e8035558ce4f645e547af414a0c8072b3ed2"
            },
            "downloads": -1,
            "filename": "keba_keenergy_api-1.12.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "166b026a7c1fd3a5adb7a67c0ad57285",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 16475,
            "upload_time": "2024-08-24T12:27:07",
            "upload_time_iso_8601": "2024-08-24T12:27:07.101520Z",
            "url": "https://files.pythonhosted.org/packages/61/5b/df48e7d5ef4180a49bee1a9741d8c4cdb153c91e205127f4e15061b202ee/keba_keenergy_api-1.12.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a6a231035e1bd8c80cf4c9a6ccad1fc4e81ac2b6f62d873b2458f3fddd0e0336",
                "md5": "7778a6b2bc5db8c6f2a7de9efaedd515",
                "sha256": "2296a757f52f9625ba680674348d7ef5fa5e88ea9a4a9c5dd44465d293238961"
            },
            "downloads": -1,
            "filename": "keba_keenergy_api-1.12.7.tar.gz",
            "has_sig": false,
            "md5_digest": "7778a6b2bc5db8c6f2a7de9efaedd515",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 29637,
            "upload_time": "2024-08-24T12:27:08",
            "upload_time_iso_8601": "2024-08-24T12:27:08.489160Z",
            "url": "https://files.pythonhosted.org/packages/a6/a2/31035e1bd8c80cf4c9a6ccad1fc4e81ac2b6f62d873b2458f3fddd0e0336/keba_keenergy_api-1.12.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-24 12:27:08",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "superbox-dev",
    "github_project": "KEBA-KeEnergy-API",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "keba-keenergy-api"
}
        
Elapsed time: 1.20528s