# KEBA KeEnergy API
A Python wrapper for the KEBA KeEnergy API.

[](https://github.com/superbox-dev/keba_keenergy_api/actions/workflows/ci.yml)
[](https://pypi.python.org/pypi/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:
# ssl=True and skip_ssl_verification=True is only required for devices with basic auth
client = KebaKeEnergyAPI(host="YOUR-IP-OR-HOSTNAME", username="test", password="test", ssl=True, skip_ssl_verification=True)
# Get current outdoor temperature
outdoor_temperature: float = await client.system.get_outdoor_temperature()
# Get heat circuit temperature from heat circuit 2
heat_circuit_temperature: float = await client.heat_circuit.get_target_temperature(position=2)
# Read multiple values
data: dict[str, tuple[float | int | str]] = await client.read_data(
request=[
HeatCircuit.TARGET_TEMPERATURE,
HeatCircuit.TARGET_TEMPERATURE_DAY,
],
)
# 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.TARGET_TEMPERATURE_DAY: (20, None, 5), # Write heat circuit on position 1 and 3
HeatCircuit.TARGET_TEMPERATURE_NIGHT: (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_hmi_info()` | `str` | Get IMI information. |
| `.get_device_info()` | `str` | Get device information. |
| `.get_number_of_hot_water_tanks()` | `int` | Get number of hot water tanks. |
| `.get_number_of_heat_pumps()` | `int` | Get number of heat pumps. |
| `.get_number_of_heating_circuits()` | `int` | Get number of heating circuits. |
| `.get_number_of_external_heat_sources()` | `int` | Get number of external heat sources. |
| `.has_photovoltaics()` | `int` or `str` | Has photovoltacis. |
| `.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. |
| `.get_cpu_usage()` | `float` | Get CPU usage. |
| `.get_webview_cpu_usage()` | `float` | Get webview CPU usage. |
| `.get_webserver_cpu_usage()` | `float` | Get webserver CPU usage. |
| `.get_control_cpu_usage()` | `float` | Get control CPU usage. |
| `.get_ram_usage()` | `int` | Get RAM usage. |
| `.get_free_ram()` | `int` | Get free RAM. |
#### Hot water tank
| Endpoint | Request/Response | Description |
|----------------------------------------------------|------------------|---------------------------------------------------------------------------------------|
| `.get_current_temperature(position)` | `float` | Get current 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_target_temperature(position)` | `int` | Get minimum possible target temperature. |
| `.get_max_target_temperature(position)` | `int` | Get maximum possible target temperature. |
| `.get_standby_temperature(position)` | `float` | Get standby temperature. |
| `.set_standby_temperature(20, position)` | `float` | Set standby temperature. |
| `.get_target_temperature(position)` | `float` | Get target temperature. |
| `.set_target_temperature(22, position)` | `float` | Set target temperature. |
| `.get_heat_request(position)` | `int` or `str` | Get heat request. |
| `.get_hot_water_flow(position)` | `int` or `str` | Get hot water flow. |
| `.get_fresh_water_module_temperature(position)` | `float` | Get fresh water module temperature. |
#### 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`). |
| `.set_operating_mode(0, position, human_readable)` | `int` or `str` | Set operating mode. |
| `.get_compressor_use_night_speed(position, human_readable)` | `int` or `str` | Get compressor use night speed (0 is `OFF`, 1 is `ON`). |
| `.set_compressor_use_night_speed(0, position)` | `int` or `str` | Set compressor use night speed. |
| `.get_compressor_night_speed(position)` | `float` | Get compressor night speed. |
| `.set_compressor_night_speed(0.5, position)` | `float` | Set compressor night speed. |
| `.get_max_compressor_night_speed(position)` | `float` | Get maximum compressor night speed. |
| `.get_min_compressor_night_speed(position)` | `float` | Get minimum compressor night speed. |
| `.get_circulation_pump(position)` | `float` | Get circulation pump in percent. |
| `.get_flow_temperature(position)` | `float` | Get flow temperature. |
| `.get_return_flow_temperature(position)` | `float` | Get return flow 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. |
| `.get_compressor_power(position)` | `float` | Get compressor power. |
| `.get_heating_power(position)` | `float` | Get heating power. |
| `.get_hot_water_power(position)` | `float` | Get hot water power. |
| `.get_cop(position)` | `float` | Get coefficient of performance. |
| `.get_heating_energy(position)` | `float` | Get heating energy. |
| `.get_heating_energy_consumption(position)` | `float` | Get heating energy consumption. |
| `.get_heating_spf(position)` | `float` | Get heating seasonal performance factor. |
| `.get_cooling_energy(position)` | `float` | Get cooling energy. |
| `.get_cooling_energy_consumption(position)` | `float` | Get cooling energy consumption. |
| `.get_cooling_spf(position)` | `float` | Get cooling seasonal performance factor. |
| `.get_hot_water_energy(position)` | `float` | Get hot water energy. |
| `.get_hot_water_energy_consumption(position)` | `float` | Get hot water electrical energy. |
| `.get_hot_water_spf(position)` | `float` | Get hot water seasonal performance factor. |
| `.get_total_thermal_energy(position)` | `float` | Get total thermal energy. |
| `.get_total_energy_consumption(position)` | `float` | Get total energy consumption. |
| `.get_total_spf(position)` | `float` | Get total seasonal performance factor. |
| `.has_passive_cooling(position)` | `int` or `str` | Has passive cooling. |
| `.get_operating_time(position)` | `int` | Get operating time. |
| `.get_max_runtime(position)` | `int` | Get max runtime. |
| `.get_activation_counter(position)` | `int` | Get activation counter. |
#### Heat circuit
| Endpoint | Request/Response | Description |
|-------------------------------------------------|------------------|-----------------------------------------------------|
| `.get_name(position)` | `str` | Get heat circuit name. |
| `.has_room_temperature(position)` | `int` or `str` | Has room temperature. |
| `.get_room_temperature(position)` | `float` | Get room temperature. |
| `.has_room_humidity(position)` | `int` or `str` | Has room humidity. |
| `.get_room_humidity(position)` | `float` | Get room humidity. |
| `.get_dew_point(position)` | `float` | Get dew point. |
| `.get_flow_temperature_setpoint(position)` | `float` | Get flow temperature setpoint. |
| `.get_flow_temperature(position)` | `float` | Get flow temperature. |
| `.get_return_flow_temperature(position)` | `float` | Get return flow temperature. |
| `.get_target_temperature(position)` | `float` | Get target temperature. |
| `.get_target_temperature_day(position)` | `float` | Get taget temperature for the day. |
| `.set_target_temperature_day(20, position)` | `float` | Set taget temperature for the day. |
| `.get_heating_limit_day(position)` | `float` | Get the heating limit for the day. |
| `.get_target_temperature_night(position)` | `float` | Get target temperature for the night. |
| `.set_target_temperature_night(16, position)` | `float` | Set target temperature for the night. |
| `.get_heating_limit_night(position)` | `float` | Get the heating limit for the night. |
| `.get_target_temperature_away(position)` | `float` | Get target temperature when away. |
| `.set_target_temperature_away(14, position)` | `float` | Set target temperature when away. |
| `.get_target_temperature_offset(position)` | `float` | Get target temperature offset. |
| `.set_target_temperature_offset(2, position)` | `float` | Set target 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_cool_request(position)` | `int` or `str` | Get cool request. |
| `.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. |
#### External heat source
| Endpoint | Request/Response | Description |
|----------------------------------------------------|------------------|-----------------------------------------------------------|
| `.get_operating_mode(position, human_readable)` | `int` or `str` | Get operating mode as integer (0 is `OFF` and 1 is `ON`). |
| `.set_operating_mode(0, position, human_readable)` | `int` or `str` | Set operating mode. |
| `.get_target_temperature(position)` | `float` | Get target temperature. |
| `.get_heat_request(position)` | `int` or `str` | Get heat request. |
| `.get_operating_time(position)` | `int` | Get operating time. |
| `.get_max_runtime(position)` | `int` | Get max runtime. |
| `.get_activation_counter(position)` | `int` | Get activation counter. |
#### Photovoltaic
| Endpoint | Request/Response | Description |
|--------------------------|------------------|-------------------|
| `.get_excess_power()` | `float` | Get excess power. |
| `.get_daily_energy()` | `float` | Get daily energy. |
| `.get_total_energy()` | `float` | Get total energy. |
## 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.
[](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, component, custom component, custom integration, keba, keenergy, hacs-component, hacs-integration, hacs-repository, hacs, hass, home assistant, home-assistant, homeassistant, integration",
"author": null,
"author_email": "Michael Hacker <mh@superbox.one>",
"download_url": "https://files.pythonhosted.org/packages/e1/8a/ab880bfacdef7d3d558aaaf20b55e8a4ad9dcfed54d06a3efbe3a64b2349/keba_keenergy_api-2.3.1.tar.gz",
"platform": null,
"description": "# KEBA KeEnergy API\n\nA Python wrapper for the KEBA KeEnergy API.\n\n\n[](https://github.com/superbox-dev/keba_keenergy_api/actions/workflows/ci.yml)\n[](https://pypi.python.org/pypi/keba-keenergy-api)\n\n\n\n\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 # ssl=True and skip_ssl_verification=True is only required for devices with basic auth\n client = KebaKeEnergyAPI(host=\"YOUR-IP-OR-HOSTNAME\", username=\"test\", password=\"test\", ssl=True, skip_ssl_verification=True)\n\n # Get current outdoor temperature\n outdoor_temperature: float = await client.system.get_outdoor_temperature()\n\n # Get heat circuit temperature from heat circuit 2\n heat_circuit_temperature: float = await client.heat_circuit.get_target_temperature(position=2)\n\n # Read multiple values\n data: dict[str, tuple[float | int | str]] = await client.read_data(\n request=[\n HeatCircuit.TARGET_TEMPERATURE,\n HeatCircuit.TARGET_TEMPERATURE_DAY,\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.TARGET_TEMPERATURE_DAY: (20, None, 5), # Write heat circuit on position 1 and 3 \n HeatCircuit.TARGET_TEMPERATURE_NIGHT: (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\nnumber of coroutines, an `aiohttp ClientSession()` can be used for connection pooling:\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### 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_hmi_info()` | `str` | Get IMI information. |\n| `.get_device_info()` | `str` | Get device information. |\n| `.get_number_of_hot_water_tanks()` | `int` | Get number of hot water tanks. |\n| `.get_number_of_heat_pumps()` | `int` | Get number of heat pumps. |\n| `.get_number_of_heating_circuits()` | `int` | Get number of heating circuits. |\n| `.get_number_of_external_heat_sources()` | `int` | Get number of external heat sources. |\n| `.has_photovoltaics()` | `int` or `str` | Has photovoltacis. |\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| `.get_cpu_usage()` | `float` | Get CPU usage. |\n| `.get_webview_cpu_usage()` | `float` | Get webview CPU usage. |\n| `.get_webserver_cpu_usage()` | `float` | Get webserver CPU usage. |\n| `.get_control_cpu_usage()` | `float` | Get control CPU usage. |\n| `.get_ram_usage()` | `int` | Get RAM usage. |\n| `.get_free_ram()` | `int` | Get free RAM. |\n\n#### Hot water tank\n\n| Endpoint | Request/Response | Description |\n|----------------------------------------------------|------------------|---------------------------------------------------------------------------------------|\n| `.get_current_temperature(position)` | `float` | Get current 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_target_temperature(position)` | `int` | Get minimum possible target temperature. |\n| `.get_max_target_temperature(position)` | `int` | Get maximum possible target temperature. |\n| `.get_standby_temperature(position)` | `float` | Get standby temperature. |\n| `.set_standby_temperature(20, position)` | `float` | Set standby temperature. |\n| `.get_target_temperature(position)` | `float` | Get target temperature. |\n| `.set_target_temperature(22, position)` | `float` | Set target temperature. |\n| `.get_heat_request(position)` | `int` or `str` | Get heat request. |\n| `.get_hot_water_flow(position)` | `int` or `str` | Get hot water flow. |\n| `.get_fresh_water_module_temperature(position)` | `float` | Get fresh water module temperature. |\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| `.set_operating_mode(0, position, human_readable)` | `int` or `str` | Set operating mode. |\n| `.get_compressor_use_night_speed(position, human_readable)` | `int` or `str` | Get compressor use night speed (0 is `OFF`, 1 is `ON`). |\n| `.set_compressor_use_night_speed(0, position)` | `int` or `str` | Set compressor use night speed. |\n| `.get_compressor_night_speed(position)` | `float` | Get compressor night speed. |\n| `.set_compressor_night_speed(0.5, position)` | `float` | Set compressor night speed. |\n| `.get_max_compressor_night_speed(position)` | `float` | Get maximum compressor night speed. |\n| `.get_min_compressor_night_speed(position)` | `float` | Get minimum compressor night speed. |\n| `.get_circulation_pump(position)` | `float` | Get circulation pump in percent. |\n| `.get_flow_temperature(position)` | `float` | Get flow temperature. |\n| `.get_return_flow_temperature(position)` | `float` | Get return flow 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| `.get_compressor_power(position)` | `float` | Get compressor power. |\n| `.get_heating_power(position)` | `float` | Get heating power. |\n| `.get_hot_water_power(position)` | `float` | Get hot water power. |\n| `.get_cop(position)` | `float` | Get coefficient of performance. |\n| `.get_heating_energy(position)` | `float` | Get heating energy. |\n| `.get_heating_energy_consumption(position)` | `float` | Get heating energy consumption. |\n| `.get_heating_spf(position)` | `float` | Get heating seasonal performance factor. |\n| `.get_cooling_energy(position)` | `float` | Get cooling energy. |\n| `.get_cooling_energy_consumption(position)` | `float` | Get cooling energy consumption. |\n| `.get_cooling_spf(position)` | `float` | Get cooling seasonal performance factor. |\n| `.get_hot_water_energy(position)` | `float` | Get hot water energy. |\n| `.get_hot_water_energy_consumption(position)` | `float` | Get hot water electrical energy. |\n| `.get_hot_water_spf(position)` | `float` | Get hot water seasonal performance factor. |\n| `.get_total_thermal_energy(position)` | `float` | Get total thermal energy. |\n| `.get_total_energy_consumption(position)` | `float` | Get total energy consumption. |\n| `.get_total_spf(position)` | `float` | Get total seasonal performance factor. |\n| `.has_passive_cooling(position)` | `int` or `str` | Has passive cooling. |\n| `.get_operating_time(position)` | `int` | Get operating time. |\n| `.get_max_runtime(position)` | `int` | Get max runtime. |\n| `.get_activation_counter(position)` | `int` | Get activation counter. |\n\n#### Heat circuit\n\n| Endpoint | Request/Response | Description |\n|-------------------------------------------------|------------------|-----------------------------------------------------|\n| `.get_name(position)` | `str` | Get heat circuit name. |\n| `.has_room_temperature(position)` | `int` or `str` | Has room temperature. |\n| `.get_room_temperature(position)` | `float` | Get room temperature. |\n| `.has_room_humidity(position)` | `int` or `str` | Has room humidity. |\n| `.get_room_humidity(position)` | `float` | Get room humidity. |\n| `.get_dew_point(position)` | `float` | Get dew point. |\n| `.get_flow_temperature_setpoint(position)` | `float` | Get flow temperature setpoint. |\n| `.get_flow_temperature(position)` | `float` | Get flow temperature. |\n| `.get_return_flow_temperature(position)` | `float` | Get return flow temperature. |\n| `.get_target_temperature(position)` | `float` | Get target temperature. |\n| `.get_target_temperature_day(position)` | `float` | Get taget temperature for the day. |\n| `.set_target_temperature_day(20, position)` | `float` | Set taget temperature for the day. |\n| `.get_heating_limit_day(position)` | `float` | Get the heating limit for the day. |\n| `.get_target_temperature_night(position)` | `float` | Get target temperature for the night. |\n| `.set_target_temperature_night(16, position)` | `float` | Set target temperature for the night. |\n| `.get_heating_limit_night(position)` | `float` | Get the heating limit for the night. |\n| `.get_target_temperature_away(position)` | `float` | Get target temperature when away. |\n| `.set_target_temperature_away(14, position)` | `float` | Set target temperature when away. |\n| `.get_target_temperature_offset(position)` | `float` | Get target temperature offset. |\n| `.set_target_temperature_offset(2, position)` | `float` | Set target 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_cool_request(position)` | `int` or `str` | Get cool request. |\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#### External heat source\n\n| Endpoint | Request/Response | Description |\n|----------------------------------------------------|------------------|-----------------------------------------------------------|\n| `.get_operating_mode(position, human_readable)` | `int` or `str` | Get operating mode as integer (0 is `OFF` and 1 is `ON`). |\n| `.set_operating_mode(0, position, human_readable)` | `int` or `str` | Set operating mode. |\n| `.get_target_temperature(position)` | `float` | Get target temperature. |\n| `.get_heat_request(position)` | `int` or `str` | Get heat request. |\n| `.get_operating_time(position)` | `int` | Get operating time. |\n| `.get_max_runtime(position)` | `int` | Get max runtime. |\n| `.get_activation_counter(position)` | `int` | Get activation counter. |\n\n#### Photovoltaic\n\n| Endpoint | Request/Response | Description |\n|--------------------------|------------------|-------------------|\n| `.get_excess_power()` | `float` | Get excess power. |\n| `.get_daily_energy()` | `float` | Get daily energy. |\n| `.get_total_energy()` | `float` | Get total energy. |\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[](https://ko-fi.com/F2F0KXO6D)\n",
"bugtrack_url": null,
"license": null,
"summary": "A Python wrapper for the KEBA KeEnergy API.",
"version": "2.3.1",
"project_urls": {
"Issues": "https://github.com/superbox-dev/keba_keenergy_api/issues",
"Repository": "https://github.com/superbox-dev/keba_keenergy_api"
},
"split_keywords": [
"api",
" component",
" custom component",
" custom integration",
" keba",
" keenergy",
" hacs-component",
" hacs-integration",
" hacs-repository",
" hacs",
" hass",
" home assistant",
" home-assistant",
" homeassistant",
" integration"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "fc45beb783b4791202722477985bb2bdca1f4ea350bdd28a3a51878619d2bb69",
"md5": "938b5cd9f6472089886b54aa09d57b24",
"sha256": "39ea5aa84e3476a96fa86a3d4597a4774de735e5a09616ccd8bb9397186fc218"
},
"downloads": -1,
"filename": "keba_keenergy_api-2.3.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "938b5cd9f6472089886b54aa09d57b24",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 20999,
"upload_time": "2025-10-17T22:16:13",
"upload_time_iso_8601": "2025-10-17T22:16:13.581969Z",
"url": "https://files.pythonhosted.org/packages/fc/45/beb783b4791202722477985bb2bdca1f4ea350bdd28a3a51878619d2bb69/keba_keenergy_api-2.3.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e18aab880bfacdef7d3d558aaaf20b55e8a4ad9dcfed54d06a3efbe3a64b2349",
"md5": "ab525d9cd617d252b319550b70fc29ad",
"sha256": "65a558ddb565e92634ef71eedb7169a1c501f7699249f2d26dc8232d0525d33a"
},
"downloads": -1,
"filename": "keba_keenergy_api-2.3.1.tar.gz",
"has_sig": false,
"md5_digest": "ab525d9cd617d252b319550b70fc29ad",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 159849,
"upload_time": "2025-10-17T22:16:14",
"upload_time_iso_8601": "2025-10-17T22:16:14.543311Z",
"url": "https://files.pythonhosted.org/packages/e1/8a/ab880bfacdef7d3d558aaaf20b55e8a4ad9dcfed54d06a3efbe3a64b2349/keba_keenergy_api-2.3.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-17 22:16:14",
"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"
}