Compare commits

..

5 Commits

Author SHA1 Message Date
2c3217ff95 Bump version 2023-06-21 19:56:45 +02:00
fbd1bdf5ba Split program and mach mode of ac #75 2023-06-21 19:52:32 +02:00
78727e89cd Add entites for air purifier #72 2023-06-21 00:59:42 +02:00
a181359faa Refactor select entity 2023-06-21 00:59:16 +02:00
d83179a9fa Fix deprecated import 2023-06-21 00:17:02 +02:00
32 changed files with 771 additions and 134 deletions

View File

@ -14,9 +14,10 @@ Home Assistant integration for [Haier's mobile app hOn](https://hon-smarthome.co
- [Dish Washer](https://github.com/Andre0512/hon#dish-washer) - [Dish Washer](https://github.com/Andre0512/hon#dish-washer)
- [Air conditioner](https://github.com/Andre0512/hon#air-conditioner) - [Air conditioner](https://github.com/Andre0512/hon#air-conditioner)
- [Fridge](https://github.com/Andre0512/hon#fridge) - [Fridge](https://github.com/Andre0512/hon#fridge)
- [Hob](https://github.com/Andre0512/hon#hob) [BETA] - [Induction Hob](https://github.com/Andre0512/hon#induction-hob) [BETA]
- [Hood](https://github.com/Andre0512/hon#hood) [BETA] - [Hood](https://github.com/Andre0512/hon#hood) [BETA]
- [Wine Cellar](https://github.com/Andre0512/hon#wine-cellar) [BETA] - [Wine Cellar](https://github.com/Andre0512/hon#wine-cellar) [BETA]
- [Air Purifier](https://github.com/Andre0512/hon#air-purifier) [BETA]
## Installation ## Installation
**Method 1:** [![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=Andre0512&repository=hon&category=integration) **Method 1:** [![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=Andre0512&repository=hon&category=integration)
@ -38,13 +39,13 @@ _If the integration is not in the list, you need to clear the browser cache._
Support has been confirmed for these models, but many more will work. Please add already supported devices [with this form to complete the list](https://forms.gle/bTSD8qFotdZFytbf8). Support has been confirmed for these models, but many more will work. Please add already supported devices [with this form to complete the list](https://forms.gle/bTSD8qFotdZFytbf8).
| | **Haier** | **Hoover** | **Candy** | | | **Haier** | **Hoover** | **Candy** |
|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------| |---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|
| **Washing Machine** | HW90-B14TEAM5 <br/> HW100-B14959U1 | H-WASH 500 <br/> H7W4 48MBC-S | CO4 107T1/2-07 <br/> RO44 1286DWMC4-07 <br/> HW 68AMC/1-80 <br/> HWPD 69AMBC/1-S | | **Washing Machine** | HW90-B14TEAM5 <br/> HW100-B14959U1 | H-WASH 500 <br/> H7W4 48MBC-S | CO4 107T1/2-07 <br/> CBWO49TWME-S <br/> RO44 1286DWMC4-07 <br/> HW 68AMC/1-80 <br/> HWPD 69AMBC/1-S |
| **Tumble Dryer** | HD80-A3959 | H-DRY 500 <br/> H9A3TCBEXS-S <br/> HLE C10DCE-80 <br/> NDE H10A2TCE-80 <br/> NDE H9A2TSBEXS-S <br/> NDPHY10A2TCBEXSS | BCTDH7A1TE <br/> CSOE C10DE-80 <br/> ROE H9A3TCEX-S | | **Tumble Dryer** | HD80-A3959 | H-DRY 500 <br/> H9A3TCBEXS-S <br/> HLE C10DCE-80 <br/> NDE H10A2TCE-80 <br/> NDE H9A2TSBEXS-S <br/> NDPHY10A2TCBEXSS | BCTDH7A1TE <br/> CSOE C10DE-80 <br/> ROE H9A3TCEX-S |
| **Washer Dryer** | HWD100-B14979 | HWPS4954DAMR-11 | RPW41066BWMR/1-S | | **Washer Dryer** | HWD100-B14979 | HWPS4954DAMR-11 | RPW41066BWMR/1-S |
| **Oven** | HWO60SM2F3XH | HSOT3161WG | | | **Oven** | HWO60SM2F3XH | HSOT3161WG | |
| **Dish Washer** | XIB 3B2SFS-80 <br/> XIB 6B2D3FB | HFB 6B2S3FX | | | **Dish Washer** | XIB 3B2SFS-80 <br/> XIB 6B2D3FB | HFB 6B2S3FX | |
| **Air conditioner** | AD105S2SM3FA <br/> AS20HPL1HRA <br/> AS25PBAHRA <br/> AS25S2SF1FA-WH <br/> AS25TADHRA-2 <br/> AS35S2SF2FA-3 <br/> AS35TADHRA-2 <br/> AS35TAMHRA-C | | | | **Air Conditioner** | AD105S2SM3FA <br/> AS20HPL1HRA <br/> AS25PBAHRA <br/> AS25S2SF1FA-WH <br/> AS25TADHRA-2 <br/> AS35S2SF2FA-3 <br/> AS35TADHRA-2 <br/> AS35TAMHRA-C | | |
| **Fridge** | HFW7720ENMB | | CCE4T620EWU | | **Fridge** | HFW7720ENMB | | CCE4T620EWU |
| **Hob** | HA2MTSJ68MC | | CIS633SCTTWIFI | | **Hob** | HA2MTSJ68MC | | CIS633SCTTWIFI |
| **Hood** | HADG6DS46BWIFI | | | | **Hood** | HADG6DS46BWIFI | | |
@ -137,7 +138,7 @@ For every device exists a hidden button which can be used to log all infos of yo
## Appliance Features ## Appliance Features
### Air conditioner ### Air Conditioner
#### Controls #### Controls
| Name | Icon | Entity | Key | | Name | Icon | Entity | Key |
| --- | --- | --- | --- | | --- | --- | --- | --- |
@ -171,7 +172,36 @@ For every device exists a hidden button which can be used to log all infos of yo
| Program | `play` | `sensor` | `programName` | | Program | `play` | `sensor` | `programName` |
| Selected Temperature | `thermometer` | `sensor` | `tempSel` | | Selected Temperature | `thermometer` | `sensor` | `tempSel` |
### Dish washer ### Air Purifier
#### Controls
| Name | Icon | Entity | Key |
| --- | --- | --- | --- |
| Aroma Time Off | `thermometer` | `number` | `settings.aromaTimeOff` |
| Aroma Time On | `thermometer` | `number` | `settings.aromaTimeOn` |
| Diffuser Level | | `select` | `settings.aromaStatus` |
| Light status | `lightbulb` | `number` | `settings.lightStatus` |
| Lock Status | | `switch` | `lockStatus` |
| Mode | `run` | `select` | `settings.machMode` |
| Pollen Level | | `number` | `settings.pollenLevel` |
| Touch Tone | | `switch` | `touchToneStatus` |
#### Sensors
| Name | Icon | Entity | Key |
| --- | --- | --- | --- |
| Air Quality | | `sensor` | `airQuality` |
| CO Level | | `sensor` | `coLevel` |
| Error | `math-log` | `sensor` | `errors` |
| Humidity | | `sensor` | `humidityIndoor` |
| Main Filter Status | | `sensor` | `mainFilterStatus` |
| On | `power-cycle` | `binary_sensor` | `attributes.parameters.onOffStatus` |
| Pre Filter Status | | `sensor` | `preFilterStatus` |
| Temperature | | `sensor` | `temp` |
| Total Work Time | | `sensor` | `totalWorkTime` |
| VOC | | `sensor` | `vocValueIndoor` |
| Wind Speed | | `sensor` | `windSpeed` |
| pm10 | | `sensor` | `pm10ValueIndoor` |
| pm2p5 | | `sensor` | `pm2p5ValueIndoor` |
### Dish Washer
#### Controls #### Controls
| Name | Icon | Entity | Key | | Name | Icon | Entity | Key |
| --- | --- | --- | --- | | --- | --- | --- | --- |
@ -217,10 +247,6 @@ For every device exists a hidden button which can be used to log all infos of yo
| Start Program | `hvac` | `button` | `startProgram` | | Start Program | `hvac` | `button` | `startProgram` |
| Stop Program | `hvac-off` | `button` | `stopProgram` | | Stop Program | `hvac-off` | `button` | `stopProgram` |
| Wind Speed | | `fan` | `settings.windSpeed` | | Wind Speed | | `fan` | `settings.windSpeed` |
#### Configs
| Name | Icon | Entity | Key |
| --- | --- | --- | --- |
| Light status | `lightbulb` | `number` | `startProgram.lightStatus` |
#### Sensors #### Sensors
| Name | Icon | Entity | Key | | Name | Icon | Entity | Key |
| --- | --- | --- | --- | | --- | --- | --- | --- |
@ -231,13 +257,14 @@ For every device exists a hidden button which can be used to log all infos of yo
| Filter Cleaning Status | | `sensor` | `filterCleaningStatus` | | Filter Cleaning Status | | `sensor` | `filterCleaningStatus` |
| Last Work Time | `clock-start` | `sensor` | `lastWorkTime` | | Last Work Time | `clock-start` | `sensor` | `lastWorkTime` |
| Light Status | `lightbulb` | `sensor` | `lightStatus` | | Light Status | `lightbulb` | `sensor` | `lightStatus` |
| Light status | `lightbulb` | `number` | `startProgram.lightStatus` |
| Mach Mode | | `sensor` | `machMode` | | Mach Mode | | `sensor` | `machMode` |
| On / Off Status | `lightbulb` | `sensor` | `onOffStatus` | | On / Off Status | `lightbulb` | `sensor` | `onOffStatus` |
| Quick Delay Time Status | | `sensor` | `quickDelayTimeStatus` | | Quick Delay Time Status | | `sensor` | `quickDelayTimeStatus` |
| RGB Light Color | `lightbulb` | `sensor` | `rgbLightColors` | | RGB Light Color | `lightbulb` | `sensor` | `rgbLightColors` |
| RGB Light Status | `lightbulb` | `sensor` | `rgbLightStatus` | | RGB Light Status | `lightbulb` | `sensor` | `rgbLightStatus` |
### Hob ### Induction Hob
#### Controls #### Controls
| Name | Icon | Entity | Key | | Name | Icon | Entity | Key |
| --- | --- | --- | --- | | --- | --- | --- | --- |
@ -321,7 +348,7 @@ For every device exists a hidden button which can be used to log all infos of yo
| Temperature Freezer | `snowflake-thermometer` | `sensor` | `tempZ2` | | Temperature Freezer | `snowflake-thermometer` | `sensor` | `tempZ2` |
| Temperature Fridge | `thermometer` | `sensor` | `tempZ1` | | Temperature Fridge | `thermometer` | `sensor` | `tempZ1` |
### Tumble dryer ### Tumble Dryer
#### Controls #### Controls
| Name | Icon | Entity | Key | | Name | Icon | Entity | Key |
| --- | --- | --- | --- | | --- | --- | --- | --- |
@ -380,7 +407,7 @@ For every device exists a hidden button which can be used to log all infos of yo
| Temperature | `thermometer` | `sensor` | `temp` | | Temperature | `thermometer` | `sensor` | `temp` |
| Temperature 2 | `thermometer` | `sensor` | `tempZ2` | | Temperature 2 | `thermometer` | `sensor` | `tempZ2` |
### Washer dryer ### Washer Dryer
#### Controls #### Controls
| Name | Icon | Entity | Key | | Name | Icon | Entity | Key |
| --- | --- | --- | --- | | --- | --- | --- | --- |
@ -455,7 +482,7 @@ For every device exists a hidden button which can be used to log all infos of yo
| Total Wash Cycle | `counter` | `sensor` | `totalWashCycle` | | Total Wash Cycle | `counter` | `sensor` | `totalWashCycle` |
| Total Water | | `sensor` | `totalWaterUsed` | | Total Water | | `sensor` | `totalWaterUsed` |
### Washing machine ### Washing Machine
#### Controls #### Controls
| Name | Icon | Entity | Key | | Name | Icon | Entity | Key |
| --- | --- | --- | --- | | --- | --- | --- | --- |

View File

@ -242,6 +242,16 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = {
translation_key="holiday_mode", translation_key="holiday_mode",
), ),
), ),
"AP": (
HonBinarySensorEntityDescription(
key="attributes.parameters.onOffStatus",
name="On",
device_class=BinarySensorDeviceClass.RUNNING,
on_value="1",
icon="mdi:power-cycle",
translation_key="on",
),
),
} }

View File

@ -4,7 +4,7 @@ import pkg_resources
from homeassistant.components import persistent_notification from homeassistant.components import persistent_notification
from homeassistant.components.button import ButtonEntityDescription, ButtonEntity from homeassistant.components.button import ButtonEntityDescription, ButtonEntity
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory from homeassistant.helpers.entity import EntityCategory
from pyhon.appliance import HonAppliance from pyhon.appliance import HonAppliance
from .const import DOMAIN from .const import DOMAIN

View File

@ -22,7 +22,7 @@ from homeassistant.const import (
from homeassistant.core import callback from homeassistant.core import callback
from pyhon.appliance import HonAppliance from pyhon.appliance import HonAppliance
from .const import HON_HVAC_MODE, HON_FAN, HON_HVAC_PROGRAM, DOMAIN from .const import HON_HVAC_MODE, HON_FAN, DOMAIN
from .hon import HonEntity from .hon import HonEntity
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -115,13 +115,14 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
super().__init__(hass, entry, device, description) super().__init__(hass, entry, device, description)
self._attr_temperature_unit = TEMP_CELSIUS self._attr_temperature_unit = TEMP_CELSIUS
self._attr_target_temperature_step = device.settings["settings.tempSel"].step self._set_temperature_bound()
self._attr_max_temp = device.settings["settings.tempSel"].max
self._attr_min_temp = device.settings["settings.tempSel"].min
self._attr_hvac_modes = [HVACMode.OFF] self._attr_hvac_modes = [HVACMode.OFF]
for mode in device.settings["settings.machMode"].values: for mode in device.settings["settings.machMode"].values:
self._attr_hvac_modes.append(HON_HVAC_MODE[mode]) self._attr_hvac_modes.append(HON_HVAC_MODE[mode])
self._attr_preset_modes = []
for mode in device.settings["startProgram.program"].values:
self._attr_preset_modes.append(mode)
self._attr_fan_modes = [FAN_OFF] self._attr_fan_modes = [FAN_OFF]
for mode in device.settings["settings.windSpeed"].values: for mode in device.settings["settings.windSpeed"].values:
self._attr_fan_modes.append(HON_FAN[mode]) self._attr_fan_modes.append(HON_FAN[mode])
@ -135,10 +136,18 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
ClimateEntityFeature.TARGET_TEMPERATURE ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.FAN_MODE | ClimateEntityFeature.FAN_MODE
| ClimateEntityFeature.SWING_MODE | ClimateEntityFeature.SWING_MODE
| ClimateEntityFeature.PRESET_MODE
) )
self._handle_coordinator_update(update=False) self._handle_coordinator_update(update=False)
def _set_temperature_bound(self) -> None:
self._attr_target_temperature_step = self._device.settings[
"settings.tempSel"
].step
self._attr_max_temp = self._device.settings["settings.tempSel"].max
self._attr_min_temp = self._device.settings["settings.tempSel"].min
@property @property
def target_temperature(self) -> int | None: def target_temperature(self) -> int | None:
"""Return the temperature we try to reach.""" """Return the temperature we try to reach."""
@ -166,13 +175,31 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
async def async_set_hvac_mode(self, hvac_mode): async def async_set_hvac_mode(self, hvac_mode):
self._attr_hvac_mode = hvac_mode self._attr_hvac_mode = hvac_mode
if hvac_mode == HVACMode.OFF: if hvac_mode == HVACMode.OFF:
command = "stopProgram" await self._device.commands["stopProgram"].send()
self._device.sync_command("stopProgram", "settings")
else: else:
mode = HON_HVAC_PROGRAM[hvac_mode] self._device.settings["settings.onOffStatus"].value = "1"
self._device.settings["startProgram.program"].value = mode setting = self._device.settings["settings.machMode"]
command = "startProgram" modes = {HON_HVAC_MODE[number]: number for number in setting.values}
await self._device.commands[command].send() setting.value = modes[hvac_mode]
self._device.sync_command(command, "settings") await self._device.commands["settings"].send()
self.async_write_ha_state()
@property
def preset_mode(self) -> str | None:
"""Return the current Preset for this channel."""
return None
async def async_set_preset_mode(self, preset_mode: str) -> None:
"""Set the new preset mode."""
if program := self._device.settings.get(f"startProgram.program"):
program.value = preset_mode
self._device.sync_command("startProgram", "settings")
self._set_temperature_bound()
self._handle_coordinator_update(update=False)
await self.coordinator.async_refresh()
self._attr_preset_mode = preset_mode
await self._device.commands["startProgram"].send()
self.async_write_ha_state() self.async_write_ha_state()
@property @property

View File

@ -188,3 +188,18 @@ AC_HUMAN_SENSE = {
"2": "follow_touch", "2": "follow_touch",
"3": "unknown", "3": "unknown",
} }
AP_MACH_MODE = {
"0": "standby",
"1": "sleep",
"2": "auto",
"3": "allergens",
"4": "max",
}
AP_DIFFUSER_LEVEL = {
"1": "soft",
"2": "mid",
"3": "h_biotics",
"4": "custom",
}

View File

@ -9,7 +9,7 @@
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"issue_tracker": "https://github.com/Andre0512/hon/issues", "issue_tracker": "https://github.com/Andre0512/hon/issues",
"requirements": [ "requirements": [
"pyhOn==0.13.0" "pyhOn==0.13.1"
], ],
"version": "0.9.0-beta.3" "version": "0.9.0-beta.4"
} }

View File

@ -167,7 +167,29 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = {
key="startProgram.lightStatus", key="startProgram.lightStatus",
name="Light status", name="Light status",
icon="mdi:lightbulb", icon="mdi:lightbulb",
entity_category=EntityCategory.CONFIG, ),
),
"AP": (
HonNumberEntityDescription(
key="settings.aromaTimeOn",
name="Aroma Time On",
icon="mdi:thermometer",
native_unit_of_measurement=UnitOfTime.SECONDS,
),
HonNumberEntityDescription(
key="settings.aromaTimeOff",
name="Aroma Time Off",
icon="mdi:thermometer",
native_unit_of_measurement=UnitOfTime.SECONDS,
),
HonNumberEntityDescription(
key="settings.lightStatus",
name="Light status",
icon="mdi:lightbulb",
),
HonNumberEntityDescription(
key="settings.pollenLevel",
name="Pollen Level",
), ),
), ),
} }
@ -206,7 +228,7 @@ class HonNumberEntity(HonEntity, NumberEntity):
@property @property
def native_value(self) -> float | None: def native_value(self) -> float | None:
return self._device.get(self.entity_description.key) return self._device.get(self.entity_description.key.split(".")[-1])
async def async_set_native_value(self, value: float) -> None: async def async_set_native_value(self, value: float) -> None:
setting = self._device.settings[self.entity_description.key] setting = self._device.settings[self.entity_description.key]
@ -214,6 +236,8 @@ class HonNumberEntity(HonEntity, NumberEntity):
setting.value = value setting.value = value
command = self.entity_description.key.split(".")[0] command = self.entity_description.key.split(".")[0]
await self._device.commands[command].send() await self._device.commands[command].send()
if command != "settings":
self._device.sync_command(command, "settings")
await self.coordinator.async_refresh() await self.coordinator.async_refresh()
@callback @callback
@ -223,7 +247,7 @@ class HonNumberEntity(HonEntity, NumberEntity):
self._attr_native_max_value = setting.max self._attr_native_max_value = setting.max
self._attr_native_min_value = setting.min self._attr_native_min_value = setting.min
self._attr_native_step = setting.step self._attr_native_step = setting.step
self._attr_native_value = setting.value self._attr_native_value = self.native_value
if update: if update:
self.async_write_ha_state() self.async_write_ha_state()

