mirror of
https://github.com/home-assistant/core.git
synced 2025-07-20 03:37:07 +00:00
Add common apis to base entity class of LG ThinQ integration (#125713)
Co-authored-by: jangwon.lee <jangwon.lee@lge.com>
This commit is contained in:
parent
c4b870bfd3
commit
8e026bf95d
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from collections.abc import Coroutine
|
from collections.abc import Callable, Coroutine
|
||||||
import logging
|
import logging
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
@ -10,6 +10,7 @@ from thinqconnect import ThinQAPIException
|
|||||||
from thinqconnect.devices.const import Location
|
from thinqconnect.devices.const import Location
|
||||||
from thinqconnect.integration import PropertyState
|
from thinqconnect.integration import PropertyState
|
||||||
|
|
||||||
|
from homeassistant.const import UnitOfTemperature
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
from homeassistant.exceptions import ServiceValidationError
|
from homeassistant.exceptions import ServiceValidationError
|
||||||
from homeassistant.helpers import device_registry as dr
|
from homeassistant.helpers import device_registry as dr
|
||||||
@ -23,6 +24,11 @@ _LOGGER = logging.getLogger(__name__)
|
|||||||
|
|
||||||
EMPTY_STATE = PropertyState()
|
EMPTY_STATE = PropertyState()
|
||||||
|
|
||||||
|
UNIT_CONVERSION_MAP: dict[str, str] = {
|
||||||
|
"F": UnitOfTemperature.FAHRENHEIT,
|
||||||
|
"C": UnitOfTemperature.CELSIUS,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ThinQEntity(CoordinatorEntity[DeviceDataUpdateCoordinator]):
|
class ThinQEntity(CoordinatorEntity[DeviceDataUpdateCoordinator]):
|
||||||
"""The base implementation of all lg thinq entities."""
|
"""The base implementation of all lg thinq entities."""
|
||||||
@ -64,6 +70,13 @@ class ThinQEntity(CoordinatorEntity[DeviceDataUpdateCoordinator]):
|
|||||||
"""Return the state data of entity."""
|
"""Return the state data of entity."""
|
||||||
return self.coordinator.data.get(self.property_id, EMPTY_STATE)
|
return self.coordinator.data.get(self.property_id, EMPTY_STATE)
|
||||||
|
|
||||||
|
def _get_unit_of_measurement(self, unit: str | None) -> str | None:
|
||||||
|
"""Convert thinq unit string to HA unit string."""
|
||||||
|
if unit is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return UNIT_CONVERSION_MAP.get(unit)
|
||||||
|
|
||||||
def _update_status(self) -> None:
|
def _update_status(self) -> None:
|
||||||
"""Update status itself.
|
"""Update status itself.
|
||||||
|
|
||||||
@ -81,11 +94,18 @@ class ThinQEntity(CoordinatorEntity[DeviceDataUpdateCoordinator]):
|
|||||||
await super().async_added_to_hass()
|
await super().async_added_to_hass()
|
||||||
self._handle_coordinator_update()
|
self._handle_coordinator_update()
|
||||||
|
|
||||||
async def async_call_api(self, target: Coroutine[Any, Any, Any]) -> None:
|
async def async_call_api(
|
||||||
|
self,
|
||||||
|
target: Coroutine[Any, Any, Any],
|
||||||
|
on_fail_method: Callable[[], None] | None = None,
|
||||||
|
) -> None:
|
||||||
"""Call the given api and handle exception."""
|
"""Call the given api and handle exception."""
|
||||||
try:
|
try:
|
||||||
await target
|
await target
|
||||||
except ThinQAPIException as exc:
|
except ThinQAPIException as exc:
|
||||||
|
if on_fail_method:
|
||||||
|
on_fail_method()
|
||||||
|
|
||||||
raise ServiceValidationError(
|
raise ServiceValidationError(
|
||||||
exc.message,
|
exc.message,
|
||||||
translation_domain=DOMAIN,
|
translation_domain=DOMAIN,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user