Compare commits

...

19 Commits

Author SHA1 Message Date
Vadym Melnychuk f66bd14ed1 remove old stuff 2024-08-22 18:32:04 +03:00
Vadym 9a3036b161 Merge branch 'main' into main 2024-08-22 18:23:28 +03:00
Andre Basche 70eb6c0111 Update manifest.json 2024-08-14 22:51:18 +02:00
Andre Basche 9bab35f8c4 Update manifest.json 2024-08-14 22:46:43 +02:00
zawadzkipiter 39fc30c95e Update pyhon to 0.17.5
fix for HA "Can't login" based on:
https://github.com/Andre0512/pyhOn/pull/29
2024-08-14 22:46:10 +02:00
Andre Basche 6906e751b1 Bump version 2024-04-09 22:49:49 +02:00
Andre Basche 6d2a6ce2e9 Fix unit of current elecricity #158 2024-03-30 23:16:54 +01:00
Andre Basche 0e166f3c66 Bump version 2024-03-30 20:26:08 +01:00
Andre Basche 54dd406ec2 Fix checks 2024-03-30 20:25:08 +01:00
Andre Basche a746584833 Fix unkown for 0 in number entity 2024-03-30 20:23:39 +01:00
Andre Basche 36aed2e6ea Fix update entity when changing config 2024-03-30 19:47:46 +01:00
Andre Basche 510c10bd9f Improve device info 2024-03-30 19:46:24 +01:00
Andre Basche 09189ff0f8 Change to new climate enity style, fix #165 2024-03-30 17:29:25 +01:00
Andre Basche 0e26b4a0f7 Fix applance connection handling 2024-03-29 14:48:35 +01:00
Vadym 085de726dd Merge branch 'Andre0512:main' into main 2024-02-26 10:53:36 +02:00
Vadym Melnychuk 5647cc24e6 fix black checks 2023-12-03 20:57:27 +02:00
Vadym Melnychuk 6ba50f8456 removed mode 2023-12-03 20:50:37 +02:00
Vadym Melnychuk 4772374db7 fix pipeline 2023-12-03 20:31:46 +02:00
Vadym Melnychuk 191bcedaa2 Water Heater 2023-12-03 18:13:45 +02:00
33 changed files with 603 additions and 39 deletions
+1 -1
View File
@@ -36,7 +36,7 @@ async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry) -> bool
password=entry.data[CONF_PASSWORD],
mobile_id=MOBILE_ID,
session=session,
# test_data_path=Path(config_dir),
test_data_path=Path(config_dir),
refresh_token=entry.data.get(CONF_REFRESH_TOKEN, ""),
).create()
+10
View File
@@ -285,6 +285,16 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = {
translation_key="on",
),
),
"WH": (
HonBinarySensorEntityDescription(
key="onOffStatus",
name="Power State",
icon="mdi:power-standby",
device_class=BinarySensorDeviceClass.POWER,
on_value=1,
translation_key="power-state",
),
),
"FRE": (
HonBinarySensorEntityDescription(
key="quickModeZ1",
+1 -1
View File
@@ -82,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
)
+20 -2
View File
@@ -126,6 +126,7 @@ async def async_setup_entry(
class HonACClimateEntity(HonEntity, ClimateEntity):
entity_description: HonACClimateEntityDescription
_enable_turn_on_off_backwards_compatibility = False
def __init__(
self,
@@ -211,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."""
@@ -223,7 +232,7 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
self._device.sync_command("startProgram", "settings")
self._set_temperature_bound()
self._handle_coordinator_update(update=False)
self.async_write_ha_state()
self.coordinator.async_set_updated_data({})
self._attr_preset_mode = preset_mode
await self._device.commands["startProgram"].send()
self.async_write_ha_state()
@@ -286,6 +295,7 @@ class HonACClimateEntity(HonEntity, ClimateEntity):
class HonClimateEntity(HonEntity, ClimateEntity):
entity_description: HonClimateEntityDescription
_enable_turn_on_off_backwards_compatibility = False
def __init__(
self,
@@ -363,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."""
@@ -390,7 +408,7 @@ class HonClimateEntity(HonEntity, ClimateEntity):
self._device.sync_command(command, "settings")
self._set_temperature_bound()
self._attr_preset_mode = preset_mode
self.async_write_ha_state()
self.coordinator.async_set_updated_data({})
await self._device.commands[command].send()
self.async_write_ha_state()
+6
View File
@@ -294,3 +294,9 @@ AC_POSITION_VERTICAL = {
7: "position_5",
8: "swing",
}
WH_MACH_MODE: dict[int, str] = {
1: "eco",
2: "max",
3: "bps",
}
+3 -1
View File
@@ -42,10 +42,12 @@ class HonEntity(CoordinatorEntity[DataUpdateCoordinator[dict[str, Any]]]):
def device_info(self) -> DeviceInfo:
return DeviceInfo(
identifiers={(DOMAIN, self._device.unique_id)},
manufacturer=self._device.get("brand", ""),
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
+3 -3
View File
@@ -58,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()
self.async_write_ha_state()
self.coordinator.async_set_updated_data({})
async def async_unlock(self, **kwargs: Any) -> None:
"""Unlock method."""
@@ -68,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()
self.async_write_ha_state()
self.coordinator.async_set_updated_data({})
@property
def available(self) -> bool:
@@ -76,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
+2 -2
View File
@@ -9,7 +9,7 @@
"iot_class": "cloud_push",
"issue_tracker": "https://github.com/Andre0512/hon/issues",
"requirements": [
"pyhOn==0.17.2"
"pyhOn==0.17.5"
],
"version": "0.14.0-beta.4"
"version": "0.14.0"
}
+23 -7
View File
@@ -5,6 +5,7 @@ from dataclasses import dataclass
from homeassistant.components.number import (
NumberEntity,
NumberEntityDescription,
NumberDeviceClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import UnitOfTime, UnitOfTemperature
@@ -27,7 +28,7 @@ class HonConfigNumberEntityDescription(NumberEntityDescription):
@dataclass(frozen=True)
class HonNumberEntityDescription(NumberEntityDescription):
pass
send_key_only: bool = False
NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = {
@@ -201,6 +202,17 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = {
translation_key="pollen_level",
),
),
"WH": (
HonNumberEntityDescription(
key="settings.tempSel",
name="Target Temperature",
icon="mdi:thermometer",
device_class=NumberDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_key="target_temperature",
send_key_only=True,
),
),
}
NUMBERS["WD"] = unique_entities(NUMBERS["WM"], NUMBERS["TD"])
@@ -253,11 +265,15 @@ class HonNumberEntity(HonEntity, NumberEntity):
setting = self._device.settings[self.entity_description.key]
if isinstance(setting, HonParameterRange):
setting.value = value
command = self.entity_description.key.split(".")[0]
await self._device.commands[command].send()
key_parts = self.entity_description.key.split(".")
command = key_parts[0]
if self.entity_description.send_key_only:
await self._device.commands[command].send_specific([key_parts[1]])
else:
await self._device.commands[command].send()
if command != "settings":
self._device.sync_command(command, "settings")
self.async_write_ha_state()
self.coordinator.async_set_updated_data({})
@callback
def _handle_coordinator_update(self, update: bool = True) -> None:
@@ -276,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
)
@@ -300,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
@@ -308,7 +324,7 @@ class HonConfigNumberEntity(HonEntity, NumberEntity):
setting = self._device.settings[self.entity_description.key]
if isinstance(setting, HonParameterRange):
setting.value = value
self.async_write_ha_state()
self.coordinator.async_set_updated_data({})
@property
def available(self) -> bool:
+28 -5
View File
@@ -22,6 +22,7 @@ _LOGGER = logging.getLogger(__name__)
@dataclass(frozen=True)
class HonSelectEntityDescription(SelectEntityDescription):
option_list: dict[int, str] | None = None
send_key_only: bool = False
@dataclass(frozen=True)
@@ -185,6 +186,24 @@ SELECTS: dict[str, tuple[SelectEntityDescription, ...]] = {
translation_key="mode",
),
),
"WH": (
HonSelectEntityDescription(
key="settings.tempSel",
name="Target Temperature",
icon="mdi:thermometer",
unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_key="target_temperature",
send_key_only=True,
),
HonSelectEntityDescription(
key="settings.machMode",
name="Mode",
send_key_only=True,
icon="mdi:information",
option_list=const.WH_MACH_MODE,
translation_key="mach_modes_wh",
),
),
"FRE": (
HonConfigSelectEntityDescription(
key="startProgram.program",
@@ -263,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)
self.async_write_ha_state()
self.coordinator.async_set_updated_data({})
@callback
def _handle_coordinator_update(self, update: bool = True) -> None:
@@ -313,11 +332,15 @@ class HonSelectEntity(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)
command = self.entity_description.key.split(".")[0]
await self._device.commands[command].send()
key_parts = self.entity_description.key.split(".")
command = key_parts[0]
if self.entity_description.send_key_only:
await self._device.commands[command].send_specific([key_parts[1]])
else:
await self._device.commands[command].send()
if command != "settings":
self._device.sync_command(command, "settings")
self.async_write_ha_state()
self.coordinator.async_set_updated_data({})
@property
def available(self) -> bool:
@@ -325,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
+58 -2
View File
@@ -18,7 +18,6 @@ from homeassistant.const import (
UnitOfEnergy,
UnitOfVolume,
UnitOfMass,
UnitOfPower,
UnitOfTime,
UnitOfTemperature,
)
@@ -84,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",
),
@@ -781,6 +780,63 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
translation_key="air_quality",
),
),
"WH": (
HonSensorEntityDescription(
key="temp",
name="Temperature",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_key="temperature",
),
HonSensorEntityDescription(
key="tempZ1",
name="Temp Z1",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
HonSensorEntityDescription(
key="tempZ2",
name="Temp Z2",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
HonSensorEntityDescription(
key="tempSel",
name="Target Temperature",
icon="mdi:thermometer",
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_key="target_temperature",
),
HonSensorEntityDescription(
key="machMode",
name="Mode",
icon="mdi:information",
device_class=SensorDeviceClass.ENUM,
option_list=const.WH_MACH_MODE,
translation_key="mach_modes_wh",
),
HonSensorEntityDescription(
key="smartTestStatus",
name="Smart Test Status",
),
HonSensorEntityDescription(
key="anodeMaintenanceStatus",
name="Anode Maintenance Status",
),
HonSensorEntityDescription(
key="tankMaintenanceStatus",
name="Tank Maintenance Status",
),
HonSensorEntityDescription(
key="heatingStatus",
name="Heating Status",
),
),
"FRE": (
HonSensorEntityDescription(
key="tempEnv",
+38 -14
View File
@@ -23,6 +23,10 @@ _LOGGER = logging.getLogger(__name__)
class HonControlSwitchEntityDescription(SwitchEntityDescription):
turn_on_key: str = ""
turn_off_key: str = ""
only_mandatory_parameters: bool = False
on_value: bool | float = True
off_value: bool | float = False
to_sync: bool = False
@dataclass(frozen=True)
@@ -382,6 +386,20 @@ SWITCHES: dict[str, tuple[SwitchEntityDescription, ...]] = {
translation_key="touch_tone",
),
),
"WH": (
HonControlSwitchEntityDescription(
key="onOffStatus",
name="Power",
icon="mdi:power-standby",
turn_on_key="startProgram",
turn_off_key="stopProgram",
translation_key="power",
only_mandatory_parameters=True,
on_value=1,
off_value=0,
to_sync=True,
),
),
"FRE": (
HonSwitchEntityDescription(
key="quickModeZ2",
@@ -447,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()
self.async_write_ha_state()
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}"]
@@ -456,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()
self.async_write_ha_state()
self.coordinator.async_set_updated_data({})
@property
def available(self) -> bool:
@@ -485,20 +503,26 @@ class HonControlSwitchEntity(HonEntity, SwitchEntity):
@property
def is_on(self) -> bool | None:
"""Return True if entity is on."""
return self._device.get(self.entity_description.key, False)
on_value = self.entity_description.on_value
off_value = self.entity_description.off_value
return self._device.get(self.entity_description.key, off_value) == on_value
async def async_turn_on(self, **kwargs: Any) -> None:
self._device.sync_command(self.entity_description.turn_on_key, "settings")
self.async_write_ha_state()
await self._device.commands[self.entity_description.turn_on_key].send()
self._device.attributes[self.entity_description.key] = True
desc = self.entity_description
self._device.sync_command(desc.turn_on_key, "settings", desc.to_sync)
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
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")
self.async_write_ha_state()
await self._device.commands[self.entity_description.turn_off_key].send()
self._device.attributes[self.entity_description.key] = False
desc = self.entity_description
self._device.sync_command(desc.turn_off_key, "settings", desc.to_sync)
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
self.async_write_ha_state()
@property
@@ -507,7 +531,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
@@ -541,7 +565,7 @@ class HonConfigSwitchEntity(HonEntity, SwitchEntity):
if type(setting) == HonParameter:
return
setting.value = setting.max if isinstance(setting, HonParameterRange) else "1"
self.async_write_ha_state()
self.coordinator.async_set_updated_data({})
self.async_write_ha_state()
async def async_turn_off(self, **kwargs: Any) -> None:
@@ -549,7 +573,7 @@ class HonConfigSwitchEntity(HonEntity, SwitchEntity):
if type(setting) == HonParameter:
return
setting.value = setting.min if isinstance(setting, HonParameterRange) else "0"
self.async_write_ha_state()
self.coordinator.async_set_updated_data({})
self.async_write_ha_state()
@callback
@@ -9,6 +9,79 @@
}
}
}
}
}
},
"entity": {
"sensor": {
"mode": {
"state": {
"0": "Изключен",
"1": "Готов",
"2": "Работи",
"3": "На пауза",
"5": "Scheduled",
"6": "Грешка",
"7": "Завършен"
}
},
"errors": {
"state": {
"00": "Няма грешки",
"100000000000": "E2: Провери дали вратата е затворена",
"8000000000000": "E4: Провери подаването на вода"
}
},
"programs": {
"state": {
"0": "Стандартна",
"62": "Памук",
"63": "Синтетика",
"64": "Смесен тип",
"66": "Чаршафи",
"71": "Пердета",
"72": "Спорт",
"74": "i-time",
"75": "Олекотени завивки",
"76": "Вълна",
"78": "i-Refresh",
"83": "Хавлиена кърпа",
"85": "Бързо Сушене",
"92": "Деликатно пране",
"103": "Отдалечен"
}
},
"program_phases_td": {
"state": {
"0": "Изчаване",
"2": "Сушене",
"3": "Охлажане",
"11": "11"
}
},
"tumbledryertemplevel": {
"state": {
"1": "Хладен въздух",
"2": "Ниска температура L-1",
"3": "Средна температура L-2",
"4": "Висока температура L-3"
}
},
"dry_levels": {
"state": {
"3": "Готови за съхранение",
"12": "Готови за гладене H-1",
"13": "Готови за съхранение H-2",
"14": "Екстра сухо H-3"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"entity": {
"sensor": {
@@ -2326,5 +2399,18 @@
"name": "Light"
}
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"binary_sensor": {
"power-state": {
"name": "Power State"
}
}
}
@@ -931,6 +931,13 @@
"high": "Vysoká"
},
"name": "Úroveň vlhkosti"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Pevný - Poloha 5",
"swing": "Pohyb lamel"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Výměna filtru"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Hoch"
},
"name": "Grad der Luftfeuchtigkeit"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Fest - Position 5",
"swing": "Schwenkbewegung"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Filteraustausch"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Υψηλός"
},
"name": "Επίπεδο υγρασίας"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Σταθερός - Θέση 5",
"swing": "Ταλάντευση"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Αντικατάσταση φίλτρου"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -964,6 +964,13 @@
"high": "High"
},
"name": "Humidity level"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1869,6 +1876,13 @@
"position_5": "Fixed - Position 5",
"swing": "Swing"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2068,6 +2082,9 @@
},
"filter_replacement": {
"name": "Filter replacement"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Alto"
},
"name": "Nivel de humedad"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Fijo - Posición 5",
"swing": "Oscilar"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Sustitución del filtro"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Élevé"
},
"name": "Niveau dhumidité"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Fixe - Position 5",
"swing": "Oscillation"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Remplacement du filtre"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -448,6 +448,13 @@
"high": "גָבוֹהַ"
},
"name": "Humidity level"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -859,6 +866,13 @@
"position_5": "Fixed - Position 5",
"swing": "Swing"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -1058,6 +1072,9 @@
},
"filter_replacement": {
"name": "Filter replacement"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Visoko"
},
"name": "Razina vlažnosti"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Fiksno - Položaj 5",
"swing": "Njihanje"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Zamjena filtra"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -940,6 +940,13 @@
"high": "Alto"
},
"name": "Livello di umidità"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1829,6 +1836,13 @@
"position_5": "Fissa - Posizione 5",
"swing": "Swing"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2028,6 +2042,9 @@
},
"filter_replacement": {
"name": "Sostituzione filtro"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Hoog"
},
"name": "Vochtigheidsniveau"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Vast - Positie 5",
"swing": "Draaiend"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Filter vervangen"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Wysokie"
},
"name": "Poziom wilgotności"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Stały - Pozycja 5",
"swing": "Swing"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Wymiana filtra"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Alta"
},
"name": "Nível de humidade"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Fixa - Posição 5",
"swing": "Oscilação"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Substituição do filtro"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Crescută"
},
"name": "Nivelul de umiditate"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Fix - Poziție 5",
"swing": "Baleiere"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Înlocuirea filtrului"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Высок."
},
"name": "Уровень влажности"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Фиксированное - Позиция 5",
"swing": "Качание"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Замена фильтра"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Vysoké"
},
"name": "Úroveň vlhkosti"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Pevný - Poloha 5",
"swing": "Otáčanie"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Výmena filtra"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "High"
},
"name": "Nivo vlažnosti"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Fiksno - Položaj 5",
"swing": "Nihanje"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Menjava filtra"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Visoka"
},
"name": "Nivo vlage"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Fiksiran - Položaj 5",
"swing": "Njihanje"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Zamena filtera"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -931,6 +931,13 @@
"high": "Yüksek"
},
"name": "Nem seviyesi"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1816,6 +1823,13 @@
"position_5": "Sabit - Pozisyon 5",
"swing": "Salınım"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2015,6 +2029,9 @@
},
"filter_replacement": {
"name": "Filtre değişimi"
},
"power-state": {
"name": "Power State"
}
},
"button": {
@@ -924,6 +924,13 @@
"high": "高"
},
"name": "湿度水平"
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"select": {
@@ -1802,6 +1809,13 @@
"position_5": "固定 - 位置 5",
"swing": "摆动"
}
},
"mach_modes_wh": {
"state": {
"eco": "Eco",
"max": "Max",
"bps": "BPS"
}
}
},
"switch": {
@@ -2001,6 +2015,9 @@
},
"filter_replacement": {
"name": "更换过滤器"
},
"power-state": {
"name": "Power State"
}
},
"button": {
+1 -1
View File
@@ -1 +1 @@
pyhOn==0.17.2
pyhOn==0.17.5