View File

@ -9,7 +9,6 @@ from homeassistant.config_entries import ConfigEntry
from homeassistant.const import UnitOfTemperature, UnitOfTime, REVOLUTIONS_PER_MINUTE from homeassistant.const import UnitOfTemperature, UnitOfTime, REVOLUTIONS_PER_MINUTE
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity import EntityCategory
from pyhon.appliance import HonAppliance
from . import const from . import const
from .const import DOMAIN from .const import DOMAIN
@ -134,6 +133,19 @@ SELECTS = {
translation_key="ref_zones", translation_key="ref_zones",
), ),
), ),
"AP": (
HonSelectEntityDescription(
key="settings.aromaStatus",
name="Diffuser Level",
option_list=const.AP_DIFFUSER_LEVEL,
),
HonSelectEntityDescription(
key="settings.machMode",
name="Mode",
icon="mdi:run",
option_list=const.AP_MACH_MODE,
),
),
} }
SELECTS["WD"] = unique_entities(SELECTS["WM"], SELECTS["TD"]) SELECTS["WD"] = unique_entities(SELECTS["WM"], SELECTS["TD"])
@ -156,11 +168,8 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non
async_add_entities(entities) async_add_entities(entities)
class HonSelectEntity(HonEntity, SelectEntity): class HonConfigSelectEntity(HonEntity, SelectEntity):
entity_description: HonSelectEntityDescription entity_description: HonConfigSelectEntityDescription
def __init__(self, hass, entry, device: HonAppliance, description) -> None:
super().__init__(hass, entry, device, description)
@property @property
def current_option(self) -> str | None: def current_option(self) -> str | None:
@ -173,41 +182,52 @@ class HonSelectEntity(HonEntity, SelectEntity):
return None return None
return value return value
async def async_select_option(self, option: str) -> None: @property
setting = self._device.settings[self.entity_description.key] def options(self) -> list[str]:
setting = self._device.settings.get(self.entity_description.key)
if setting is None:
return []
options = self.entity_description.option_list or {}
return [options.get(str(key), key) for key in setting.values]
def _option_to_number(self, option: str, values: List[str]):
if (options := self.entity_description.option_list) is not None: if (options := self.entity_description.option_list) is not None:
setting.value = next( return next(
(k for k, v in options.items() if k in setting.values and v == option), (k for k, v in options.items() if k in values and v == option),
option, option,
) )
else: return option
setting.value = option
command = self.entity_description.key.split(".")[0] async def async_select_option(self, option: str) -> None:
await self._device.commands[command].send() setting = self._device.settings[self.entity_description.key]
setting.value = self._option_to_number(option, setting.values)
await self.coordinator.async_refresh() await self.coordinator.async_refresh()
@callback @callback
def _handle_coordinator_update(self, update=True) -> None: def _handle_coordinator_update(self, update=True) -> None:
setting = self._device.settings.get(self.entity_description.key) self._attr_available = self.available
if setting is None: self._attr_options = self.options
self._attr_available = False self._attr_current_option = self.current_option
self._attr_options: List[str] = []
value = None
else:
self._attr_available = True
self._attr_options: List[str] = setting.values
value = str(setting.value)
if self.entity_description.option_list is not None:
self._attr_options = [
self.entity_description.option_list.get(k, k)
for k in self._attr_options
]
if value is not None:
value = self.entity_description.option_list.get(value, value)
self._attr_native_value = value
if update: if update:
self.async_write_ha_state() self.async_write_ha_state()
@property
def available(self) -> bool:
return self._device.settings.get(self.entity_description.key) is not None
class HonSelectEntity(HonConfigSelectEntity):
entity_description: HonSelectEntityDescription
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)
command = self.entity_description.key.split(".")[0]
await self._device.commands[command].send()
if command != "settings":
self._device.sync_command(command, "settings")
await self.coordinator.async_refresh()
@property @property
def available(self) -> bool: def available(self) -> bool:
"""Return True if entity is available.""" """Return True if entity is available."""
@ -216,23 +236,3 @@ class HonSelectEntity(HonEntity, SelectEntity):
and self._device.get("remoteCtrValid", "1") == "1" and self._device.get("remoteCtrValid", "1") == "1"
and self._device.get("attributes.lastConnEvent.category") != "DISCONNECTED" and self._device.get("attributes.lastConnEvent.category") != "DISCONNECTED"
) )
class HonConfigSelectEntity(HonSelectEntity):
entity_description: HonConfigSelectEntityDescription
async def async_select_option(self, option: str) -> None:
setting = self._device.settings[self.entity_description.key]
if (options := self.entity_description.option_list) is not None:
setting.value = next(
(k for k, v in options.items() if k in setting.values and v == option),
option,
)
else:
setting.value = option
await self.coordinator.async_refresh()
@property
def available(self) -> bool:
"""Return True if entity is available."""
return super(SelectEntity, self).available

