Compare commits

...

3 Commits

Author SHA1 Message Date
79e901d34c Bump version 2023-07-12 00:23:28 +02:00
fb09c2e559 Improve hood controls 2023-07-12 00:20:35 +02:00
f3325f0ff5 Improve icons/translations of air purifier #72 2023-07-12 00:18:44 +02:00
29 changed files with 346 additions and 35 deletions

View File

@ -45,7 +45,7 @@ Support has been confirmed for these models, but many more will work. Please add
| **Washer Dryer** | HWD100-B14979 | HDQ 496AMBS/1-S <br/> HWPS4954DAMR-11 | RPW41066BWMR/1-S |
| **Oven** | HWO60SM2F3XH | HSOT3161WG | |
| **Dish Washer** | XIB 3B2SFS-80 <br/> XIB 6B2D3FB | HFB 6B2S3FX | |
| **Air Conditioner** | AD105S2SM3FA <br/> AS09TS4HRA-M <br/> AS20HPL1HRA <br/> AS25PBAHRA <br/> AS25S2SF1FA-WH <br/> AS25TADHRA-2 <br/> AS35PBAHRA <br/> AS35S2SF1FA-WH <br/> AS35S2SF2FA-3 <br/> AS35TADHRA-2 <br/> AS35TAMHRA-C | | |
| **Air Conditioner** | AD105S2SM3FA <br/> AS09TS4HRA-M <br/> AS20HPL1HRA <br/> AS25PBAHRA <br/> AS25S2SF1FA-WH <br/> AS25TADHRA-2 <br/> AS35PBAHRA <br/> AS35S2SF1FA-WH <br/> AS35S2SF2FA-3 <br/> AS35TADHRA-2 <br/> AS35TAMHRA-C | | CY-12TAIN |
| **Fridge** | HFW7720ENMB | | CCE4T620EWU |
| **Hob** | HA2MTSJ68MC | | CIS633SCTTWIFI |
| **Hood** | HADG6DS46BWIFI | | |
@ -181,7 +181,7 @@ For every device exists a button under diagnostics which can be used to log all
| --- | --- | --- | --- |
| Aroma Time Off | `scent-off` | `number` | `settings.aromaTimeOff` |
| Aroma Time On | `scent` | `number` | `settings.aromaTimeOn` |
| Diffuser Level | `air-filter` | `select` | `settings.aromaStatus` |
| Diffuser Level | `air-purifier` | `select` | `settings.aromaStatus` |
| Light status | | `light` | `settings.lightStatus` |
| Lock Status | | `lock` | `lockStatus` |
| Mode | `play` | `select` | `settings.machMode` |
@ -190,19 +190,19 @@ For every device exists a button under diagnostics which can be used to log all
#### Sensors
| Name | Icon | Entity | Key |
| --- | --- | --- | --- |
| Air Quality | | `sensor` | `airQuality` |
| Air Quality | `weather-dust` | `sensor` | `airQuality` |
| CO Level | | `sensor` | `coLevel` |
| Error | `math-log` | `sensor` | `errors` |
| Humidity | | `sensor` | `humidityIndoor` |
| Main Filter Status | | `sensor` | `mainFilterStatus` |
| Main Filter Status | `air-filter` | `sensor` | `mainFilterStatus` |
| On | `power-cycle` | `binary_sensor` | `attributes.parameters.onOffStatus` |
| PM 10 | | `sensor` | `pm10ValueIndoor` |
| PM 2.5 | | `sensor` | `pm2p5ValueIndoor` |
| Pre Filter Status | | `sensor` | `preFilterStatus` |
| Pre Filter Status | `air-filter` | `sensor` | `preFilterStatus` |
| Temperature | | `sensor` | `temp` |
| Total Work Time | | `sensor` | `totalWorkTime` |
| VOC | | `sensor` | `vocValueIndoor` |
| Wind Speed | | `sensor` | `windSpeed` |
| Wind Speed | `fan` | `sensor` | `windSpeed` |
### Dish Washer
#### Controls
@ -247,9 +247,8 @@ For every device exists a button under diagnostics which can be used to log all
#### Controls
| Name | Icon | Entity | Key |
| --- | --- | --- | --- |
| Light status | | `light` | `startProgram.lightStatus` |
| Start Program | `hvac` | `button` | `startProgram` |
| Stop Program | `hvac-off` | `button` | `stopProgram` |
| Hood | `hvac` | `switch` | `startProgram` / `stopProgram` |
| Light status | | `light` | `settings.lightStatus` |
| Wind Speed | | `fan` | `settings.windSpeed` |
#### Sensors
| Name | Icon | Entity | Key |

