Compare commits

..

3 Commits

Author SHA1 Message Date
a9e21608d8 Fix for setting some climate modes #84 2023-07-11 00:17:55 +02:00
fb8fba259a Add hygiene switch #91 2023-07-10 01:00:57 +02:00
9dc98953a2 Add dirt level select entity 2023-07-10 00:48:57 +02:00
26 changed files with 273 additions and 15 deletions

View File

@ -424,6 +424,7 @@ For every device exists a button under diagnostics which can be used to log all
| Auto Dose Softener | `teddy-bear` | `switch` | `startProgram.autoSoftenerStatus` |
| Delay Status | `timer-check` | `switch` | `startProgram.delayStatus` |
| Delay Time | `timer-plus` | `number` | `startProgram.delayTime` |
| Dirty level | `liquid-spot` | `select` | `startProgram.dirtyLevel` |
| Dry Time | | `number` | `startProgram.dryTime` |
| Dry Time | `timer` | `select` | `startProgram.dryTimeMM` |
| Dry level | `hair-dryer` | `select` | `startProgram.dryLevel` |
@ -432,6 +433,7 @@ For every device exists a button under diagnostics which can be used to log all
| Extra Rinse 2 | `numeric-2-box-multiple-outline` | `switch` | `startProgram.extraRinse2` |
| Extra Rinse 3 | `numeric-3-box-multiple-outline` | `switch` | `startProgram.extraRinse3` |
| Good Night | `weather-night` | `switch` | `startProgram.goodNight` |
| Hygiene | `lotion-plus` | `switch` | `startProgram.hygiene` |
| Keep Fresh | `refresh-circle` | `switch` | `startProgram.permanentPressStatus` |
| Liquid Detergent Dose | `cup-water` | `sensor` | `startProgram.liquidDetergentDose` |
| Main Wash Time | `clock-start` | `number` | `startProgram.mainWashTime` |
@ -459,7 +461,7 @@ For every device exists a button under diagnostics which can be used to log all
| Current Electricity Used | `lightning-bolt` | `sensor` | `currentElectricityUsed` |
| Current Temperature | `thermometer` | `sensor` | `temp` |
| Current Water Used | `water` | `sensor` | `currentWaterUsed` |
| Dirt level | `liquid-spot` | `sensor` | `dirtyLevel` |
| Dirty level | `liquid-spot` | `sensor` | `dirtyLevel` |
| Door | | `binary_sensor` | `doorStatus` |
| Door Lock | | `binary_sensor` | `doorLockStatus` |
| Dry level | `hair-dryer` | `sensor` | `dryLevel` |
@ -496,11 +498,13 @@ For every device exists a button under diagnostics which can be used to log all
| Auto Dose Softener | `teddy-bear` | `switch` | `startProgram.autoSoftenerStatus` |
| Delay Status | `timer-check` | `switch` | `startProgram.delayStatus` |
| Delay Time | `timer-plus` | `number` | `startProgram.delayTime` |
| Dirty level | `liquid-spot` | `select` | `startProgram.dirtyLevel` |
| Energy Label | `lightning-bolt-circle` | `sensor` | `startProgram.energyLabel` |
| Extra Rinse 1 | `numeric-1-box-multiple-outline` | `switch` | `startProgram.extraRinse1` |
| Extra Rinse 2 | `numeric-2-box-multiple-outline` | `switch` | `startProgram.extraRinse2` |
| Extra Rinse 3 | `numeric-3-box-multiple-outline` | `switch` | `startProgram.extraRinse3` |
| Good Night | `weather-night` | `switch` | `startProgram.goodNight` |
| Hygiene | `lotion-plus` | `switch` | `startProgram.hygiene` |
| Keep Fresh | `refresh-circle` | `switch` | `startProgram.permanentPressStatus` |
| Liquid Detergent Dose | `cup-water` | `sensor` | `startProgram.liquidDetergentDose` |
| Main Wash Time | `clock-start` | `number` | `startProgram.mainWashTime` |
@ -523,7 +527,7 @@ For every device exists a button under diagnostics which can be used to log all
| Current Electricity Used | `lightning-bolt` | `sensor` | `currentElectricityUsed` |
| Current Temperature | `thermometer` | `sensor` | `temp` |
| Current Water Used | `water` | `sensor` | `currentWaterUsed` |
| Dirt level | `liquid-spot` | `sensor` | `dirtyLevel` |
| Dirty level | `liquid-spot` | `sensor` | `dirtyLevel` |
| Door | | `binary_sensor` | `doorStatus` |
| Door Lock | | `binary_sensor` | `doorLockStatus` |
| Error | `math-log` | `sensor` | `errors` |

View File

@ -6,7 +6,6 @@ from homeassistant.components.climate import (
ClimateEntityDescription,
)
from homeassistant.components.climate.const import (
FAN_OFF,
SWING_OFF,
SWING_BOTH,
SWING_VERTICAL,
@ -22,7 +21,7 @@ from homeassistant.const import (
from homeassistant.core import callback
from pyhon.appliance import HonAppliance
from .const import HON_HVAC_MODE, HON_FAN, DOMAIN
from .const import HON_HVAC_MODE, HON_FAN, DOMAIN, HON_HVAC_PROGRAM
from .hon import HonEntity
_LOGGER = logging.getLogger(__name__)
@ -123,9 +122,6 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
self._attr_preset_modes = []
for mode in device.settings["startProgram.program"].values:
self._attr_preset_modes.append(mode)
self._attr_fan_modes = [FAN_OFF]
for mode in device.settings["settings.windSpeed"].values:
self._attr_fan_modes.append(HON_FAN[int(mode)])
self._attr_swing_modes = [
SWING_OFF,
SWING_VERTICAL,
@ -181,7 +177,11 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
self._device.settings["settings.onOffStatus"].value = "1"
setting = self._device.settings["settings.machMode"]
modes = {HON_HVAC_MODE[int(number)]: number for number in setting.values}
setting.value = modes[hvac_mode]
if hvac_mode in modes:
setting.value = modes[hvac_mode]
else:
await self.async_set_preset_mode(HON_HVAC_PROGRAM[hvac_mode])
return
await self._device.commands["settings"].send()
self.async_write_ha_state()
@ -192,7 +192,7 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
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"):
if program := self._device.settings.get("startProgram.program"):
program.value = preset_mode
self._device.sync_command("startProgram", "settings")
self._set_temperature_bound()
@ -202,15 +202,24 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
await self._device.commands["startProgram"].send()
self.async_write_ha_state()
@property
def fan_modes(self) -> list[str]:
"""Return the list of available fan modes."""
fan_modes = []
for mode in reversed(self._device.settings["settings.windSpeed"].values):
fan_modes.append(HON_FAN[int(mode)])
return fan_modes
@property
def fan_mode(self) -> str | None:
"""Return the fan setting."""
return HON_FAN[self._device.get("windSpeed")]
async def async_set_fan_mode(self, fan_mode):
mode_number = list(HON_FAN.values()).index(fan_mode)
mode = list(HON_FAN.keys())[mode_number]
self._device.settings["settings.windSpeed"].value = str(mode)
fan_modes = {}
for mode in reversed(self._device.settings["settings.windSpeed"].values):
fan_modes[HON_FAN[int(mode)]] = mode
self._device.settings["settings.windSpeed"].value = str(fan_modes[fan_mode])
self._attr_fan_mode = fan_mode
await self._device.commands["settings"].send()
self.async_write_ha_state()
@ -249,6 +258,7 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
self._attr_target_temperature = self.target_temperature
self._attr_current_temperature = self.current_temperature
self._attr_hvac_mode = self.hvac_mode
self._attr_fan_modes = self.fan_modes
self._attr_fan_mode = self.fan_mode
self._attr_swing_mode = self.swing_mode
if update:

View File

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

View File

@ -56,6 +56,13 @@ SELECTS = {
translation_key="steam_level",
option_list=const.STEAM_LEVEL,
),
HonConfigSelectEntityDescription(
key="startProgram.dirtyLevel",
name="Dirty level",
icon="mdi:liquid-spot",
translation_key="dirt_level",
option_list=const.DIRTY_LEVEL,
),
),
"TD": (
HonConfigSelectEntityDescription(

View File

@ -157,7 +157,7 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
),
HonSensorEntityDescription(
key="dirtyLevel",
name="Dirt level",
name="Dirty level",
icon="mdi:liquid-spot",
device_class=SensorDeviceClass.ENUM,
translation_key="dirt_level",

View File

@ -116,6 +116,12 @@ SWITCHES: dict[str, tuple[HonSwitchEntityDescription, ...]] = {
icon="mdi:weather-night",
translation_key="good_night",
),
HonConfigSwitchEntityDescription(
key="startProgram.hygiene",
name="Hygiene",
icon="mdi:lotion-plus",
translation_key="hygiene",
),
),
"TD": (
HonControlSwitchEntityDescription(

View File

@ -1650,6 +1650,15 @@
"synthetic": "Synthetic"
},
"name": "Úroveň páry"
},
"dirt_level": {
"state": {
"little": "Málo",
"normal": "Normální",
"very": "Velmi",
"unknown": "unknown"
},
"name": "Míra znečištění"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Hlasitost tónu klepnutí"
},
"hygiene": {
"name": "Hygienický plus"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Synthetik"
},
"name": "Dampfstufe"
},
"dirt_level": {
"state": {
"little": "Wenig",
"normal": "Normal",
"very": "Sehr",
"unknown": "unknown"
},
"name": "Verschmutzungsgrad"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Tastentonlautstärke"
},
"hygiene": {
"name": "Hygiene plus"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Συνθετικά"
},
"name": "Επίπεδο ατμού"
},
"dirt_level": {
"state": {
"little": "Λίγη",
"normal": "Κανονική",
"very": "Πολύ",
"unknown": "unknown"
},
"name": "Επίπεδο βρωμιάς"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Ένταση τόνου αφής"
},
"hygiene": {
"name": "Hygiene plus"
}
},
"binary_sensor": {

View File

@ -1677,6 +1677,15 @@
"synthetic": "Synthetic"
},
"name": "Steam Level"
},
"dirt_level": {
"state": {
"little": "Little",
"normal": "Normal",
"very": "Very",
"unknown": "unknown"
},
"name": "Dirt level"
}
},
"switch": {
@ -1790,6 +1799,9 @@
},
"touch_tone": {
"name": "Touch tone volume"
},
"hygiene": {
"name": "Hygiene plus"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Synthetic"
},
"name": "Nivel de vapor"
},
"dirt_level": {
"state": {
"little": "Poco",
"normal": "Normal",
"very": "Mucho",
"unknown": "unknown"
},
"name": "Nivel de suciedad"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Volumen del tono táctil"
},
"hygiene": {
"name": "Higiene extra"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Synthetic"
},
"name": "Niveau de vapeur"
},
"dirt_level": {
"state": {
"little": "Faible",
"normal": "Normal",
"very": "Élevé",
"unknown": "unknown"
},
"name": "Niveau de saleté"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Volume des tonalités"
},
"hygiene": {
"name": "Hygiène plus"
}
},
"binary_sensor": {

View File

@ -771,6 +771,15 @@
"synthetic": "מְלָאכוּתִי"
},
"name": "מפלס קיטור"
},
"dirt_level": {
"state": {
"little": "קטן",
"normal": "נוֹרמָלִי",
"very": "מאוד",
"unknown": "unknown"
},
"name": "רמת עפר"
}
},
"switch": {
@ -884,6 +893,9 @@
},
"touch_tone": {
"name": "Touch tone volume"
},
"hygiene": {
"name": "היגיינה פלוס"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Sintetika"
},
"name": "Razina pare"
},
"dirt_level": {
"state": {
"little": "Neznatno",
"normal": "Uobičajeno",
"very": "Izuzetno",
"unknown": "unknown"
},
"name": "Stupanj zaprljanosti"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Glasnoća tona pri dodiru"
},
"hygiene": {
"name": "Hygiene Plus"
}
},
"binary_sensor": {

View File

@ -1655,6 +1655,15 @@
"synthetic": "Sintetici"
},
"name": "Livello vapore"
},
"dirt_level": {
"state": {
"little": "Poco",
"normal": "Normale",
"very": "Molto",
"unknown": "unknown"
},
"name": "Livello di sporco"
}
},
"switch": {
@ -1768,6 +1777,9 @@
},
"touch_tone": {
"name": "Volume Tasti"
},
"hygiene": {
"name": "Hygiene plus"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Synthetic"
},
"name": "Stoomniveau"
},
"dirt_level": {
"state": {
"little": "Weinig",
"normal": "Normaal",
"very": "Heel",
"unknown": "unknown"
},
"name": "Vuilheid"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Volume van geluid bij aanraking"
},
"hygiene": {
"name": "Hygiëne plus"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Syntetyczne"
},
"name": "Poziom pary"
},
"dirt_level": {
"state": {
"little": "Niskie",
"normal": "Standardowe",
"very": "Wysokie",
"unknown": "unknown"
},
"name": "Stopień zabrudzenia"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Dźwięk przycisku dotykowego"
},
"hygiene": {
"name": "Higiena plus"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Sintéticos"
},
"name": "Nível de vapor"
},
"dirt_level": {
"state": {
"little": "Pouco",
"normal": "Normal",
"very": "Muito",
"unknown": "unknown"
},
"name": "Nível de sujidade"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Volume do tom de toque"
},
"hygiene": {
"name": "Higiene mais"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Synthetic"
},
"name": "Nivel abur"
},
"dirt_level": {
"state": {
"little": "Puțin",
"normal": "Normal",
"very": "Foarte",
"unknown": "unknown"
},
"name": "Nivel de murdărie"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Volum la atingerea tastelor"
},
"hygiene": {
"name": "Igienizare plus"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Синтетика"
},
"name": "Уровень пара"
},
"dirt_level": {
"state": {
"little": "Мало",
"normal": "Нормально",
"very": "Очень",
"unknown": "unknown"
},
"name": "Уровень загрязнения"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Громкость сенсорных кнопок"
},
"hygiene": {
"name": "Гигиена плюс"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Synthetic"
},
"name": "Úroveň nastavenia pary"
},
"dirt_level": {
"state": {
"little": "Málo",
"normal": "Normálne",
"very": "Veľa",
"unknown": "unknown"
},
"name": "Úroveň znečistenia"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Hlasitosť tónu dotyku"
},
"hygiene": {
"name": "Hygiena plus"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Sintetika"
},
"name": "Količina pare"
},
"dirt_level": {
"state": {
"little": "Malo",
"normal": "Normalno",
"very": "Zelo",
"unknown": "unknown"
},
"name": "Stopnja umazanije"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Glasnost tona dotika"
},
"hygiene": {
"name": "Higiena plus"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Sintetika"
},
"name": "Nivo pare"
},
"dirt_level": {
"state": {
"little": "Malo",
"normal": "Normalno",
"very": "Veoma",
"unknown": "unknown"
},
"name": "Nivo zaprljanosti"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Jačina tona dodira"
},
"hygiene": {
"name": "Higijenski plus"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Synthetic"
},
"name": "Buhar Seviyesi"
},
"dirt_level": {
"state": {
"little": "Az",
"normal": "Normal",
"very": "Çok",
"unknown": "unknown"
},
"name": "Kir seviyesi"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "Dokunma tonu seviyesi"
},
"hygiene": {
"name": "Hygiene plus"
}
},
"binary_sensor": {

View File

@ -1650,6 +1650,15 @@
"synthetic": "Synthetic"
},
"name": "蒸汽档位"
},
"dirt_level": {
"state": {
"little": "少量",
"normal": "正常",
"very": "非常",
"unknown": "unknown"
},
"name": "脏污程度"
}
},
"switch": {
@ -1763,6 +1772,9 @@
},
"touch_tone": {
"name": "按键音量"
},
"hygiene": {
"name": "卫生增强"
}
},
"binary_sensor": {

View File

@ -129,6 +129,7 @@ SELECT = {
"steam_level": STEAM_LEVEL,
"mode": AP_MACH_MODE,
"diffuser": AP_DIFFUSER_LEVEL,
"dirt_level": DIRTY_LEVEL,
}
PROGRAMS = {
@ -239,6 +240,7 @@ NAMES = {
"super_freeze": "REF_CMD&CTRL.MODALITIES.SUPER_FREEZE",
"refrigerator": "REF.NAME",
"touch_tone": "AP.FOOTER_MENU_MORE.TOUCH_TONE_VOLUME",
"hygiene": "WASHING_CMD&CTRL.PROGRAM_CYCLE_DETAIL_OTHER_OPTIONS.HYGIENE",
},
"binary_sensor": {
"door_lock": "WASHING_CMD&CTRL.CHECK_UP_RESULTS.DOOR_LOCK",
@ -291,6 +293,7 @@ NAMES = {
"diffuser": "AP.TITLES.DIFFUSER",
"mode": "CUBE90_GLOBAL.GENERAL.MODE",
"steam_level": "WASHING_CMD&CTRL.PROGRAM_CYCLE_DETAIL_MAIN_OPTIONS.STEAM_LEVEL",
"dirt_level": "WASHING_CMD&CTRL.PROGRAM_CYCLE_DETAIL_MAIN_OPTIONS.DIRTY_LEVEL",
},
"sensor": {
"dry_levels": "WASHING_CMD&CTRL.DRAWER_CYCLE_DRYING.TAB_LEVEL",