View File

@ -9,7 +9,12 @@ from homeassistant.components.sensor import (
SensorEntityDescription, SensorEntityDescription,
) )
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import PERCENTAGE from homeassistant.const import (
PERCENTAGE,
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_BILLION,
CONCENTRATION_PARTS_PER_MILLION,
)
from homeassistant.const import ( from homeassistant.const import (
REVOLUTIONS_PER_MINUTE, REVOLUTIONS_PER_MINUTE,
UnitOfEnergy, UnitOfEnergy,
@ -637,6 +642,7 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
name="Temperature", name="Temperature",
icon="mdi:thermometer", icon="mdi:thermometer",
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS, native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_key="temperature", translation_key="temperature",
), ),
@ -673,6 +679,7 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
icon="mdi:thermometer", icon="mdi:thermometer",
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=UnitOfTemperature.CELSIUS, native_unit_of_measurement=UnitOfTemperature.CELSIUS,
device_class=SensorDeviceClass.TEMPERATURE,
translation_key="temperature", translation_key="temperature",
), ),
HonSensorEntityDescription( HonSensorEntityDescription(
@ -683,6 +690,76 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
translation_key="programs_wc", translation_key="programs_wc",
), ),
), ),
"AP": (
HonSensorEntityDescription(
key="errors", name="Error", icon="mdi:math-log", translation_key="errors"
),
HonSensorEntityDescription(
key="mainFilterStatus",
name="Main Filter Status",
native_unit_of_measurement=PERCENTAGE,
),
HonSensorEntityDescription(
key="preFilterStatus",
name="Pre Filter Status",
native_unit_of_measurement=PERCENTAGE,
),
HonSensorEntityDescription(
key="totalWorkTime",
name="Total Work Time",
native_unit_of_measurement=UnitOfTime.MINUTES,
device_class=SensorDeviceClass.DURATION,
),
HonSensorEntityDescription(
key="coLevel",
name="CO Level",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.CO,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
),
HonSensorEntityDescription(
key="pm10ValueIndoor",
name="pm10",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.PM10,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
),
HonSensorEntityDescription(
key="pm2p5ValueIndoor",
name="pm2p5",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.PM25,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
),
HonSensorEntityDescription(
key="vocValueIndoor",
name="VOC",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_BILLION,
),
HonSensorEntityDescription(
key="humidityIndoor",
name="Humidity",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.HUMIDITY,
native_unit_of_measurement=PERCENTAGE,
translation_key="humidity",
),
HonSensorEntityDescription(
key="temp",
name="Temperature",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_key="temperature",
),
HonSensorEntityDescription(key="windSpeed", name="Wind Speed"),
HonSensorEntityDescription(
key="airQuality",
name="Air Quality",
),
),
} }
SENSORS["WD"] = unique_entities(SENSORS["WM"], SENSORS["TD"]) SENSORS["WD"] = unique_entities(SENSORS["WM"], SENSORS["TD"])