View File

@ -35,20 +35,6 @@ BUTTONS: dict[str, tuple[ButtonEntityDescription, ...]] = {
translation_key="stop_program",
),
),
"HO": (
ButtonEntityDescription(
key="startProgram",
name="Start Program",
icon="mdi:hvac",
translation_key="start_program",
),
ButtonEntityDescription(
key="stopProgram",
name="Stop Program",
icon="mdi:hvac-off",
translation_key="stop_program",
),
),
}

View File

@ -63,10 +63,6 @@ class HonFanEntity(HonEntity, FanEntity):
def __init__(self, hass, entry, device: HonAppliance, description) -> None:
self._attr_supported_features = FanEntityFeature.SET_SPEED
self._wind_speed: HonParameterRange = device.settings.get(description.key)
self._speed_range = (
int(self._wind_speed.values[1]),
int(self._wind_speed.values[-1]),
)
self._command, self._parameter = description.key.split(".")
super().__init__(hass, entry, device, description)
@ -118,6 +114,15 @@ class HonFanEntity(HonEntity, FanEntity):
@callback
def _handle_coordinator_update(self, update=True) -> None:
self._wind_speed = self._device.settings.get(self.entity_description.key)
self._attr_percentage = self.percentage
if len(self._wind_speed.values) > 1:
self._speed_range = (
int(self._wind_speed.values[1]),
int(self._wind_speed.values[-1]),
)
self._attr_percentage = self.percentage
if update:
self.async_write_ha_state()
@property
def available(self) -> bool:
return super().available and len(self._wind_speed.values) > 1

View File

@ -28,7 +28,7 @@ LIGHTS = {
),
"HO": (
LightEntityDescription(
key="startProgram.lightStatus",
key="settings.lightStatus",
name="Light status",
translation_key="light",
),
@ -76,8 +76,7 @@ class HonLightEntity(HonEntity, LightEntity):
@property
def is_on(self) -> bool:
"""Return true if light is on."""
light = self._device.settings.get(self.entity_description.key)
return light.value != light.min
return self._device.get(self.entity_description.key.split(".")[-1]) > 0
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn on or control the light."""
@ -120,3 +119,10 @@ class HonLightEntity(HonEntity, LightEntity):
self._attr_brightness = self.brightness
if update:
self.async_write_ha_state()
@property
def available(self) -> bool:
return (
super().available
and len(self._device.settings.get(self.entity_description.key).values) > 1
)

View File

@ -11,5 +11,5 @@
"requirements": [
"pyhOn==0.14.9"
],
"version": "0.9.0-beta.10"
"version": "0.9.0"
}

View File

@ -153,7 +153,7 @@ SELECTS = {
name="Diffuser Level",
option_list=const.AP_DIFFUSER_LEVEL,
translation_key="diffuser",
icon="mdi:air-filter",
icon="mdi:air-purifier",
),
HonSelectEntityDescription(
key="settings.machMode",

View File

@ -688,11 +688,15 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
HonSensorEntityDescription(
key="mainFilterStatus",
name="Main Filter Status",
icon="mdi:air-filter",
translation_key="filter_life",
native_unit_of_measurement=PERCENTAGE,
),
HonSensorEntityDescription(
key="preFilterStatus",
name="Pre Filter Status",
icon="mdi:air-filter",
translation_key="filter_cleaning",
native_unit_of_measurement=PERCENTAGE,
),
HonSensorEntityDescription(
@ -746,10 +750,17 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_key="temperature",
),
HonSensorEntityDescription(key="windSpeed", name="Wind Speed"),
HonSensorEntityDescription(
key="windSpeed",
name="Wind Speed",
icon="mdi:fan",
translation_key="fan_speed",
),
HonSensorEntityDescription(
key="airQuality",
name="Air Quality",
icon="mdi:weather-dust",
translation_key="air_quality",
),
),
}

View File

@ -337,6 +337,16 @@ SWITCHES: dict[str, tuple[HonSwitchEntityDescription, ...]] = {
translation_key="holiday_mode",
),
),
"HO": (
HonControlSwitchEntityDescription(
key="onOffStatus",
name="Hood",
icon="mdi:hvac",
turn_on_key="startProgram",
turn_off_key="stopProgram",
translation_key="hood",
),
),
"AP": (
HonSwitchEntityDescription(
key="touchToneStatus",
@ -438,11 +448,15 @@ class HonControlSwitchEntity(HonEntity, SwitchEntity):
return self._device.get(self.entity_description.key, False)
async def async_turn_on(self, **kwargs: Any) -> None:
self._device.sync_command(self.entity_description.turn_on_key, "settings")
await self.coordinator.async_refresh()
await self._device.commands[self.entity_description.turn_on_key].send()
self._device.attributes[self.entity_description.key] = True
self.async_write_ha_state()
async def async_turn_off(self, **kwargs: Any) -> None:
self._device.sync_command(self.entity_description.turn_off_key, "settings")
await self.coordinator.async_refresh()
await self._device.commands[self.entity_description.turn_off_key].send()
self._device.attributes[self.entity_description.key] = False
self.async_write_ha_state()

View File

@ -875,6 +875,18 @@
"synthetic": "Synthetic"
},
"name": "Úroveň páry"
},
"filter_cleaning": {
"name": "Čištění filtru"
},
"filter_life": {
"name": "Životnost filtru"
},
"air_quality": {
"name": "Kvalita vzduchu"
},
"fan_speed": {
"name": "Rychlost ventilátoru"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Hygienický plus"
},
"hood": {
"name": "Odsavač par"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Synthetik"
},
"name": "Dampfstufe"
},
"filter_cleaning": {
"name": "Reinigung der Filter"
},
"filter_life": {
"name": "Filterlebensdauer"
},
"air_quality": {
"name": "Luftqualität"
},
"fan_speed": {
"name": "Gebläsegeschwindigkeit"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Hygiene plus"
},
"hood": {
"name": "Abzugshaube"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Συνθετικά"
},
"name": "Επίπεδο ατμού"
},
"filter_cleaning": {
"name": "Καθαρισμός φίλτρου"
},
"filter_life": {
"name": "Φιλτράρετε τη ζωή"
},
"air_quality": {
"name": "Ποιότητα αέρα"
},
"fan_speed": {
"name": "Ταχύτητα ανεμιστήρα"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Hygiene plus"
},
"hood": {
"name": "Απορροφητήρας"
}
},
"binary_sensor": {

View File

@ -895,6 +895,18 @@
"synthetic": "Synthetic"
},
"name": "Steam Level"
},
"filter_cleaning": {
"name": "Filter cleaning"
},
"filter_life": {
"name": "Filter life"
},
"air_quality": {
"name": "Air Quality"
},
"fan_speed": {
"name": "Fan speed"
}
},
"select": {
@ -1802,6 +1814,9 @@
},
"hygiene": {
"name": "Hygiene plus"
},
"hood": {
"name": "Hood"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Synthetic"
},
"name": "Nivel de vapor"
},
"filter_cleaning": {
"name": "Limpieza del filtro"
},
"filter_life": {
"name": "Vida del filtro"
},
"air_quality": {
"name": "Calidad del aire"
},
"fan_speed": {
"name": "Velocidad del ventilador"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Higiene extra"
},
"hood": {
"name": "Campana extractora"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Synthetic"
},
"name": "Niveau de vapeur"
},
"filter_cleaning": {
"name": "Nettoyage du filtre"
},
"filter_life": {
"name": "Durée de vie du filtre"
},
"air_quality": {
"name": "Qualité dair"
},
"fan_speed": {
"name": "Vitesse du ventilateur"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Hygiène plus"
},
"hood": {
"name": "Hotte"
}
},
"binary_sensor": {

View File

@ -431,6 +431,18 @@
"synthetic": "מְלָאכוּתִי"
},
"name": "מפלס קיטור"
},
"filter_cleaning": {
"name": "Filter cleaning"
},
"filter_life": {
"name": "Filter life"
},
"air_quality": {
"name": "Air Quality"
},
"fan_speed": {
"name": "Fan speed"
}
},
"select": {
@ -896,6 +908,9 @@
},
"hygiene": {
"name": "היגיינה פלוס"
},
"hood": {
"name": "Hood"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Sintetika"
},
"name": "Razina pare"
},
"filter_cleaning": {
"name": "Čišćenje filtra"
},
"filter_life": {
"name": "Radni vijek filtra"
},
"air_quality": {
"name": "Kvaliteta zraka"
},
"fan_speed": {
"name": "Brzina ventilatora"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Hygiene Plus"
},
"hood": {
"name": "Napa"
}
},
"binary_sensor": {

View File

@ -880,6 +880,18 @@
"synthetic": "Sintetici"
},
"name": "Livello vapore"
},
"filter_cleaning": {
"name": "Pulizia del filtro"
},
"filter_life": {
"name": "Durata filtro"
},
"air_quality": {
"name": "Qualità dell'Aria"
},
"fan_speed": {
"name": "Velocità ventole"
}
},
"select": {
@ -1780,6 +1792,9 @@
},
"hygiene": {
"name": "Hygiene plus"
},
"hood": {
"name": "Cappa"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Synthetic"
},
"name": "Stoomniveau"
},
"filter_cleaning": {
"name": "Filterreiniging"
},
"filter_life": {
"name": "Levensduur filter"
},
"air_quality": {
"name": "Luchtkwaliteit"
},
"fan_speed": {
"name": "Ventilatorsnelheid"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Hygiëne plus"
},
"hood": {
"name": "Afzuigkap"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Syntetyczne"
},
"name": "Poziom pary"
},
"filter_cleaning": {
"name": "Czyszczenie filtra"
},
"filter_life": {
"name": "Żywotność filtra"
},
"air_quality": {
"name": "Jakość powietrza"
},
"fan_speed": {
"name": "Prędkość wentylatora"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Higiena plus"
},
"hood": {
"name": "Okap"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Sintéticos"
},
"name": "Nível de vapor"
},
"filter_cleaning": {
"name": "Limpeza do filtro"
},
"filter_life": {
"name": "Vida do filtro"
},
"air_quality": {
"name": "Qualidade do ar"
},
"fan_speed": {
"name": "Velocidade da bomba"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Higiene mais"
},
"hood": {
"name": "Exaustor"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Synthetic"
},
"name": "Nivel abur"
},
"filter_cleaning": {
"name": "Curățarea filtrului"
},
"filter_life": {
"name": "Viața filtrului"
},
"air_quality": {
"name": "Calitatea aerului"
},
"fan_speed": {
"name": "Viteza ventilatorului"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Igienizare plus"
},
"hood": {
"name": "Hotă"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Синтетика"
},
"name": "Уровень пара"
},
"filter_cleaning": {
"name": "Чистка фильтра"
},
"filter_life": {
"name": "Срок службы фильтра"
},
"air_quality": {
"name": "Качество воздуха"
},
"fan_speed": {
"name": "Скорость вентилятора"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Гигиена плюс"
},
"hood": {
"name": "Вытяжка"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Synthetic"
},
"name": "Úroveň nastavenia pary"
},
"filter_cleaning": {
"name": "Čistenie filtra"
},
"filter_life": {
"name": "Životnosť filtra"
},
"air_quality": {
"name": "Kvalita vzduchu"
},
"fan_speed": {
"name": "Rýchlosť ventilátora"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Hygiena plus"
},
"hood": {
"name": "Digestor"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Sintetika"
},
"name": "Količina pare"
},
"filter_cleaning": {
"name": "Čiščenje filtra"
},
"filter_life": {
"name": "Življenjska doba filtra"
},
"air_quality": {
"name": "Kakovost zraka"
},
"fan_speed": {
"name": "Hitrost ventilatorja"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Higiena plus"
},
"hood": {
"name": "Kuhinjska napa"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Sintetika"
},
"name": "Nivo pare"
},
"filter_cleaning": {
"name": "Čišćenje filtera"
},
"filter_life": {
"name": "Trajanje filtera"
},
"air_quality": {
"name": "Kvalitet vazduha"
},
"fan_speed": {
"name": "Brzina ventilatora"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Higijenski plus"
},
"hood": {
"name": "Aspirator"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Synthetic"
},
"name": "Buhar Seviyesi"
},
"filter_cleaning": {
"name": "Filtre temizliği"
},
"filter_life": {
"name": "Filtre ömrü"
},
"air_quality": {
"name": "Hava kalitesi"
},
"fan_speed": {
"name": "Fan hızı"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "Hygiene plus"
},
"hood": {
"name": "Davlumbaz"
}
},
"binary_sensor": {

View File

@ -875,6 +875,18 @@
"synthetic": "Synthetic"
},
"name": "蒸汽档位"
},
"filter_cleaning": {
"name": "滤网清洁"
},
"filter_life": {
"name": "过滤器寿命"
},
"air_quality": {
"name": "空气质量"
},
"fan_speed": {
"name": "风扇速度"
}
},
"select": {
@ -1775,6 +1787,9 @@
},
"hygiene": {
"name": "卫生增强"
},
"hood": {
"name": "机盖"
}
},
"binary_sensor": {

View File

@ -34,7 +34,7 @@ Support has been confirmed for these models, but many more will work. Please add
| **Washer Dryer** | HWD100-B14979 | HDQ 496AMBS/1-S <br/> HWPS4954DAMR-11 | RPW41066BWMR/1-S |
| **Oven** | HWO60SM2F3XH | HSOT3161WG | |
| **Dish Washer** | XIB 3B2SFS-80 <br/> XIB 6B2D3FB | HFB 6B2S3FX | |
| **Air Conditioner** | AD105S2SM3FA <br/> AS09TS4HRA-M <br/> AS20HPL1HRA <br/> AS25PBAHRA <br/> AS25S2SF1FA-WH <br/> AS25TADHRA-2 <br/> AS35PBAHRA <br/> AS35S2SF1FA-WH <br/> AS35S2SF2FA-3 <br/> AS35TADHRA-2 <br/> AS35TAMHRA-C | | |
| **Air Conditioner** | AD105S2SM3FA <br/> AS09TS4HRA-M <br/> AS20HPL1HRA <br/> AS25PBAHRA <br/> AS25S2SF1FA-WH <br/> AS25TADHRA-2 <br/> AS35PBAHRA <br/> AS35S2SF1FA-WH <br/> AS35S2SF2FA-3 <br/> AS35TADHRA-2 <br/> AS35TAMHRA-C | | CY-12TAIN |
| **Fridge** | HFW7720ENMB | | CCE4T620EWU |
| **Hob** | HA2MTSJ68MC | | CIS633SCTTWIFI |
| **Hood** | HADG6DS46BWIFI | | |

View File

@ -241,6 +241,7 @@ NAMES = {
"refrigerator": "REF.NAME",
"touch_tone": "AP.FOOTER_MENU_MORE.TOUCH_TONE_VOLUME",
"hygiene": "WASHING_CMD&CTRL.PROGRAM_CYCLE_DETAIL_OTHER_OPTIONS.HYGIENE",
"hood": "GLOBALS.APPLIANCES_NAME.HO",
},
"binary_sensor": {
"door_lock": "WASHING_CMD&CTRL.CHECK_UP_RESULTS.DOOR_LOCK",
@ -350,6 +351,10 @@ NAMES = {
"programs_ac": "WC.SET_PROGRAM.PROGRAM",
"programs_ref": "WC.SET_PROGRAM.PROGRAM",
"voc": "HINTS.WHAT_POLLUTES_THE_AIR_IN_OUR_HOMES.GAS_VOC_TITLE",
"filter_cleaning": "AP.MAINTENANCE.FILTER_CLEANING",
"filter_life": "AP.MAINTENANCE.FILTER_LIFE",
"air_quality": "AP.DISCOVER.AIR_QUALITY",
"fan_speed": "AP.TITLES.FAN_SPEED",
},
"number": {
"power_management": "HINTS.COOKING_WITH_INDUCTION.POWER_MANAGEMENT",