core/homeassistant/components/vicare/utils.py

79 lines
2.4 KiB
Python
Raw Normal View History

"""ViCare helpers functions."""
import logging
from PyViCare.PyViCareDevice import Device as PyViCareDevice
Add support for multiple devices linked to a Viessmann account (#96044) * care about all devices * use first device for diagnostics * update constants * handle multiple devices * handle multiple devices * handle multiple devices * handle multiple devices * handle multiple devices * code style * code style * code style * code style * code style * remove unused import * remove unused import * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * remove unused constant * Update const.py * Update binary_sensor.py * change format * change format * fix line duplication * fix line duplication * change format * fix typo * use serial in device name if multiple devices are found * add common base class * use base class * Update __init__.py * Update __init__.py * Update __init__.py * Update sensor.py * Update binary_sensor.py * correct import * use base class * fix cdestyle findings * fix pylint findings * fix mypy findings * fix codestyle finidings * move has_entity_name to base class * Revert "fix mypy findings" This reverts commit 2d78801a69ec13670e0ef47354daf54b383eb595. * fix type issue * move multiple device handling * fix import * remove special handling for device name * extract api getter * Update __init__.py * Update __init__.py * Update entity.py * Update button.py * Update binary_sensor.py * Update climate.py * Update sensor.py * Update water_heater.py * Apply suggestions from code review Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update __init__.py * fix mypy & black * move get_device to utils * rename const * Apply suggestions from code review Co-authored-by: Robert Resch <robert@resch.dev> * store device in config entry * extract types * fix diagnostics * handle new platform * handle api rate limit * add types * add types * rename * add types * ignore gateways for now * Update .coveragerc * adjust types * fix merge issues * rename * Update types.py * fix type * add test method * simplify * ignore unused devices * Apply suggestions from code review Co-authored-by: Robert Resch <robert@resch.dev> * fix findings * handle unsupported devices * Apply suggestions from code review Co-authored-by: Robert Resch <robert@resch.dev> * Update types.py * fix format * adjust variable naming * Update conftest.py * Update conftest.py * remove kw_only * Apply suggestions from code review * Update __init__.py * Update binary_sensor.py * Update button.py * Update climate.py * Update const.py * Update diagnostics.py * Update number.py * Update sensor.py * Update types.py * Update water_heater.py * fix comment * Apply suggestions from code review Co-authored-by: Erik Montnemery <erik@montnemery.com> --------- Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Co-authored-by: Robert Resch <robert@resch.dev> Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-02-15 12:58:00 +00:00
from PyViCare.PyViCareDeviceConfig import PyViCareDeviceConfig
from PyViCare.PyViCareHeatingDevice import (
HeatingDeviceWithComponent as PyViCareHeatingDeviceComponent,
)
from PyViCare.PyViCareUtils import PyViCareNotSupportedFeatureError
Add support for multiple devices linked to a Viessmann account (#96044) * care about all devices * use first device for diagnostics * update constants * handle multiple devices * handle multiple devices * handle multiple devices * handle multiple devices * handle multiple devices * code style * code style * code style * code style * code style * remove unused import * remove unused import * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * remove unused constant * Update const.py * Update binary_sensor.py * change format * change format * fix line duplication * fix line duplication * change format * fix typo * use serial in device name if multiple devices are found * add common base class * use base class * Update __init__.py * Update __init__.py * Update __init__.py * Update sensor.py * Update binary_sensor.py * correct import * use base class * fix cdestyle findings * fix pylint findings * fix mypy findings * fix codestyle finidings * move has_entity_name to base class * Revert "fix mypy findings" This reverts commit 2d78801a69ec13670e0ef47354daf54b383eb595. * fix type issue * move multiple device handling * fix import * remove special handling for device name * extract api getter * Update __init__.py * Update __init__.py * Update entity.py * Update button.py * Update binary_sensor.py * Update climate.py * Update sensor.py * Update water_heater.py * Apply suggestions from code review Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update __init__.py * fix mypy & black * move get_device to utils * rename const * Apply suggestions from code review Co-authored-by: Robert Resch <robert@resch.dev> * store device in config entry * extract types * fix diagnostics * handle new platform * handle api rate limit * add types * add types * rename * add types * ignore gateways for now * Update .coveragerc * adjust types * fix merge issues * rename * Update types.py * fix type * add test method * simplify * ignore unused devices * Apply suggestions from code review Co-authored-by: Robert Resch <robert@resch.dev> * fix findings * handle unsupported devices * Apply suggestions from code review Co-authored-by: Robert Resch <robert@resch.dev> * Update types.py * fix format * adjust variable naming * Update conftest.py * Update conftest.py * remove kw_only * Apply suggestions from code review * Update __init__.py * Update binary_sensor.py * Update button.py * Update climate.py * Update const.py * Update diagnostics.py * Update number.py * Update sensor.py * Update types.py * Update water_heater.py * fix comment * Apply suggestions from code review Co-authored-by: Erik Montnemery <erik@montnemery.com> --------- Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Co-authored-by: Robert Resch <robert@resch.dev> Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-02-15 12:58:00 +00:00
from homeassistant.config_entries import ConfigEntry
from .const import CONF_HEATING_TYPE, HEATING_TYPE_TO_CREATOR_METHOD, HeatingType
from .types import ViCareRequiredKeysMixin
_LOGGER = logging.getLogger(__name__)
Add support for multiple devices linked to a Viessmann account (#96044) * care about all devices * use first device for diagnostics * update constants * handle multiple devices * handle multiple devices * handle multiple devices * handle multiple devices * handle multiple devices * code style * code style * code style * code style * code style * remove unused import * remove unused import * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * use has_entity_name and add serial to device name * remove unused constant * Update const.py * Update binary_sensor.py * change format * change format * fix line duplication * fix line duplication * change format * fix typo * use serial in device name if multiple devices are found * add common base class * use base class * Update __init__.py * Update __init__.py * Update __init__.py * Update sensor.py * Update binary_sensor.py * correct import * use base class * fix cdestyle findings * fix pylint findings * fix mypy findings * fix codestyle finidings * move has_entity_name to base class * Revert "fix mypy findings" This reverts commit 2d78801a69ec13670e0ef47354daf54b383eb595. * fix type issue * move multiple device handling * fix import * remove special handling for device name * extract api getter * Update __init__.py * Update __init__.py * Update entity.py * Update button.py * Update binary_sensor.py * Update climate.py * Update sensor.py * Update water_heater.py * Apply suggestions from code review Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update __init__.py * fix mypy & black * move get_device to utils * rename const * Apply suggestions from code review Co-authored-by: Robert Resch <robert@resch.dev> * store device in config entry * extract types * fix diagnostics * handle new platform * handle api rate limit * add types * add types * rename * add types * ignore gateways for now * Update .coveragerc * adjust types * fix merge issues * rename * Update types.py * fix type * add test method * simplify * ignore unused devices * Apply suggestions from code review Co-authored-by: Robert Resch <robert@resch.dev> * fix findings * handle unsupported devices * Apply suggestions from code review Co-authored-by: Robert Resch <robert@resch.dev> * Update types.py * fix format * adjust variable naming * Update conftest.py * Update conftest.py * remove kw_only * Apply suggestions from code review * Update __init__.py * Update binary_sensor.py * Update button.py * Update climate.py * Update const.py * Update diagnostics.py * Update number.py * Update sensor.py * Update types.py * Update water_heater.py * fix comment * Apply suggestions from code review Co-authored-by: Erik Montnemery <erik@montnemery.com> --------- Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> Co-authored-by: Robert Resch <robert@resch.dev> Co-authored-by: Erik Montnemery <erik@montnemery.com>
2024-02-15 12:58:00 +00:00
def get_device(
entry: ConfigEntry, device_config: PyViCareDeviceConfig
) -> PyViCareDevice:
"""Get device for device config."""
return getattr(
device_config,
HEATING_TYPE_TO_CREATOR_METHOD[HeatingType(entry.data[CONF_HEATING_TYPE])],
)()
def is_supported(
name: str,
entity_description: ViCareRequiredKeysMixin,
vicare_device,
) -> bool:
"""Check if the PyViCare device supports the requested sensor."""
try:
entity_description.value_getter(vicare_device)
except PyViCareNotSupportedFeatureError:
_LOGGER.debug("Feature not supported %s", name)
return False
except AttributeError as error:
_LOGGER.debug("Feature not supported %s: %s", name, error)
return False
_LOGGER.debug("Found entity %s", name)
return True
def get_burners(device: PyViCareDevice) -> list[PyViCareHeatingDeviceComponent]:
"""Return the list of burners."""
try:
return device.burners
except PyViCareNotSupportedFeatureError:
_LOGGER.debug("No burners found")
except AttributeError as error:
_LOGGER.debug("No burners found: %s", error)
return []
def get_circuits(device: PyViCareDevice) -> list[PyViCareHeatingDeviceComponent]:
"""Return the list of circuits."""
try:
return device.circuits
except PyViCareNotSupportedFeatureError:
_LOGGER.debug("No circuits found")
except AttributeError as error:
_LOGGER.debug("No circuits found: %s", error)
return []
def get_compressors(device: PyViCareDevice) -> list[PyViCareHeatingDeviceComponent]:
"""Return the list of compressors."""
try:
return device.compressors
except PyViCareNotSupportedFeatureError:
_LOGGER.debug("No compressors found")
except AttributeError as error:
_LOGGER.debug("No compressors found: %s", error)
return []