View File

@ -5,7 +5,7 @@ from typing import Any
from homeassistant.components.switch import SwitchEntityDescription, SwitchEntity from homeassistant.components.switch import SwitchEntityDescription, SwitchEntity
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import EntityCategory from homeassistant.helpers.entity import EntityCategory
from homeassistant.core import callback from homeassistant.core import callback
from pyhon.parameter.base import HonParameter from pyhon.parameter.base import HonParameter
from pyhon.parameter.range import HonParameterRange from pyhon.parameter.range import HonParameterRange
@ -333,6 +333,16 @@ SWITCHES: dict[str, tuple[HonSwitchEntityDescription, ...]] = {
key="lightStatus", name="Light", icon="mdi:lightbulb" key="lightStatus", name="Light", icon="mdi:lightbulb"
), ),
), ),
"AP": (
HonSwitchEntityDescription(
key="touchToneStatus",
name="Touch Tone",
),
HonSwitchEntityDescription(
key="lockStatus",
name="Lock Status",
),
),
} }
SWITCHES["WD"] = unique_entities(SWITCHES["WD"], SWITCHES["WM"]) SWITCHES["WD"] = unique_entities(SWITCHES["WD"], SWITCHES["WM"])

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Klimatizační jednotka" "name": "Klimatizační jednotka",
"state_attributes": {
"preset_mode": {
"name": "Programy",
"state": {
"iot_10_heating": "Funkce Vytápění 10 °C",
"iot_auto": "Auto",
"iot_cool": "Chlazení",
"iot_dry": "Odvlhčování",
"iot_fan": "Ventilátor",
"iot_heat": "Vytápění",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Automatické čištění",
"iot_self_clean": "Samočištění zamrazením",
"iot_self_clean_56": "Samočištění 56°C sterilizace ",
"iot_simple_start": "Spustit nyní",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + auto",
"iot_uv_and_cool": "UV + zchlazení",
"iot_uv_and_dry": "UV + odstranění vlhkosti",
"iot_uv_and_fan": "UV + ventilátor",
"iot_uv_and_heat": "UV + ohřev"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Chladnička", "name": "Chladnička",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Klimaanlage" "name": "Klimaanlage",
"state_attributes": {
"preset_mode": {
"name": "Programme",
"state": {
"iot_10_heating": "10°C Heizfunktion",
"iot_auto": "Auto",
"iot_cool": "Kühl",
"iot_dry": "Trocken",
"iot_fan": "Ventilator",
"iot_heat": "Heizen",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Selbst reinigen",
"iot_self_clean": "Self-Clean",
"iot_self_clean_56": "Steri-Clean 56°C",
"iot_simple_start": "Jetzt beginnen",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + Auto",
"iot_uv_and_cool": "UV + Kalt",
"iot_uv_and_dry": "UV + Entfeuchter",
"iot_uv_and_fan": "UV + Gebläse",
"iot_uv_and_heat": "UV + Heizen"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Kühlschrank", "name": "Kühlschrank",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Κλιματιστικό" "name": "Κλιματιστικό",
"state_attributes": {
"preset_mode": {
"name": "Προγράμματα",
"state": {
"iot_10_heating": "10° C Λειτουργία θέρμανσης",
"iot_auto": "Αυτόματο",
"iot_cool": "Ψύξη",
"iot_dry": "Στέγνωμα",
"iot_fan": "Ανεμιστήρας",
"iot_heat": "Ζέστη",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Αυτοκαθαρισμός",
"iot_self_clean": "Αυτοκαθαρισμός",
"iot_self_clean_56": "Steri-Clean 56°C",
"iot_simple_start": "Εκκίνηση τώρα",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + Auto",
"iot_uv_and_cool": "UV + Ψύξη",
"iot_uv_and_dry": "UV + Αφυγραντήρας",
"iot_uv_and_fan": "UV + Ανεμιστήρας",
"iot_uv_and_heat": "UV + Θέρμανση"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Ψυγείο", "name": "Ψυγείο",

View File

@ -1868,7 +1868,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Air conditioner" "name": "Air conditioner",
"state_attributes": {
"preset_mode": {
"name": "Programs",
"state": {
"iot_10_heating": "10°C Heating function",
"iot_auto": "Auto",
"iot_cool": "Cool",
"iot_dry": "Dry",
"iot_fan": "Fan",
"iot_heat": "Heat",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Self-purify",
"iot_self_clean": "Self-clean",
"iot_self_clean_56": "Steri-Clean 56°C",
"iot_simple_start": "Start now",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + Auto",
"iot_uv_and_cool": "UV + Cold",
"iot_uv_and_dry": "UV + Dehumidifier",
"iot_uv_and_fan": "UV + Fan",
"iot_uv_and_heat": "UV + Heat"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Fridge", "name": "Fridge",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Aire acondicionado" "name": "Aire acondicionado",
"state_attributes": {
"preset_mode": {
"name": "Programas",
"state": {
"iot_10_heating": "Función de calentamiento de 10° C",
"iot_auto": "Automático",
"iot_cool": "Frío",
"iot_dry": "Deshumidificar",
"iot_fan": "Ventilador",
"iot_heat": "Calor",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Autopurificar",
"iot_self_clean": "Autolimpieza",
"iot_self_clean_56": "Limpieza desinfectante 56°",
"iot_simple_start": "Iniciar ahora",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + Automático",
"iot_uv_and_cool": "UV + Frío",
"iot_uv_and_dry": "UV + Deshumidificador",
"iot_uv_and_fan": "UV + Ventilador",
"iot_uv_and_heat": "UV + Calor"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Frigorífico", "name": "Frigorífico",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Climatiseur" "name": "Climatiseur",
"state_attributes": {
"preset_mode": {
"name": "Programmes",
"state": {
"iot_10_heating": "Fonction Chauffage 10 °C",
"iot_auto": "Automatique",
"iot_cool": "Frais",
"iot_dry": "Sec",
"iot_fan": "Ventilateur",
"iot_heat": "Chaleur",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Auto-purification",
"iot_self_clean": "Auto-nettoyage",
"iot_self_clean_56": "Steri-Clean 56°C",
"iot_simple_start": "Démarrez maintenant",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + Auto",
"iot_uv_and_cool": "UV + Froid",
"iot_uv_and_dry": "UV + Déshumidificateur",
"iot_uv_and_fan": "UV + ventilateur",
"iot_uv_and_heat": "UV + Chaleur"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Réfrigérateur", "name": "Réfrigérateur",

View File

@ -964,7 +964,15 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Air conditioner" "name": "Air conditioner",
"state_attributes": {
"preset_mode": {
"name": "Programs",
"state": {
"iot_simple_start": "התחל עכשיו"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Fridge", "name": "Fridge",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Klimatizacijski uređaj" "name": "Klimatizacijski uređaj",
"state_attributes": {
"preset_mode": {
"name": "Programi",
"state": {
"iot_10_heating": "Funkcija grijanja na 10 °C",
"iot_auto": "Automatski",
"iot_cool": "Hlađenje",
"iot_dry": "Sušenje",
"iot_fan": "Ventilator",
"iot_heat": "Zagrijavanje",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Sampročišćavanje",
"iot_self_clean": "Samočišćenje",
"iot_self_clean_56": "Sterilno čišćenje 56°C",
"iot_simple_start": "Pokreni sada",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + automatski",
"iot_uv_and_cool": "UV + hladno",
"iot_uv_and_dry": "UV + odvlaživač",
"iot_uv_and_fan": "UV + ventilator",
"iot_uv_and_heat": "UV + grijanje"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Hladnjak", "name": "Hladnjak",

View File

@ -1844,7 +1844,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Condizionatore" "name": "Condizionatore",
"state_attributes": {
"preset_mode": {
"name": "Programmi",
"state": {
"iot_10_heating": "Funzione 10°C Heating ",
"iot_auto": "Auto",
"iot_cool": "Freddo",
"iot_dry": "Deumidificazione",
"iot_fan": "Ventilatore",
"iot_heat": "Caldo",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Self purify",
"iot_self_clean": "Self clean",
"iot_self_clean_56": "Steri-Clean 56°C",
"iot_simple_start": "Avvia ora",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + Auto",
"iot_uv_and_cool": "UV + Freddo",
"iot_uv_and_dry": "UV + Deumidificatore",
"iot_uv_and_fan": "UV + Ventola",
"iot_uv_and_heat": "UV + Caldo"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Frigorifero", "name": "Frigorifero",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Airconditioner" "name": "Airconditioner",
"state_attributes": {
"preset_mode": {
"name": "Programma's",
"state": {
"iot_10_heating": "10°C-verwarmingsfunctie",
"iot_auto": "Automatisch",
"iot_cool": "Koelen",
"iot_dry": "Drogen",
"iot_fan": "Ventilator",
"iot_heat": "Verwarming",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Zelfzuivering",
"iot_self_clean": "Zelfreiniging",
"iot_self_clean_56": "Sterilisatie reiniging 56°C",
"iot_simple_start": "Start nu",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + Auto",
"iot_uv_and_cool": "UV + Koud",
"iot_uv_and_dry": "UV + Ontvochtiger",
"iot_uv_and_fan": "UV + Hetelucht",
"iot_uv_and_heat": "UV + Warmte"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Koelkast", "name": "Koelkast",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Klimatyzator" "name": "Klimatyzator",
"state_attributes": {
"preset_mode": {
"name": "Programy",
"state": {
"iot_10_heating": "Funkcja grzania 10°C",
"iot_auto": "Auto",
"iot_cool": "Chłodzenie",
"iot_dry": "Osuszanie",
"iot_fan": "Wentylator",
"iot_heat": "Grzanie",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Self Purify",
"iot_self_clean": "Self Clean",
"iot_self_clean_56": "Steri Clean 56°C",
"iot_simple_start": "Uruchom teraz",
"iot_uv": "Sterylizacja UVC",
"iot_uv_and_auto": "UV + automat",
"iot_uv_and_cool": "UV + chłodzenie",
"iot_uv_and_dry": "UV + osuszacz powietrza",
"iot_uv_and_fan": "UV + wentylator",
"iot_uv_and_heat": "UV + podgrzewanie"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Lodówka", "name": "Lodówka",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Ar Condicionado" "name": "Ar Condicionado",
"state_attributes": {
"preset_mode": {
"name": "Programas",
"state": {
"iot_10_heating": "Função de aquecimento de 10 °C",
"iot_auto": "Auto",
"iot_cool": "Frio",
"iot_dry": "Secar",
"iot_fan": "Ventilador",
"iot_heat": "Calor",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Autopurificação",
"iot_self_clean": "Autolimpeza",
"iot_self_clean_56": "Steri-Clean 56°C",
"iot_simple_start": "Iniciar agora",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + Auto",
"iot_uv_and_cool": "UV + Frio",
"iot_uv_and_dry": "UV + Desumidificador",
"iot_uv_and_fan": "UV + Ventilação",
"iot_uv_and_heat": "UV + Calor"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Frigorífico", "name": "Frigorífico",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Aer condiționat" "name": "Aer condiționat",
"state_attributes": {
"preset_mode": {
"name": "Programe",
"state": {
"iot_10_heating": "Funcția de încălzire la 10 °C",
"iot_auto": "Automat",
"iot_cool": "Răcire",
"iot_dry": "Uscare",
"iot_fan": "Ventilare",
"iot_heat": "Încălzire",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Auto-purificare",
"iot_self_clean": "Autocurățare",
"iot_self_clean_56": "Curățare-sterilizare la 56°C",
"iot_simple_start": "Începeți acum",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + automat",
"iot_uv_and_cool": "UV + răcire",
"iot_uv_and_dry": "UV + dezumidificator",
"iot_uv_and_fan": "UV + ventilator",
"iot_uv_and_heat": "UV + încălzire"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Frigider", "name": "Frigider",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Кондиционер воздуха" "name": "Кондиционер воздуха",
"state_attributes": {
"preset_mode": {
"name": "Программы",
"state": {
"iot_10_heating": "Функция нагрева до 10°C",
"iot_auto": "Авто",
"iot_cool": "Охлаждение",
"iot_dry": "Сушка",
"iot_fan": "Вентилятор",
"iot_heat": "Нагрев",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Самоочищение",
"iot_self_clean": "Самоочистка",
"iot_self_clean_56": "Steri-Clean 56°C",
"iot_simple_start": "Пуск сейчас",
"iot_uv": "Ультрафиолет",
"iot_uv_and_auto": "УФ + Авто",
"iot_uv_and_cool": "УФ + Охлаждение",
"iot_uv_and_dry": "УФ + Осушитель",
"iot_uv_and_fan": "УФ + Вентилятор",
"iot_uv_and_heat": "УФ + Нагрев"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Холодильник", "name": "Холодильник",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Klimatizácia" "name": "Klimatizácia",
"state_attributes": {
"preset_mode": {
"name": "Programy",
"state": {
"iot_10_heating": "Funkcia vykurovania na 10 °C",
"iot_auto": "Automatika",
"iot_cool": "Chladiť",
"iot_dry": "Sušiť",
"iot_fan": "Ventilátor",
"iot_heat": "Ohrev",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Samoprečisťovanie",
"iot_self_clean": "Samočistenie",
"iot_self_clean_56": "Sterilné čistenie 56°C",
"iot_simple_start": "Spustiť teraz",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + Auto",
"iot_uv_and_cool": "UV + Studené",
"iot_uv_and_dry": "UV + Odvlhčovač",
"iot_uv_and_fan": "UV + Ventilátor",
"iot_uv_and_heat": "UV + Ohrev"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Chladnička", "name": "Chladnička",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Klimatska naprava" "name": "Klimatska naprava",
"state_attributes": {
"preset_mode": {
"name": "Programi",
"state": {
"iot_10_heating": "Funkcija ogrevanja pri 10 °C",
"iot_auto": "Samodejno",
"iot_cool": "Hlajenje",
"iot_dry": "Sušenje",
"iot_fan": "Ventilator",
"iot_heat": "Segrevanje",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Samoočiščevanje",
"iot_self_clean": "Samodejno čiščenje",
"iot_self_clean_56": "Sterilno čiščenje 56°C",
"iot_simple_start": "Zaženi zdaj",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + samodejno",
"iot_uv_and_cool": "UV + hlajenje",
"iot_uv_and_dry": "UV + razvlaževanje",
"iot_uv_and_fan": "UV + ventilator",
"iot_uv_and_heat": "UV + gretje"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Hladilnik", "name": "Hladilnik",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Klima uređaj" "name": "Klima uređaj",
"state_attributes": {
"preset_mode": {
"name": "Programi",
"state": {
"iot_10_heating": "Funkcija grejanja 10° C",
"iot_auto": "Automatski",
"iot_cool": "Hlađenje",
"iot_dry": "Sušenje",
"iot_fan": "Ventilator",
"iot_heat": "Toplota",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Samopročišćavanje",
"iot_self_clean": "Samočišćenje",
"iot_self_clean_56": "Sterilno čišćenje 56°C",
"iot_simple_start": "Pokrenuti sada",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + automatsko",
"iot_uv_and_cool": "UV+ hladno",
"iot_uv_and_dry": "UV + odvlaživač",
"iot_uv_and_fan": "UV + ventilator",
"iot_uv_and_heat": "UV + toplota"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Frižider", "name": "Frižider",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "Klima" "name": "Klima",
"state_attributes": {
"preset_mode": {
"name": "Programlar",
"state": {
"iot_10_heating": "10°C Isıtma fonksiyonu",
"iot_auto": "Otomatik",
"iot_cool": "Soğuk",
"iot_dry": "Kuru",
"iot_fan": "Fan",
"iot_heat": "Isı",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "Kendi kendini arındırma",
"iot_self_clean": "Kendi kendini temizleme",
"iot_self_clean_56": "Steril Temizleme 56°C",
"iot_simple_start": "Şimdi başlat",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + Otomatik",
"iot_uv_and_cool": "UV + Soğuk",
"iot_uv_and_dry": "UV + Nem giderici",
"iot_uv_and_fan": "UV + Fan",
"iot_uv_and_heat": "UV + Isıtma"
}
}
}
}, },
"fridge": { "fridge": {
"name": "Buzdolabı", "name": "Buzdolabı",

View File

@ -1839,7 +1839,31 @@
}, },
"climate": { "climate": {
"air_conditioner": { "air_conditioner": {
"name": "空调" "name": "空调",
"state_attributes": {
"preset_mode": {
"name": "程序",
"state": {
"iot_10_heating": "10°C 加热功能",
"iot_auto": "自动",
"iot_cool": "冷却",
"iot_dry": "烘干",
"iot_fan": "风扇",
"iot_heat": "加热",
"iot_nano_aqua": "Nano Aqua",
"iot_purify": "自净",
"iot_self_clean": "自洁",
"iot_self_clean_56": "无菌清洁 56°C",
"iot_simple_start": "立即启动",
"iot_uv": "UV",
"iot_uv_and_auto": "UV + 自动",
"iot_uv_and_cool": "UV + 制冷",
"iot_uv_and_dry": "UV + 减湿器",
"iot_uv_and_fan": "UV + 风扇",
"iot_uv_and_heat": "UV + 加热"
}
}
}
}, },
"fridge": { "fridge": {
"name": "冰箱", "name": "冰箱",

11
info.md
View File

@ -10,11 +10,12 @@ Support for home appliances of [Haier's mobile app hOn](https://hon-smarthome.co
- [Washer Dryer](https://github.com/Andre0512/hon#washer-dryer) - [Washer Dryer](https://github.com/Andre0512/hon#washer-dryer)
- [Oven](https://github.com/Andre0512/hon#oven) - [Oven](https://github.com/Andre0512/hon#oven)
- [Dish Washer](https://github.com/Andre0512/hon#dish-washer) - [Dish Washer](https://github.com/Andre0512/hon#dish-washer)
- [Air conditioner](https://github.com/Andre0512/hon#air-conditioner) - [Air Conditioner](https://github.com/Andre0512/hon#air-conditioner)
- [Fridge](https://github.com/Andre0512/hon#fridge) - [Fridge](https://github.com/Andre0512/hon#fridge)
- [Hob](https://github.com/Andre0512/hon#hob) [BETA] - [Induction Hob](https://github.com/Andre0512/hon#induction-hob) [BETA]
- [Hood](https://github.com/Andre0512/hon#hood) [BETA] - [Hood](https://github.com/Andre0512/hon#hood) [BETA]
- [Wine Cellar](https://github.com/Andre0512/hon#wine-cellar) [BETA] - [Wine Cellar](https://github.com/Andre0512/hon#wine-cellar) [BETA]
- [Air Purifier](https://github.com/Andre0512/hon#air-purifier) [BETA]
## Configuration ## Configuration
@ -27,13 +28,13 @@ _If the integration is not in the list, you need to clear the browser cache._
Support has been confirmed for these models, but many more will work. Please add already supported devices [with this form to complete the list](https://forms.gle/bTSD8qFotdZFytbf8). Support has been confirmed for these models, but many more will work. Please add already supported devices [with this form to complete the list](https://forms.gle/bTSD8qFotdZFytbf8).
| | **Haier** | **Hoover** | **Candy** | | | **Haier** | **Hoover** | **Candy** |
|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------| |---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|
| **Washing Machine** | HW90-B14TEAM5 <br/> HW100-B14959U1 | H-WASH 500 <br/> H7W4 48MBC-S | CO4 107T1/2-07 <br/> RO44 1286DWMC4-07 <br/> HW 68AMC/1-80 <br/> HWPD 69AMBC/1-S | | **Washing Machine** | HW90-B14TEAM5 <br/> HW100-B14959U1 | H-WASH 500 <br/> H7W4 48MBC-S | CO4 107T1/2-07 <br/> CBWO49TWME-S <br/> RO44 1286DWMC4-07 <br/> HW 68AMC/1-80 <br/> HWPD 69AMBC/1-S |
| **Tumble Dryer** | HD80-A3959 | H-DRY 500 <br/> H9A3TCBEXS-S <br/> HLE C10DCE-80 <br/> NDE H10A2TCE-80 <br/> NDE H9A2TSBEXS-S <br/> NDPHY10A2TCBEXSS | BCTDH7A1TE <br/> CSOE C10DE-80 <br/> ROE H9A3TCEX-S | | **Tumble Dryer** | HD80-A3959 | H-DRY 500 <br/> H9A3TCBEXS-S <br/> HLE C10DCE-80 <br/> NDE H10A2TCE-80 <br/> NDE H9A2TSBEXS-S <br/> NDPHY10A2TCBEXSS | BCTDH7A1TE <br/> CSOE C10DE-80 <br/> ROE H9A3TCEX-S |
| **Washer Dryer** | HWD100-B14979 | HWPS4954DAMR-11 | RPW41066BWMR/1-S | | **Washer Dryer** | HWD100-B14979 | HWPS4954DAMR-11 | RPW41066BWMR/1-S |
| **Oven** | HWO60SM2F3XH | HSOT3161WG | | | **Oven** | HWO60SM2F3XH | HSOT3161WG | |
| **Dish Washer** | XIB 3B2SFS-80 <br/> XIB 6B2D3FB | HFB 6B2S3FX | | | **Dish Washer** | XIB 3B2SFS-80 <br/> XIB 6B2D3FB | HFB 6B2S3FX | |
| **Air conditioner** | AD105S2SM3FA <br/> AS20HPL1HRA <br/> AS25PBAHRA <br/> AS25S2SF1FA-WH <br/> AS25TADHRA-2 <br/> AS35S2SF2FA-3 <br/> AS35TADHRA-2 <br/> AS35TAMHRA-C | | | | **Air Conditioner** | AD105S2SM3FA <br/> AS20HPL1HRA <br/> AS25PBAHRA <br/> AS25S2SF1FA-WH <br/> AS25TADHRA-2 <br/> AS35S2SF2FA-3 <br/> AS35TADHRA-2 <br/> AS35TAMHRA-C | | |
| **Fridge** | HFW7720ENMB | | CCE4T620EWU | | **Fridge** | HFW7720ENMB | | CCE4T620EWU |
| **Hob** | HA2MTSJ68MC | | CIS633SCTTWIFI | | **Hob** | HA2MTSJ68MC | | CIS633SCTTWIFI |
| **Hood** | HADG6DS46BWIFI | | | | **Hood** | HADG6DS46BWIFI | | |

View File

@ -22,21 +22,21 @@ from custom_components.hon.switch import (
) )
APPLIANCES = { APPLIANCES = {
"AC": "Air conditioner", "AC": "Air Conditioner",
"AP": "Air purifier", "AP": "Air Purifier",
"AS": "Air scanner", "AS": "Air Scanner",
"DW": "Dish washer", "DW": "Dish Washer",
"HO": "Hood", "HO": "Hood",
"IH": "Hob", "IH": "Induction Hob",
"MW": "Microwave", "MW": "Microwave",
"OV": "Oven", "OV": "Oven",
"REF": "Fridge", "REF": "Fridge",
"RVC": "Robot vacuum cleaner", "RVC": "Robot Vacuum Cleaner",
"TD": "Tumble dryer", "TD": "Tumble Dryer",
"WC": "Wine Cellar", "WC": "Wine Cellar",
"WD": "Washer dryer", "WD": "Washer Dryer",
"WH": "Water Heater", "WH": "Water Heater",
"WM": "Washing machine", "WM": "Washing Machine",
} }
ENTITY_CATEGORY_SORT = ["control", "config", "sensor"] ENTITY_CATEGORY_SORT = ["control", "config", "sensor"]

View File

@ -159,6 +159,12 @@ CLIMATE = {
"state": "PROGRAMS.OV", "state": "PROGRAMS.OV",
} }
}, },
"air_conditioner": {
"preset_mode": {
"name": "OV.TABS.PROGRAMS_TITLE",
"state": "PROGRAMS.AC",
}
},
"wine": { "wine": {
"preset_mode": { "preset_mode": {
"name": "WC.NAME", "name": "WC.NAME",