Merge branch 'main' into main

This commit is contained in:
Vadym
2024-08-22 18:23:28 +03:00
committed by GitHub
49 changed files with 17484 additions and 261 deletions
+20 -14
View File
@@ -1,11 +1,13 @@
import logging
from pathlib import Path
from typing import Any
import voluptuous as vol # type: ignore[import-untyped]
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_EMAIL, CONF_PASSWORD
from homeassistant.helpers import config_validation as cv, aiohttp_client
from homeassistant.helpers.typing import HomeAssistantType
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from pyhon import Hon
from .const import DOMAIN, PLATFORMS, MOBILE_ID, CONF_REFRESH_TOKEN
@@ -29,23 +31,27 @@ async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry) -> bool
session = aiohttp_client.async_get_clientsession(hass)
if (config_dir := hass.config.config_dir) is None:
raise ValueError("Missing Config Dir")
kwargs = {
"email": entry.data[CONF_EMAIL],
"password": entry.data[CONF_PASSWORD],
"mobile_id": MOBILE_ID,
"session": session,
"test_data_path": Path(config_dir),
}
if refresh_token := entry.data.get(CONF_REFRESH_TOKEN):
kwargs["refresh_token"] = refresh_token
hon = await Hon(**kwargs).create()
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.unique_id] = hon
hon = await Hon(
email=entry.data[CONF_EMAIL],
password=entry.data[CONF_PASSWORD],
mobile_id=MOBILE_ID,
session=session,
test_data_path=Path(config_dir),
refresh_token=entry.data.get(CONF_REFRESH_TOKEN, ""),
).create()
# Save the new refresh token
hass.config_entries.async_update_entry(
entry, data={**entry.data, CONF_REFRESH_TOKEN: hon.api.auth.refresh_token}
)
hass.data[DOMAIN]["coordinators"] = {}
coordinator: DataUpdateCoordinator[dict[str, Any]] = DataUpdateCoordinator(
hass, _LOGGER, name=DOMAIN
)
hon.subscribe_updates(coordinator.async_set_updated_data)
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.unique_id] = {"hon": hon, "coordinator": coordinator}
for platform in PLATFORMS:
hass.async_create_task(
@@ -55,7 +61,7 @@ async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry) -> bool
async def async_unload_entry(hass: HomeAssistantType, entry: ConfigEntry) -> bool:
refresh_token = hass.data[DOMAIN][entry.unique_id].api.auth.refresh_token
refresh_token = hass.data[DOMAIN][entry.unique_id]["hon"].api.auth.refresh_token
hass.config_entries.async_update_entry(
entry, data={**entry.data, CONF_REFRESH_TOKEN: refresh_token}
+29 -3
View File
@@ -12,7 +12,8 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import HomeAssistantType
from .const import DOMAIN
from .hon import HonEntity, unique_entities
from .entity import HonEntity
from .util import unique_entities
_LOGGER = logging.getLogger(__name__)
@@ -294,6 +295,32 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = {
translation_key="power-state",
),
),
"FRE": (
HonBinarySensorEntityDescription(
key="quickModeZ1",
name="Super Cool",
icon="mdi:snowflake",
device_class=BinarySensorDeviceClass.RUNNING,
on_value=1,
translation_key="super_cool",
),
HonBinarySensorEntityDescription(
key="quickModeZ2",
name="Super Freeze",
icon="mdi:snowflake-variant",
device_class=BinarySensorDeviceClass.RUNNING,
on_value=1,
translation_key="super_freeze",
),
HonBinarySensorEntityDescription(
key="doorStatusZ2",
name="Door Status",
icon="mdi:fridge",
device_class=BinarySensorDeviceClass.DOOR,
on_value=1,
translation_key="door_open",
),
),
}
BINARY_SENSORS["WD"] = unique_entities(BINARY_SENSORS["WM"], BINARY_SENSORS["TD"])
@@ -303,12 +330,11 @@ async def async_setup_entry(
hass: HomeAssistantType, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
entities = []
for device in hass.data[DOMAIN][entry.unique_id].appliances:
for device in hass.data[DOMAIN][entry.unique_id]["hon"].appliances:
for description in BINARY_SENSORS.get(device.appliance_type, []):
if device.get(description.key) is None:
continue
entity = HonBinarySensorEntity(hass, entry, device, description)
await entity.coordinator.async_config_entry_first_refresh()
entities.append(entity)
async_add_entities(entities)
+21 -15
View File
@@ -10,7 +10,7 @@ from homeassistant.helpers.typing import HomeAssistantType
from pyhon.appliance import HonAppliance
from .const import DOMAIN
from .hon import HonEntity
from .entity import HonEntity
from .typedefs import HonButtonType
_LOGGER = logging.getLogger(__name__)
@@ -38,6 +38,20 @@ BUTTONS: dict[str, tuple[ButtonEntityDescription, ...]] = {
translation_key="stop_program",
),
),
"FRE": (
ButtonEntityDescription(
key="startProgram",
name="Program Start",
icon="mdi:play",
translation_key="start_program",
),
ButtonEntityDescription(
key="stopProgram",
name="Program Stop",
icon="mdi:stop",
translation_key="stop_program",
),
),
}
@@ -45,16 +59,14 @@ async def async_setup_entry(
hass: HomeAssistantType, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
entities: list[HonButtonType] = []
for device in hass.data[DOMAIN][entry.unique_id].appliances:
for device in hass.data[DOMAIN][entry.unique_id]["hon"].appliances:
for description in BUTTONS.get(device.appliance_type, []):
if not device.commands.get(description.key):
continue
entity = HonButtonEntity(hass, entry, device, description)
await entity.coordinator.async_config_entry_first_refresh()
entities.append(entity)
entities.append(HonDeviceInfo(hass, entry, device))
entities.append(HonDataArchive(hass, entry, device))
await entities[-1].coordinator.async_config_entry_first_refresh()
async_add_entities(entities)
@@ -70,7 +82,7 @@ class HonButtonEntity(HonEntity, ButtonEntity):
return (
super().available
and int(self._device.get("remoteCtrValid", "1")) == 1
and self._device.get("attributes.lastConnEvent.category") != "DISCONNECTED"
and self._device.connection
)
@@ -84,19 +96,14 @@ class HonDeviceInfo(HonEntity, ButtonEntity):
self._attr_icon = "mdi:information"
self._attr_name = "Show Device Info"
self._attr_entity_category = EntityCategory.DIAGNOSTIC
if "beta" not in self.coordinator.info.hon_version:
self._attr_entity_registry_enabled_default = False
self._attr_entity_registry_enabled_default = False
async def async_press(self) -> None:
versions = "versions:\n"
versions += f" hon: {self.coordinator.info.hon_version}\n"
versions += f" pyhOn: {self.coordinator.info.pyhon_version}\n"
info = f"{self._device.diagnose}{versions}"
title = f"{self._device.nick_name} Device Info"
persistent_notification.create(
self._hass, f"````\n```\n{info}\n```\n````", title
self._hass, f"````\n```\n{self._device.diagnose}\n```\n````", title
)
_LOGGER.info(info.replace(" ", "\u200B "))
_LOGGER.info(self._device.diagnose.replace(" ", "\u200B "))
class HonDataArchive(HonEntity, ButtonEntity):
@@ -109,8 +116,7 @@ class HonDataArchive(HonEntity, ButtonEntity):
self._attr_icon = "mdi:archive-arrow-down"
self._attr_name = "Create Data Archive"
self._attr_entity_category = EntityCategory.DIAGNOSTIC
if "beta" not in self.coordinator.info.hon_version:
self._attr_entity_registry_enabled_default = False
self._attr_entity_registry_enabled_default = False
async def async_press(self) -> None:
if (config_dir := self._hass.config.config_dir) is None:
+31 -12
View File
@@ -26,7 +26,7 @@ from pyhon.appliance import HonAppliance
from pyhon.parameter.range import HonParameterRange
from .const import HON_HVAC_MODE, HON_FAN, DOMAIN, HON_HVAC_PROGRAM
from .hon import HonEntity
from .entity import HonEntity
_LOGGER = logging.getLogger(__name__)
@@ -108,7 +108,7 @@ async def async_setup_entry(
) -> None:
entities = []
entity: HonClimateEntity | HonACClimateEntity
for device in hass.data[DOMAIN][entry.unique_id].appliances:
for device in hass.data[DOMAIN][entry.unique_id]["hon"].appliances:
for description in CLIMATES.get(device.appliance_type, []):
if isinstance(description, HonACClimateEntityDescription):
if description.key not in list(device.commands):
@@ -120,13 +120,13 @@ async def async_setup_entry(
entity = HonClimateEntity(hass, entry, device, description)
else:
continue # type: ignore[unreachable]
await entity.coordinator.async_config_entry_first_refresh()
entities.append(entity)
async_add_entities(entities)
class HonACClimateEntity(HonEntity, ClimateEntity):
entity_description: HonACClimateEntityDescription
_enable_turn_on_off_backwards_compatibility = False
def __init__(
self,
@@ -153,7 +153,9 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
SWING_BOTH,
]
self._attr_supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE
ClimateEntityFeature.TURN_ON
| ClimateEntityFeature.TURN_OFF
| ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.FAN_MODE
| ClimateEntityFeature.SWING_MODE
| ClimateEntityFeature.PRESET_MODE
@@ -210,6 +212,14 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
await self._device.commands["settings"].send()
self.async_write_ha_state()
async def async_turn_on(self, **kwargs: Any) -> None:
await self._device.commands["startProgram"].send()
self._device.sync_command("startProgram", "settings")
async def async_turn_off(self, **kwargs: Any) -> None:
await self._device.commands["stopProgram"].send()
self._device.sync_command("stopProgram", "settings")
@property
def preset_mode(self) -> str | None:
"""Return the current Preset for this channel."""
@@ -222,7 +232,7 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
self._device.sync_command("startProgram", "settings")
self._set_temperature_bound()
self._handle_coordinator_update(update=False)
await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
self._attr_preset_mode = preset_mode
await self._device.commands["startProgram"].send()
self.async_write_ha_state()
@@ -285,6 +295,7 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
class HonClimateEntity(HonEntity, ClimateEntity):
entity_description: HonClimateEntityDescription
_enable_turn_on_off_backwards_compatibility = False
def __init__(
self,
@@ -295,11 +306,16 @@ class HonClimateEntity(HonEntity, ClimateEntity):
) -> None:
super().__init__(hass, entry, device, description)
self._attr_supported_features = (
ClimateEntityFeature.TURN_ON | ClimateEntityFeature.TARGET_TEMPERATURE
)
self._attr_temperature_unit = UnitOfTemperature.CELSIUS
self._set_temperature_bound()
self._attr_hvac_modes = [description.mode]
if "stopProgram" in device.commands:
self._attr_supported_features |= ClimateEntityFeature.TURN_OFF
self._attr_hvac_modes += [HVACMode.OFF]
modes = []
else:
@@ -317,13 +333,8 @@ class HonClimateEntity(HonEntity, ClimateEntity):
modes.append(mode)
if modes:
self._attr_supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.PRESET_MODE
)
self._attr_supported_features |= ClimateEntityFeature.PRESET_MODE
self._attr_preset_modes = modes
else:
self._attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
self._handle_coordinator_update(update=False)
@@ -362,6 +373,14 @@ class HonClimateEntity(HonEntity, ClimateEntity):
self._attr_hvac_mode = hvac_mode
self.async_write_ha_state()
async def async_turn_on(self) -> None:
"""Set the HVAC State to on."""
await self._device.commands["startProgram"].send()
async def async_turn_off(self) -> None:
"""Set the HVAC State to off."""
await self._device.commands["stopProgram"].send()
@property
def preset_mode(self) -> str | None:
"""Return the current Preset for this channel."""
@@ -389,7 +408,7 @@ class HonClimateEntity(HonEntity, ClimateEntity):
self._device.sync_command(command, "settings")
self._set_temperature_bound()
self._attr_preset_mode = preset_mode
await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
await self._device.commands[command].send()
self.async_write_ha_state()
+11 -1
View File
@@ -7,7 +7,6 @@ from homeassistant.components.climate import (
)
DOMAIN: str = "hon"
UPDATE_INTERVAL: int = 60
MOBILE_ID: str = "homassistant"
CONF_REFRESH_TOKEN = "refresh_token"
@@ -29,6 +28,7 @@ APPLIANCES: dict[str, str] = {
"AP": "Air Purifier",
"AS": "Air Scanner",
"DW": "Dish Washer",
"FRE": "Freezer",
"HO": "Hood",
"IH": "Induction Hob",
"MW": "Microwave",
@@ -70,16 +70,23 @@ HON_FAN: dict[int, str] = {
# These languages are official supported by hOn
LANGUAGES: list[str] = [
"ar", # Arabic
"bg", # Bulgarian
"cs", # Czech
"da", # Danish
"de", # German
"el", # Greek
"en", # English
"es", # Spanish
"fi", # Finnish
"fr", # French
"he", # Hebrew
"hr", # Croatian
"hu", # Hungarian
"it", # Italian
"nb", # Norwegian
"nl", # Dutch
"nr", # Southern Ndebele
"pl", # Polish
"pt", # Portuguese
"ro", # Romanian
@@ -87,7 +94,9 @@ LANGUAGES: list[str] = [
"sk", # Slovak
"sl", # Slovenian
"sr", # Serbian
"sv", # Swedish
"tr", # Turkish
"uk", # Ukrainian
"zh", # Chinese
]
@@ -100,6 +109,7 @@ WASHING_PR_PHASE: dict[int, str] = {
5: "rinse",
6: "rinse",
7: "drying",
8: "drying",
9: "steam",
10: "ready",
11: "spin",
+56
View File
@@ -0,0 +1,56 @@
from typing import Optional, Any
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import callback
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.typing import HomeAssistantType
from homeassistant.helpers.update_coordinator import (
CoordinatorEntity,
)
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from pyhon.appliance import HonAppliance
from .const import DOMAIN
from .typedefs import HonEntityDescription
class HonEntity(CoordinatorEntity[DataUpdateCoordinator[dict[str, Any]]]):
_attr_has_entity_name = True
_attr_should_poll = False
def __init__(
self,
hass: HomeAssistantType,
entry: ConfigEntry,
device: HonAppliance,
description: Optional[HonEntityDescription] = None,
) -> None:
self.coordinator = hass.data[DOMAIN][entry.unique_id]["coordinator"]
super().__init__(self.coordinator)
self._hon = hass.data[DOMAIN][entry.unique_id]["hon"]
self._hass = hass
self._device: HonAppliance = device
if description is not None:
self.entity_description = description
self._attr_unique_id = f"{self._device.unique_id}{description.key}"
else:
self._attr_unique_id = self._device.unique_id
self._handle_coordinator_update(update=False)
@property
def device_info(self) -> DeviceInfo:
return DeviceInfo(
identifiers={(DOMAIN, self._device.unique_id)},
manufacturer=self._device.get("brand", "").capitalize(),
name=self._device.nick_name,
model=self._device.model_name,
sw_version=self._device.get("fwVersion", ""),
hw_version=f"{self._device.appliance_type}{self._device.model_id}",
serial_number=self._device.get("serialNumber", ""),
)
@callback
def _handle_coordinator_update(self, update: bool = True) -> None:
if update:
self.async_write_ha_state()
+2 -3
View File
@@ -19,7 +19,7 @@ from pyhon.appliance import HonAppliance
from pyhon.parameter.range import HonParameterRange
from .const import DOMAIN
from .hon import HonEntity
from .entity import HonEntity
_LOGGER = logging.getLogger(__name__)
@@ -39,7 +39,7 @@ async def async_setup_entry(
hass: HomeAssistantType, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
entities = []
for device in hass.data[DOMAIN][entry.unique_id].appliances:
for device in hass.data[DOMAIN][entry.unique_id]["hon"].appliances:
for description in FANS.get(device.appliance_type, []):
if (
description.key not in device.available_settings
@@ -47,7 +47,6 @@ async def async_setup_entry(
):
continue
entity = HonFanEntity(hass, entry, device, description)
await entity.coordinator.async_config_entry_first_refresh()
entities.append(entity)
async_add_entities(entities)
-141
View File
@@ -1,141 +0,0 @@
import json
import logging
from contextlib import suppress
from datetime import timedelta
from pathlib import Path
from typing import Optional, Any
import pkg_resources # type: ignore[import, unused-ignore]
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import callback
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.typing import HomeAssistantType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from pyhon.appliance import HonAppliance
from .const import DOMAIN, UPDATE_INTERVAL
from .typedefs import HonEntityDescription, HonOptionEntityDescription, T
_LOGGER = logging.getLogger(__name__)
class HonInfo:
def __init__(self) -> None:
self._manifest: dict[str, Any] = self._get_manifest()
self._hon_version: str = self._manifest.get("version", "")
self._pyhon_version: str = pkg_resources.get_distribution("pyhon").version
@staticmethod
def _get_manifest() -> dict[str, Any]:
manifest = Path(__file__).parent / "manifest.json"
with open(manifest, "r", encoding="utf-8") as file:
result: dict[str, Any] = json.loads(file.read())
return result
@property
def manifest(self) -> dict[str, Any]:
return self._manifest
@property
def hon_version(self) -> str:
return self._hon_version
@property
def pyhon_version(self) -> str:
return self._pyhon_version
class HonCoordinator(DataUpdateCoordinator[None]):
def __init__(self, hass: HomeAssistantType, device: HonAppliance):
"""Initialize my coordinator."""
super().__init__(
hass,
_LOGGER,
name=device.unique_id,
update_interval=timedelta(seconds=UPDATE_INTERVAL),
)
self._device = device
self._info = HonInfo()
async def _async_update_data(self) -> None:
return await self._device.update()
@property
def info(self) -> HonInfo:
return self._info
class HonEntity(CoordinatorEntity[HonCoordinator]):
_attr_has_entity_name = True
def __init__(
self,
hass: HomeAssistantType,
entry: ConfigEntry,
device: HonAppliance,
description: Optional[HonEntityDescription] = None,
) -> None:
coordinator = get_coordinator(hass, device)
super().__init__(coordinator)
self._hon = hass.data[DOMAIN][entry.unique_id]
self._hass = hass
self._coordinator = coordinator
self._device: HonAppliance = device
if description is not None:
self.entity_description = description
self._attr_unique_id = f"{self._device.unique_id}{description.key}"
else:
self._attr_unique_id = self._device.unique_id
self._handle_coordinator_update(update=False)
@property
def device_info(self) -> DeviceInfo:
return DeviceInfo(
identifiers={(DOMAIN, self._device.unique_id)},
manufacturer=self._device.get("brand", ""),
name=self._device.nick_name,
model=self._device.model_name,
sw_version=self._device.get("fwVersion", ""),
)
@callback
def _handle_coordinator_update(self, update: bool = True) -> None:
if update:
self.async_write_ha_state()
def unique_entities(
base_entities: tuple[T, ...],
new_entities: tuple[T, ...],
) -> tuple[T, ...]:
result = list(base_entities)
existing_entities = [entity.key for entity in base_entities]
entity: HonEntityDescription
for entity in new_entities:
if entity.key not in existing_entities:
result.append(entity)
return tuple(result)
def get_coordinator(hass: HomeAssistantType, appliance: HonAppliance) -> HonCoordinator:
coordinators = hass.data[DOMAIN]["coordinators"]
if appliance.unique_id in coordinators:
coordinator: HonCoordinator = hass.data[DOMAIN]["coordinators"][
appliance.unique_id
]
else:
coordinator = HonCoordinator(hass, appliance)
hass.data[DOMAIN]["coordinators"][appliance.unique_id] = coordinator
return coordinator
def get_readable(
description: HonOptionEntityDescription, value: float | str
) -> float | str:
if description.option_list is not None:
with suppress(ValueError):
return description.option_list.get(int(value), value)
return value
+9 -3
View File
@@ -15,7 +15,7 @@ from pyhon.appliance import HonAppliance
from pyhon.parameter.range import HonParameterRange
from .const import DOMAIN
from .hon import HonEntity
from .entity import HonEntity
_LOGGER = logging.getLogger(__name__)
@@ -42,6 +42,13 @@ LIGHTS: dict[str, tuple[LightEntityDescription, ...]] = {
translation_key="light",
),
),
"DW": (
LightEntityDescription(
key="settings.lightStatus",
name="Light status",
translation_key="light",
),
),
}
@@ -49,7 +56,7 @@ async def async_setup_entry(
hass: HomeAssistantType, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
entities = []
for device in hass.data[DOMAIN][entry.unique_id].appliances:
for device in hass.data[DOMAIN][entry.unique_id]["hon"].appliances:
for description in LIGHTS.get(device.appliance_type, []):
if (
description.key not in device.available_settings
@@ -57,7 +64,6 @@ async def async_setup_entry(
):
continue
entity = HonLightEntity(hass, entry, device, description)
await entity.coordinator.async_config_entry_first_refresh()
entities.append(entity)
async_add_entities(entities)
+5 -6
View File
@@ -10,7 +10,7 @@ from pyhon.parameter.base import HonParameter
from pyhon.parameter.range import HonParameterRange
from .const import DOMAIN
from .hon import HonEntity
from .entity import HonEntity
_LOGGER = logging.getLogger(__name__)
@@ -29,7 +29,7 @@ async def async_setup_entry(
hass: HomeAssistantType, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
entities = []
for device in hass.data[DOMAIN][entry.unique_id].appliances:
for device in hass.data[DOMAIN][entry.unique_id]["hon"].appliances:
for description in LOCKS.get(device.appliance_type, []):
if (
f"settings.{description.key}" not in device.available_settings
@@ -37,7 +37,6 @@ async def async_setup_entry(
):
continue
entity = HonLockEntity(hass, entry, device, description)
await entity.coordinator.async_config_entry_first_refresh()
entities.append(entity)
async_add_entities(entities)
@@ -59,7 +58,7 @@ class HonLockEntity(HonEntity, LockEntity):
setting.value = setting.max if isinstance(setting, HonParameterRange) else 1
self.async_write_ha_state()
await self._device.commands["settings"].send()
await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
async def async_unlock(self, **kwargs: Any) -> None:
"""Unlock method."""
@@ -69,7 +68,7 @@ class HonLockEntity(HonEntity, LockEntity):
setting.value = setting.min if isinstance(setting, HonParameterRange) else 0
self.async_write_ha_state()
await self._device.commands["settings"].send()
await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
@property
def available(self) -> bool:
@@ -77,7 +76,7 @@ class HonLockEntity(HonEntity, LockEntity):
return (
super().available
and int(self._device.get("remoteCtrValid", 1)) == 1
and self._device.get("attributes.lastConnEvent.category") != "DISCONNECTED"
and self._device.connection
)
@callback
+3 -3
View File
@@ -6,10 +6,10 @@
],
"config_flow": true,
"documentation": "https://github.com/Andre0512/hon/",
"iot_class": "cloud_polling",
"iot_class": "cloud_push",
"issue_tracker": "https://github.com/Andre0512/hon/issues",
"requirements": [
"pyhOn==0.16.0"
"pyhOn==0.17.5"
],
"version": "0.13.0"
"version": "0.14.0"
}
+13 -7
View File
@@ -17,7 +17,8 @@ from pyhon.appliance import HonAppliance
from pyhon.parameter.range import HonParameterRange
from .const import DOMAIN
from .hon import HonEntity, unique_entities
from .entity import HonEntity
from .util import unique_entities
@dataclass(frozen=True)
@@ -140,6 +141,12 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = {
icon="mdi:water",
translation_key="water_hard",
),
HonNumberEntityDescription(
key="settings.waterHard",
name="Water hard",
icon="mdi:water",
translation_key="water_hard",
),
),
"AC": (
HonNumberEntityDescription(
@@ -216,7 +223,7 @@ async def async_setup_entry(
) -> None:
entities = []
entity: HonNumberEntity | HonConfigNumberEntity
for device in hass.data[DOMAIN][entry.unique_id].appliances:
for device in hass.data[DOMAIN][entry.unique_id]["hon"].appliances:
for description in NUMBERS.get(device.appliance_type, []):
if description.key not in device.available_settings:
continue
@@ -226,7 +233,6 @@ async def async_setup_entry(
entity = HonConfigNumberEntity(hass, entry, device, description)
else:
continue
await entity.coordinator.async_config_entry_first_refresh()
entities.append(entity)
async_add_entities(entities)
@@ -267,7 +273,7 @@ class HonNumberEntity(HonEntity, NumberEntity):
await self._device.commands[command].send()
if command != "settings":
self._device.sync_command(command, "settings")
await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
@callback
def _handle_coordinator_update(self, update: bool = True) -> None:
@@ -286,7 +292,7 @@ class HonNumberEntity(HonEntity, NumberEntity):
return (
super().available
and int(self._device.get("remoteCtrValid", 1)) == 1
and self._device.get("attributes.lastConnEvent.category") != "DISCONNECTED"
and self._device.connection
)
@@ -310,7 +316,7 @@ class HonConfigNumberEntity(HonEntity, NumberEntity):
@property
def native_value(self) -> float | None:
if value := self._device.settings[self.entity_description.key].value:
if (value := self._device.settings[self.entity_description.key].value) != "":
return float(value)
return None
@@ -318,7 +324,7 @@ class HonConfigNumberEntity(HonEntity, NumberEntity):
setting = self._device.settings[self.entity_description.key]
if isinstance(setting, HonParameterRange):
setting.value = value
await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
@property
def available(self) -> bool:
+26 -6
View File
@@ -13,7 +13,8 @@ from homeassistant.helpers.typing import HomeAssistantType
from . import const
from .const import DOMAIN
from .hon import HonEntity, unique_entities, get_readable
from .entity import HonEntity
from .util import unique_entities, get_readable
_LOGGER = logging.getLogger(__name__)
@@ -201,6 +202,26 @@ SELECTS: dict[str, tuple[SelectEntityDescription, ...]] = {
icon="mdi:information",
option_list=const.WH_MACH_MODE,
translation_key="mach_modes_wh",
),
),
"FRE": (
HonConfigSelectEntityDescription(
key="startProgram.program",
name="Program",
translation_key="programs_ref",
),
HonConfigSelectEntityDescription(
key="startProgram.zone",
name="Zone",
icon="mdi:radiobox-marked",
translation_key="ref_zones",
),
HonSelectEntityDescription(
key="settings.tempSelZ3",
name="Temperature",
icon="mdi:thermometer",
unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_key="temperature",
),
),
}
@@ -213,7 +234,7 @@ async def async_setup_entry(
) -> None:
entities = []
entity: HonSelectEntity | HonConfigSelectEntity
for device in hass.data[DOMAIN][entry.unique_id].appliances:
for device in hass.data[DOMAIN][entry.unique_id]["hon"].appliances:
for description in SELECTS.get(device.appliance_type, []):
if description.key not in device.available_settings:
continue
@@ -223,7 +244,6 @@ async def async_setup_entry(
entity = HonConfigSelectEntity(hass, entry, device, description)
else:
continue
await entity.coordinator.async_config_entry_first_refresh()
entities.append(entity)
async_add_entities(entities)
@@ -262,7 +282,7 @@ class HonConfigSelectEntity(HonEntity, SelectEntity):
async def async_select_option(self, option: str) -> None:
setting = self._device.settings[self.entity_description.key]
setting.value = self._option_to_number(option, setting.values)
await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
@callback
def _handle_coordinator_update(self, update: bool = True) -> None:
@@ -320,7 +340,7 @@ class HonSelectEntity(HonEntity, SelectEntity):
await self._device.commands[command].send()
if command != "settings":
self._device.sync_command(command, "settings")
await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
@property
def available(self) -> bool:
@@ -328,7 +348,7 @@ class HonSelectEntity(HonEntity, SelectEntity):
return (
super().available
and int(self._device.get("remoteCtrValid", 1)) == 1
and self._device.get("attributes.lastConnEvent.category") != "DISCONNECTED"
and self._device.connection
)
@callback
+27 -5
View File
@@ -18,7 +18,6 @@ from homeassistant.const import (
UnitOfEnergy,
UnitOfVolume,
UnitOfMass,
UnitOfPower,
UnitOfTime,
UnitOfTemperature,
)
@@ -29,7 +28,8 @@ from homeassistant.helpers.typing import HomeAssistantType
from . import const
from .const import DOMAIN
from .hon import HonEntity, unique_entities, get_readable
from .entity import HonEntity
from .util import unique_entities, get_readable
_LOGGER = logging.getLogger(__name__)
@@ -83,7 +83,7 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
name="Current Electricity Used",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.POWER,
native_unit_of_measurement=UnitOfPower.KILO_WATT,
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
icon="mdi:lightning-bolt",
translation_key="energy_current",
),
@@ -837,6 +837,29 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
name="Heating Status",
),
),
"FRE": (
HonSensorEntityDescription(
key="tempEnv",
name="Room Temperature",
icon="mdi:home-thermometer-outline",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_key="room_temperature",
),
HonSensorEntityDescription(
key="tempSelZ3",
name="Temperature",
icon="mdi:snowflake-thermometer",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_key="temperature",
),
HonSensorEntityDescription(
key="errors", name="Error", icon="mdi:math-log", translation_key="errors"
),
),
}
SENSORS["WD"] = unique_entities(SENSORS["WM"], SENSORS["TD"])
@@ -846,7 +869,7 @@ async def async_setup_entry(
) -> None:
entities = []
entity: HonSensorEntity | HonConfigSensorEntity
for device in hass.data[DOMAIN][entry.unique_id].appliances:
for device in hass.data[DOMAIN][entry.unique_id]["hon"].appliances:
for description in SENSORS.get(device.appliance_type, []):
if isinstance(description, HonSensorEntityDescription):
if device.get(description.key) is None:
@@ -858,7 +881,6 @@ async def async_setup_entry(
entity = HonConfigSensorEntity(hass, entry, device, description)
else:
continue
await entity.coordinator.async_config_entry_first_refresh()
entities.append(entity)
async_add_entities(entities)
+32 -10
View File
@@ -13,7 +13,8 @@ from pyhon.parameter.base import HonParameter
from pyhon.parameter.range import HonParameterRange
from .const import DOMAIN
from .hon import HonEntity, unique_entities
from .entity import HonEntity
from .util import unique_entities
_LOGGER = logging.getLogger(__name__)
@@ -273,6 +274,12 @@ SWITCHES: dict[str, tuple[SwitchEntityDescription, ...]] = {
icon="mdi:volume-off",
translation_key="buzzer",
),
HonConfigSwitchEntityDescription(
key="startProgram.tabStatus",
name="Tab Status",
icon="mdi:silverware-clean",
# translation_key="buzzer",
),
),
"AC": (
HonSwitchEntityDescription(
@@ -393,6 +400,20 @@ SWITCHES: dict[str, tuple[SwitchEntityDescription, ...]] = {
to_sync=True,
),
),
"FRE": (
HonSwitchEntityDescription(
key="quickModeZ2",
name="Super Freeze",
icon="mdi:snowflake-variant",
translation_key="super_freeze",
),
HonSwitchEntityDescription(
key="quickModeZ1",
name="Super Cool",
icon="mdi:snowflake",
translation_key="super_cool",
),
),
}
SWITCHES["WD"] = unique_entities(SWITCHES["WD"], SWITCHES["WM"])
@@ -404,7 +425,7 @@ async def async_setup_entry(
) -> None:
entities = []
entity: HonConfigSwitchEntity | HonControlSwitchEntity | HonSwitchEntity
for device in hass.data[DOMAIN][entry.unique_id].appliances:
for device in hass.data[DOMAIN][entry.unique_id]["hon"].appliances:
for description in SWITCHES.get(device.appliance_type, []):
if isinstance(description, HonConfigSwitchEntityDescription):
if description.key not in device.available_settings:
@@ -424,7 +445,6 @@ async def async_setup_entry(
entity = HonSwitchEntity(hass, entry, device, description)
else:
continue
await entity.coordinator.async_config_entry_first_refresh()
entities.append(entity)
async_add_entities(entities)
@@ -445,7 +465,7 @@ class HonSwitchEntity(HonEntity, SwitchEntity):
setting.value = setting.max if isinstance(setting, HonParameterRange) else 1
self.async_write_ha_state()
await self._device.commands["settings"].send()
await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
async def async_turn_off(self, **kwargs: Any) -> None:
setting = self._device.settings[f"settings.{self.entity_description.key}"]
@@ -454,7 +474,7 @@ class HonSwitchEntity(HonEntity, SwitchEntity):
setting.value = setting.min if isinstance(setting, HonParameterRange) else 0
self.async_write_ha_state()
await self._device.commands["settings"].send()
await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
@property
def available(self) -> bool:
@@ -490,7 +510,8 @@ class HonControlSwitchEntity(HonEntity, SwitchEntity):
async def async_turn_on(self, **kwargs: Any) -> None:
desc = self.entity_description
self._device.sync_command(desc.turn_on_key, "settings", desc.to_sync)
await self.coordinator.async_refresh()
//await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
command = self._device.commands[desc.turn_on_key]
await command.send(desc.only_mandatory_parameters)
self._device.attributes[desc.key] = desc.on_value
@@ -499,7 +520,8 @@ class HonControlSwitchEntity(HonEntity, SwitchEntity):
async def async_turn_off(self, **kwargs: Any) -> None:
desc = self.entity_description
self._device.sync_command(desc.turn_off_key, "settings", desc.to_sync)
await self.coordinator.async_refresh()
//await self.coordinator.async_refresh()
self.coordinator.async_set_updated_data({})
command = self._device.commands[desc.turn_off_key]
await command.send(desc.only_mandatory_parameters)
self._device.attributes[desc.key] = desc.off_value
@@ -511,7 +533,7 @@ class HonControlSwitchEntity(HonEntity, SwitchEntity):
return (
super().available
and int(self._device.get("remoteCtrValid", 1)) == 1
and self._device.get("attributes.lastConnEvent.category") != "DISCONNECTED"
and self._device.connection
)
@property
@@ -545,16 +567,16 @@ class HonConfigSwitchEntity(HonEntity, SwitchEntity):
if type(setting) == HonParameter:
return
setting.value = setting.max if isinstance(setting, HonParameterRange) else "1"
self.coordinator.async_set_updated_data({})
self.async_write_ha_state()
await self.coordinator.async_refresh()
async def async_turn_off(self, **kwargs: Any) -> None:
setting = self._device.settings[self.entity_description.key]
if type(setting) == HonParameter:
return
setting.value = setting.min if isinstance(setting, HonParameterRange) else "0"
self.coordinator.async_set_updated_data({})
self.async_write_ha_state()
await self.coordinator.async_refresh()
@callback
def _handle_coordinator_update(self, update: bool = True) -> None:
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "speciální",
@@ -346,6 +347,7 @@
"hqd_delicate": "Jemné",
"hqd_diaper": "Pleny",
"hqd_duvet": "Prošívaná bunda ze syntetických vláken",
"hqd_eco": "Eco",
"hqd_feather": "Prošívaná bunda z přírodních vláken",
"hqd_hot_wind_timing": "Dětská zavinovačka",
"hqd_hygienic": "Dezinfekce",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Není vybrán žádný režim",
"quick_cool": "QUICK COOL",
"quick_set": "Quick Set",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "speciální",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Jemné",
"hqd_diaper": "Pleny",
"hqd_duvet": "Prošívaná bunda ze syntetických vláken",
"hqd_eco": "Eco",
"hqd_feather": "Prošívaná bunda z přírodních vláken",
"hqd_hot_wind_timing": "Dětská zavinovačka",
"hqd_hygienic": "Dezinfekce",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Není vybrán žádný režim",
"quick_cool": "QUICK COOL",
"quick_set": "Quick Set",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
File diff suppressed because it is too large Load Diff
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "spezial",
@@ -346,6 +347,7 @@
"hqd_delicate": "Feinwäsche",
"hqd_diaper": "Windeln",
"hqd_duvet": "Steppjacke aus synthetischer Faser",
"hqd_eco": "Eco",
"hqd_feather": "Steppjacke aus Naturfaser",
"hqd_hot_wind_timing": "Superschon",
"hqd_hygienic": "Desinfektion",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Kein Modus ausgewählt",
"quick_cool": "SCHNELLKÜHLUNG",
"quick_set": "Schnelle Einstellung",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "spezial",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Feinwäsche",
"hqd_diaper": "Windeln",
"hqd_duvet": "Steppjacke aus synthetischer Faser",
"hqd_eco": "Eco",
"hqd_feather": "Steppjacke aus Naturfaser",
"hqd_hot_wind_timing": "Superschon",
"hqd_hygienic": "Desinfektion",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Kein Modus ausgewählt",
"quick_cool": "SCHNELLKÜHLUNG",
"quick_set": "Schnelle Einstellung",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "σπεσιαλ",
@@ -346,6 +347,7 @@
"hqd_delicate": "Ευαίσθητα",
"hqd_diaper": "Πάνες",
"hqd_duvet": "Καπιτονέ τζάκετ (μπουφάν) από συνθετικές ίνες",
"hqd_eco": "Οικολογικό",
"hqd_feather": "Καπιτονέ τζάκετ (μπουφάν) από φυσικές ίνες",
"hqd_hot_wind_timing": "Ζεστή Αγκαλιά",
"hqd_hygienic": "Υγιεινή",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Δεν επιλέχθηκε λειτουργία",
"quick_cool": "ΓΡΗΓΟΡΗ ΨΥΞΗ",
"quick_set": "Γρήγορη ρύθμιση",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "σπεσιαλ",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Ευαίσθητα",
"hqd_diaper": "Πάνες",
"hqd_duvet": "Καπιτονέ τζάκετ (μπουφάν) από συνθετικές ίνες",
"hqd_eco": "Οικολογικό",
"hqd_feather": "Καπιτονέ τζάκετ (μπουφάν) από φυσικές ίνες",
"hqd_hot_wind_timing": "Ζεστή Αγκαλιά",
"hqd_hygienic": "Υγιεινή",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Δεν επιλέχθηκε λειτουργία",
"quick_cool": "ΓΡΗΓΟΡΗ ΨΥΞΗ",
"quick_set": "Γρήγορη ρύθμιση",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
+24 -5
View File
@@ -84,10 +84,14 @@
"iot_auto": "Auto",
"iot_cool": "Cool",
"iot_dry": "Dry",
"iot_dry_summer": "Dry summer",
"iot_dry_winter": "Dry winter",
"iot_fan": "Fan",
"iot_heat": "Heat",
"iot_humid_summer": "Humid summer",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Self-purify",
"iot_rainy_winter": "Rainy winter",
"iot_self_clean": "Self-clean",
"iot_self_clean_56": "Steri-Clean 56°C",
"iot_simple_start": "Start now",
@@ -96,7 +100,8 @@
"iot_uv_and_cool": "UV + Cold",
"iot_uv_and_dry": "UV + Dehumidifier",
"iot_uv_and_fan": "UV + Fan",
"iot_uv_and_heat": "UV + Heat"
"iot_uv_and_heat": "UV + Heat",
"iot_warm_spring": "Warm spring"
},
"name": "Program"
},
@@ -362,7 +367,7 @@
"hqd_delicate": "Delicates",
"hqd_diaper": "Diapers",
"hqd_duvet": "Synthetic fibre quilted jacket",
"hqd_eco": "HQD ECO",
"hqd_eco": "Eco",
"hqd_feather": "Natural fibre quilted jacket",
"hqd_hot_wind_timing": "Warm Embrace",
"hqd_hygienic": "Hygienising",
@@ -505,6 +510,7 @@
"delicati_59_steam": "Delicate 59' + Steam",
"drain_spin": "Drain + Spin",
"easy_iron": "Easy Iron 39'",
"easy_iron_pro": "Easy Iron 39'",
"eco_40_60_new_energy_label": "Eco 40-60",
"extra_care": "Extra Care",
"fitness": "Fitness Care",
@@ -771,6 +777,7 @@
"sport_plus_29": "Sport Plus 29\"",
"sport_plus_39": "Sport Plus 39'",
"steam_39": "Steam 39'",
"steam_care": "Steam Care Pro",
"steam_care_pro": "Steam Care Pro",
"steam_care_pro_cotton": "Steam Care Pro - Cottons",
"steam_care_pro_delicates": "Steam Care Pro - Delicates 16'",
@@ -1010,10 +1017,14 @@
"iot_auto": "Auto",
"iot_cool": "Cool",
"iot_dry": "Dry",
"iot_dry_summer": "Dry summer",
"iot_dry_winter": "Dry winter",
"iot_fan": "Fan",
"iot_heat": "Heat",
"iot_humid_summer": "Humid summer",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Self-purify",
"iot_rainy_winter": "Rainy winter",
"iot_self_clean": "Self-clean",
"iot_self_clean_56": "Steri-Clean 56°C",
"iot_simple_start": "Start now",
@@ -1022,7 +1033,8 @@
"iot_uv_and_cool": "UV + Cold",
"iot_uv_and_dry": "UV + Dehumidifier",
"iot_uv_and_fan": "UV + Fan",
"iot_uv_and_heat": "UV + Heat"
"iot_uv_and_heat": "UV + Heat",
"iot_warm_spring": "Warm spring"
},
"name": "Program"
},
@@ -1288,7 +1300,7 @@
"hqd_delicate": "Delicates",
"hqd_diaper": "Diapers",
"hqd_duvet": "Synthetic fibre quilted jacket",
"hqd_eco": "HQD ECO",
"hqd_eco": "Eco",
"hqd_feather": "Natural fibre quilted jacket",
"hqd_hot_wind_timing": "Warm Embrace",
"hqd_hygienic": "Hygienising",
@@ -1431,6 +1443,7 @@
"delicati_59_steam": "Delicate 59' + Steam",
"drain_spin": "Drain + Spin",
"easy_iron": "Easy Iron 39'",
"easy_iron_pro": "Easy Iron 39'",
"eco_40_60_new_energy_label": "Eco 40-60",
"extra_care": "Extra Care",
"fitness": "Fitness Care",
@@ -1697,6 +1710,7 @@
"sport_plus_29": "Sport Plus 29\"",
"sport_plus_39": "Sport Plus 39'",
"steam_39": "Steam 39'",
"steam_care": "Steam Care Pro",
"steam_care_pro": "Steam Care Pro",
"steam_care_pro_cotton": "Steam Care Pro - Cottons",
"steam_care_pro_delicates": "Steam Care Pro - Delicates 16'",
@@ -2145,10 +2159,14 @@
"iot_auto": "Auto",
"iot_cool": "Cool",
"iot_dry": "Dry",
"iot_dry_summer": "Dry summer",
"iot_dry_winter": "Dry winter",
"iot_fan": "Fan",
"iot_heat": "Heat",
"iot_humid_summer": "Humid summer",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Self-purify",
"iot_rainy_winter": "Rainy winter",
"iot_self_clean": "Self-clean",
"iot_self_clean_56": "Steri-Clean 56°C",
"iot_simple_start": "Start now",
@@ -2157,7 +2175,8 @@
"iot_uv_and_cool": "UV + Cold",
"iot_uv_and_dry": "UV + Dehumidifier",
"iot_uv_and_fan": "UV + Fan",
"iot_uv_and_heat": "UV + Heat"
"iot_uv_and_heat": "UV + Heat",
"iot_warm_spring": "Warm spring"
}
}
}
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "Especial",
@@ -346,6 +347,7 @@
"hqd_delicate": "Ropa delicada",
"hqd_diaper": "Pañales",
"hqd_duvet": "Chaqueta acolchada de fibras sintéticas",
"hqd_eco": "Eco",
"hqd_feather": "Chaqueta acolchada de fibras naturales",
"hqd_hot_wind_timing": "Abrazo cálido",
"hqd_hygienic": "Higienizar",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "No se ha seleccionado ningún modo",
"quick_cool": "QUICK COOL",
"quick_set": "Ajuste rápido",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "Especial",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Ropa delicada",
"hqd_diaper": "Pañales",
"hqd_duvet": "Chaqueta acolchada de fibras sintéticas",
"hqd_eco": "Eco",
"hqd_feather": "Chaqueta acolchada de fibras naturales",
"hqd_hot_wind_timing": "Abrazo cálido",
"hqd_hygienic": "Higienizar",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "No se ha seleccionado ningún modo",
"quick_cool": "QUICK COOL",
"quick_set": "Ajuste rápido",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
File diff suppressed because it is too large Load Diff
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "spécial",
@@ -346,6 +347,7 @@
"hqd_delicate": "Délicats",
"hqd_diaper": "Couches",
"hqd_duvet": "Veste matelassée en fibre synthétique",
"hqd_eco": "Éco",
"hqd_feather": "Veste matelassée en fibre naturelle",
"hqd_hot_wind_timing": "Chauffage délicat",
"hqd_hygienic": "Hygiénisation",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Aucun mode sélectionné",
"quick_cool": "QUICK COOL",
"quick_set": "Configuration rapide",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "spécial",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Délicats",
"hqd_diaper": "Couches",
"hqd_duvet": "Veste matelassée en fibre synthétique",
"hqd_eco": "Éco",
"hqd_feather": "Veste matelassée en fibre naturelle",
"hqd_hot_wind_timing": "Chauffage délicat",
"hqd_hygienic": "Hygiénisation",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Aucun mode sélectionné",
"quick_cool": "QUICK COOL",
"quick_set": "Configuration rapide",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "Posebno",
@@ -346,6 +347,7 @@
"hqd_delicate": "Osjetljivo rublje",
"hqd_diaper": "Pelene",
"hqd_duvet": "Prošivena jakna od sintetičkih vlakana",
"hqd_eco": "Ekološki",
"hqd_feather": "Prošivena jakna od prirodnih vlakana",
"hqd_hot_wind_timing": "Zagrijavanje",
"hqd_hygienic": "Higijenizacija",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nije odabran način rada",
"quick_cool": "BRZO HLAĐENJE",
"quick_set": "Brzo postavljanje",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "Posebno",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Osjetljivo rublje",
"hqd_diaper": "Pelene",
"hqd_duvet": "Prošivena jakna od sintetičkih vlakana",
"hqd_eco": "Ekološki",
"hqd_feather": "Prošivena jakna od prirodnih vlakana",
"hqd_hot_wind_timing": "Zagrijavanje",
"hqd_hygienic": "Higijenizacija",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nije odabran način rada",
"quick_cool": "BRZO HLAĐENJE",
"quick_set": "Brzo postavljanje",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
+736
View File
@@ -0,0 +1,736 @@
{
"entity": {
"sensor": {
"washing_modes": {
"state": {
"ready": "Ready",
"running": "Program running",
"pause": "Pause",
"scheduled": "Scheduled",
"error": "Error",
"test": "Test",
"ending": "Stopping cycle…"
}
},
"mach_modes_ac": {
"state": {
"auto": "Auto",
"cool": "Cool",
"dry": "Dry",
"heat": "Heat",
"fan": "Fan"
}
},
"program_phases_wm": {
"state": {
"ready": "Ready",
"spin": "Spin",
"rinse": "Rinse",
"drying": "Drying",
"steam": "Steam",
"weighting": "Weighing",
"scheduled": "Scheduled",
"tumbling": "Keep Fresh",
"refresh": "Refresh",
"heating": "Heating",
"washing": "Wash"
},
"name": "Phase"
},
"program_phases_td": {
"state": {
"ready": "Ready",
"heat_stroke": "Drying",
"drying": "Drying",
"cooldown": "Cooldown",
"unknown": "unknown",
"tumbling": "Keep Fresh"
},
"name": "Phase"
},
"program_phases_dw": {
"state": {
"ready": "Ready",
"prewash": "Prewash",
"washing": "Wash",
"rinse": "Rinse",
"drying": "Drying",
"hot_rinse": "Hot rinse"
},
"name": "Phase"
},
"dry_levels": {
"state": {
"no_dry": "No drying",
"iron_dry": "Iron dry",
"no_dry_iron": "Hang",
"cupboard_dry": "Cupboard",
"extra_dry": "Extra dry",
"ready_to_wear": "Ready to wear"
},
"name": "Drying level"
},
"dirt_level": {
"state": {
"little": "Little",
"normal": "Normal",
"very": "Very",
"unknown": "unknown"
},
"name": "Dirt level"
},
"steam_level": {
"state": {
"no_steam": "No steam",
"cotton": "Cotton",
"delicate": "Delicate",
"synthetic": "Synthetic"
},
"name": "Steam Level"
},
"humidity_level": {
"state": {
"low": "Low",
"mid": "Medium",
"high": "High"
},
"name": "Humidity level"
},
"programs_ac": {
"state": {},
"name": "Program"
},
"programs_dw": {
"state": {},
"name": "Program"
},
"programs_ih": {
"state": {},
"name": "Program"
},
"programs_ov": {
"state": {},
"name": "Program"
},
"programs_td": {
"state": {},
"name": "Program"
},
"programs_wm": {
"state": {},
"name": "Program"
},
"programs_ref": {
"state": {},
"name": "Program"
},
"programs_wc": {
"state": {}
},
"dry_time": {
"name": "Drying time"
},
"power": {
"name": "Power level"
},
"remaining_time": {
"name": "Time remaining"
},
"temperature": {
"name": "Temperature"
},
"water_efficiency": {
"name": "Water efficiency"
},
"water_saving": {
"name": "Water savings"
},
"duration": {
"name": "Duration"
},
"target_temperature": {
"name": "Target temperature"
},
"spin_speed": {
"name": "Spin"
},
"delay_time": {
"name": "Delay Start"
},
"suggested_load": {
"name": "Load capacity"
},
"energy_label": {
"name": "Energy efficiency"
},
"det_dust": {
"name": "Powder detergent"
},
"det_liquid": {
"name": "Liquid detergent"
},
"errors": {
"name": "Error"
},
"programs": {
"name": "Current program"
},
"room_temperature": {
"name": "Room temperature"
},
"humidity": {
"name": "Humidity"
},
"cycles_total": {
"name": "Cycles Total"
},
"energy_total": {
"name": "Energy Consumption Total"
},
"water_total": {
"name": "Water efficiency Total"
},
"energy_current": {
"name": "Energy Consumption Current"
},
"water_current": {
"name": "Water efficiency Current"
},
"freezer_temp": {
"name": "Freezer temperature"
},
"fridge_temp": {
"name": "Fridge temperature"
},
"voc": {
"name": "Gas (VOC)"
},
"filter_cleaning": {
"name": "Filter cleaning"
},
"filter_life": {
"name": "Filter life"
},
"air_quality": {
"name": "Air Quality"
},
"fan_speed": {
"name": "Fan speed"
}
},
"select": {
"dry_levels": {
"state": {
"no_dry": "No drying",
"iron_dry": "Iron dry",
"no_dry_iron": "Hang",
"cupboard_dry": "Cupboard",
"extra_dry": "Extra dry",
"ready_to_wear": "Ready to wear"
},
"name": "Drying level"
},
"eco_pilot": {
"state": {
"touch_off": "Off",
"avoid_touch": "Avoid touch",
"follow_touch": "Follow",
"unknown": "unknown"
},
"name": "Eco pilot"
},
"fan_mode": {
"state": {
"high": "High",
"mid": "Medium",
"low": "Low",
"auto": "Auto"
}
},
"ref_zones": {
"state": {
"fridge": "Fridge",
"freezer": "Freezer",
"vtroom1": "My Zone",
"fridge_freezer": "Fridge & Freezer"
},
"name": "Zone"
},
"steam_level": {
"state": {
"no_steam": "No steam",
"cotton": "Cotton",
"delicate": "Delicate",
"synthetic": "Synthetic"
},
"name": "Steam Level"
},
"mode": {
"state": {
"standby": "Standby",
"sleep": "Sleep",
"auto": "Auto",
"allergens": "Allergens",
"max": "Max"
},
"name": "Mode"
},
"diffuser": {
"state": {
"off": "Off",
"soft": "Soft",
"mid": "Mid",
"h_biotics": "H-BIOTICS",
"custom": "Customise"
},
"name": "Diffuser"
},
"dirt_level": {
"state": {
"little": "Little",
"normal": "Normal",
"very": "Very",
"unknown": "unknown"
},
"name": "Dirt level"
},
"stain_type": {
"state": {
"baby_food": "Baby food",
"bean_paste": "Bean soup",
"blood": "Blood",
"blueberry": "Blueberry",
"blue_ink": "Blue ink",
"butter": "Butter",
"chili_oil": "Chili oil",
"chili_sauce": "Chili sauce",
"chocolate": "Chocolate",
"coffe": "Coffee",
"coffee": "Coffee",
"color_pencil": "Pencil",
"cooking_oil": "Cooking oil",
"curry": "Curry",
"deodorant": "Deodorant",
"egg": "Egg",
"fruit": "Fruit",
"glue": "Glue",
"grass": "Grass",
"ice_cream": "Ice cream",
"ketchup": "Ketchup",
"lip_gloss": "Lip gloss",
"mayonnaise": "Mayonnaise",
"mech_grease": "Mech grease",
"milk": "Milk",
"milk_tea": "Milk tea",
"oil": "Oil",
"oil_pastel": "Oil pastel",
"perfume": "Perfume",
"rust": "Rust",
"shoe_cream": "Shoe cream",
"soil": "Soil",
"soy_sauce": "Soy sauce",
"sweat": "Sweat",
"tea": "Tea",
"wine": "Wine",
"unknown": "unknown"
},
"name": "Stain level"
},
"fan_horizontal": {
"state": {
"position_1": "Fixed - Position 1",
"position_2": "Fixed - Position 2",
"position_3": "Fixed - Position 3",
"position_4": "Fixed - Position 4",
"position_5": "Fixed - Position 5",
"swing": "Swing"
},
"name": "Fan direction Horizontal"
},
"fan_vertical": {
"state": {
"position_1": "Fixed - Position 1",
"position_2": "Fixed - Position 2",
"position_3": "Fixed - Position 3",
"position_4": "Fixed - Position 4",
"position_5": "Fixed - Position 5",
"swing": "Swing"
},
"name": "Fan direction Vertical"
},
"programs_ac": {
"state": {},
"name": "Program"
},
"programs_dw": {
"state": {},
"name": "Program"
},
"programs_ih": {
"state": {},
"name": "Program"
},
"programs_ov": {
"state": {},
"name": "Program"
},
"programs_td": {
"state": {},
"name": "Program"
},
"programs_wm": {
"state": {},
"name": "Program"
},
"programs_ref": {
"state": {},
"name": "Program"
},
"dry_time": {
"name": "Drying time"
},
"spin_speed": {
"name": "Spin"
},
"temperature": {
"name": "Temperature"
},
"remaining_time": {
"name": "Time remaining"
}
},
"switch": {
"anti_crease": {
"name": "Anticrease"
},
"add_dish": {
"name": "Add dishes"
},
"eco_express": {
"name": "Eco"
},
"extra_dry": {
"name": "Extra dry"
},
"half_load": {
"name": "Half load"
},
"open_door": {
"name": "Open door"
},
"three_in_one": {
"name": "3 in 1"
},
"preheat": {
"name": "Preheat"
},
"dish_washer": {
"name": "Dish washer"
},
"tumble_dryer": {
"name": "Tumble dryer"
},
"washing_machine": {
"name": "Washing machine"
},
"washer_dryer": {
"name": "Washer dryer"
},
"oven": {
"name": "Oven"
},
"prewash": {
"name": "Pre-wash"
},
"pause": {
"name": "Pause"
},
"keep_fresh": {
"name": "Keep Fresh"
},
"delay_time": {
"name": "Delay Start"
},
"rapid_mode": {
"name": "Rapid mode"
},
"eco_mode": {
"name": "ECO mode"
},
"10_degree_heating": {
"name": "10°C Heating function"
},
"self_clean": {
"name": "Self-clean"
},
"self_clean_56": {
"name": "Steri-Clean 56°C"
},
"silent_mode": {
"name": "Silent mode"
},
"night_mode": {
"name": "Night mode"
},
"extra_rinse_1": {
"name": "+1 Rinse"
},
"extra_rinse_2": {
"name": "+2 Rinses"
},
"extra_rinse_3": {
"name": "+3 Rinses"
},
"acqua_plus": {
"name": "Acquaplus"
},
"auto_dose_softener": {
"name": "Autodose Softener"
},
"auto_dose_detergent": {
"name": "Autodose Detergent"
},
"good_night": {
"name": "Good Night"
},
"auto_set": {
"name": "Auto-Set"
},
"super_cool": {
"name": "Super Cool"
},
"super_freeze": {
"name": "Super Freeze"
},
"refrigerator": {
"name": "Refrigerator"
},
"touch_tone": {
"name": "Touch tone volume"
},
"hygiene": {
"name": "Hygiene plus"
},
"hood": {
"name": "Hood"
}
},
"binary_sensor": {
"door_lock": {
"name": "Door lock"
},
"extra_rinse_1": {
"name": "+1 Rinse"
},
"extra_rinse_2": {
"name": "+2 Rinses"
},
"extra_rinse_3": {
"name": "+3 Rinses"
},
"good_night": {
"name": "Good Night"
},
"anti_crease": {
"name": "Anticrease"
},
"acqua_plus": {
"name": "Acquaplus"
},
"spin_speed": {
"name": "Spin"
},
"still_hot": {
"name": "Still hot"
},
"pan_status": {
"name": "Pan"
},
"remote_control": {
"name": "Remote control"
},
"rinse_aid": {
"name": "Rinse Aid level"
},
"salt_level": {
"name": "Salt level"
},
"door_open": {
"name": "Door open"
},
"connection": {
"name": "Appliance connection"
},
"child_lock": {
"name": "Child Lock"
},
"on": {
"name": "On"
},
"prewash": {
"name": "Pre-wash"
},
"buzzer": {
"name": "Cycle end chime"
},
"holiday_mode": {
"name": "Holiday Mode"
},
"auto_set": {
"name": "Auto-Set"
},
"super_cool": {
"name": "Super Cool"
},
"super_freeze": {
"name": "Super Freeze"
},
"freezer_door": {
"name": "Door open Freezer"
},
"fridge_door": {
"name": "Door open Fridge"
},
"filter_replacement": {
"name": "Filter replacement"
}
},
"button": {
"induction_hob": {
"name": "Induction Hob"
},
"start_program": {
"name": "Program Start"
},
"stop_program": {
"name": "Program Stop"
}
},
"number": {
"power_management": {
"name": "Power management"
},
"temperature": {
"name": "Temperature"
},
"delay_time": {
"name": "Delay Start"
},
"water_hard": {
"name": "Water hardness"
},
"program_duration": {
"name": "Program duration"
},
"target_temperature": {
"name": "Target temperature"
},
"rinse_iterations": {
"name": "Number of rinses"
},
"wash_time": {
"name": "Washing intensity"
},
"dry_time": {
"name": "Drying time"
},
"freezer_temp_sel": {
"name": "Target temperature Freezer"
},
"fridge_temp_sel": {
"name": "Target temperature Fridge"
},
"my_zone_temp_sel": {
"name": "Target temperature My Zone"
},
"pollen_level": {
"name": "Pollen level"
},
"aroma_time_on": {
"name": "Diffuser (ON)"
},
"aroma_time_off": {
"name": "Diffuser (OFF)"
}
},
"climate": {
"air_conditioner": {
"name": "Air conditioner",
"state_attributes": {
"preset_mode": {
"name": "Programs",
"state": {}
}
}
},
"fridge": {
"name": "Fridge",
"state_attributes": {
"preset_mode": {
"name": "Fridge modes",
"state": {
"auto_set": "Auto-Set",
"super_cool": "Super Cool",
"holiday": "Holiday",
"no_mode": "No mode selected"
}
}
}
},
"freezer": {
"name": "Freezer",
"state_attributes": {
"preset_mode": {
"name": "Freezer modes",
"state": {
"auto_set": "Auto-Set",
"super_freeze": "Super Freeze",
"no_mode": "No mode selected"
}
}
}
},
"oven": {
"name": "Oven",
"state_attributes": {
"preset_mode": {
"name": "Programs",
"state": {}
}
}
},
"my_zone": {
"name": "My Zone"
},
"wine": {
"state_attributes": {
"preset_mode": {
"name": "Wine Cellar",
"state": {}
}
}
}
},
"fan": {
"air_extraction": {
"name": "Air extraction"
}
},
"light": {
"light": {
"name": "Light"
}
}
},
"config": {
"step": {
"user": {
"description": "Do the login",
"data": {
"email": "Email",
"password": "Password"
}
}
}
}
}
@@ -348,6 +348,7 @@
"hqd_delicate": "Delicati",
"hqd_diaper": "Pannolini",
"hqd_duvet": "Piumini sintetici",
"hqd_eco": "Eco",
"hqd_feather": "Piumini fibra naturale",
"hqd_hot_wind_timing": "Caldo abbraccio",
"hqd_hygienic": "Igienizzante",
@@ -488,6 +489,7 @@
"delicati_59_steam": "Delicati 59' + Vapore",
"drain_spin": "Scarico e Centrifuga",
"easy_iron": "Stiro Facile 39'",
"easy_iron_pro": "Stiro Facile 39'",
"eco_40_60_new_energy_label": "Eco 40-60",
"extra_care": "Extra Care",
"fitness": "Fitness Care",
@@ -752,6 +754,7 @@
"sport_plus_29": "Sport Plus 29\"",
"sport_plus_39": "Sport Plus 39'",
"steam_39": "Vapore 39'",
"steam_care": "Steam Care Pro",
"steam_care_pro": "Steam Care Pro",
"steam_care_pro_cotton": "Steam Care Pro - Cotone",
"steam_care_pro_delicates": "Steam Care Pro - Delicati 16'",
@@ -789,6 +792,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nessuna modalità selezionata",
"quick_cool": "QUICK COOL",
"quick_set": "Quick Set",
"sea_food": "Ready to cook meal",
"smart_mode": "SMART MODE",
"smart_mode_title": "Smart Mode",
@@ -1261,6 +1265,7 @@
"hqd_delicate": "Delicati",
"hqd_diaper": "Pannolini",
"hqd_duvet": "Piumini sintetici",
"hqd_eco": "Eco",
"hqd_feather": "Piumini fibra naturale",
"hqd_hot_wind_timing": "Caldo abbraccio",
"hqd_hygienic": "Igienizzante",
@@ -1401,6 +1406,7 @@
"delicati_59_steam": "Delicati 59' + Vapore",
"drain_spin": "Scarico e Centrifuga",
"easy_iron": "Stiro Facile 39'",
"easy_iron_pro": "Stiro Facile 39'",
"eco_40_60_new_energy_label": "Eco 40-60",
"extra_care": "Extra Care",
"fitness": "Fitness Care",
@@ -1665,6 +1671,7 @@
"sport_plus_29": "Sport Plus 29\"",
"sport_plus_39": "Sport Plus 39'",
"steam_39": "Vapore 39'",
"steam_care": "Steam Care Pro",
"steam_care_pro": "Steam Care Pro",
"steam_care_pro_cotton": "Steam Care Pro - Cotone",
"steam_care_pro_delicates": "Steam Care Pro - Delicati 16'",
@@ -1702,6 +1709,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nessuna modalità selezionata",
"quick_cool": "QUICK COOL",
"quick_set": "Quick Set",
"sea_food": "Ready to cook meal",
"smart_mode": "SMART MODE",
"smart_mode_title": "Smart Mode",
File diff suppressed because it is too large Load Diff
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "speciaal",
@@ -346,6 +347,7 @@
"hqd_delicate": "Fijne was",
"hqd_diaper": "Luiers",
"hqd_duvet": "Gewatteerde jas met synthetische vezels",
"hqd_eco": "Eco",
"hqd_feather": "Gewatteerde jas met natuurlijke vezels",
"hqd_hot_wind_timing": "Warme Knuffel",
"hqd_hygienic": "Ontsmetten",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Geen modus geselecteerd",
"quick_cool": "QUICK KOEL",
"quick_set": "Snel instellen",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "speciaal",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Fijne was",
"hqd_diaper": "Luiers",
"hqd_duvet": "Gewatteerde jas met synthetische vezels",
"hqd_eco": "Eco",
"hqd_feather": "Gewatteerde jas met natuurlijke vezels",
"hqd_hot_wind_timing": "Warme Knuffel",
"hqd_hygienic": "Ontsmetten",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Geen modus geselecteerd",
"quick_cool": "QUICK KOEL",
"quick_set": "Snel instellen",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
+854
View File
@@ -0,0 +1,854 @@
{
"entity": {
"sensor": {
"washing_modes": {
"state": {
"ready": "Ready",
"running": "Program running",
"pause": "Pause",
"scheduled": "Scheduled",
"error": "Error",
"test": "Test",
"ending": "Stopping cycle…"
}
},
"mach_modes_ac": {
"state": {
"auto": "Auto",
"cool": "Cool",
"dry": "Dry",
"heat": "Heat",
"fan": "Fan"
}
},
"program_phases_wm": {
"state": {
"ready": "Ready",
"spin": "Spin",
"rinse": "Rinse",
"drying": "Drying",
"steam": "Steam",
"weighting": "Weighing",
"scheduled": "Scheduled",
"tumbling": "Keep Fresh",
"refresh": "Refresh",
"heating": "Heating",
"washing": "Wash"
},
"name": "Phase"
},
"program_phases_td": {
"state": {
"ready": "Ready",
"heat_stroke": "Drying",
"drying": "Drying",
"cooldown": "Cooldown",
"unknown": "unknown",
"tumbling": "Keep Fresh"
},
"name": "Phase"
},
"program_phases_dw": {
"state": {
"ready": "Ready",
"prewash": "Prewash",
"washing": "Wash",
"rinse": "Rinse",
"drying": "Drying",
"hot_rinse": "Hot rinse"
},
"name": "Phase"
},
"dry_levels": {
"state": {
"no_dry": "No drying",
"iron_dry": "Iron dry",
"no_dry_iron": "Hang",
"cupboard_dry": "Cupboard",
"extra_dry": "Extra dry",
"ready_to_wear": "Ready to wear"
},
"name": "Drying level"
},
"dirt_level": {
"state": {
"little": "Little",
"normal": "Normal",
"very": "Very",
"unknown": "unknown"
},
"name": "Dirt level"
},
"steam_level": {
"state": {
"no_steam": "No steam",
"cotton": "Cotton",
"delicate": "Delicate",
"synthetic": "Synthetic"
},
"name": "Steam Level"
},
"humidity_level": {
"state": {
"low": "Low",
"mid": "Medium",
"high": "High"
},
"name": "Humidity level"
},
"programs_ac": {
"state": {},
"name": "Program"
},
"programs_dw": {
"state": {
"eco_voice": "Eco",
"gentle_wash": "Gentle wash",
"iot_dreft_quick_cycle": "Dreft Quick",
"iot_fairy_quick_cycle": "Fairy Quick",
"iot_jar_quick_cycle": "Jar Quick",
"iot_yes_quick_cycle": "Yes Quick",
"smart_ai": "Smart AI",
"smart_ai_soil": "Smart AI",
"zone_wash": "Flex Zone Wash"
},
"name": "Program"
},
"programs_ih": {
"state": {
"iot_special_grilled_vegetables": "Grilled vegetables"
},
"name": "Program"
},
"programs_ov": {
"state": {
"iot_h20_clean": "h2O clean",
"pizza": "Pizza",
"tailor_bake": "Tailor bake"
},
"name": "Program"
},
"programs_td": {
"state": {
"genius": "Genius",
"hqd_bath_towel": "Bath towel",
"hqd_bulky": "Bulky",
"hqd_cold_wind_30": "Cold wind 30 minutes",
"hqd_cold_wind_timing": "Cold wind",
"hqd_luxury": "Luxury",
"hqd_night_dry": "Night dry",
"hqd_refresh": "Refresh",
"hqd_warm_up": "Warm up",
"hqd_working_suit": "Working suit"
},
"name": "Program"
},
"programs_wm": {
"state": {
"allergy_care_pro": "Allergy Care Pro",
"iot_allergy_care_pro": "Allergy Care Pro",
"iot_wash_ariel_clean_cycle": "Ariel Ultimate Clean",
"iot_wash_ariel_cold_cycle": "Ariel Cold Clean",
"iot_wash_ariel_fresh_cycle": "Ariel Fresh Clean",
"iot_wash_dash_clean_cycle": "Dash Ultimate Clean",
"iot_wash_dash_cold_cycle": "Dash Cold Clean",
"iot_wash_dash_fresh_cycle": "Dash Fresh Clean",
"night_wash": "Night Wash",
"silent_night": "Night Wash",
"steam_care_pro": "Steam Care Pro",
"steam_care_pro_cotton": "Steam Care Pro",
"tailored_resistant_cotton": "Tailored Resistant Cotton",
"tailored_synthetic_and_coloured": "Tailored Synthetic Colored",
"ultra_fresh": "Ultra Fresh"
},
"name": "Program"
},
"programs_ref": {
"state": {
"chiller": "Quick cool",
"cold_drinks": "Soft chill",
"cool_drink": "Cool Drink",
"fruits": "Fruit",
"fruit_and_veg": "Fruit & Veg",
"keep_fresh": "0°C Fresh",
"milk_and_eggs": "Milk & Eggs",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
"tea": "Cold Drinks",
"vegetables": "Vegetable",
"zero_fresh": "0°C Fresh"
},
"name": "Program"
},
"programs_wc": {
"state": {}
},
"dry_time": {
"name": "Drying time"
},
"power": {
"name": "Power level"
},
"remaining_time": {
"name": "Time remaining"
},
"temperature": {
"name": "Temperature"
},
"water_efficiency": {
"name": "Water efficiency"
},
"water_saving": {
"name": "Water savings"
},
"duration": {
"name": "Duration"
},
"target_temperature": {
"name": "Target temperature"
},
"spin_speed": {
"name": "Spin"
},
"delay_time": {
"name": "Delay Start"
},
"suggested_load": {
"name": "Load capacity"
},
"energy_label": {
"name": "Energy efficiency"
},
"det_dust": {
"name": "Powder detergent"
},
"det_liquid": {
"name": "Liquid detergent"
},
"errors": {
"name": "Error"
},
"programs": {
"name": "Current program"
},
"room_temperature": {
"name": "Room temperature"
},
"humidity": {
"name": "Humidity"
},
"cycles_total": {
"name": "Cycles Total"
},
"energy_total": {
"name": "Energy Consumption Total"
},
"water_total": {
"name": "Water efficiency Total"
},
"energy_current": {
"name": "Energy Consumption Current"
},
"water_current": {
"name": "Water efficiency Current"
},
"freezer_temp": {
"name": "Freezer temperature"
},
"fridge_temp": {
"name": "Fridge temperature"
},
"voc": {
"name": "Gas (VOC)"
},
"filter_cleaning": {
"name": "Filter cleaning"
},
"filter_life": {
"name": "Filter life"
},
"air_quality": {
"name": "Air Quality"
},
"fan_speed": {
"name": "Fan speed"
}
},
"select": {
"dry_levels": {
"state": {
"no_dry": "No drying",
"iron_dry": "Iron dry",
"no_dry_iron": "Hang",
"cupboard_dry": "Cupboard",
"extra_dry": "Extra dry",
"ready_to_wear": "Ready to wear"
},
"name": "Drying level"
},
"eco_pilot": {
"state": {
"touch_off": "Off",
"avoid_touch": "Avoid touch",
"follow_touch": "Follow",
"unknown": "unknown"
},
"name": "Eco pilot"
},
"fan_mode": {
"state": {
"high": "High",
"mid": "Medium",
"low": "Low",
"auto": "Auto"
}
},
"ref_zones": {
"state": {
"fridge": "Fridge",
"freezer": "Freezer",
"vtroom1": "My Zone",
"fridge_freezer": "Fridge & Freezer"
},
"name": "Zone"
},
"steam_level": {
"state": {
"no_steam": "No steam",
"cotton": "Cotton",
"delicate": "Delicate",
"synthetic": "Synthetic"
},
"name": "Steam Level"
},
"mode": {
"state": {
"standby": "Standby",
"sleep": "Sleep",
"auto": "Auto",
"allergens": "Allergens",
"max": "Max"
},
"name": "Mode"
},
"diffuser": {
"state": {
"off": "Off",
"soft": "Soft",
"mid": "Mid",
"h_biotics": "H-BIOTICS",
"custom": "Customise"
},
"name": "Diffuser"
},
"dirt_level": {
"state": {
"little": "Little",
"normal": "Normal",
"very": "Very",
"unknown": "unknown"
},
"name": "Dirt level"
},
"stain_type": {
"state": {
"baby_food": "Baby food",
"bean_paste": "Bean soup",
"blood": "Blood",
"blueberry": "Blueberry",
"blue_ink": "Blue ink",
"butter": "Butter",
"chili_oil": "Chili oil",
"chili_sauce": "Chili sauce",
"chocolate": "Chocolate",
"coffe": "Coffee",
"coffee": "Coffee",
"color_pencil": "Pencil",
"cooking_oil": "Cooking oil",
"curry": "Curry",
"deodorant": "Deodorant",
"egg": "Egg",
"fruit": "Fruit",
"glue": "Glue",
"grass": "Grass",
"ice_cream": "Ice cream",
"ketchup": "Ketchup",
"lip_gloss": "Lip gloss",
"mayonnaise": "Mayonnaise",
"mech_grease": "Mech grease",
"milk": "Milk",
"milk_tea": "Milk tea",
"oil": "Oil",
"oil_pastel": "Oil pastel",
"perfume": "Perfume",
"rust": "Rust",
"shoe_cream": "Shoe cream",
"soil": "Soil",
"soy_sauce": "Soy sauce",
"sweat": "Sweat",
"tea": "Tea",
"wine": "Wine",
"unknown": "unknown"
},
"name": "Stain level"
},
"fan_horizontal": {
"state": {
"position_1": "Fixed - Position 1",
"position_2": "Fixed - Position 2",
"position_3": "Fixed - Position 3",
"position_4": "Fixed - Position 4",
"position_5": "Fixed - Position 5",
"swing": "Swing"
},
"name": "Fan direction Horizontal"
},
"fan_vertical": {
"state": {
"position_1": "Fixed - Position 1",
"position_2": "Fixed - Position 2",
"position_3": "Fixed - Position 3",
"position_4": "Fixed - Position 4",
"position_5": "Fixed - Position 5",
"swing": "Swing"
},
"name": "Fan direction Vertical"
},
"programs_ac": {
"state": {},
"name": "Program"
},
"programs_dw": {
"state": {
"eco_voice": "Eco",
"gentle_wash": "Gentle wash",
"iot_dreft_quick_cycle": "Dreft Quick",
"iot_fairy_quick_cycle": "Fairy Quick",
"iot_jar_quick_cycle": "Jar Quick",
"iot_yes_quick_cycle": "Yes Quick",
"smart_ai": "Smart AI",
"smart_ai_soil": "Smart AI",
"zone_wash": "Flex Zone Wash"
},
"name": "Program"
},
"programs_ih": {
"state": {
"iot_special_grilled_vegetables": "Grilled vegetables"
},
"name": "Program"
},
"programs_ov": {
"state": {
"iot_h20_clean": "h2O clean",
"pizza": "Pizza",
"tailor_bake": "Tailor bake"
},
"name": "Program"
},
"programs_td": {
"state": {
"genius": "Genius",
"hqd_bath_towel": "Bath towel",
"hqd_bulky": "Bulky",
"hqd_cold_wind_30": "Cold wind 30 minutes",
"hqd_cold_wind_timing": "Cold wind",
"hqd_luxury": "Luxury",
"hqd_night_dry": "Night dry",
"hqd_refresh": "Refresh",
"hqd_warm_up": "Warm up",
"hqd_working_suit": "Working suit"
},
"name": "Program"
},
"programs_wm": {
"state": {
"allergy_care_pro": "Allergy Care Pro",
"iot_allergy_care_pro": "Allergy Care Pro",
"iot_wash_ariel_clean_cycle": "Ariel Ultimate Clean",
"iot_wash_ariel_cold_cycle": "Ariel Cold Clean",
"iot_wash_ariel_fresh_cycle": "Ariel Fresh Clean",
"iot_wash_dash_clean_cycle": "Dash Ultimate Clean",
"iot_wash_dash_cold_cycle": "Dash Cold Clean",
"iot_wash_dash_fresh_cycle": "Dash Fresh Clean",
"night_wash": "Night Wash",
"silent_night": "Night Wash",
"steam_care_pro": "Steam Care Pro",
"steam_care_pro_cotton": "Steam Care Pro",
"tailored_resistant_cotton": "Tailored Resistant Cotton",
"tailored_synthetic_and_coloured": "Tailored Synthetic Colored",
"ultra_fresh": "Ultra Fresh"
},
"name": "Program"
},
"programs_ref": {
"state": {
"chiller": "Quick cool",
"cold_drinks": "Soft chill",
"cool_drink": "Cool Drink",
"fruits": "Fruit",
"fruit_and_veg": "Fruit & Veg",
"keep_fresh": "0°C Fresh",
"milk_and_eggs": "Milk & Eggs",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
"tea": "Cold Drinks",
"vegetables": "Vegetable",
"zero_fresh": "0°C Fresh"
},
"name": "Program"
},
"dry_time": {
"name": "Drying time"
},
"spin_speed": {
"name": "Spin"
},
"temperature": {
"name": "Temperature"
},
"remaining_time": {
"name": "Time remaining"
}
},
"switch": {
"anti_crease": {
"name": "Anticrease"
},
"add_dish": {
"name": "Add dishes"
},
"eco_express": {
"name": "Eco"
},
"extra_dry": {
"name": "Extra dry"
},
"half_load": {
"name": "Half load"
},
"open_door": {
"name": "Open door"
},
"three_in_one": {
"name": "3 in 1"
},
"preheat": {
"name": "Preheat"
},
"dish_washer": {
"name": "Dish Washer"
},
"tumble_dryer": {
"name": "Tumble dryer"
},
"washing_machine": {
"name": "Washing machine"
},
"washer_dryer": {
"name": "Washer dryer"
},
"oven": {
"name": "Oven"
},
"prewash": {
"name": "Pre-wash"
},
"pause": {
"name": "Pause"
},
"keep_fresh": {
"name": "Keep Fresh"
},
"delay_time": {
"name": "Delay Start"
},
"rapid_mode": {
"name": "Rapid mode"
},
"eco_mode": {
"name": "ECO mode"
},
"10_degree_heating": {
"name": "10°C Heating function"
},
"self_clean": {
"name": "Self-clean"
},
"self_clean_56": {
"name": "Steri-Clean 56°C"
},
"silent_mode": {
"name": "Silent mode"
},
"night_mode": {
"name": "Night mode"
},
"extra_rinse_1": {
"name": "+1 Rinse"
},
"extra_rinse_2": {
"name": "+2 Rinses"
},
"extra_rinse_3": {
"name": "+3 Rinses"
},
"acqua_plus": {
"name": "Acquaplus"
},
"auto_dose_softener": {
"name": "Autodose Softener"
},
"auto_dose_detergent": {
"name": "Autodose Detergent"
},
"good_night": {
"name": "Good Night"
},
"auto_set": {
"name": "Auto-Set"
},
"super_cool": {
"name": "Super Cool"
},
"super_freeze": {
"name": "Super Freeze"
},
"refrigerator": {
"name": "Refrigerator"
},
"touch_tone": {
"name": "Touch tone volume"
},
"hygiene": {
"name": "Hygiene plus"
},
"hood": {
"name": "Hood"
}
},
"binary_sensor": {
"door_lock": {
"name": "Door lock"
},
"extra_rinse_1": {
"name": "+1 Rinse"
},
"extra_rinse_2": {
"name": "+2 Rinses"
},
"extra_rinse_3": {
"name": "+3 Rinses"
},
"good_night": {
"name": "Good Night"
},
"anti_crease": {
"name": "Anticrease"
},
"acqua_plus": {
"name": "Acquaplus"
},
"spin_speed": {
"name": "Spin"
},
"still_hot": {
"name": "Still hot"
},
"pan_status": {
"name": "Pan"
},
"remote_control": {
"name": "Remote control"
},
"rinse_aid": {
"name": "Rinse Aid level"
},
"salt_level": {
"name": "Salt level"
},
"door_open": {
"name": "Door open"
},
"connection": {
"name": "Appliance connection"
},
"child_lock": {
"name": "Child Lock"
},
"on": {
"name": "On"
},
"prewash": {
"name": "Pre-wash"
},
"buzzer": {
"name": "Cycle end chime"
},
"holiday_mode": {
"name": "Holiday Mode"
},
"auto_set": {
"name": "Auto-Set"
},
"super_cool": {
"name": "Super Cool"
},
"super_freeze": {
"name": "Super Freeze"
},
"freezer_door": {
"name": "Door open Freezer"
},
"fridge_door": {
"name": "Door open Fridge"
},
"filter_replacement": {
"name": "Filter replacement"
}
},
"button": {
"induction_hob": {
"name": "Induction Hob"
},
"start_program": {
"name": "Program Start"
},
"stop_program": {
"name": "Program Stop"
}
},
"number": {
"power_management": {
"name": "Power management"
},
"temperature": {
"name": "Temperature"
},
"delay_time": {
"name": "Delay Start"
},
"water_hard": {
"name": "Water hardness"
},
"program_duration": {
"name": "Program duration"
},
"target_temperature": {
"name": "Target temperature"
},
"rinse_iterations": {
"name": "Number of rinses"
},
"wash_time": {
"name": "Washing intensity"
},
"dry_time": {
"name": "Drying time"
},
"freezer_temp_sel": {
"name": "Target temperature Freezer"
},
"fridge_temp_sel": {
"name": "Target temperature Fridge"
},
"my_zone_temp_sel": {
"name": "Target temperature My Zone"
},
"pollen_level": {
"name": "Pollen level"
},
"aroma_time_on": {
"name": "Diffuser (ON)"
},
"aroma_time_off": {
"name": "Diffuser (OFF)"
}
},
"climate": {
"air_conditioner": {
"name": "Air conditioner",
"state_attributes": {
"preset_mode": {
"name": "Programs",
"state": {}
}
}
},
"fridge": {
"name": "Fridge",
"state_attributes": {
"preset_mode": {
"name": "Fridge modes",
"state": {
"auto_set": "Auto-Set",
"super_cool": "Super Cool",
"holiday": "Holiday",
"no_mode": "No mode selected"
}
}
}
},
"freezer": {
"name": "Freezer",
"state_attributes": {
"preset_mode": {
"name": "Freezer modes",
"state": {
"auto_set": "Auto-Set",
"super_freeze": "Super Freeze",
"no_mode": "No mode selected"
}
}
}
},
"oven": {
"name": "Oven",
"state_attributes": {
"preset_mode": {
"name": "Programs",
"state": {
"iot_h20_clean": "h2O clean",
"pizza": "Pizza",
"tailor_bake": "Tailor bake"
}
}
}
},
"my_zone": {
"name": "My Zone"
},
"wine": {
"state_attributes": {
"preset_mode": {
"name": "Wine Cellar",
"state": {}
}
}
}
},
"fan": {
"air_extraction": {
"name": "Air extraction"
}
},
"light": {
"light": {
"name": "Light"
}
}
},
"config": {
"step": {
"user": {
"description": "Do the login",
"data": {
"email": "Email",
"password": "Password"
}
}
}
}
}
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "specjalne",
@@ -346,6 +347,7 @@
"hqd_delicate": "Delikatne",
"hqd_diaper": "Pieluchy",
"hqd_duvet": "Pikowana kurtka z włókna syntetycznego",
"hqd_eco": "Eco",
"hqd_feather": "Pikowana kurtka z naturalnego włókna",
"hqd_hot_wind_timing": "Ciepłe objęcie",
"hqd_hygienic": "Higienizacja",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nie wybrano żadnego trybu",
"quick_cool": "QUICK COOL",
"quick_set": "Szybki zestaw",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "specjalne",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Delikatne",
"hqd_diaper": "Pieluchy",
"hqd_duvet": "Pikowana kurtka z włókna syntetycznego",
"hqd_eco": "Eco",
"hqd_feather": "Pikowana kurtka z naturalnego włókna",
"hqd_hot_wind_timing": "Ciepłe objęcie",
"hqd_hygienic": "Higienizacja",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nie wybrano żadnego trybu",
"quick_cool": "QUICK COOL",
"quick_set": "Szybki zestaw",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "especial",
@@ -346,6 +347,7 @@
"hqd_delicate": "Roupa delicada",
"hqd_diaper": "Fraldas",
"hqd_duvet": "Casaco acolchoado em fibra sintética",
"hqd_eco": "Eco",
"hqd_feather": "Casaco acolchoado em fibra natural",
"hqd_hot_wind_timing": "Warm Embrace",
"hqd_hygienic": "Higienização",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nenhum modo selecionado",
"quick_cool": "QUICK COOL",
"quick_set": "Conjunto rápido",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "especial",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Roupa delicada",
"hqd_diaper": "Fraldas",
"hqd_duvet": "Casaco acolchoado em fibra sintética",
"hqd_eco": "Eco",
"hqd_feather": "Casaco acolchoado em fibra natural",
"hqd_hot_wind_timing": "Warm Embrace",
"hqd_hygienic": "Higienização",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nenhum modo selecionado",
"quick_cool": "QUICK COOL",
"quick_set": "Conjunto rápido",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "special",
@@ -346,6 +347,7 @@
"hqd_delicate": "Delicate",
"hqd_diaper": "Scutece",
"hqd_duvet": "Jachetă matlasată din fibre sintetice",
"hqd_eco": "Eco",
"hqd_feather": "Jachetă matlasată din fibre naturale",
"hqd_hot_wind_timing": "Îmbrățișare caldă",
"hqd_hygienic": "Igienizare",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Niciun mod selectat",
"quick_cool": "QUICK COOL",
"quick_set": "Setare rapidă",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "special",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Delicate",
"hqd_diaper": "Scutece",
"hqd_duvet": "Jachetă matlasată din fibre sintetice",
"hqd_eco": "Eco",
"hqd_feather": "Jachetă matlasată din fibre naturale",
"hqd_hot_wind_timing": "Îmbrățișare caldă",
"hqd_hygienic": "Igienizare",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Niciun mod selectat",
"quick_cool": "QUICK COOL",
"quick_set": "Setare rapidă",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "специальные",
@@ -346,6 +347,7 @@
"hqd_delicate": "Деликатные вещи",
"hqd_diaper": "Пеленки",
"hqd_duvet": "Стеганая куртка из синтетического волокна",
"hqd_eco": "Эко",
"hqd_feather": "Стеганая куртка из натурального волокна",
"hqd_hot_wind_timing": "Обработка теплом",
"hqd_hygienic": "Санитарная обработка",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Режим не выбран",
"quick_cool": "БЫСТРОЕ ОХЛАЖДЕНИЕ",
"quick_set": "Быстрая настройка",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "специальные",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Деликатные вещи",
"hqd_diaper": "Пеленки",
"hqd_duvet": "Стеганая куртка из синтетического волокна",
"hqd_eco": "Эко",
"hqd_feather": "Стеганая куртка из натурального волокна",
"hqd_hot_wind_timing": "Обработка теплом",
"hqd_hygienic": "Санитарная обработка",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Режим не выбран",
"quick_cool": "БЫСТРОЕ ОХЛАЖДЕНИЕ",
"quick_set": "Быстрая настройка",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "špeciál",
@@ -346,6 +347,7 @@
"hqd_delicate": "Jemné materiály",
"hqd_diaper": "Plienky",
"hqd_duvet": "Prešívaná vetrovka so syntetickými vláknami",
"hqd_eco": "Eko",
"hqd_feather": "Prešívaná vetrovka s prírodnými vláknami",
"hqd_hot_wind_timing": "Detská zavinovačka",
"hqd_hygienic": "Hygienizácia",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nie je vybraný žiadny režim",
"quick_cool": "QUICK COOL",
"quick_set": "Rýchle nastavenie",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "špeciál",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Jemné materiály",
"hqd_diaper": "Plienky",
"hqd_duvet": "Prešívaná vetrovka so syntetickými vláknami",
"hqd_eco": "Eko",
"hqd_feather": "Prešívaná vetrovka s prírodnými vláknami",
"hqd_hot_wind_timing": "Detská zavinovačka",
"hqd_hygienic": "Hygienizácia",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nie je vybraný žiadny režim",
"quick_cool": "QUICK COOL",
"quick_set": "Rýchle nastavenie",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "posebno",
@@ -346,6 +347,7 @@
"hqd_delicate": "Občutljive tkanine",
"hqd_diaper": "Plenice",
"hqd_duvet": "Prešita jakna iz sintetičnih vlaken",
"hqd_eco": "Varčno",
"hqd_feather": "Prešita jakna iz naravnih vlaken",
"hqd_hot_wind_timing": "Mehkoba",
"hqd_hygienic": "Higienizacija",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Izbran ni noben način",
"quick_cool": "HITRO HLAJENJE",
"quick_set": "Hitra nastavitev",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "posebno",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Občutljive tkanine",
"hqd_diaper": "Plenice",
"hqd_duvet": "Prešita jakna iz sintetičnih vlaken",
"hqd_eco": "Varčno",
"hqd_feather": "Prešita jakna iz naravnih vlaken",
"hqd_hot_wind_timing": "Mehkoba",
"hqd_hygienic": "Higienizacija",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Izbran ni noben način",
"quick_cool": "HITRO HLAJENJE",
"quick_set": "Hitra nastavitev",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "posebno",
@@ -346,6 +347,7 @@
"hqd_delicate": "Osetljive tkanine",
"hqd_diaper": "Pelene",
"hqd_duvet": "Prošivena jakna od sintetičkih vlakana",
"hqd_eco": "Eko",
"hqd_feather": "Prošivena jakna od prirodnih vlakana",
"hqd_hot_wind_timing": "Topao zagrljaj",
"hqd_hygienic": "Higijenski",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nije izabran nijedan režim",
"quick_cool": "BRZO HLAĐENJE",
"quick_set": "Brzo podešavanje",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "posebno",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Osetljive tkanine",
"hqd_diaper": "Pelene",
"hqd_duvet": "Prošivena jakna od sintetičkih vlakana",
"hqd_eco": "Eko",
"hqd_feather": "Prošivena jakna od prirodnih vlakana",
"hqd_hot_wind_timing": "Topao zagrljaj",
"hqd_hygienic": "Higijenski",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Nije izabran nijedan režim",
"quick_cool": "BRZO HLAĐENJE",
"quick_set": "Brzo podešavanje",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
File diff suppressed because it is too large Load Diff
@@ -194,6 +194,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "özel",
@@ -346,6 +347,7 @@
"hqd_delicate": "Narin Çamaşırlar",
"hqd_diaper": "Bebek bezi",
"hqd_duvet": "Sentetik elyaflı kapitone ceket",
"hqd_eco": "Eko",
"hqd_feather": "Doğal elyaflı kapitone ceket",
"hqd_hot_wind_timing": "Sıcak Hava",
"hqd_hygienic": "Hijyen",
@@ -787,6 +789,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Hiç mod seçilmedi",
"quick_cool": "HIZLI SOĞUTMA",
"quick_set": "Hızlı Ayar",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1099,6 +1102,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "özel",
@@ -1251,6 +1255,7 @@
"hqd_delicate": "Narin Çamaşırlar",
"hqd_diaper": "Bebek bezi",
"hqd_duvet": "Sentetik elyaflı kapitone ceket",
"hqd_eco": "Eko",
"hqd_feather": "Doğal elyaflı kapitone ceket",
"hqd_hot_wind_timing": "Sıcak Hava",
"hqd_hygienic": "Hijyen",
@@ -1692,6 +1697,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "Hiç mod seçilmedi",
"quick_cool": "HIZLI SOĞUTMA",
"quick_set": "Hızlı Ayar",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
File diff suppressed because it is too large Load Diff
@@ -187,6 +187,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "特殊",
@@ -339,6 +340,7 @@
"hqd_delicate": "精致衣物",
"hqd_diaper": "纸尿裤",
"hqd_duvet": "合成纤维棉服",
"hqd_eco": "节能",
"hqd_feather": "天然纤维棉服",
"hqd_hot_wind_timing": "衣物蓬松",
"hqd_hygienic": "卫生保护",
@@ -780,6 +782,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "未选择模式",
"quick_cool": "QUICK COOL(快速冷却)",
"quick_set": "快速设置",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
@@ -1085,6 +1088,7 @@
"smart_ai": "Smart AI",
"smart_ai_pro": "Smart AI Pro",
"smart_ai_pro_soil": "Smart AI Pro",
"smart_ai_rapid": "Smart AI Rapid",
"smart_ai_rapid_soil": "Smart AI Rapid",
"smart_ai_soil": "Smart AI",
"special": "特殊",
@@ -1237,6 +1241,7 @@
"hqd_delicate": "精致衣物",
"hqd_diaper": "纸尿裤",
"hqd_duvet": "合成纤维棉服",
"hqd_eco": "节能",
"hqd_feather": "天然纤维棉服",
"hqd_hot_wind_timing": "衣物蓬松",
"hqd_hygienic": "卫生保护",
@@ -1678,6 +1683,7 @@
"milk_and_eggs": "Milk & Eggs",
"no_mode_selected": "未选择模式",
"quick_cool": "QUICK COOL(快速冷却)",
"quick_set": "快速设置",
"sea_food": "Ready to cook meal",
"smart_mode_title": "Smart Mode",
"soft_frozen": "Soft freezing",
+28
View File
@@ -0,0 +1,28 @@
import logging
from contextlib import suppress
from .typedefs import HonEntityDescription, HonOptionEntityDescription, T
_LOGGER = logging.getLogger(__name__)
def unique_entities(
base_entities: tuple[T, ...],
new_entities: tuple[T, ...],
) -> tuple[T, ...]:
result = list(base_entities)
existing_entities = [entity.key for entity in base_entities]
entity: HonEntityDescription
for entity in new_entities:
if entity.key not in existing_entities:
result.append(entity)
return tuple(result)
def get_readable(
description: HonOptionEntityDescription, value: float | str
) -> float | str:
if description.option_list is not None:
with suppress(ValueError):
return description.option_list.get(int(value), value)
return value