Store runtime data inside the config entry in Tuya (#116822)
This commit is contained in:
parent
89049bc022
commit
12759b50cc
18 changed files with 74 additions and 92 deletions
|
@ -35,6 +35,8 @@ from .const import (
|
||||||
# Suppress logs from the library, it logs unneeded on error
|
# Suppress logs from the library, it logs unneeded on error
|
||||||
logging.getLogger("tuya_sharing").setLevel(logging.CRITICAL)
|
logging.getLogger("tuya_sharing").setLevel(logging.CRITICAL)
|
||||||
|
|
||||||
|
TuyaConfigEntry = ConfigEntry["HomeAssistantTuyaData"]
|
||||||
|
|
||||||
|
|
||||||
class HomeAssistantTuyaData(NamedTuple):
|
class HomeAssistantTuyaData(NamedTuple):
|
||||||
"""Tuya data stored in the Home Assistant data object."""
|
"""Tuya data stored in the Home Assistant data object."""
|
||||||
|
@ -43,7 +45,7 @@ class HomeAssistantTuyaData(NamedTuple):
|
||||||
listener: SharingDeviceListener
|
listener: SharingDeviceListener
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
async def async_setup_entry(hass: HomeAssistant, entry: TuyaConfigEntry) -> bool:
|
||||||
"""Async setup hass config entry."""
|
"""Async setup hass config entry."""
|
||||||
if CONF_APP_TYPE in entry.data:
|
if CONF_APP_TYPE in entry.data:
|
||||||
raise ConfigEntryAuthFailed("Authentication failed. Please re-authenticate.")
|
raise ConfigEntryAuthFailed("Authentication failed. Please re-authenticate.")
|
||||||
|
@ -73,9 +75,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
# Connection is successful, store the manager & listener
|
# Connection is successful, store the manager & listener
|
||||||
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = HomeAssistantTuyaData(
|
entry.runtime_data = HomeAssistantTuyaData(manager=manager, listener=listener)
|
||||||
manager=manager, listener=listener
|
|
||||||
)
|
|
||||||
|
|
||||||
# Cleanup device registry
|
# Cleanup device registry
|
||||||
await cleanup_device_registry(hass, manager)
|
await cleanup_device_registry(hass, manager)
|
||||||
|
@ -108,18 +108,17 @@ async def cleanup_device_registry(hass: HomeAssistant, device_manager: Manager)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
async def async_unload_entry(hass: HomeAssistant, entry: TuyaConfigEntry) -> bool:
|
||||||
"""Unloading the Tuya platforms."""
|
"""Unloading the Tuya platforms."""
|
||||||
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
|
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
|
||||||
tuya: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
tuya = entry.runtime_data
|
||||||
if tuya.manager.mq is not None:
|
if tuya.manager.mq is not None:
|
||||||
tuya.manager.mq.stop()
|
tuya.manager.mq.stop()
|
||||||
tuya.manager.remove_device_listener(tuya.listener)
|
tuya.manager.remove_device_listener(tuya.listener)
|
||||||
del hass.data[DOMAIN][entry.entry_id]
|
|
||||||
return unload_ok
|
return unload_ok
|
||||||
|
|
||||||
|
|
||||||
async def async_remove_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
async def async_remove_entry(hass: HomeAssistant, entry: TuyaConfigEntry) -> None:
|
||||||
"""Remove a config entry.
|
"""Remove a config entry.
|
||||||
|
|
||||||
This will revoke the credentials from Tuya.
|
This will revoke the credentials from Tuya.
|
||||||
|
@ -184,7 +183,7 @@ class TokenListener(SharingTokenListener):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entry: ConfigEntry,
|
entry: TuyaConfigEntry,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Init TokenListener."""
|
"""Init TokenListener."""
|
||||||
self.hass = hass
|
self.hass = hass
|
||||||
|
|
|
@ -11,7 +11,6 @@ from homeassistant.components.alarm_control_panel import (
|
||||||
AlarmControlPanelEntityDescription,
|
AlarmControlPanelEntityDescription,
|
||||||
AlarmControlPanelEntityFeature,
|
AlarmControlPanelEntityFeature,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
STATE_ALARM_ARMED_AWAY,
|
STATE_ALARM_ARMED_AWAY,
|
||||||
STATE_ALARM_ARMED_HOME,
|
STATE_ALARM_ARMED_HOME,
|
||||||
|
@ -22,9 +21,9 @@ from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import TuyaEntity
|
from .base import TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType
|
from .const import TUYA_DISCOVERY_NEW, DPCode, DPType
|
||||||
|
|
||||||
|
|
||||||
class Mode(StrEnum):
|
class Mode(StrEnum):
|
||||||
|
@ -59,10 +58,10 @@ ALARM: dict[str, tuple[AlarmControlPanelEntityDescription, ...]] = {
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya alarm dynamically through Tuya discovery."""
|
"""Set up Tuya alarm dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -11,15 +11,14 @@ from homeassistant.components.binary_sensor import (
|
||||||
BinarySensorEntity,
|
BinarySensorEntity,
|
||||||
BinarySensorEntityDescription,
|
BinarySensorEntityDescription,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import EntityCategory
|
from homeassistant.const import EntityCategory
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import TuyaEntity
|
from .base import TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DPCode
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
|
@ -338,10 +337,10 @@ BINARY_SENSORS: dict[str, tuple[TuyaBinarySensorEntityDescription, ...]] = {
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya binary sensor dynamically through Tuya discovery."""
|
"""Set up Tuya binary sensor dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -5,15 +5,14 @@ from __future__ import annotations
|
||||||
from tuya_sharing import CustomerDevice, Manager
|
from tuya_sharing import CustomerDevice, Manager
|
||||||
|
|
||||||
from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
|
from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import EntityCategory
|
from homeassistant.const import EntityCategory
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import TuyaEntity
|
from .base import TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DPCode
|
||||||
|
|
||||||
# All descriptions can be found here.
|
# All descriptions can be found here.
|
||||||
# https://developer.tuya.com/en/docs/iot/standarddescription?id=K9i5ql6waswzq
|
# https://developer.tuya.com/en/docs/iot/standarddescription?id=K9i5ql6waswzq
|
||||||
|
@ -59,10 +58,10 @@ BUTTONS: dict[str, tuple[ButtonEntityDescription, ...]] = {
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya buttons dynamically through Tuya discovery."""
|
"""Set up Tuya buttons dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -6,14 +6,13 @@ from tuya_sharing import CustomerDevice, Manager
|
||||||
|
|
||||||
from homeassistant.components import ffmpeg
|
from homeassistant.components import ffmpeg
|
||||||
from homeassistant.components.camera import Camera as CameraEntity, CameraEntityFeature
|
from homeassistant.components.camera import Camera as CameraEntity, CameraEntityFeature
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import TuyaEntity
|
from .base import TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DPCode
|
||||||
|
|
||||||
# All descriptions can be found here:
|
# All descriptions can be found here:
|
||||||
# https://developer.tuya.com/en/docs/iot/standarddescription?id=K9i5ql6waswzq
|
# https://developer.tuya.com/en/docs/iot/standarddescription?id=K9i5ql6waswzq
|
||||||
|
@ -25,10 +24,10 @@ CAMERAS: tuple[str, ...] = (
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya cameras dynamically through Tuya discovery."""
|
"""Set up Tuya cameras dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -18,15 +18,14 @@ from homeassistant.components.climate import (
|
||||||
ClimateEntityFeature,
|
ClimateEntityFeature,
|
||||||
HVACMode,
|
HVACMode,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import UnitOfTemperature
|
from homeassistant.const import UnitOfTemperature
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import IntegerTypeData, TuyaEntity
|
from .base import IntegerTypeData, TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType
|
from .const import TUYA_DISCOVERY_NEW, DPCode, DPType
|
||||||
|
|
||||||
TUYA_HVAC_TO_HA = {
|
TUYA_HVAC_TO_HA = {
|
||||||
"auto": HVACMode.HEAT_COOL,
|
"auto": HVACMode.HEAT_COOL,
|
||||||
|
@ -82,10 +81,10 @@ CLIMATE_DESCRIPTIONS: dict[str, TuyaClimateEntityDescription] = {
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya climate dynamically through Tuya discovery."""
|
"""Set up Tuya climate dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -15,14 +15,13 @@ from homeassistant.components.cover import (
|
||||||
CoverEntityDescription,
|
CoverEntityDescription,
|
||||||
CoverEntityFeature,
|
CoverEntityFeature,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import IntegerTypeData, TuyaEntity
|
from .base import IntegerTypeData, TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType
|
from .const import TUYA_DISCOVERY_NEW, DPCode, DPType
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
|
@ -143,10 +142,10 @@ COVERS: dict[str, tuple[TuyaCoverEntityDescription, ...]] = {
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya cover dynamically through Tuya discovery."""
|
"""Set up Tuya cover dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -9,25 +9,24 @@ from typing import Any, cast
|
||||||
from tuya_sharing import CustomerDevice
|
from tuya_sharing import CustomerDevice
|
||||||
|
|
||||||
from homeassistant.components.diagnostics import REDACTED
|
from homeassistant.components.diagnostics import REDACTED
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
||||||
from homeassistant.helpers.device_registry import DeviceEntry
|
from homeassistant.helpers.device_registry import DeviceEntry
|
||||||
from homeassistant.util import dt as dt_util
|
from homeassistant.util import dt as dt_util
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .const import DOMAIN, DPCode
|
from .const import DOMAIN, DPCode
|
||||||
|
|
||||||
|
|
||||||
async def async_get_config_entry_diagnostics(
|
async def async_get_config_entry_diagnostics(
|
||||||
hass: HomeAssistant, entry: ConfigEntry
|
hass: HomeAssistant, entry: TuyaConfigEntry
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
"""Return diagnostics for a config entry."""
|
"""Return diagnostics for a config entry."""
|
||||||
return _async_get_diagnostics(hass, entry)
|
return _async_get_diagnostics(hass, entry)
|
||||||
|
|
||||||
|
|
||||||
async def async_get_device_diagnostics(
|
async def async_get_device_diagnostics(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, device: DeviceEntry
|
hass: HomeAssistant, entry: TuyaConfigEntry, device: DeviceEntry
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
"""Return diagnostics for a device entry."""
|
"""Return diagnostics for a device entry."""
|
||||||
return _async_get_diagnostics(hass, entry, device)
|
return _async_get_diagnostics(hass, entry, device)
|
||||||
|
@ -36,11 +35,11 @@ async def async_get_device_diagnostics(
|
||||||
@callback
|
@callback
|
||||||
def _async_get_diagnostics(
|
def _async_get_diagnostics(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entry: ConfigEntry,
|
entry: TuyaConfigEntry,
|
||||||
device: DeviceEntry | None = None,
|
device: DeviceEntry | None = None,
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
"""Return diagnostics for a config entry."""
|
"""Return diagnostics for a config entry."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
mqtt_connected = None
|
mqtt_connected = None
|
||||||
if hass_data.manager.mq.client:
|
if hass_data.manager.mq.client:
|
||||||
|
|
|
@ -12,7 +12,6 @@ from homeassistant.components.fan import (
|
||||||
FanEntity,
|
FanEntity,
|
||||||
FanEntityFeature,
|
FanEntityFeature,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
@ -21,9 +20,9 @@ from homeassistant.util.percentage import (
|
||||||
percentage_to_ordered_list_item,
|
percentage_to_ordered_list_item,
|
||||||
)
|
)
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import EnumTypeData, IntegerTypeData, TuyaEntity
|
from .base import EnumTypeData, IntegerTypeData, TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType
|
from .const import TUYA_DISCOVERY_NEW, DPCode, DPType
|
||||||
|
|
||||||
TUYA_SUPPORT_TYPE = {
|
TUYA_SUPPORT_TYPE = {
|
||||||
"fs", # Fan
|
"fs", # Fan
|
||||||
|
@ -35,10 +34,10 @@ TUYA_SUPPORT_TYPE = {
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up tuya fan dynamically through tuya discovery."""
|
"""Set up tuya fan dynamically through tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -12,14 +12,13 @@ from homeassistant.components.humidifier import (
|
||||||
HumidifierEntityDescription,
|
HumidifierEntityDescription,
|
||||||
HumidifierEntityFeature,
|
HumidifierEntityFeature,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import IntegerTypeData, TuyaEntity
|
from .base import IntegerTypeData, TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType
|
from .const import TUYA_DISCOVERY_NEW, DPCode, DPType
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
|
@ -56,10 +55,10 @@ HUMIDIFIERS: dict[str, TuyaHumidifierEntityDescription] = {
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya (de)humidifier dynamically through Tuya discovery."""
|
"""Set up Tuya (de)humidifier dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -17,15 +17,14 @@ from homeassistant.components.light import (
|
||||||
LightEntityDescription,
|
LightEntityDescription,
|
||||||
filter_supported_color_modes,
|
filter_supported_color_modes,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import EntityCategory
|
from homeassistant.const import EntityCategory
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import IntegerTypeData, TuyaEntity
|
from .base import IntegerTypeData, TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType, WorkMode
|
from .const import TUYA_DISCOVERY_NEW, DPCode, DPType, WorkMode
|
||||||
from .util import remap_value
|
from .util import remap_value
|
||||||
|
|
||||||
|
|
||||||
|
@ -409,10 +408,10 @@ class ColorData:
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up tuya light dynamically through tuya discovery."""
|
"""Set up tuya light dynamically through tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]):
|
def async_discover_device(device_ids: list[str]):
|
||||||
|
|
|
@ -9,13 +9,12 @@ from homeassistant.components.number import (
|
||||||
NumberEntity,
|
NumberEntity,
|
||||||
NumberEntityDescription,
|
NumberEntityDescription,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import PERCENTAGE, EntityCategory, UnitOfTime
|
from homeassistant.const import PERCENTAGE, EntityCategory, UnitOfTime
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import IntegerTypeData, TuyaEntity
|
from .base import IntegerTypeData, TuyaEntity
|
||||||
from .const import DEVICE_CLASS_UNITS, DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType
|
from .const import DEVICE_CLASS_UNITS, DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType
|
||||||
|
|
||||||
|
@ -282,10 +281,10 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = {
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya number dynamically through Tuya discovery."""
|
"""Set up Tuya number dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -7,20 +7,19 @@ from typing import Any
|
||||||
from tuya_sharing import Manager, SharingScene
|
from tuya_sharing import Manager, SharingScene
|
||||||
|
|
||||||
from homeassistant.components.scene import Scene
|
from homeassistant.components.scene import Scene
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.device_registry import DeviceInfo
|
from homeassistant.helpers.device_registry import DeviceInfo
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .const import DOMAIN
|
from .const import DOMAIN
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya scenes."""
|
"""Set up Tuya scenes."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
scenes = await hass.async_add_executor_job(hass_data.manager.query_scenes)
|
scenes = await hass.async_add_executor_job(hass_data.manager.query_scenes)
|
||||||
async_add_entities(TuyaSceneEntity(hass_data.manager, scene) for scene in scenes)
|
async_add_entities(TuyaSceneEntity(hass_data.manager, scene) for scene in scenes)
|
||||||
|
|
||||||
|
|
|
@ -5,15 +5,14 @@ from __future__ import annotations
|
||||||
from tuya_sharing import CustomerDevice, Manager
|
from tuya_sharing import CustomerDevice, Manager
|
||||||
|
|
||||||
from homeassistant.components.select import SelectEntity, SelectEntityDescription
|
from homeassistant.components.select import SelectEntity, SelectEntityDescription
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import EntityCategory
|
from homeassistant.const import EntityCategory
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import TuyaEntity
|
from .base import TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType
|
from .const import TUYA_DISCOVERY_NEW, DPCode, DPType
|
||||||
|
|
||||||
# All descriptions can be found here. Mostly the Enum data types in the
|
# All descriptions can be found here. Mostly the Enum data types in the
|
||||||
# default instructions set of each category end up being a select.
|
# default instructions set of each category end up being a select.
|
||||||
|
@ -320,10 +319,10 @@ SELECTS["pc"] = SELECTS["kg"]
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya select dynamically through Tuya discovery."""
|
"""Set up Tuya select dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -13,7 +13,6 @@ from homeassistant.components.sensor import (
|
||||||
SensorEntityDescription,
|
SensorEntityDescription,
|
||||||
SensorStateClass,
|
SensorStateClass,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
PERCENTAGE,
|
PERCENTAGE,
|
||||||
EntityCategory,
|
EntityCategory,
|
||||||
|
@ -27,7 +26,7 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.typing import StateType
|
from homeassistant.helpers.typing import StateType
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import ElectricityTypeData, EnumTypeData, IntegerTypeData, TuyaEntity
|
from .base import ElectricityTypeData, EnumTypeData, IntegerTypeData, TuyaEntity
|
||||||
from .const import (
|
from .const import (
|
||||||
DEVICE_CLASS_UNITS,
|
DEVICE_CLASS_UNITS,
|
||||||
|
@ -1075,10 +1074,10 @@ SENSORS["pc"] = SENSORS["kg"]
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya sensor dynamically through Tuya discovery."""
|
"""Set up Tuya sensor dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -11,14 +11,13 @@ from homeassistant.components.siren import (
|
||||||
SirenEntityDescription,
|
SirenEntityDescription,
|
||||||
SirenEntityFeature,
|
SirenEntityFeature,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import TuyaEntity
|
from .base import TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DPCode
|
||||||
|
|
||||||
# All descriptions can be found here:
|
# All descriptions can be found here:
|
||||||
# https://developer.tuya.com/en/docs/iot/standarddescription?id=K9i5ql6waswzq
|
# https://developer.tuya.com/en/docs/iot/standarddescription?id=K9i5ql6waswzq
|
||||||
|
@ -48,10 +47,10 @@ SIRENS: dict[str, tuple[SirenEntityDescription, ...]] = {
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya siren dynamically through Tuya discovery."""
|
"""Set up Tuya siren dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -11,15 +11,14 @@ from homeassistant.components.switch import (
|
||||||
SwitchEntity,
|
SwitchEntity,
|
||||||
SwitchEntityDescription,
|
SwitchEntityDescription,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import EntityCategory
|
from homeassistant.const import EntityCategory
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import TuyaEntity
|
from .base import TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode
|
from .const import TUYA_DISCOVERY_NEW, DPCode
|
||||||
|
|
||||||
# All descriptions can be found here. Mostly the Boolean data types in the
|
# All descriptions can be found here. Mostly the Boolean data types in the
|
||||||
# default instruction set of each category end up being a Switch.
|
# default instruction set of each category end up being a Switch.
|
||||||
|
@ -660,10 +659,10 @@ SWITCHES["cz"] = SWITCHES["pc"]
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up tuya sensors dynamically through tuya discovery."""
|
"""Set up tuya sensors dynamically through tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
|
@ -13,15 +13,14 @@ from homeassistant.components.vacuum import (
|
||||||
StateVacuumEntity,
|
StateVacuumEntity,
|
||||||
VacuumEntityFeature,
|
VacuumEntityFeature,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import STATE_IDLE, STATE_PAUSED
|
from homeassistant.const import STATE_IDLE, STATE_PAUSED
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from . import HomeAssistantTuyaData
|
from . import TuyaConfigEntry
|
||||||
from .base import EnumTypeData, IntegerTypeData, TuyaEntity
|
from .base import EnumTypeData, IntegerTypeData, TuyaEntity
|
||||||
from .const import DOMAIN, TUYA_DISCOVERY_NEW, DPCode, DPType
|
from .const import TUYA_DISCOVERY_NEW, DPCode, DPType
|
||||||
|
|
||||||
TUYA_MODE_RETURN_HOME = "chargego"
|
TUYA_MODE_RETURN_HOME = "chargego"
|
||||||
TUYA_STATUS_TO_HA = {
|
TUYA_STATUS_TO_HA = {
|
||||||
|
@ -52,10 +51,10 @@ TUYA_STATUS_TO_HA = {
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: TuyaConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up Tuya vacuum dynamically through Tuya discovery."""
|
"""Set up Tuya vacuum dynamically through Tuya discovery."""
|
||||||
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
|
hass_data = entry.runtime_data
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_discover_device(device_ids: list[str]) -> None:
|
def async_discover_device(device_ids: list[str]) -> None:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue