Compare commits
	
		
			24 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e1a2af70e9 | |||
| c78aeb1fbb | |||
| 67f280512d | |||
| 6093b57f76 | |||
| 287e895f4d | |||
| d3dc1b9f45 | |||
| 116f9d5470 | |||
| 05e9d835b1 | |||
| 135d6cafed | |||
| 077bded6dd | |||
| 0d575f65f9 | |||
| 34e888f6d6 | |||
| 26db07acdc | |||
| e698393841 | |||
| 28a0ae53e0 | |||
| 34e99230da | |||
| 5032811963 | |||
| 196309ef5f | |||
| ae6d28f520 | |||
| 1a53ee7e5e | |||
| fbee75108d | |||
| fb8306a4d9 | |||
| 7ec3ca4681 | |||
| 2a3bcfe033 | 
							
								
								
									
										44
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								README.md
									
									
									
									
									
								
							| @ -1,20 +1,27 @@ | |||||||
| # Haier hOn | # Haier hOn | ||||||
| [](https://github.com/hacs/integration) | [](https://github.com/hacs/integration) | ||||||
|  | [](https://github.com/Andre0512/hon/releases/latest) | ||||||
| Home Assistant component supporting devices of Haier's mobile app **hOn**. | [](https://analytics.home-assistant.io/)   | ||||||
|  | Home Assistant integration for Haier hOn: support for Haier/Candy/Hoover home appliances like washing machines. | ||||||
|  | ## Supported Appliances | ||||||
|  | - Tumble Dryer | ||||||
|  | - Washer Dryer | ||||||
|  | - Washing Machine | ||||||
|  | - Oven | ||||||
|  |  | ||||||
| ## Installation | ## Installation | ||||||
| #### Installing via HACS | **Method 1:** [](https://my.home-assistant.io/redirect/hacs_repository/?owner=Andre0512&repository=hon&category=integration) | ||||||
| 1. You need to have installed [HACS](https://hacs.xyz/) |  | ||||||
| 2. Go to HACS->Integrations | **Method 2:** [HACS](https://hacs.xyz/) > Integrations > Add Integration > **Haier hOn** > Install   | ||||||
| 3. Add this repo (`https://github.com/Andre0512/hon.git`) into your HACS custom repositories |  | ||||||
| 4. Search for Haier hOn and Download it | **Method 3:** Manually copy `hon` folder from [latest release](https://github.com/Andre0512/hon/releases/latest) to `config/custom_components` folder. | ||||||
| 5. Restart your HomeAssistant |  | ||||||
| 6. Go to Settings->Devices & Services | ## Configuration | ||||||
| 7. Shift reload your browser |  | ||||||
| 8. Click Add Integration | **Method 1**: [](https://my.home-assistant.io/redirect/config_flow_start/?domain=hon) | ||||||
| 9. Search for Haier hOn  |  | ||||||
| 10. Type your username used in the hOn App and hit submit | **Method 2**: Settings > Devices & Services > Add Integration > **Haier hOn**   | ||||||
|  | _If the integration is not in the list, you need to clear the browser cache._ | ||||||
|  |  | ||||||
| ## Contribute | ## Contribute | ||||||
| Any kind of contribution is welcome! | Any kind of contribution is welcome! | ||||||
| @ -61,14 +68,13 @@ Any kind of contribution is welcome! | |||||||
| - If you want to have some states humanreadable, have a look at the `translation_key` parameter of the `EntityDescription` | - If you want to have some states humanreadable, have a look at the `translation_key` parameter of the `EntityDescription` | ||||||
| - If you need to implement some more logic, create a pull request to the underlying library. There we collect special requirements in the `appliances` directory. | - If you need to implement some more logic, create a pull request to the underlying library. There we collect special requirements in the `appliances` directory. | ||||||
|  |  | ||||||
| ## Supported Appliances |  | ||||||
| - Washing Machine |  | ||||||
|  |  | ||||||
| ## Tested Devices | ## Tested Devices | ||||||
| - Haier WD90 | - Haier WD90-B14TEAM5 | ||||||
|  | - Haier HD80-A3959 | ||||||
|  | - Haier HWO60SM2F3XH | ||||||
|  | - Hoover H-WASH 500 | ||||||
|  |  | ||||||
| ## About this Repo | ## About this Repo | ||||||
| The existing integrations missed some features from the app I liked to have in HomeAssistant. | The existing integrations missed some features from the app I liked to have in HomeAssistant. | ||||||
| I tried to create a pull request, but in the structures of these existing repos, I find it hard to fit in my needs, so I basically rewrote everything.  | I tried to create a pull request, but in the structures of these existing repos, I find it hard to fit in my needs, so I basically rewrote everything.  | ||||||
| I moved the api related stuff into the package [pyhOn](https://github.com/Andre0512/pyhOn). | I moved the api related stuff into the package [pyhOn](https://github.com/Andre0512/pyhOn). | ||||||
|  |  | ||||||
|  | |||||||
| @ -25,6 +25,27 @@ class HonBinarySensorEntityDescription(HonBinarySensorEntityDescriptionMixin, Bi | |||||||
|  |  | ||||||
| BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = { | BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = { | ||||||
|     "WM": ( |     "WM": ( | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="attributes.lastConnEvent.category", | ||||||
|  |             name="Remote Control", | ||||||
|  |             device_class=BinarySensorDeviceClass.CONNECTIVITY, | ||||||
|  |             on_value="CONNECTED", | ||||||
|  |             icon="mdi:remote" | ||||||
|  |         ), | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="doorLockStatus", | ||||||
|  |             name="Door Lock", | ||||||
|  |             device_class=BinarySensorDeviceClass.LOCK, | ||||||
|  |             on_value="0", | ||||||
|  |         ), | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="doorStatus", | ||||||
|  |             name="Door", | ||||||
|  |             device_class=BinarySensorDeviceClass.DOOR, | ||||||
|  |             on_value="1", | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
|  |     "TD": ( | ||||||
|         HonBinarySensorEntityDescription( |         HonBinarySensorEntityDescription( | ||||||
|             key="attributes.lastConnEvent.category", |             key="attributes.lastConnEvent.category", | ||||||
|             name="Connection", |             name="Connection", | ||||||
| @ -32,12 +53,72 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = { | |||||||
|             on_value="CONNECTED", |             on_value="CONNECTED", | ||||||
|         ), |         ), | ||||||
|         HonBinarySensorEntityDescription( |         HonBinarySensorEntityDescription( | ||||||
|             key="doorLockStatus", |             key="doorStatus", | ||||||
|             name="Door", |             name="Door", | ||||||
|             device_class=BinarySensorDeviceClass.DOOR, |             device_class=BinarySensorDeviceClass.DOOR, | ||||||
|             on_value="0", |             on_value="1", | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
|  |     "WD": ( | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="attributes.lastConnEvent.category", | ||||||
|  |             name="Remote Control", | ||||||
|  |             device_class=BinarySensorDeviceClass.CONNECTIVITY, | ||||||
|  |             on_value="CONNECTED", | ||||||
|  |             icon="mdi:remote" | ||||||
|  |         ), | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="startProgram.prewash", | ||||||
|  |             name="Pre Wash", | ||||||
|  |         ), | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="extraRinse1", | ||||||
|  |             name="Extra Rinse 1", | ||||||
|  |         ), | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="extraRinse2", | ||||||
|  |             name="Extra Rinse 2", | ||||||
|  |         ), | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="extraRinse3", | ||||||
|  |             name="Extra Rinse 3", | ||||||
|  |         ), | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="goodNight", | ||||||
|  |             name="Good Night Mode", | ||||||
|  |         ), | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="acquaplus", | ||||||
|  |             name="Acqua Plus", | ||||||
|  |         ), | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="anticrease", | ||||||
|  |             name="Anti-Crease", | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
|  |     "OV": ( | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="attributes.lastConnEvent.category", | ||||||
|  |             name="Online", | ||||||
|  |             device_class=BinarySensorDeviceClass.CONNECTIVITY, | ||||||
|  |             on_value="CONNECTED", | ||||||
|  |             icon="mdi:wifi" | ||||||
|  |         ), | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="attributes.parameters.remoteCtrValid", | ||||||
|  |             name="On", | ||||||
|  |             device_class=BinarySensorDeviceClass.CONNECTIVITY, | ||||||
|  |             on_value="1", | ||||||
|  |             icon="mdi:remote" | ||||||
|  |         ), | ||||||
|  |         HonBinarySensorEntityDescription( | ||||||
|  |             key="attributes.parameters.onOffStatus", | ||||||
|  |             name="On", | ||||||
|  |             device_class=BinarySensorDeviceClass.RUNNING, | ||||||
|  |             on_value="1", | ||||||
|  |             icon="mdi:power-cycle" | ||||||
|  |         ), | ||||||
|     ), |     ), | ||||||
|     ) |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -56,7 +137,7 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | |||||||
|         if descriptions := BINARY_SENSORS.get(device.appliance_type): |         if descriptions := BINARY_SENSORS.get(device.appliance_type): | ||||||
|             for description in descriptions: |             for description in descriptions: | ||||||
|                 if not device.get(description.key): |                 if not device.get(description.key): | ||||||
|                     _LOGGER.info("Can't setup %s", description.key) |                     _LOGGER.warning("[%s] Can't setup %s", device.appliance_type, description.key) | ||||||
|                     continue |                     continue | ||||||
|                 appliances.extend([ |                 appliances.extend([ | ||||||
|                     HonBinarySensorEntity(hass, coordinator, entry, device, description)] |                     HonBinarySensorEntity(hass, coordinator, entry, device, description)] | ||||||
|  | |||||||
| @ -1,25 +1,24 @@ | |||||||
| from pyhon import HonConnection |  | ||||||
| from pyhon.device import HonDevice |  | ||||||
|  |  | ||||||
| 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 pyhon import HonConnection | ||||||
|  | from pyhon.device import HonDevice | ||||||
|  |  | ||||||
| from .const import DOMAIN | from .const import DOMAIN | ||||||
| from .hon import HonCoordinator, HonEntity | from .hon import HonCoordinator, HonEntity | ||||||
|  |  | ||||||
| BUTTONS: dict[str, tuple[ButtonEntityDescription, ...]] = { | BUTTONS: dict[str, tuple[ButtonEntityDescription, ...]] = { | ||||||
|     "WM": ( |     "OV": ( | ||||||
|         # ButtonEntityDescription( |         ButtonEntityDescription( | ||||||
|         #     key="pauseProgram", |             key="startProgram", | ||||||
|         #     name="Pause Program", |             name="Start Program", | ||||||
|         #     icon="mdi:pause", |             icon="mdi:power-cycle", | ||||||
|         # ), |  | ||||||
|         # ButtonEntityDescription( |  | ||||||
|         #     key="resumeProgram", |  | ||||||
|         #     name="Resume Program", |  | ||||||
|         #     icon="mdi:play-pause", |  | ||||||
|         # ), |  | ||||||
|         ), |         ), | ||||||
|  |         ButtonEntityDescription( | ||||||
|  |             key="stopProgram", | ||||||
|  |             name="Stop Program", | ||||||
|  |             icon="mdi:power-off", | ||||||
|  |         ), | ||||||
|  |     ) | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ | |||||||
|   "documentation": "https://github.com/Andre0512/hon/", |   "documentation": "https://github.com/Andre0512/hon/", | ||||||
|   "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": ["pyhOn==0.3.8"], |   "requirements": ["pyhOn==0.4.1"], | ||||||
|   "version": "0.2.5" |   "version": "0.4.0" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ from homeassistant.components.number import ( | |||||||
|     NumberEntityDescription, |     NumberEntityDescription, | ||||||
| ) | ) | ||||||
| from homeassistant.config_entries import ConfigEntry | from homeassistant.config_entries import ConfigEntry | ||||||
| from homeassistant.const import UnitOfTime | from homeassistant.const import UnitOfTime, UnitOfTemperature | ||||||
| from homeassistant.core import callback | from homeassistant.core import callback | ||||||
| from homeassistant.helpers.entity import EntityCategory | from homeassistant.helpers.entity import EntityCategory | ||||||
|  |  | ||||||
| @ -38,6 +38,75 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = { | |||||||
|             native_unit_of_measurement=UnitOfTime.MINUTES |             native_unit_of_measurement=UnitOfTime.MINUTES | ||||||
|         ), |         ), | ||||||
|     ), |     ), | ||||||
|  |     "TD": ( | ||||||
|  |         NumberEntityDescription( | ||||||
|  |             key="startProgram.delayTime", | ||||||
|  |             name="Delay time", | ||||||
|  |             icon="mdi:timer-plus", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |             native_unit_of_measurement=UnitOfTime.MINUTES | ||||||
|  |         ), | ||||||
|  |         NumberEntityDescription( | ||||||
|  |             key="startProgram.dryLevel", | ||||||
|  |             name="Dry level", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |             icon="mdi:hair-dryer", | ||||||
|  |             translation_key="tumbledryerdrylevel" | ||||||
|  |         ), | ||||||
|  |         NumberEntityDescription( | ||||||
|  |             key="startProgram.tempLevel", | ||||||
|  |             name="Temperature level", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |             icon="mdi:thermometer", | ||||||
|  |             translation_key="tumbledryertemplevel" | ||||||
|  |         ), | ||||||
|  |         NumberEntityDescription( | ||||||
|  |             key="startProgram.antiCreaseTime", | ||||||
|  |             name="Anti-Crease time", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |             icon="mdi:timer", | ||||||
|  |             native_unit_of_measurement=UnitOfTime.MINUTES | ||||||
|  |         ), | ||||||
|  |         NumberEntityDescription( | ||||||
|  |             key="startProgram.sterilizationStatus", | ||||||
|  |             name="Sterilization status", | ||||||
|  |             icon="mdi:clock-start", | ||||||
|  |             entity_category=EntityCategory.CONFIG | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
|  |     "WD": ( | ||||||
|  |         NumberEntityDescription( | ||||||
|  |             key="startProgram.delayTime", | ||||||
|  |             name="Delay Time", | ||||||
|  |             icon="mdi:timer-plus", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |             native_unit_of_measurement=UnitOfTime.MINUTES | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
|  |     "OV": ( | ||||||
|  |         NumberEntityDescription( | ||||||
|  |             key="startProgram.delayTime", | ||||||
|  |             name="Delay time", | ||||||
|  |             icon="mdi:timer-plus", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |             native_unit_of_measurement=UnitOfTime.MINUTES | ||||||
|  |         ), | ||||||
|  |         NumberEntityDescription( | ||||||
|  |             key="startProgram.tempSel", | ||||||
|  |             name="Target Temperature", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |             icon="mdi:thermometer", | ||||||
|  |             native_unit_of_measurement=UnitOfTemperature.CELSIUS | ||||||
|  |         ), | ||||||
|  |  | ||||||
|  |         NumberEntityDescription( | ||||||
|  |             key="startProgram.prTime", | ||||||
|  |             name="Program Duration", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |             icon="mdi:timelapse", | ||||||
|  |             native_unit_of_measurement=UnitOfTime.MINUTES | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -55,6 +124,8 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | |||||||
|  |  | ||||||
|         if descriptions := NUMBERS.get(device.appliance_type): |         if descriptions := NUMBERS.get(device.appliance_type): | ||||||
|             for description in descriptions: |             for description in descriptions: | ||||||
|  |                 if not device.settings.get(description.key): | ||||||
|  |                     continue | ||||||
|                 appliances.extend([ |                 appliances.extend([ | ||||||
|                     HonNumberEntity(hass, coordinator, entry, device, description)] |                     HonNumberEntity(hass, coordinator, entry, device, description)] | ||||||
|                 ) |                 ) | ||||||
|  | |||||||
| @ -1,18 +1,22 @@ | |||||||
| from __future__ import annotations | from __future__ import annotations | ||||||
|  |  | ||||||
|  | import logging | ||||||
|  |  | ||||||
| from pyhon import HonConnection | from pyhon import HonConnection | ||||||
| from pyhon.device import HonDevice | from pyhon.device import HonDevice | ||||||
| from pyhon.parameter import HonParameterFixed | from pyhon.parameter import HonParameterFixed | ||||||
|  |  | ||||||
| from homeassistant.components.select import SelectEntity, SelectEntityDescription | from homeassistant.components.select import SelectEntity, SelectEntityDescription | ||||||
| from homeassistant.config_entries import ConfigEntry | from homeassistant.config_entries import ConfigEntry | ||||||
| from homeassistant.const import UnitOfTemperature, 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 .const import DOMAIN | from .const import DOMAIN | ||||||
| from .hon import HonEntity, HonCoordinator | from .hon import HonEntity, HonCoordinator | ||||||
|  |  | ||||||
|  | _LOGGER = logging.getLogger(__name__) | ||||||
|  |  | ||||||
| SELECTS = { | SELECTS = { | ||||||
|     "WM": ( |     "WM": ( | ||||||
|         SelectEntityDescription( |         SelectEntityDescription( | ||||||
| @ -35,7 +39,42 @@ SELECTS = { | |||||||
|             entity_category=EntityCategory.CONFIG, |             entity_category=EntityCategory.CONFIG, | ||||||
|             translation_key="programs" |             translation_key="programs" | ||||||
|         ), |         ), | ||||||
|     ) |     ), | ||||||
|  |     "TD": ( | ||||||
|  |         SelectEntityDescription( | ||||||
|  |             key="startProgram.program", | ||||||
|  |             name="Program", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |             translation_key="programs" | ||||||
|  |         ), | ||||||
|  |         SelectEntityDescription( | ||||||
|  |             key="startProgram.dryTimeMM", | ||||||
|  |             name="Time", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |             icon="mdi:timer", | ||||||
|  |             unit_of_measurement=UnitOfTime.MINUTES | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
|  |     "WD": ( | ||||||
|  |         SelectEntityDescription( | ||||||
|  |             key="startProgram.program", | ||||||
|  |             name="Program", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |             translation_key="programs" | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
|  |     "OV": ( | ||||||
|  |         SelectEntityDescription( | ||||||
|  |             key="startProgram.program", | ||||||
|  |             name="Program", | ||||||
|  |             entity_category=EntityCategory.CONFIG, | ||||||
|  |         ), | ||||||
|  |         SelectEntityDescription( | ||||||
|  |             key="startProgram.preheatStatus", | ||||||
|  |             name="Preheat", | ||||||
|  |             entity_category=EntityCategory.CONFIG | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -53,7 +92,7 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | |||||||
|  |  | ||||||
|         if descriptions := SELECTS.get(device.appliance_type): |         if descriptions := SELECTS.get(device.appliance_type): | ||||||
|             for description in descriptions: |             for description in descriptions: | ||||||
|                 if not device.get(description.key): |                 if not device.settings.get(description.key): | ||||||
|                     continue |                     continue | ||||||
|                 appliances.extend([ |                 appliances.extend([ | ||||||
|                     HonSelectEntity(hass, coordinator, entry, device, description)] |                     HonSelectEntity(hass, coordinator, entry, device, description)] | ||||||
|  | |||||||
| @ -9,7 +9,15 @@ from homeassistant.components.sensor import ( | |||||||
|     SensorEntityDescription, |     SensorEntityDescription, | ||||||
| ) | ) | ||||||
| from homeassistant.config_entries import ConfigEntry | from homeassistant.config_entries import ConfigEntry | ||||||
| from homeassistant.const import UnitOfEnergy, UnitOfVolume, UnitOfMass, UnitOfPower, UnitOfTime | from homeassistant.const import ( | ||||||
|  |     REVOLUTIONS_PER_MINUTE, | ||||||
|  |     UnitOfEnergy, | ||||||
|  |     UnitOfVolume, | ||||||
|  |     UnitOfMass, | ||||||
|  |     UnitOfPower, | ||||||
|  |     UnitOfTime, | ||||||
|  |     UnitOfTemperature | ||||||
|  | ) | ||||||
| from homeassistant.core import callback | from homeassistant.core import callback | ||||||
| from homeassistant.helpers.entity import EntityCategory | from homeassistant.helpers.entity import EntityCategory | ||||||
| from homeassistant.helpers.typing import StateType | from homeassistant.helpers.typing import StateType | ||||||
| @ -85,11 +93,140 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = { | |||||||
|         SensorEntityDescription( |         SensorEntityDescription( | ||||||
|             key="spinSpeed", |             key="spinSpeed", | ||||||
|             name="Spin Speed", |             name="Spin Speed", | ||||||
|  |             icon="mdi:speedometer", | ||||||
|  |             state_class=SensorStateClass.MEASUREMENT, | ||||||
|  |             native_unit_of_measurement=UnitOfTime.MINUTES, | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
|  |     "TD": ( | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="machMode", | ||||||
|  |             name="Machine Status", | ||||||
|  |             icon="mdi:information", | ||||||
|  |             translation_key="mode" | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="errors", | ||||||
|  |             name="Error", | ||||||
|  |             icon="mdi:math-log", | ||||||
|  |             translation_key="errors" | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="remainingTimeMM", | ||||||
|  |             name="Remaining Time", | ||||||
|             icon="mdi:timer", |             icon="mdi:timer", | ||||||
|             state_class=SensorStateClass.MEASUREMENT, |             state_class=SensorStateClass.MEASUREMENT, | ||||||
|             native_unit_of_measurement=UnitOfTime.MINUTES, |             native_unit_of_measurement=UnitOfTime.MINUTES, | ||||||
|         ), |         ), | ||||||
|     ) |         SensorEntityDescription( | ||||||
|  |             key="delayTime", | ||||||
|  |             name="Start Time", | ||||||
|  |             icon="mdi:clock-start", | ||||||
|  |             state_class=SensorStateClass.MEASUREMENT, | ||||||
|  |             native_unit_of_measurement=UnitOfTime.MINUTES, | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="prCode", | ||||||
|  |             name="Program", | ||||||
|  |             icon="mdi:tumble-dryer", | ||||||
|  |             translation_key="tumbledryerprogram" | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="prPhase", | ||||||
|  |             name="Program Phase", | ||||||
|  |             icon="mdi:tumble-dryer", | ||||||
|  |             translation_key="tumbledryerprogramphase" | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="dryLevel", | ||||||
|  |             name="Dry level", | ||||||
|  |             icon="mdi:hair-dryer", | ||||||
|  |             translation_key="tumbledryerdrylevel" | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="tempLevel", | ||||||
|  |             name="Temperature level", | ||||||
|  |             icon="mdi:thermometer", | ||||||
|  |             translation_key="tumbledryertemplevel" | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
|  |     "WD": ( | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="machMode", | ||||||
|  |             name="Machine Status", | ||||||
|  |             icon="mdi:information", | ||||||
|  |             translation_key="mode" | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="spinSpeed", | ||||||
|  |             name="Spin Speed", | ||||||
|  |             icon="mdi:fast-forward-outline", | ||||||
|  |             state_class=SensorStateClass.MEASUREMENT, | ||||||
|  |             native_unit_of_measurement=REVOLUTIONS_PER_MINUTE, | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="remainingTimeMM", | ||||||
|  |             name="Remaining Time", | ||||||
|  |             icon="mdi:timer", | ||||||
|  |             state_class=SensorStateClass.MEASUREMENT, | ||||||
|  |             native_unit_of_measurement=UnitOfTime.MINUTES, | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="prCode", | ||||||
|  |             name="Current Program", | ||||||
|  |             icon="mdi:tumble-dryer", | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="prPhase", | ||||||
|  |             name="Program Phase", | ||||||
|  |             icon="mdi:tumble-dryer", | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="dryLevel", | ||||||
|  |             name="Dry level", | ||||||
|  |             icon="mdi:hair-dryer", | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="dirtyLevel", | ||||||
|  |             name="Dirt level", | ||||||
|  |             icon="mdi:liquid-spot", | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="steamLevel", | ||||||
|  |             name="Steam level", | ||||||
|  |             icon="mdi:smoke", | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="temp", | ||||||
|  |             name="Current Temperature", | ||||||
|  |             icon="mdi:thermometer", | ||||||
|  |             state_class=SensorStateClass.MEASUREMENT, | ||||||
|  |             native_unit_of_measurement=UnitOfTemperature.CELSIUS, | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
|  |     "OV": ( | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="remainingTimeMM", | ||||||
|  |             name="Remaining Time", | ||||||
|  |             icon="mdi:timer", | ||||||
|  |             native_unit_of_measurement=UnitOfTime.MINUTES, | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="delayTime", | ||||||
|  |             name="Start Time", | ||||||
|  |             icon="mdi:clock-start", | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="temp", | ||||||
|  |             name="Temperature", | ||||||
|  |             icon="mdi:thermometer", | ||||||
|  |         ), | ||||||
|  |         SensorEntityDescription( | ||||||
|  |             key="tempSel", | ||||||
|  |             name="Temperature Selected", | ||||||
|  |             icon="mdi:thermometer", | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -108,6 +245,7 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | |||||||
|         if descriptions := SENSORS.get(device.appliance_type): |         if descriptions := SENSORS.get(device.appliance_type): | ||||||
|             for description in descriptions: |             for description in descriptions: | ||||||
|                 if not device.get(description.key): |                 if not device.get(description.key): | ||||||
|  |                     _LOGGER.warning("[%s] Can't setup %s", device.appliance_type, description.key) | ||||||
|                     continue |                     continue | ||||||
|                 appliances.extend([ |                 appliances.extend([ | ||||||
|                     HonSensorEntity(hass, coordinator, entry, device, description)] |                     HonSensorEntity(hass, coordinator, entry, device, description)] | ||||||
|  | |||||||
| @ -1,3 +1,5 @@ | |||||||
|  | import logging | ||||||
|  |  | ||||||
| from dataclasses import dataclass | from dataclasses import dataclass | ||||||
| from typing import Any | from typing import Any | ||||||
|  |  | ||||||
| @ -10,6 +12,8 @@ from pyhon.device import HonDevice | |||||||
| from .const import DOMAIN | from .const import DOMAIN | ||||||
| from .hon import HonCoordinator, HonEntity | from .hon import HonCoordinator, HonEntity | ||||||
|  |  | ||||||
|  | _LOGGER = logging.getLogger(__name__) | ||||||
|  |  | ||||||
|  |  | ||||||
| @dataclass | @dataclass | ||||||
| class HonSwitchEntityDescriptionMixin: | class HonSwitchEntityDescriptionMixin: | ||||||
| @ -53,6 +57,38 @@ SWITCHES: dict[str, tuple[HonSwitchEntityDescription, ...]] = { | |||||||
|             entity_category=EntityCategory.CONFIG |             entity_category=EntityCategory.CONFIG | ||||||
|         ), |         ), | ||||||
|     ), |     ), | ||||||
|  |     "TD": ( | ||||||
|  |         HonSwitchEntityDescription( | ||||||
|  |             key="active", | ||||||
|  |             name="Tumble Dryer", | ||||||
|  |             icon="mdi:tumble-dryer", | ||||||
|  |             turn_on_key="startProgram", | ||||||
|  |             turn_off_key="stopProgram", | ||||||
|  |         ), | ||||||
|  |         HonSwitchEntityDescription( | ||||||
|  |             key="pause", | ||||||
|  |             name="Pause Tumble Dryer", | ||||||
|  |             icon="mdi:pause", | ||||||
|  |             turn_on_key="pauseProgram", | ||||||
|  |             turn_off_key="resumeProgram", | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
|  |     "WD": ( | ||||||
|  |         HonSwitchEntityDescription( | ||||||
|  |             key="active", | ||||||
|  |             name="Washing Machine", | ||||||
|  |             icon="mdi:washing-machine", | ||||||
|  |             turn_on_key="startProgram", | ||||||
|  |             turn_off_key="stopProgram", | ||||||
|  |         ), | ||||||
|  |         HonSwitchEntityDescription( | ||||||
|  |             key="pause", | ||||||
|  |             name="Pause Washing Machine", | ||||||
|  |             icon="mdi:pause", | ||||||
|  |             turn_on_key="pauseProgram", | ||||||
|  |             turn_off_key="resumeProgram", | ||||||
|  |         ), | ||||||
|  |     ), | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -74,6 +110,8 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | |||||||
|                     appliances.extend([ |                     appliances.extend([ | ||||||
|                         HonSwitchEntity(hass, coordinator, entry, device, description)] |                         HonSwitchEntity(hass, coordinator, entry, device, description)] | ||||||
|                     ) |                     ) | ||||||
|  |                 else: | ||||||
|  |                     _LOGGER.warning("[%s] Can't setup %s", device.appliance_type, description.key) | ||||||
|  |  | ||||||
|     async_add_entities(appliances) |     async_add_entities(appliances) | ||||||
|  |  | ||||||
| @ -116,5 +154,3 @@ class HonSwitchEntity(HonEntity, SwitchEntity): | |||||||
|             self.async_write_ha_state() |             self.async_write_ha_state() | ||||||
|         else: |         else: | ||||||
|             await self._device.commands[self.entity_description.turn_off_key].send() |             await self._device.commands[self.entity_description.turn_off_key].send() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										410
									
								
								custom_components/hon/translations/bg.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										410
									
								
								custom_components/hon/translations/bg.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,410 @@ | |||||||
|  | { | ||||||
|  |   "config": { | ||||||
|  |     "step": { | ||||||
|  |       "user": { | ||||||
|  |         "description": "Моля, въведете вашите данни за достъп до hOn", | ||||||
|  |         "data": { | ||||||
|  |           "email": "Email Адрес", | ||||||
|  |           "password": "Парола" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "entity": { | ||||||
|  |     "sensor": { | ||||||
|  |       "mode": { | ||||||
|  |         "state": { | ||||||
|  |           "0": "Изключен", | ||||||
|  |           "1": "Готов", | ||||||
|  |           "2": "Работи", | ||||||
|  |           "3": "На пауза", | ||||||
|  |           "5": "Scheduled", | ||||||
|  |           "6": "Грешка", | ||||||
|  |           "7": "Завършен" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "errors": { | ||||||
|  |         "state": { | ||||||
|  |           "00": "Няма грешки", | ||||||
|  |           "100000000000": "E2: Провери дали вратата е затворена", | ||||||
|  |           "8000000000000": "E4: Провери подаването на вода" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "tumbledryerprogram": { | ||||||
|  |         "state": { | ||||||
|  |           "0": "Стандартна", | ||||||
|  |           "62": "Памук", | ||||||
|  |           "63": "Синтетика", | ||||||
|  |           "64": "Смесен тип", | ||||||
|  |           "66": "Чаршафи", | ||||||
|  |           "71": "Пердета", | ||||||
|  |           "72": "Спорт", | ||||||
|  |           "74": "i-time", | ||||||
|  |           "75": "Олекотени завивки", | ||||||
|  |           "76": "Вълна", | ||||||
|  |           "78": "i-Refresh", | ||||||
|  |           "83": "Хавлиена кърпа", | ||||||
|  |           "85": "Бързо Сушене", | ||||||
|  |           "92": "Деликатно пране", | ||||||
|  |           "103": "Отдалечен" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "tumbledryerprogramphase": { | ||||||
|  |         "state": { | ||||||
|  |           "0": "Изчаване", | ||||||
|  |           "2": "Сушене", | ||||||
|  |           "3": "Охлажане", | ||||||
|  |           "11": "11" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "tumbledryertemplevel": { | ||||||
|  |         "state": { | ||||||
|  |           "1": "Хладен въздух", | ||||||
|  |           "2": "Ниска температура L-1", | ||||||
|  |           "3": "Средна температура L-2", | ||||||
|  |           "4": "Висока температура L-3" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "tumbledryerdrylevel": { | ||||||
|  |         "state": { | ||||||
|  |           "3": "Готови за съхранение", | ||||||
|  |           "12": "Готови за гладене H-1", | ||||||
|  |           "13": "Готови за съхранение H-2", | ||||||
|  |           "14": "Екстра сухо H-3" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "select": { | ||||||
|  |       "programs": { | ||||||
|  |         "state": { | ||||||
|  |           "20_degrees_coloured_cottons": "20° Colored and Cottons", | ||||||
|  |           "20_degrees_new_energy_label": "20°C", | ||||||
|  |           "active_steam": "Steam", | ||||||
|  |           "active_wash": "Active Wash", | ||||||
|  |           "active_wash_steam": "Active Wash + Steam", | ||||||
|  |           "allergy_care": "Allergy Care", | ||||||
|  |           "allergy_care_pro": "Allergy Care Pro", | ||||||
|  |           "all_in_one_49": "All in One 49'", | ||||||
|  |           "all_in_one_59": "All in One 59'", | ||||||
|  |           "all_in_one_59_steam": "Active Wash + Steam", | ||||||
|  |           "autocare": "Autocare", | ||||||
|  |           "autoclean": "Drum Cleaning", | ||||||
|  |           "baby_60": "All Baby 60°C", | ||||||
|  |           "care_14": "Rapid Care 14'", | ||||||
|  |           "care_30": "Rapid Care 30'", | ||||||
|  |           "care_44": "Rapid Care 44'", | ||||||
|  |           "checkup": "Check-Up", | ||||||
|  |           "colour_59": "Colored 59'", | ||||||
|  |           "colour_59_steam": "Colored 59' + Steam", | ||||||
|  |           "cottons": "Cotton", | ||||||
|  |           "cottons_prewash": "Cottons + Prewash", | ||||||
|  |           "cottons_steam": "Cotton + Steam", | ||||||
|  |           "cotton_care_59": "Cotton Care 59'", | ||||||
|  |           "delicate_59": "Delicate 59'", | ||||||
|  |           "delicate_silk": "Delicate and Silk", | ||||||
|  |           "delicate_silk_steam": "Delicate and Silk + Steam", | ||||||
|  |           "delicati_59": "Delicate 59'", | ||||||
|  |           "delicati_59_steam": "Delicate 59' + Steam", | ||||||
|  |           "drain_spin": "Drain + Spin", | ||||||
|  |           "easy_iron": "Easy Iron", | ||||||
|  |           "eco_40_60_new_energy_label": "Eco 40-60", | ||||||
|  |           "extra_care": "Extra Care", | ||||||
|  |           "fitness": "Fitness Care", | ||||||
|  |           "fitness_care": "Fitness Care", | ||||||
|  |           "fresh_care": "Fresh Care", | ||||||
|  |           "fresh_care_steam": "Fresh Care + Steam", | ||||||
|  |           "handwash_wool": "Hand Wash + Wool", | ||||||
|  |           "high_dry": "High Heat Dry", | ||||||
|  |           "hqd_20_degrees": "Cotton 20℃", | ||||||
|  |           "hqd_allergy": "Allergy Care", | ||||||
|  |           "hqd_autoclean": "Автоматично почистване", | ||||||
|  |           "hqd_babycare": "Бебе", | ||||||
|  |           "hqd_baby_care": "Бебе", | ||||||
|  |           "hqd_bath_towel": "Хавлиени кърпи", | ||||||
|  |           "hqd_bed_sheets": "Чаршафи", | ||||||
|  |           "hqd_checkup": "Check-Up", | ||||||
|  |           "hqd_bulky": "Обемисти", | ||||||
|  |           "hqd_casual": "Ежедневни", | ||||||
|  |           "hqd_cold_wind_30": "Студен бриз 30 мин", | ||||||
|  |           "hqd_cold_wind_timing": "Студен бриз за време", | ||||||
|  |           "hqd_cotton": "Памук", | ||||||
|  |           "hqd_cottons": "Памук", | ||||||
|  |           "hqd_curtain": "Пердета", | ||||||
|  |           "hqd_delicate": "Деликатни", | ||||||
|  |           "hqd_delicate_cradle": "Деликатни", | ||||||
|  |           "hqd_diaper": "Бебешки пелени", | ||||||
|  |           "hqd_dry": "Cotton Dry", | ||||||
|  |           "hqd_dry_synthetics": "Low Heat Dry", | ||||||
|  |           "hqd_duvet": "Олекотени завивки", | ||||||
|  |           "hqd_eco_40_60_degrees": "Eco 40-60", | ||||||
|  |           "hqd_feather": "Пълнеж от пера(пух)", | ||||||
|  |           "hqd_handwash_wool": "Wool", | ||||||
|  |           "hqd_hot_wind_timing": "Горещ въздух за време", | ||||||
|  |           "hqd_hygienic": "Здравословна", | ||||||
|  |           "hqd_i_refresh": "i-Refresh", | ||||||
|  |           "hqd_i_refresh_pro": "i-Refresh Pro", | ||||||
|  |           "hqd_jacket": "Якета", | ||||||
|  |           "hqd_jeans": "Дънки", | ||||||
|  |           "hqd_luxury": "Луксозно", | ||||||
|  |           "hqd_mix": "Смесен тип", | ||||||
|  |           "hqd_night_dry": "Сушене през ноща", | ||||||
|  |           "hqd_outdoor": "Дрехи за открито", | ||||||
|  |           "hqd_precious_cure": "Precious cure", | ||||||
|  |           "hqd_quick_15": "Бързо 15 мин", | ||||||
|  |           "hqd_quick_20": "Бързо 20 мин", | ||||||
|  |           "hqd_quick_30": "Бързо 30 мин", | ||||||
|  |           "hqd_quick_dry": "Бързо", | ||||||
|  |           "hqd_quick_wash_57": "Quick Wash 57'", | ||||||
|  |           "hqd_quilt": "Юргани", | ||||||
|  |           "hqd_rapid_wash_and_dry": "Wash and dry", | ||||||
|  |           "hqd_refresh": "Освежаване", | ||||||
|  |           "hqd_rinse": "Rinses", | ||||||
|  |           "hqd_school_uniform": "Ученически униформи", | ||||||
|  |           "hqd_shirt": "Ризи", | ||||||
|  |           "hqd_shirts": "Ризи", | ||||||
|  |           "hqd_shoes": "Обувки", | ||||||
|  |           "hqd_silk": "Коприна", | ||||||
|  |           "hqd_smart": "Smart A.I.", | ||||||
|  |           "hqd_spin": "Spin", | ||||||
|  |           "hqd_sport": "Спорт", | ||||||
|  |           "hqd_sports": "Спорт", | ||||||
|  |           "hqd_synthetics": "Синтетика", | ||||||
|  |           "hqd_super_fast": "Супер бързо 39 мин", | ||||||
|  |           "hqd_synthetic_and_coloured": "Synthetics", | ||||||
|  |           "hqd_timer": "Таймер", | ||||||
|  |           "hqd_towel": "Хавлиени кърпи", | ||||||
|  |           "hqd_underwear": "Бельо", | ||||||
|  |           "hqd_warm_up": "Затопляне", | ||||||
|  |           "hqd_wool": "Вълна", | ||||||
|  |           "hqd_working_suit": "Работно облекло", | ||||||
|  |           "hygiene_59": "Hygiene Plus 59'", | ||||||
|  |           "hygiene_60": "Hygiene 60°C", | ||||||
|  |           "hygiene_plus_59": "Hygiene Plus 59'", | ||||||
|  |           "hygiene_plus_59_min": "Hygiene Plus 59'", | ||||||
|  |           "hygiene_pro_4_min": "Hygiene Pro 49'", | ||||||
|  |           "hygiene_pro_49_min": "Hygiene Pro 49'", | ||||||
|  |           "hygiene_pro_steam": "Hygiene Pro + Steam", | ||||||
|  |           "intensive_40": "Intensive 40°C", | ||||||
|  |           "intensive_40_steam": "Intensive 40°C + Steam", | ||||||
|  |           "iot_checkup": "Check-Up", | ||||||
|  |           "iot_dry_air_refresh": "Air Refresh", | ||||||
|  |           "iot_dry_anti_mites": "Anti-mite", | ||||||
|  |           "iot_dry_baby": "Бебе", | ||||||
|  |           "iot_dry_backpacks": "Раници", | ||||||
|  |           "iot_dry_bathrobe": "Халати за баня", | ||||||
|  |           "iot_dry_bed_linen": "Спално бельо", | ||||||
|  |           "iot_dry_cotton": "Памук", | ||||||
|  |           "iot_dry_cotton_dry": "Памук", | ||||||
|  |           "iot_dry_cuddly_toys": "Плюшени играчки", | ||||||
|  |           "iot_dry_curtains": "Пердета", | ||||||
|  |           "iot_dry_dehumidifier": "Humidity Remover", | ||||||
|  |           "iot_dry_delicates": "Деликатни", | ||||||
|  |           "iot_dry_delicates_antiallergy": "Delicates  Anti-allergy", | ||||||
|  |           "iot_dry_delicate_tablecloths": "Delicate Tablecloths", | ||||||
|  |           "iot_dry_denim_jeans": "Дънки", | ||||||
|  |           "iot_dry_down_jacket": "Пухени якета", | ||||||
|  |           "iot_dry_duvet": "Олекотени завивки", | ||||||
|  |           "iot_dry_easy_iron_cotton": "Easy Iron - Cotton", | ||||||
|  |           "iot_dry_easy_iron_synthetics": "Easy Iron - Synthetics", | ||||||
|  |           "iot_dry_gym_fit": "Фитнес", | ||||||
|  |           "iot_dry_lingerie": "Деликано бельо", | ||||||
|  |           "iot_dry_mixed": "Смесен тип", | ||||||
|  |           "iot_dry_mixed_dry": "Смесен тип", | ||||||
|  |           "iot_dry_rapid_30": "Бързо 30 мин", | ||||||
|  |           "iot_dry_rapid_59": "Бързо 59 мин", | ||||||
|  |           "iot_dry_rapid_60_min_delicates": "Rapid 60' - Delicates", | ||||||
|  |           "iot_dry_shirts": "Ризи", | ||||||
|  |           "iot_dry_swimsuits_and_bikinis": "Бански", | ||||||
|  |           "iot_dry_synthetics": "Синтетика", | ||||||
|  |           "iot_dry_synthetic_dry": "Synthetic Dry", | ||||||
|  |           "iot_dry_tablecloths": "Покривки", | ||||||
|  |           "iot_dry_technical_fabrics": "Технически тъкани", | ||||||
|  |           "iot_dry_warm_embrace": "Warm Embrace", | ||||||
|  |           "iot_dry_wool": "Вълна", | ||||||
|  |           "iot_dry_wool_dry": "Вълна", | ||||||
|  |           "iot_wash_and_dry": "Wash and dry", | ||||||
|  |           "iot_wash_anti_mites": "Anti-mites", | ||||||
|  |           "iot_wash_anti_odor": "Anti-odour", | ||||||
|  |           "iot_wash_ariel_clean_cycle": "Ariel Ultimate Clean", | ||||||
|  |           "iot_wash_ariel_cold_cycle": "Ariel Cold Clean", | ||||||
|  |           "iot_wash_ariel_fresh_cycle": "Ariel Fresh Clean", | ||||||
|  |           "iot_wash_baby_sanitizer": "Sanitizer", | ||||||
|  |           "iot_wash_baby_sanitizer_steam": "Sanitiser + Steam", | ||||||
|  |           "iot_wash_backpacks": "Backpacks", | ||||||
|  |           "iot_wash_backpacks_zelig": "Backpacks", | ||||||
|  |           "iot_wash_bathrobe": "Bathrobes and Towels", | ||||||
|  |           "iot_wash_bathrobe_steam": "Bathrobe and Towels + Steam", | ||||||
|  |           "iot_wash_bed_linen": "Bed Linen", | ||||||
|  |           "iot_wash_bed_linen_steam": "Bed Linen + Steam", | ||||||
|  |           "iot_wash_bed_linen_zelig": "Bed Linens", | ||||||
|  |           "iot_wash_big_single_load": "Big single load", | ||||||
|  |           "iot_wash_bleaching": "Bleaching", | ||||||
|  |           "iot_wash_blood_stains": "Bloodstains", | ||||||
|  |           "iot_wash_cashmere": "Cashmere", | ||||||
|  |           "iot_wash_chocolate_stains": "Chocolate stains", | ||||||
|  |           "iot_wash_cold_wash": "Cold Wash", | ||||||
|  |           "iot_wash_colored": "Colored", | ||||||
|  |           "iot_wash_colored_anti_stain": "Colored Anti-stain", | ||||||
|  |           "iot_wash_colored_delicate": "Colored Delicate", | ||||||
|  |           "iot_wash_coloured": "Colored", | ||||||
|  |           "iot_wash_coloured_bed_linen": "Colored Bed Linen", | ||||||
|  |           "iot_wash_coloured_bed_linen_steam": "Coloured Bed Linen + Steam", | ||||||
|  |           "iot_wash_coloured_curtains": "Colored Curtains", | ||||||
|  |           "iot_wash_coloured_shirts": "Colored Shirts", | ||||||
|  |           "iot_wash_coloured_shirts_steam": "Colored Shirts + Steam", | ||||||
|  |           "iot_wash_coloured_steam": "Colored + Steam", | ||||||
|  |           "iot_wash_coloured_tableclothes": "Colored Tableclothes", | ||||||
|  |           "iot_wash_coloured_tableclothes_steam": "Coloured Tablecloths + Steam", | ||||||
|  |           "iot_wash_cotton": "Cotton", | ||||||
|  |           "iot_wash_cotton_steam": "Cotton + Steam", | ||||||
|  |           "iot_wash_cuddly_toys": "Cuddly Toys", | ||||||
|  |           "iot_wash_curtains": "Curtains", | ||||||
|  |           "iot_wash_curtains_steam": "Curtains + Steam", | ||||||
|  |           "iot_wash_curtains_zelig": "Curtains", | ||||||
|  |           "iot_wash_dark": "Darks", | ||||||
|  |           "iot_wash_darks_and_coloured_44": "Darks and Colored 44'", | ||||||
|  |           "iot_wash_darks_and_coloured_59": "Darks and Colored 59'", | ||||||
|  |           "iot_wash_darks_and_coloured_xl": "Darks and Colored XL", | ||||||
|  |           "iot_wash_dark_steam": "Darks + Steam", | ||||||
|  |           "iot_wash_dash_clean_cycle": "Dash Ultimate Clean", | ||||||
|  |           "iot_wash_dash_cold_cycle": "Dash Cold Clean", | ||||||
|  |           "iot_wash_dash_fresh_cycle": "Dash Fresh Clean", | ||||||
|  |           "iot_wash_delicate": "Delicates", | ||||||
|  |           "iot_wash_delicate_antiallergy": "Delicate Anti-Allergy", | ||||||
|  |           "iot_wash_delicate_antiallergy_steam": "Delicate Anti-Allergy + Steam", | ||||||
|  |           "iot_wash_delicate_antiallergy_zelig": "Delicate Anti-Allergy", | ||||||
|  |           "iot_wash_delicate_colors": "Delicate Colors", | ||||||
|  |           "iot_wash_delicate_colors_steam": "Delicate Colors + Steam", | ||||||
|  |           "iot_wash_delicate_dark": "Delicate Darks", | ||||||
|  |           "iot_wash_delicate_steam": "Delicates + Steam", | ||||||
|  |           "iot_wash_delicate_tablecloths": "Delicate Tablecloths", | ||||||
|  |           "iot_wash_delicate_tablecloths_steam": "Delicate Tablecloths + Steam", | ||||||
|  |           "iot_wash_delicate_whites": "Delicate Whites", | ||||||
|  |           "iot_wash_denim_jeans": "Denim - Jeans", | ||||||
|  |           "iot_wash_diving_suits": "Diving Suits", | ||||||
|  |           "iot_wash_diving_suits_zelig": "Diving Suits", | ||||||
|  |           "iot_wash_down_jackets": "Down Jackets", | ||||||
|  |           "iot_wash_down_jackets_zelig": "Down Jackets", | ||||||
|  |           "iot_wash_duvet": "Duvet", | ||||||
|  |           "iot_wash_fruit_stains": "Fruit stains", | ||||||
|  |           "iot_wash_gym_fit": "Gym Fit - Fitness", | ||||||
|  |           "iot_wash_handwash": "Handwash", | ||||||
|  |           "iot_wash_handwash_colored": "Handwash Colored", | ||||||
|  |           "iot_wash_handwash_dark": "Handwash Darks", | ||||||
|  |           "iot_wash_lingerie": "Lingerie", | ||||||
|  |           "iot_wash_masks_refresh": "Masks Refresh", | ||||||
|  |           "iot_wash_masks_sanification": "Masks Sanitization", | ||||||
|  |           "iot_wash_masks_sanification_steam": "Mask Sanitisation + Steam", | ||||||
|  |           "iot_wash_mats": "Mats", | ||||||
|  |           "iot_wash_men_s_trousers": "Trousers", | ||||||
|  |           "iot_wash_mixed": "Mixed", | ||||||
|  |           "iot_wash_mixed_steam": "Mixed + Steam", | ||||||
|  |           "iot_wash_mix_and_coloured_44": "Mix and Colored 44'", | ||||||
|  |           "iot_wash_mix_and_coloured_59": "Mix and Colored 59'", | ||||||
|  |           "iot_wash_mix_and_coloured_xl": "Mix and colored XL", | ||||||
|  |           "iot_wash_new_clothes": "New Clothes", | ||||||
|  |           "iot_wash_perfect_white": "Perfect White", | ||||||
|  |           "iot_wash_perfect_white_steam": "Perfect White + Steam", | ||||||
|  |           "iot_wash_pets": "Pet Accessories", | ||||||
|  |           "iot_wash_pets_hair_removal": "Pets Hair Removal", | ||||||
|  |           "iot_wash_pets_odours_stains_removal": "Pets Odours and Stains Removal", | ||||||
|  |           "iot_wash_pets_steam": "Pet Accessories + Steam", | ||||||
|  |           "iot_wash_playsuits": "Playsuits", | ||||||
|  |           "iot_wash_playsuits_steam": "Playsuits + Steam", | ||||||
|  |           "iot_wash_quick_drum_cleaner": "Quick drum cleaner", | ||||||
|  |           "iot_wash_rapid_14": "Rapid 14’", | ||||||
|  |           "iot_wash_rapid_30": "Rapid 30’", | ||||||
|  |           "iot_wash_rapid_44": "Rapid 44'", | ||||||
|  |           "iot_wash_rapid_59": "Rapid 59'", | ||||||
|  |           "iot_wash_rapid_59_steam": "Rapid 59' + Steam", | ||||||
|  |           "iot_wash_refresh_14_min": "Refresh 14'", | ||||||
|  |           "iot_wash_resistant_colored": "Resistant Colored", | ||||||
|  |           "iot_wash_resistant_dark": "Resistant Darks", | ||||||
|  |           "iot_wash_resistant_whites": "Resistant Whites", | ||||||
|  |           "iot_wash_rinse": "Rinses", | ||||||
|  |           "iot_wash_shirts": "Shirts", | ||||||
|  |           "iot_wash_shirts_steam": "Shirts + Steam", | ||||||
|  |           "iot_wash_silk": "Silk", | ||||||
|  |           "iot_wash_ski_suit": "Ski Suit", | ||||||
|  |           "iot_wash_ski_suit_zelig": "Ski Suit", | ||||||
|  |           "iot_wash_spin": "Spin", | ||||||
|  |           "iot_wash_sport": "Sport", | ||||||
|  |           "iot_wash_sport_anti_odor": "Anti-odour Sportswear", | ||||||
|  |           "iot_wash_sport_anti_odor_zelig": "Anti-odour Sportswear", | ||||||
|  |           "iot_wash_stains_remover": "Stain Remover", | ||||||
|  |           "iot_wash_swimsuits_and_bikinis": "Swimsuits and Bikinis", | ||||||
|  |           "iot_wash_synthetic": "Synthetics", | ||||||
|  |           "iot_wash_synthetic_steam": "Synthetics + Steam", | ||||||
|  |           "iot_wash_tablecloths": "Tablecloths", | ||||||
|  |           "iot_wash_tablecloths_steam": "Tablecloths + Steam", | ||||||
|  |           "iot_wash_technical_fabrics": "Technical Fabrics", | ||||||
|  |           "iot_wash_technical_fabrics_zelig": "Technical Fabrics", | ||||||
|  |           "iot_wash_technical_jackets": "Technical Jackets", | ||||||
|  |           "iot_wash_technical_jackets_zelig": "Technical Jackets", | ||||||
|  |           "iot_wash_trainers": "Trainers", | ||||||
|  |           "iot_wash_whites": "Whites", | ||||||
|  |           "iot_wash_whites_44": "Whites 44'", | ||||||
|  |           "iot_wash_whites_59": "Whites 59'", | ||||||
|  |           "iot_wash_whites_xl": "Whites XL", | ||||||
|  |           "iot_wash_wine_stains": "Wine Stains", | ||||||
|  |           "iot_wash_wool": "Wool", | ||||||
|  |           "jeans": "Jeans", | ||||||
|  |           "jeans_60": "Jeans", | ||||||
|  |           "low_dry": "Low Heat Dry", | ||||||
|  |           "mixed": "Mixed", | ||||||
|  |           "mixed_and_colored_59": "Mixed and Colored 59'", | ||||||
|  |           "mixed_steam": "Mixed + Steam", | ||||||
|  |           "mix_and_colour_59": "Mixed and Colored 59'", | ||||||
|  |           "mix_and_colour_59_steam": "Mixed and Coloured 59' + Steam", | ||||||
|  |           "night_and_day": "Night and Day", | ||||||
|  |           "night_wash": "Night Wash", | ||||||
|  |           "perfect_59": "Perfect 59'", | ||||||
|  |           "perfect_cotton_59": "Perfect Cotton 59'", | ||||||
|  |           "perfect_cotton_59_steam": "Perfect Cotton 59' + Steam", | ||||||
|  |           "perfect_whites_59": "Perfect White 59'", | ||||||
|  |           "rapid_14_min": "Rapid 14'", | ||||||
|  |           "rapid_30_min": "Rapid 30'", | ||||||
|  |           "rapid_44_min": "Rapid 44'", | ||||||
|  |           "rapid_a_class_60": "Rapid 59' A Class", | ||||||
|  |           "rapid_a_class_60_steam": "Rapid 59' A Class + Steam", | ||||||
|  |           "rapid_wash_and_dry_59_min": "Wash and Dry 59'", | ||||||
|  |           "resistant_cotton": "Resistant Cotton", | ||||||
|  |           "resistant_cotton_steam": "Resistant Cotton + Steam", | ||||||
|  |           "rinse": "Rinse", | ||||||
|  |           "shirts_steam": "Shirts + Steam", | ||||||
|  |           "silent_night": "Silent Night", | ||||||
|  |           "single_item": "Single Item", | ||||||
|  |           "single_item_steam": "Single Item + Steam", | ||||||
|  |           "smart_wash": "Smart Wash", | ||||||
|  |           "soft_care": "Soft Care", | ||||||
|  |           "soft_care_steam": "Soft Care + Steam", | ||||||
|  |           "soft_care_steam_title": "Soft Care + Steam", | ||||||
|  |           "special_39": "Special 39'", | ||||||
|  |           "special_39_full_load": "Special 39'", | ||||||
|  |           "special_39_full_load_steam": "Special 39' + Steam", | ||||||
|  |           "special_49": "Special 49'", | ||||||
|  |           "sport_39": "Sport 39'", | ||||||
|  |           "sport_plus_29": "Sport Plus 29'", | ||||||
|  |           "sport_plus_39": "Sport Plus 39'", | ||||||
|  |           "steam_39": "Steam 39'", | ||||||
|  |           "steam_care_pro": "Steam Care Pro", | ||||||
|  |           "steam_care_pro_cotton": "Steam Care Pro - Cottons", | ||||||
|  |           "steam_care_pro_delicates": "Steam Care Pro - Delicates", | ||||||
|  |           "steam_care_pro_synthetic": "Steam Care Pro - Synthetics", | ||||||
|  |           "steam_hygiene_plus": "Hygiene Plus + Steam", | ||||||
|  |           "synthetics": "Synthetics", | ||||||
|  |           "synthetic_and_coloured": "Synthetic and Colored", | ||||||
|  |           "synthetic_and_coloured_steam": "Synthetic and Coloured + Steam", | ||||||
|  |           "tailored_resistant_cotton": "Tailored Resistant Cotton", | ||||||
|  |           "tailored_synthetic_and_coloured": "Tailored Synthetic Colored", | ||||||
|  |           "total_care": "Total Care", | ||||||
|  |           "tumbling": "Tumbling", | ||||||
|  |           "wool": "Wool", | ||||||
|  |           "wool_and_delicates_49": "Wool and Delicates 49'", | ||||||
|  |           "wool_dry": "Wool Dry", | ||||||
|  |           "wool_soft_care": "Wool and Soft Car" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -29,6 +29,49 @@ | |||||||
|           "100000000000": "E2: Check if the door is closed", |           "100000000000": "E2: Check if the door is closed", | ||||||
|           "8000000000000": "E4: Check the water supply" |           "8000000000000": "E4: Check the water supply" | ||||||
|         } |         } | ||||||
|  |       }, | ||||||
|  |       "tumbledryerprogram": { | ||||||
|  |         "state": { | ||||||
|  |           "0": "Default", | ||||||
|  |           "62": "Cotton", | ||||||
|  |           "63": "Synthetics", | ||||||
|  |           "64": "Mix", | ||||||
|  |           "66": "Bed Sheets", | ||||||
|  |           "71": "Curtains", | ||||||
|  |           "72": "Sports", | ||||||
|  |           "74": "i-time", | ||||||
|  |           "75": "Duvet", | ||||||
|  |           "76": "Wool", | ||||||
|  |           "78": "i-Refresh", | ||||||
|  |           "83": "Towel", | ||||||
|  |           "85": "Quick Dry", | ||||||
|  |           "92": "Delicate", | ||||||
|  |           "103": "Remote" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "tumbledryerprogramphase": { | ||||||
|  |         "state": { | ||||||
|  |           "0": "Waiting", | ||||||
|  |           "2": "Drying", | ||||||
|  |           "3": "Cooldown", | ||||||
|  |           "11": "11" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "tumbledryertemplevel": { | ||||||
|  |         "state": { | ||||||
|  |           "1": "Cool", | ||||||
|  |           "2": "Low temperature L-1", | ||||||
|  |           "3": "Middle temperature L-2", | ||||||
|  |           "4": "High temperature L-3" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "tumbledryerdrylevel": { | ||||||
|  |         "state": { | ||||||
|  |           "3": "Cupboard dry", | ||||||
|  |           "12": "Ready to Iron H-1", | ||||||
|  |           "13": "Ready to Store H-2", | ||||||
|  |           "14": "Extra Dry H-3" | ||||||
|  |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "select": { |     "select": { | ||||||
| @ -76,28 +119,64 @@ | |||||||
|           "hqd_allergy": "Allergy Care", |           "hqd_allergy": "Allergy Care", | ||||||
|           "hqd_autoclean": "Drum Cleaning", |           "hqd_autoclean": "Drum Cleaning", | ||||||
|           "hqd_babycare": "Baby Care", |           "hqd_babycare": "Baby Care", | ||||||
|  |           "hqd_baby_care": "Baby care", | ||||||
|  |           "hqd_bath_towel": "Bath towel", | ||||||
|  |           "hqd_bed_sheets": "Bed sheets", | ||||||
|  |           "hqd_bulky": "Bulky", | ||||||
|  |           "hqd_casual": "Casual", | ||||||
|           "hqd_checkup": "Check-Up", |           "hqd_checkup": "Check-Up", | ||||||
|  |           "hqd_cold_wind_30": "Cold wind 30'", | ||||||
|  |           "hqd_cold_wind_timing": "Cold wind timing", | ||||||
|  |           "hqd_cotton": "Cotton", | ||||||
|           "hqd_cottons": "Cotton", |           "hqd_cottons": "Cotton", | ||||||
|  |           "hqd_curtain": "Curtain", | ||||||
|           "hqd_delicate": "Delicate", |           "hqd_delicate": "Delicate", | ||||||
|           "hqd_delicate_cradle": "Delicate", |           "hqd_delicate_cradle": "Delicate", | ||||||
|  |           "hqd_diaper": "Diaper", | ||||||
|           "hqd_dry": "Cotton Dry", |           "hqd_dry": "Cotton Dry", | ||||||
|           "hqd_dry_synthetics": "Low Heat Dry", |           "hqd_dry_synthetics": "Low Heat Dry", | ||||||
|           "hqd_duvet": "Duvet", |           "hqd_duvet": "Duvet", | ||||||
|           "hqd_eco_40_60_degrees": "Eco 40-60", |           "hqd_eco_40_60_degrees": "Eco 40-60", | ||||||
|  |           "hqd_feather": "Feather", | ||||||
|           "hqd_handwash_wool": "Wool", |           "hqd_handwash_wool": "Wool", | ||||||
|  |           "hqd_hot_wind_timing": "Hot wind timing", | ||||||
|  |           "hqd_hygienic": "Hygienic", | ||||||
|           "hqd_i_refresh": "i-Refresh", |           "hqd_i_refresh": "i-Refresh", | ||||||
|  |           "hqd_i_refresh_pro": "i-Refresh Pro", | ||||||
|  |           "hqd_jacket": "Jacket", | ||||||
|  |           "hqd_jeans": "Jeans", | ||||||
|  |           "hqd_luxury": "Luxury", | ||||||
|           "hqd_mix": "Mix", |           "hqd_mix": "Mix", | ||||||
|  |           "hqd_night_dry": "Night dry", | ||||||
|  |           "hqd_outdoor": "Outdoor", | ||||||
|  |           "hqd_precious_cure": "Precious cure", | ||||||
|           "hqd_quick_15": "Quick 15'", |           "hqd_quick_15": "Quick 15'", | ||||||
|  |           "hqd_quick_20": "Quick 20'", | ||||||
|  |           "hqd_quick_30": "Quick 30'", | ||||||
|  |           "hqd_quick_dry": "Quick dry", | ||||||
|           "hqd_quick_wash_57": "Quick Wash 57'", |           "hqd_quick_wash_57": "Quick Wash 57'", | ||||||
|  |           "hqd_quilt": "Quilt", | ||||||
|           "hqd_rapid_wash_and_dry": "Wash and dry", |           "hqd_rapid_wash_and_dry": "Wash and dry", | ||||||
|           "hqd_refresh": "Refresh", |           "hqd_refresh": "Refresh", | ||||||
|           "hqd_rinse": "Rinses", |           "hqd_rinse": "Rinses", | ||||||
|  |           "hqd_school_uniform": "School uniform", | ||||||
|  |           "hqd_shirt": "Shirt", | ||||||
|           "hqd_shirts": "Shirts", |           "hqd_shirts": "Shirts", | ||||||
|  |           "hqd_shoes": "Shoes", | ||||||
|  |           "hqd_silk": "Silk", | ||||||
|           "hqd_smart": "Smart A.I.", |           "hqd_smart": "Smart A.I.", | ||||||
|           "hqd_spin": "Spin", |           "hqd_spin": "Spin", | ||||||
|           "hqd_sport": "Sport", |           "hqd_sport": "Sport", | ||||||
|  |           "hqd_sports": "Sports", | ||||||
|           "hqd_super_fast": "Super Fast 39'", |           "hqd_super_fast": "Super Fast 39'", | ||||||
|           "hqd_synthetic_and_coloured": "Synthetics", |           "hqd_synthetic_and_coloured": "Synthetics", | ||||||
|  |           "hqd_synthetics": "Synthetics", | ||||||
|  |           "hqd_timer": "Timer", | ||||||
|  |           "hqd_towel": "Towel", | ||||||
|  |           "hqd_underwear": "Underwear", | ||||||
|  |           "hqd_warm_up": "Warm up", | ||||||
|  |           "hqd_wool": "Wool", | ||||||
|  |           "hqd_working_suit": "Working suit", | ||||||
|           "hygiene_59": "Hygiene Plus 59'", |           "hygiene_59": "Hygiene Plus 59'", | ||||||
|           "hygiene_60": "Hygiene 60°C", |           "hygiene_60": "Hygiene 60°C", | ||||||
|           "hygiene_plus_59": "Hygiene Plus 59'", |           "hygiene_plus_59": "Hygiene Plus 59'", | ||||||
| @ -115,17 +194,24 @@ | |||||||
|           "iot_dry_bathrobe": "Bathrobes", |           "iot_dry_bathrobe": "Bathrobes", | ||||||
|           "iot_dry_bed_linen": "Bed Linen", |           "iot_dry_bed_linen": "Bed Linen", | ||||||
|           "iot_dry_cotton_dry": "Cotton Dry", |           "iot_dry_cotton_dry": "Cotton Dry", | ||||||
|  |           "iot_dry_cotton": "Cotton", | ||||||
|           "iot_dry_cuddly_toys": "Cuddly Toys", |           "iot_dry_cuddly_toys": "Cuddly Toys", | ||||||
|           "iot_dry_curtains": "Curtains", |           "iot_dry_curtains": "Curtains", | ||||||
|           "iot_dry_dehumidifier": "Humidity Remover", |           "iot_dry_dehumidifier": "Humidity Remover", | ||||||
|  |           "iot_dry_delicates": "Delicates", | ||||||
|           "iot_dry_delicates_antiallergy": "Delicates  Anti-allergy", |           "iot_dry_delicates_antiallergy": "Delicates  Anti-allergy", | ||||||
|           "iot_dry_delicate_tablecloths": "Delicate Tablecloths", |           "iot_dry_delicate_tablecloths": "Delicate Tablecloths", | ||||||
|           "iot_dry_denim_jeans": "Denim - Jeans", |           "iot_dry_denim_jeans": "Denim - Jeans", | ||||||
|  |           "iot_dry_down_jacket": "Down jacket", | ||||||
|  |           "iot_dry_duvet": "Duvet", | ||||||
|           "iot_dry_easy_iron_cotton": "Easy Iron - Cotton", |           "iot_dry_easy_iron_cotton": "Easy Iron - Cotton", | ||||||
|           "iot_dry_easy_iron_synthetics": "Easy Iron - Synthetics", |           "iot_dry_easy_iron_synthetics": "Easy Iron - Synthetics", | ||||||
|           "iot_dry_gym_fit": "Gym fit - Fitness", |           "iot_dry_gym_fit": "Gym fit - Fitness", | ||||||
|           "iot_dry_lingerie": "Lingerie", |           "iot_dry_lingerie": "Lingerie", | ||||||
|  |           "iot_dry_mixed": "Mixed", | ||||||
|           "iot_dry_mixed_dry": "Mixed Dry", |           "iot_dry_mixed_dry": "Mixed Dry", | ||||||
|  |           "iot_dry_rapid_30": "Rapid 30'", | ||||||
|  |           "iot_dry_rapid_59": "Rapid 59'", | ||||||
|           "iot_dry_rapid_60_min_delicates": "Rapid 60' - Delicates", |           "iot_dry_rapid_60_min_delicates": "Rapid 60' - Delicates", | ||||||
|           "iot_dry_shirts": "Shirts", |           "iot_dry_shirts": "Shirts", | ||||||
|           "iot_dry_swimsuits_and_bikinis": "Swimsuits and Bikinis", |           "iot_dry_swimsuits_and_bikinis": "Swimsuits and Bikinis", | ||||||
| @ -134,6 +220,7 @@ | |||||||
|           "iot_dry_tablecloths": "Tablecloths", |           "iot_dry_tablecloths": "Tablecloths", | ||||||
|           "iot_dry_technical_fabrics": "Technical Fabrics", |           "iot_dry_technical_fabrics": "Technical Fabrics", | ||||||
|           "iot_dry_warm_embrace": "Warm Embrace", |           "iot_dry_warm_embrace": "Warm Embrace", | ||||||
|  |           "iot_dry_wool": "Wool", | ||||||
|           "iot_dry_wool_dry": "Wool Dry", |           "iot_dry_wool_dry": "Wool Dry", | ||||||
|           "iot_wash_and_dry": "Wash and dry", |           "iot_wash_and_dry": "Wash and dry", | ||||||
|           "iot_wash_anti_mites": "Anti-mites", |           "iot_wash_anti_mites": "Anti-mites", | ||||||
| @ -290,6 +377,7 @@ | |||||||
|           "single_item_steam": "Single Item + Steam", |           "single_item_steam": "Single Item + Steam", | ||||||
|           "smart_wash": "Smart Wash", |           "smart_wash": "Smart Wash", | ||||||
|           "soft_care": "Soft Care", |           "soft_care": "Soft Care", | ||||||
|  |           "soft_care_steam": "Soft Care + Steam", | ||||||
|           "soft_care_steam_title": "Soft Care + Steam", |           "soft_care_steam_title": "Soft Care + Steam", | ||||||
|           "special_39": "Special 39'", |           "special_39": "Special 39'", | ||||||
|           "special_39_full_load": "Special 39'", |           "special_39_full_load": "Special 39'", | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	