Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add translation keys to ViCare integration #104425

Merged
merged 15 commits into from
Nov 25, 2023
34 changes: 15 additions & 19 deletions homeassistant/components/vicare/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from dataclasses import dataclass
import logging

from PyViCare.PyViCareDevice import Device as PyViCareDevice
from PyViCare.PyViCareDeviceConfig import PyViCareDeviceConfig
from PyViCare.PyViCareUtils import (
PyViCareInvalidDataError,
Expand Down Expand Up @@ -40,14 +41,14 @@ class ViCareBinarySensorEntityDescription(
CIRCUIT_SENSORS: tuple[ViCareBinarySensorEntityDescription, ...] = (
ViCareBinarySensorEntityDescription(
key="circulationpump_active",
name="Circulation pump",
translation_key="circulation_pump",
icon="mdi:pump",
device_class=BinarySensorDeviceClass.RUNNING,
value_getter=lambda api: api.getCirculationPumpActive(),
),
ViCareBinarySensorEntityDescription(
key="frost_protection_active",
name="Frost protection",
translation_key="frost_protection",
icon="mdi:snowflake",
value_getter=lambda api: api.getFrostProtectionActive(),
),
Expand All @@ -56,7 +57,7 @@ class ViCareBinarySensorEntityDescription(
BURNER_SENSORS: tuple[ViCareBinarySensorEntityDescription, ...] = (
ViCareBinarySensorEntityDescription(
key="burner_active",
name="Burner",
translation_key="burner",
icon="mdi:gas-burner",
device_class=BinarySensorDeviceClass.RUNNING,
value_getter=lambda api: api.getActive(),
Expand All @@ -66,7 +67,7 @@ class ViCareBinarySensorEntityDescription(
COMPRESSOR_SENSORS: tuple[ViCareBinarySensorEntityDescription, ...] = (
ViCareBinarySensorEntityDescription(
key="compressor_active",
name="Compressor",
translation_key="compressor",
device_class=BinarySensorDeviceClass.RUNNING,
value_getter=lambda api: api.getActive(),
),
Expand All @@ -75,27 +76,27 @@ class ViCareBinarySensorEntityDescription(
GLOBAL_SENSORS: tuple[ViCareBinarySensorEntityDescription, ...] = (
ViCareBinarySensorEntityDescription(
key="solar_pump_active",
name="Solar pump",
translation_key="solar_pump",
icon="mdi:pump",
device_class=BinarySensorDeviceClass.RUNNING,
value_getter=lambda api: api.getSolarPumpActive(),
),
ViCareBinarySensorEntityDescription(
key="charging_active",
name="DHW Charging",
translation_key="domestic_hot_water_charging",
device_class=BinarySensorDeviceClass.RUNNING,
value_getter=lambda api: api.getDomesticHotWaterChargingActive(),
),
ViCareBinarySensorEntityDescription(
key="dhw_circulationpump_active",
name="DHW Circulation Pump",
translation_key="domestic_hot_water_circulation_pump",
icon="mdi:pump",
device_class=BinarySensorDeviceClass.RUNNING,
value_getter=lambda api: api.getDomesticHotWaterCirculationPumpActive(),
),
ViCareBinarySensorEntityDescription(
key="dhw_pump_active",
name="DHW Pump",
translation_key="domestic_hot_water_pump",
icon="mdi:pump",
device_class=BinarySensorDeviceClass.RUNNING,
value_getter=lambda api: api.getDomesticHotWaterPumpActive(),
Expand All @@ -104,15 +105,13 @@ class ViCareBinarySensorEntityDescription(


def _build_entity(
name: str,
vicare_api,
vicare_api: PyViCareDevice,
device_config: PyViCareDeviceConfig,
entity_description: ViCareBinarySensorEntityDescription,
):
"""Create a ViCare binary sensor entity."""
if is_supported(name, entity_description, vicare_api):
if is_supported(entity_description.key, entity_description, vicare_api):
return ViCareBinarySensor(
name,
vicare_api,
device_config,
entity_description,
Expand All @@ -130,12 +129,8 @@ async def _entities_from_descriptions(
"""Create entities from descriptions and list of burners/circuits."""
for description in sensor_descriptions:
for current in iterables:
suffix = ""
if len(iterables) > 1:
suffix = f" {current.id}"
entity = await hass.async_add_executor_job(
_build_entity,
f"{description.name}{suffix}",
current,
hass.data[DOMAIN][config_entry.entry_id][VICARE_DEVICE_CONFIG],
description,
Expand All @@ -157,7 +152,6 @@ async def async_setup_entry(
for description in GLOBAL_SENSORS:
entity = await hass.async_add_executor_job(
_build_entity,
description.name,
api,
hass.data[DOMAIN][config_entry.entry_id][VICARE_DEVICE_CONFIG],
description,
Expand Down Expand Up @@ -195,12 +189,14 @@ class ViCareBinarySensor(ViCareEntity, BinarySensorEntity):
entity_description: ViCareBinarySensorEntityDescription

def __init__(
self, name, api, device_config, description: ViCareBinarySensorEntityDescription
self,
api: PyViCareDevice,
device_config: PyViCareDeviceConfig,
description: ViCareBinarySensorEntityDescription,
) -> None:
"""Initialize the sensor."""
super().__init__(device_config, api, description.key)
self.entity_description = description
self._attr_name = name

@property
def available(self) -> bool:
Expand Down
20 changes: 9 additions & 11 deletions homeassistant/components/vicare/button.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from dataclasses import dataclass
import logging

from PyViCare.PyViCareDevice import Device as PyViCareDevice
from PyViCare.PyViCareDeviceConfig import PyViCareDeviceConfig
from PyViCare.PyViCareUtils import (
PyViCareInvalidDataError,
Expand All @@ -26,8 +27,6 @@

_LOGGER = logging.getLogger(__name__)

BUTTON_DHW_ACTIVATE_ONETIME_CHARGE = "activate_onetimecharge"


@dataclass
class ViCareButtonEntityDescription(
Expand All @@ -38,8 +37,8 @@ class ViCareButtonEntityDescription(

BUTTON_DESCRIPTIONS: tuple[ViCareButtonEntityDescription, ...] = (
ViCareButtonEntityDescription(
key=BUTTON_DHW_ACTIVATE_ONETIME_CHARGE,
name="Activate one-time charge",
key="activate_onetimecharge",
translation_key="activate_onetimecharge",
icon="mdi:shower-head",
entity_category=EntityCategory.CONFIG,
value_getter=lambda api: api.getOneTimeCharge(),
Expand All @@ -49,16 +48,13 @@ class ViCareButtonEntityDescription(


def _build_entity(
name: str,
vicare_api,
vicare_api: PyViCareDevice,
device_config: PyViCareDeviceConfig,
entity_description: ViCareButtonEntityDescription,
):
"""Create a ViCare button entity."""
_LOGGER.debug("Found device %s", name)
if is_supported(name, entity_description, vicare_api):
if is_supported(entity_description.key, entity_description, vicare_api):
return ViCareButton(
name,
vicare_api,
device_config,
entity_description,
Expand All @@ -79,7 +75,6 @@ async def async_setup_entry(
for description in BUTTON_DESCRIPTIONS:
entity = await hass.async_add_executor_job(
_build_entity,
description.name,
api,
hass.data[DOMAIN][config_entry.entry_id][VICARE_DEVICE_CONFIG],
description,
Expand All @@ -96,7 +91,10 @@ class ViCareButton(ViCareEntity, ButtonEntity):
entity_description: ViCareButtonEntityDescription

def __init__(
self, name, api, device_config, description: ViCareButtonEntityDescription
self,
api: PyViCareDevice,
device_config: PyViCareDeviceConfig,
description: ViCareButtonEntityDescription,
) -> None:
"""Initialize the button."""
super().__init__(device_config, api, description.key)
Expand Down
22 changes: 14 additions & 8 deletions homeassistant/components/vicare/climate.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import logging
from typing import Any

from PyViCare.PyViCareDevice import Device as PyViCareDevice
from PyViCare.PyViCareDeviceConfig import PyViCareDeviceConfig
from PyViCare.PyViCareHeatingDevice import HeatingCircuit as PyViCareHeatingCircuit
from PyViCare.PyViCareUtils import (
PyViCareCommandError,
PyViCareInvalidDataError,
Expand Down Expand Up @@ -107,18 +110,15 @@ async def async_setup_entry(
"""Set up the ViCare climate platform."""
entities = []
api = hass.data[DOMAIN][config_entry.entry_id][VICARE_API]
device_config = hass.data[DOMAIN][config_entry.entry_id][VICARE_DEVICE_CONFIG]
circuits = await hass.async_add_executor_job(_get_circuits, api)

for circuit in circuits:
suffix = ""
if len(circuits) > 1:
suffix = f" {circuit.id}"

entity = ViCareClimate(
f"Heating{suffix}",
api,
circuit,
hass.data[DOMAIN][config_entry.entry_id][VICARE_DEVICE_CONFIG],
device_config,
"heating",
)
entities.append(entity)

Expand Down Expand Up @@ -148,13 +148,19 @@ class ViCareClimate(ViCareEntity, ClimateEntity):
_current_action: bool | None = None
_current_mode: str | None = None

def __init__(self, name, api, circuit, device_config) -> None:
def __init__(
self,
api: PyViCareDevice,
circuit: PyViCareHeatingCircuit,
device_config: PyViCareDeviceConfig,
translation_key: str,
) -> None:
"""Initialize the climate device."""
super().__init__(device_config, api, circuit.id)
self._attr_name = name
self._circuit = circuit
self._attributes: dict[str, Any] = {}
self._current_program = None
self._attr_translation_key = translation_key

def update(self) -> None:
"""Let HA know there has been an update from the ViCare API."""
Expand Down
15 changes: 3 additions & 12 deletions homeassistant/components/vicare/number.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class ViCareNumberEntityDescription(NumberEntityDescription, ViCareRequiredKeysM
CIRCUIT_ENTITY_DESCRIPTIONS: tuple[ViCareNumberEntityDescription, ...] = (
ViCareNumberEntityDescription(
key="heating curve shift",
name="Heating curve shift",
translation_key="heating curve shift",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this translation key not using snake_case?

Copy link
Contributor Author

@CFenner CFenner Nov 26, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch, addressed with #104536

icon="mdi:plus-minus-variant",
entity_category=EntityCategory.CONFIG,
value_getter=lambda api: api.getHeatingCurveShift(),
Expand All @@ -57,7 +57,7 @@ class ViCareNumberEntityDescription(NumberEntityDescription, ViCareRequiredKeysM
),
ViCareNumberEntityDescription(
key="heating curve slope",
name="Heating curve slope",
translation_key="heating_curve_slope",
icon="mdi:slope-uphill",
entity_category=EntityCategory.CONFIG,
value_getter=lambda api: api.getHeatingCurveSlope(),
Expand All @@ -72,16 +72,13 @@ class ViCareNumberEntityDescription(NumberEntityDescription, ViCareRequiredKeysM


def _build_entity(
name: str,
vicare_api: PyViCareHeatingDeviceWithComponent,
device_config: PyViCareDeviceConfig,
entity_description: ViCareNumberEntityDescription,
) -> ViCareNumber | None:
"""Create a ViCare number entity."""
_LOGGER.debug("Found device %s", name)
if is_supported(name, entity_description, vicare_api):
if is_supported(entity_description.key, entity_description, vicare_api):
return ViCareNumber(
name,
vicare_api,
device_config,
entity_description,
Expand All @@ -100,13 +97,9 @@ async def async_setup_entry(
entities: list[ViCareNumber] = []
try:
for circuit in api.circuits:
suffix = ""
if len(api.circuits) > 1:
suffix = f" {circuit.id}"
for description in CIRCUIT_ENTITY_DESCRIPTIONS:
entity = await hass.async_add_executor_job(
_build_entity,
f"{description.name}{suffix}",
circuit,
hass.data[DOMAIN][config_entry.entry_id][VICARE_DEVICE_CONFIG],
description,
Expand All @@ -126,15 +119,13 @@ class ViCareNumber(ViCareEntity, NumberEntity):

def __init__(
self,
name: str,
api: PyViCareHeatingDeviceWithComponent,
device_config: PyViCareDeviceConfig,
description: ViCareNumberEntityDescription,
) -> None:
"""Initialize the number."""
super().__init__(device_config, api, description.key)
self.entity_description = description
self._attr_name = name

@property
def available(self) -> bool:
Expand Down