mirror of
https://github.com/home-assistant/core.git
synced 2025-12-22 07:50:05 +00:00
Compare commits
6 Commits
input_bool
...
epenet-202
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
24b1476f7c | ||
|
|
f3cc052cd3 | ||
|
|
42e8f653de | ||
|
|
8a4a2c5d1d | ||
|
|
e0c1fc05a7 | ||
|
|
e30da2c01a |
@@ -20,7 +20,7 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|||||||
from . import TuyaConfigEntry
|
from . import TuyaConfigEntry
|
||||||
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
||||||
from .entity import TuyaEntity
|
from .entity import TuyaEntity
|
||||||
from .models import DPCodeEnumWrapper, DPCodeRawWrapper
|
from .models import DeviceWrapper, DPCodeEnumWrapper, DPCodeRawWrapper
|
||||||
from .type_information import EnumTypeInformation
|
from .type_information import EnumTypeInformation
|
||||||
|
|
||||||
ALARM: dict[DeviceCategory, tuple[AlarmControlPanelEntityDescription, ...]] = {
|
ALARM: dict[DeviceCategory, tuple[AlarmControlPanelEntityDescription, ...]] = {
|
||||||
@@ -170,9 +170,9 @@ class TuyaAlarmEntity(TuyaEntity, AlarmControlPanelEntity):
|
|||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
description: AlarmControlPanelEntityDescription,
|
description: AlarmControlPanelEntityDescription,
|
||||||
*,
|
*,
|
||||||
action_wrapper: _AlarmActionWrapper,
|
action_wrapper: DeviceWrapper[str],
|
||||||
changed_by_wrapper: _AlarmChangedByWrapper | None,
|
changed_by_wrapper: DeviceWrapper[str] | None,
|
||||||
state_wrapper: _AlarmStateWrapper,
|
state_wrapper: DeviceWrapper[AlarmControlPanelState],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init Tuya Alarm."""
|
"""Init Tuya Alarm."""
|
||||||
super().__init__(device, device_manager)
|
super().__init__(device, device_manager)
|
||||||
|
|||||||
@@ -19,7 +19,12 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|||||||
from . import TuyaConfigEntry
|
from . import TuyaConfigEntry
|
||||||
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
||||||
from .entity import TuyaEntity
|
from .entity import TuyaEntity
|
||||||
from .models import DPCodeBitmapBitWrapper, DPCodeBooleanWrapper, DPCodeWrapper
|
from .models import (
|
||||||
|
DeviceWrapper,
|
||||||
|
DPCodeBitmapBitWrapper,
|
||||||
|
DPCodeBooleanWrapper,
|
||||||
|
DPCodeWrapper,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
@@ -450,7 +455,7 @@ class TuyaBinarySensorEntity(TuyaEntity, BinarySensorEntity):
|
|||||||
device: CustomerDevice,
|
device: CustomerDevice,
|
||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
description: TuyaBinarySensorEntityDescription,
|
description: TuyaBinarySensorEntityDescription,
|
||||||
dpcode_wrapper: DPCodeWrapper,
|
dpcode_wrapper: DeviceWrapper[bool],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init Tuya binary sensor."""
|
"""Init Tuya binary sensor."""
|
||||||
super().__init__(device, device_manager)
|
super().__init__(device, device_manager)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|||||||
from . import TuyaConfigEntry
|
from . import TuyaConfigEntry
|
||||||
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
||||||
from .entity import TuyaEntity
|
from .entity import TuyaEntity
|
||||||
from .models import DPCodeBooleanWrapper
|
from .models import DeviceWrapper, DPCodeBooleanWrapper
|
||||||
|
|
||||||
BUTTONS: dict[DeviceCategory, tuple[ButtonEntityDescription, ...]] = {
|
BUTTONS: dict[DeviceCategory, tuple[ButtonEntityDescription, ...]] = {
|
||||||
DeviceCategory.HXD: (
|
DeviceCategory.HXD: (
|
||||||
@@ -107,7 +107,7 @@ class TuyaButtonEntity(TuyaEntity, ButtonEntity):
|
|||||||
device: CustomerDevice,
|
device: CustomerDevice,
|
||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
description: ButtonEntityDescription,
|
description: ButtonEntityDescription,
|
||||||
dpcode_wrapper: DPCodeBooleanWrapper,
|
dpcode_wrapper: DeviceWrapper[bool],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init Tuya button."""
|
"""Init Tuya button."""
|
||||||
super().__init__(device, device_manager)
|
super().__init__(device, device_manager)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|||||||
from . import TuyaConfigEntry
|
from . import TuyaConfigEntry
|
||||||
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
||||||
from .entity import TuyaEntity
|
from .entity import TuyaEntity
|
||||||
from .models import DPCodeBooleanWrapper
|
from .models import DeviceWrapper, DPCodeBooleanWrapper
|
||||||
|
|
||||||
CAMERAS: tuple[DeviceCategory, ...] = (
|
CAMERAS: tuple[DeviceCategory, ...] = (
|
||||||
DeviceCategory.DGHSXJ,
|
DeviceCategory.DGHSXJ,
|
||||||
@@ -70,8 +70,8 @@ class TuyaCameraEntity(TuyaEntity, CameraEntity):
|
|||||||
device: CustomerDevice,
|
device: CustomerDevice,
|
||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
*,
|
*,
|
||||||
motion_detection_switch: DPCodeBooleanWrapper | None = None,
|
motion_detection_switch: DeviceWrapper[bool] | None = None,
|
||||||
recording_status: DPCodeBooleanWrapper | None = None,
|
recording_status: DeviceWrapper[bool] | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init Tuya Camera."""
|
"""Init Tuya Camera."""
|
||||||
super().__init__(device, device_manager)
|
super().__init__(device, device_manager)
|
||||||
|
|||||||
@@ -332,13 +332,13 @@ class TuyaClimateEntity(TuyaEntity, ClimateEntity):
|
|||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
description: TuyaClimateEntityDescription,
|
description: TuyaClimateEntityDescription,
|
||||||
*,
|
*,
|
||||||
current_humidity_wrapper: _RoundedIntegerWrapper | None,
|
current_humidity_wrapper: DeviceWrapper[int] | None,
|
||||||
current_temperature_wrapper: DPCodeIntegerWrapper | None,
|
current_temperature_wrapper: DeviceWrapper[float] | None,
|
||||||
fan_mode_wrapper: DPCodeEnumWrapper | None,
|
fan_mode_wrapper: DPCodeEnumWrapper | None,
|
||||||
hvac_mode_wrapper: DPCodeEnumWrapper | None,
|
hvac_mode_wrapper: DPCodeEnumWrapper | None,
|
||||||
set_temperature_wrapper: DPCodeIntegerWrapper | None,
|
set_temperature_wrapper: DPCodeIntegerWrapper | None,
|
||||||
swing_wrapper: _SwingModeWrapper | None,
|
swing_wrapper: _SwingModeWrapper | None,
|
||||||
switch_wrapper: DPCodeBooleanWrapper | None,
|
switch_wrapper: DeviceWrapper[bool] | None,
|
||||||
target_humidity_wrapper: _RoundedIntegerWrapper | None,
|
target_humidity_wrapper: _RoundedIntegerWrapper | None,
|
||||||
temperature_unit: UnitOfTemperature,
|
temperature_unit: UnitOfTemperature,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|||||||
@@ -340,11 +340,11 @@ class TuyaCoverEntity(TuyaEntity, CoverEntity):
|
|||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
description: TuyaCoverEntityDescription,
|
description: TuyaCoverEntityDescription,
|
||||||
*,
|
*,
|
||||||
current_position: _DPCodePercentageMappingWrapper | None,
|
current_position: DeviceWrapper[int] | None,
|
||||||
current_state_wrapper: _IsClosedWrapper | None,
|
current_state_wrapper: _IsClosedWrapper | None,
|
||||||
instruction_wrapper: DeviceWrapper | None,
|
instruction_wrapper: DeviceWrapper[str] | None,
|
||||||
set_position: _DPCodePercentageMappingWrapper | None,
|
set_position: DeviceWrapper[int] | None,
|
||||||
tilt_position: _DPCodePercentageMappingWrapper | None,
|
tilt_position: DeviceWrapper[int] | None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init Tuya Cover."""
|
"""Init Tuya Cover."""
|
||||||
super().__init__(device, device_manager)
|
super().__init__(device, device_manager)
|
||||||
@@ -358,7 +358,7 @@ class TuyaCoverEntity(TuyaEntity, CoverEntity):
|
|||||||
self._set_position = set_position
|
self._set_position = set_position
|
||||||
self._tilt_position = tilt_position
|
self._tilt_position = tilt_position
|
||||||
|
|
||||||
if instruction_wrapper and instruction_wrapper.options is not None:
|
if instruction_wrapper and instruction_wrapper.options:
|
||||||
if "open" in instruction_wrapper.options:
|
if "open" in instruction_wrapper.options:
|
||||||
self._attr_supported_features |= CoverEntityFeature.OPEN
|
self._attr_supported_features |= CoverEntityFeature.OPEN
|
||||||
if "close" in instruction_wrapper.options:
|
if "close" in instruction_wrapper.options:
|
||||||
|
|||||||
@@ -70,14 +70,14 @@ class TuyaEntity(Entity):
|
|||||||
self.device_manager.send_commands, self.device.id, commands
|
self.device_manager.send_commands, self.device.id, commands
|
||||||
)
|
)
|
||||||
|
|
||||||
def _read_wrapper(self, wrapper: DeviceWrapper | None) -> Any | None:
|
def _read_wrapper[T](self, wrapper: DeviceWrapper[T] | None) -> T | None:
|
||||||
"""Read the wrapper device status."""
|
"""Read the wrapper device status."""
|
||||||
if wrapper is None:
|
if wrapper is None:
|
||||||
return None
|
return None
|
||||||
return wrapper.read_device_status(self.device)
|
return wrapper.read_device_status(self.device)
|
||||||
|
|
||||||
async def _async_send_wrapper_updates(
|
async def _async_send_wrapper_updates[T](
|
||||||
self, wrapper: DeviceWrapper | None, value: Any
|
self, wrapper: DeviceWrapper[T] | None, value: T
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Send command to the device."""
|
"""Send command to the device."""
|
||||||
if wrapper is None:
|
if wrapper is None:
|
||||||
|
|||||||
@@ -23,7 +23,12 @@ from homeassistant.util.percentage import (
|
|||||||
from . import TuyaConfigEntry
|
from . import TuyaConfigEntry
|
||||||
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
||||||
from .entity import TuyaEntity
|
from .entity import TuyaEntity
|
||||||
from .models import DPCodeBooleanWrapper, DPCodeEnumWrapper, DPCodeIntegerWrapper
|
from .models import (
|
||||||
|
DeviceWrapper,
|
||||||
|
DPCodeBooleanWrapper,
|
||||||
|
DPCodeEnumWrapper,
|
||||||
|
DPCodeIntegerWrapper,
|
||||||
|
)
|
||||||
from .type_information import IntegerTypeInformation
|
from .type_information import IntegerTypeInformation
|
||||||
from .util import RemapHelper, get_dpcode
|
from .util import RemapHelper, get_dpcode
|
||||||
|
|
||||||
@@ -173,11 +178,11 @@ class TuyaFanEntity(TuyaEntity, FanEntity):
|
|||||||
device: CustomerDevice,
|
device: CustomerDevice,
|
||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
*,
|
*,
|
||||||
direction_wrapper: _DirectionEnumWrapper | None,
|
direction_wrapper: DeviceWrapper[str] | None,
|
||||||
mode_wrapper: DPCodeEnumWrapper | None,
|
mode_wrapper: DeviceWrapper[str] | None,
|
||||||
oscillate_wrapper: DPCodeBooleanWrapper | None,
|
oscillate_wrapper: DeviceWrapper[bool] | None,
|
||||||
speed_wrapper: _FanSpeedEnumWrapper | _FanSpeedIntegerWrapper | None,
|
speed_wrapper: DeviceWrapper[int] | None,
|
||||||
switch_wrapper: DPCodeBooleanWrapper | None,
|
switch_wrapper: DeviceWrapper[bool] | None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init Tuya Fan Device."""
|
"""Init Tuya Fan Device."""
|
||||||
super().__init__(device, device_manager)
|
super().__init__(device, device_manager)
|
||||||
|
|||||||
@@ -20,7 +20,12 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|||||||
from . import TuyaConfigEntry
|
from . import TuyaConfigEntry
|
||||||
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
||||||
from .entity import TuyaEntity
|
from .entity import TuyaEntity
|
||||||
from .models import DPCodeBooleanWrapper, DPCodeEnumWrapper, DPCodeIntegerWrapper
|
from .models import (
|
||||||
|
DeviceWrapper,
|
||||||
|
DPCodeBooleanWrapper,
|
||||||
|
DPCodeEnumWrapper,
|
||||||
|
DPCodeIntegerWrapper,
|
||||||
|
)
|
||||||
from .util import ActionDPCodeNotFoundError, get_dpcode
|
from .util import ActionDPCodeNotFoundError, get_dpcode
|
||||||
|
|
||||||
|
|
||||||
@@ -136,9 +141,9 @@ class TuyaHumidifierEntity(TuyaEntity, HumidifierEntity):
|
|||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
description: TuyaHumidifierEntityDescription,
|
description: TuyaHumidifierEntityDescription,
|
||||||
*,
|
*,
|
||||||
current_humidity_wrapper: _RoundedIntegerWrapper | None = None,
|
current_humidity_wrapper: DeviceWrapper[int] | None = None,
|
||||||
mode_wrapper: DPCodeEnumWrapper | None = None,
|
mode_wrapper: DPCodeEnumWrapper | None = None,
|
||||||
switch_wrapper: DPCodeBooleanWrapper | None = None,
|
switch_wrapper: DeviceWrapper[bool] | None = None,
|
||||||
target_humidity_wrapper: _RoundedIntegerWrapper | None = None,
|
target_humidity_wrapper: _RoundedIntegerWrapper | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init Tuya (de)humidifier."""
|
"""Init Tuya (de)humidifier."""
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ from . import TuyaConfigEntry
|
|||||||
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode, WorkMode
|
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode, WorkMode
|
||||||
from .entity import TuyaEntity
|
from .entity import TuyaEntity
|
||||||
from .models import (
|
from .models import (
|
||||||
|
DeviceWrapper,
|
||||||
DPCodeBooleanWrapper,
|
DPCodeBooleanWrapper,
|
||||||
DPCodeEnumWrapper,
|
DPCodeEnumWrapper,
|
||||||
DPCodeIntegerWrapper,
|
DPCodeIntegerWrapper,
|
||||||
@@ -673,11 +674,11 @@ class TuyaLightEntity(TuyaEntity, LightEntity):
|
|||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
description: TuyaLightEntityDescription,
|
description: TuyaLightEntityDescription,
|
||||||
*,
|
*,
|
||||||
brightness_wrapper: _BrightnessWrapper | None,
|
brightness_wrapper: DeviceWrapper[int] | None,
|
||||||
color_data_wrapper: _ColorDataWrapper | None,
|
color_data_wrapper: DeviceWrapper[tuple[float, float, float]] | None,
|
||||||
color_mode_wrapper: DPCodeEnumWrapper | None,
|
color_mode_wrapper: DPCodeEnumWrapper | None,
|
||||||
color_temp_wrapper: _ColorTempWrapper | None,
|
color_temp_wrapper: DeviceWrapper[int] | None,
|
||||||
switch_wrapper: DPCodeBooleanWrapper,
|
switch_wrapper: DeviceWrapper[bool],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init TuyaHaLight."""
|
"""Init TuyaHaLight."""
|
||||||
super().__init__(device, device_manager)
|
super().__init__(device, device_manager)
|
||||||
|
|||||||
@@ -18,17 +18,17 @@ from .type_information import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class DeviceWrapper:
|
class DeviceWrapper[T]:
|
||||||
"""Base device wrapper."""
|
"""Base device wrapper."""
|
||||||
|
|
||||||
options: list[str] | None = None
|
options: list[str] | None = None
|
||||||
|
|
||||||
def read_device_status(self, device: CustomerDevice) -> Any | None:
|
def read_device_status(self, device: CustomerDevice) -> T | None:
|
||||||
"""Read device status and convert to a Home Assistant value."""
|
"""Read device status and convert to a Home Assistant value."""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def get_update_commands(
|
def get_update_commands(
|
||||||
self, device: CustomerDevice, value: Any
|
self, device: CustomerDevice, value: T
|
||||||
) -> list[dict[str, Any]]:
|
) -> list[dict[str, Any]]:
|
||||||
"""Generate update commands for a Home Assistant action."""
|
"""Generate update commands for a Home Assistant action."""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|||||||
from . import TuyaConfigEntry
|
from . import TuyaConfigEntry
|
||||||
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
||||||
from .entity import TuyaEntity
|
from .entity import TuyaEntity
|
||||||
from .models import DPCodeBooleanWrapper
|
from .models import DeviceWrapper, DPCodeBooleanWrapper
|
||||||
|
|
||||||
SIRENS: dict[DeviceCategory, tuple[SirenEntityDescription, ...]] = {
|
SIRENS: dict[DeviceCategory, tuple[SirenEntityDescription, ...]] = {
|
||||||
DeviceCategory.CO2BJ: (
|
DeviceCategory.CO2BJ: (
|
||||||
@@ -94,7 +94,7 @@ class TuyaSirenEntity(TuyaEntity, SirenEntity):
|
|||||||
device: CustomerDevice,
|
device: CustomerDevice,
|
||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
description: SirenEntityDescription,
|
description: SirenEntityDescription,
|
||||||
dpcode_wrapper: DPCodeBooleanWrapper,
|
dpcode_wrapper: DeviceWrapper[bool],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init Tuya Siren."""
|
"""Init Tuya Siren."""
|
||||||
super().__init__(device, device_manager)
|
super().__init__(device, device_manager)
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ from homeassistant.helpers.issue_registry import (
|
|||||||
from . import TuyaConfigEntry
|
from . import TuyaConfigEntry
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
||||||
from .entity import TuyaEntity
|
from .entity import TuyaEntity
|
||||||
from .models import DPCodeBooleanWrapper
|
from .models import DeviceWrapper, DPCodeBooleanWrapper
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, kw_only=True)
|
@dataclass(frozen=True, kw_only=True)
|
||||||
@@ -1027,7 +1027,7 @@ class TuyaSwitchEntity(TuyaEntity, SwitchEntity):
|
|||||||
device: CustomerDevice,
|
device: CustomerDevice,
|
||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
description: SwitchEntityDescription,
|
description: SwitchEntityDescription,
|
||||||
dpcode_wrapper: DPCodeBooleanWrapper,
|
dpcode_wrapper: DeviceWrapper[bool],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init TuyaHaSwitch."""
|
"""Init TuyaHaSwitch."""
|
||||||
super().__init__(device, device_manager)
|
super().__init__(device, device_manager)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|||||||
from . import TuyaConfigEntry
|
from . import TuyaConfigEntry
|
||||||
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DeviceCategory, DPCode
|
||||||
from .entity import TuyaEntity
|
from .entity import TuyaEntity
|
||||||
from .models import DPCodeBooleanWrapper
|
from .models import DeviceWrapper, DPCodeBooleanWrapper
|
||||||
|
|
||||||
VALVES: dict[DeviceCategory, tuple[ValveEntityDescription, ...]] = {
|
VALVES: dict[DeviceCategory, tuple[ValveEntityDescription, ...]] = {
|
||||||
DeviceCategory.SFKZQ: (
|
DeviceCategory.SFKZQ: (
|
||||||
@@ -122,7 +122,7 @@ class TuyaValveEntity(TuyaEntity, ValveEntity):
|
|||||||
device: CustomerDevice,
|
device: CustomerDevice,
|
||||||
device_manager: Manager,
|
device_manager: Manager,
|
||||||
description: ValveEntityDescription,
|
description: ValveEntityDescription,
|
||||||
dpcode_wrapper: DPCodeBooleanWrapper,
|
dpcode_wrapper: DeviceWrapper[bool],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init TuyaValveEntity."""
|
"""Init TuyaValveEntity."""
|
||||||
super().__init__(device, device_manager)
|
super().__init__(device, device_manager)
|
||||||
|
|||||||
Reference in New Issue
Block a user