Compare commits
	
		
			5 Commits
		
	
	
		
			test
			...
			v0.6.0-bet
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2aa1d3df01 | |||
| e2f7f15a5f | |||
| d91b3edb40 | |||
| 83c5e3479e | |||
| b0cd020941 | 
| @ -9,7 +9,7 @@ Home Assistant integration for Haier hOn: support for Haier/Candy/Hoover home ap | ||||
| - Washer Dryer | ||||
| - Washing Machine | ||||
| - Oven | ||||
|  | ||||
| - Hob | ||||
|  | ||||
| ## Installation | ||||
| **Method 1:** [](https://my.home-assistant.io/redirect/hacs_repository/?owner=Andre0512&repository=hon&category=integration) | ||||
|  | ||||
| @ -104,14 +104,14 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = { | ||||
|     "OV": ( | ||||
|         HonBinarySensorEntityDescription( | ||||
|             key="attributes.lastConnEvent.category", | ||||
|             name="Online", | ||||
|             name="Connection", | ||||
|             device_class=BinarySensorDeviceClass.CONNECTIVITY, | ||||
|             on_value="CONNECTED", | ||||
|             icon="mdi:wifi", | ||||
|         ), | ||||
|         HonBinarySensorEntityDescription( | ||||
|             key="attributes.parameters.remoteCtrValid", | ||||
|             name="On", | ||||
|             name="Remote Control", | ||||
|             device_class=BinarySensorDeviceClass.CONNECTIVITY, | ||||
|             on_value="1", | ||||
|             icon="mdi:remote", | ||||
| @ -124,6 +124,41 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = { | ||||
|             icon="mdi:power-cycle", | ||||
|         ), | ||||
|     ), | ||||
|     "IH": ( | ||||
|         HonBinarySensorEntityDescription( | ||||
|             key="attributes.lastConnEvent.category", | ||||
|             name="Connection", | ||||
|             device_class=BinarySensorDeviceClass.CONNECTIVITY, | ||||
|             on_value="CONNECTED", | ||||
|             icon="mdi:wifi", | ||||
|         ), | ||||
|         HonBinarySensorEntityDescription( | ||||
|             key="attributes.parameters.remoteCtrValid", | ||||
|             name="Remote Control", | ||||
|             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", | ||||
|         ), | ||||
|         HonBinarySensorEntityDescription( | ||||
|             key="hotStatus", | ||||
|             name="Hot Status", | ||||
|             device_class=BinarySensorDeviceClass.HEAT, | ||||
|             on_value="1", | ||||
|         ), | ||||
|         HonBinarySensorEntityDescription( | ||||
|             key="hobLockStatus", | ||||
|             name="Hob Lock", | ||||
|             device_class=BinarySensorDeviceClass.LOCK, | ||||
|             on_value="0", | ||||
|         ), | ||||
|     ), | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -132,11 +167,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | ||||
|     coordinators = hass.data[DOMAIN]["coordinators"] | ||||
|     appliances = [] | ||||
|     for device in hon.appliances: | ||||
|         if device.mac_address in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||
|         if device.unique_id in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] | ||||
|         else: | ||||
|             coordinator = HonCoordinator(hass, device) | ||||
|             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator | ||||
|         await coordinator.async_config_entry_first_refresh() | ||||
|  | ||||
|         if descriptions := BINARY_SENSORS.get(device.appliance_type): | ||||
|  | ||||
| @ -25,7 +25,14 @@ BUTTONS: dict[str, tuple[ButtonEntityDescription, ...]] = { | ||||
|             name="Stop Program", | ||||
|             icon="mdi:power-off", | ||||
|         ), | ||||
|     ) | ||||
|     ), | ||||
|     "IH": ( | ||||
|         ButtonEntityDescription( | ||||
|             key="startProgram", | ||||
|             name="Start Program", | ||||
|             icon="mdi:pot-steam", | ||||
|         ), | ||||
|     ), | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -34,11 +41,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | ||||
|     coordinators = hass.data[DOMAIN]["coordinators"] | ||||
|     appliances = [] | ||||
|     for device in hon.appliances: | ||||
|         if device.mac_address in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||
|         if device.unique_id in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] | ||||
|         else: | ||||
|             coordinator = HonCoordinator(hass, device) | ||||
|             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator | ||||
|         await coordinator.async_config_entry_first_refresh() | ||||
|  | ||||
|         if descriptions := BUTTONS.get(device.appliance_type): | ||||
|  | ||||
| @ -22,12 +22,12 @@ class HonEntity(CoordinatorEntity): | ||||
|         self._hass = hass | ||||
|         self._device = device | ||||
|  | ||||
|         self._attr_unique_id = self._device.mac_address | ||||
|         self._attr_unique_id = self._device.unique_id | ||||
|  | ||||
|     @property | ||||
|     def device_info(self): | ||||
|         return DeviceInfo( | ||||
|             identifiers={(DOMAIN, self._device.mac_address)}, | ||||
|             identifiers={(DOMAIN, self._device.unique_id)}, | ||||
|             manufacturer=self._device.get("brand", ""), | ||||
|             name=self._device.nick_name | ||||
|             if self._device.nick_name | ||||
| @ -43,7 +43,7 @@ class HonCoordinator(DataUpdateCoordinator): | ||||
|         super().__init__( | ||||
|             hass, | ||||
|             _LOGGER, | ||||
|             name=device.mac_address, | ||||
|             name=device.unique_id, | ||||
|             update_interval=timedelta(seconds=30), | ||||
|         ) | ||||
|         self._device = device | ||||
|  | ||||
| @ -6,6 +6,6 @@ | ||||
|   "documentation": "https://github.com/Andre0512/hon/", | ||||
|   "iot_class": "cloud_polling", | ||||
|   "issue_tracker": "https://github.com/Andre0512/hon/issues", | ||||
|   "requirements": ["pyhOn==0.7.3"], | ||||
|   "version": "0.5.1-beta.1" | ||||
|   "requirements": ["pyhOn==0.8.0b5"], | ||||
|   "version": "0.6.0-beta.4" | ||||
| } | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| from __future__ import annotations | ||||
|  | ||||
| from pyhon import Hon | ||||
| from pyhon.parameter import HonParameterRange | ||||
| from pyhon.parameter.range import HonParameterRange | ||||
|  | ||||
| from homeassistant.components.number import ( | ||||
|     NumberEntity, | ||||
| @ -106,6 +106,20 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = { | ||||
|             native_unit_of_measurement=UnitOfTime.MINUTES, | ||||
|         ), | ||||
|     ), | ||||
|     "IH": ( | ||||
|         NumberEntityDescription( | ||||
|             key="startProgram.temp", | ||||
|             name="Temperature", | ||||
|             entity_category=EntityCategory.CONFIG, | ||||
|             icon="mdi:thermometer", | ||||
|         ), | ||||
|         NumberEntityDescription( | ||||
|             key="startProgram.powerManagement", | ||||
|             name="Power Management", | ||||
|             entity_category=EntityCategory.CONFIG, | ||||
|             icon="mdi:timelapse", | ||||
|         ), | ||||
|     ), | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -114,11 +128,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | ||||
|     coordinators = hass.data[DOMAIN]["coordinators"] | ||||
|     appliances = [] | ||||
|     for device in hon.appliances: | ||||
|         if device.mac_address in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||
|         if device.unique_id in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] | ||||
|         else: | ||||
|             coordinator = HonCoordinator(hass, device) | ||||
|             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator | ||||
|         await coordinator.async_config_entry_first_refresh() | ||||
|  | ||||
|         if descriptions := NUMBERS.get(device.appliance_type): | ||||
|  | ||||
| @ -4,7 +4,7 @@ import logging | ||||
|  | ||||
| from pyhon import Hon | ||||
| from pyhon.appliance import HonAppliance | ||||
| from pyhon.parameter import HonParameterFixed | ||||
| from pyhon.parameter.fixed import HonParameterFixed | ||||
|  | ||||
| from homeassistant.components.select import SelectEntity, SelectEntityDescription | ||||
| from homeassistant.config_entries import ConfigEntry | ||||
| @ -68,6 +68,7 @@ SELECTS = { | ||||
|             key="startProgram.program", | ||||
|             name="Program", | ||||
|             entity_category=EntityCategory.CONFIG, | ||||
|             translation_key="programs", | ||||
|         ), | ||||
|         SelectEntityDescription( | ||||
|             key="startProgram.preheatStatus", | ||||
| @ -75,6 +76,14 @@ SELECTS = { | ||||
|             entity_category=EntityCategory.CONFIG, | ||||
|         ), | ||||
|     ), | ||||
|     "IH": ( | ||||
|         SelectEntityDescription( | ||||
|             key="startProgram.program", | ||||
|             name="Program", | ||||
|             entity_category=EntityCategory.CONFIG, | ||||
|             translation_key="programs", | ||||
|         ), | ||||
|     ), | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -83,11 +92,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | ||||
|     coordinators = hass.data[DOMAIN]["coordinators"] | ||||
|     appliances = [] | ||||
|     for device in hon.appliances: | ||||
|         if device.mac_address in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||
|         if device.unique_id in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] | ||||
|         else: | ||||
|             coordinator = HonCoordinator(hass, device) | ||||
|             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator | ||||
|         await coordinator.async_config_entry_first_refresh() | ||||
|  | ||||
|         if descriptions := SELECTS.get(device.appliance_type): | ||||
|  | ||||
| @ -221,6 +221,22 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = { | ||||
|             icon="mdi:thermometer", | ||||
|         ), | ||||
|     ), | ||||
|     "IH": ( | ||||
|         SensorEntityDescription( | ||||
|             key="remainingTimeMM", | ||||
|             name="Remaining Time", | ||||
|             icon="mdi:timer", | ||||
|             native_unit_of_measurement=UnitOfTime.MINUTES, | ||||
|         ), | ||||
|         SensorEntityDescription( | ||||
|             key="temp", | ||||
|             name="Temperature", | ||||
|             icon="mdi:thermometer", | ||||
|             state_class=SensorStateClass.MEASUREMENT, | ||||
|             native_unit_of_measurement=UnitOfTemperature.CELSIUS, | ||||
|         ), | ||||
|         SensorEntityDescription(key="errors", name="Error", icon="mdi:math-log"), | ||||
|     ), | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -229,11 +245,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | ||||
|     coordinators = hass.data[DOMAIN]["coordinators"] | ||||
|     appliances = [] | ||||
|     for device in hon.appliances: | ||||
|         if device.mac_address in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||
|         if device.unique_id in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] | ||||
|         else: | ||||
|             coordinator = HonCoordinator(hass, device) | ||||
|             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator | ||||
|         await coordinator.async_config_entry_first_refresh() | ||||
|  | ||||
|         if descriptions := SENSORS.get(device.appliance_type): | ||||
|  | ||||
| @ -8,6 +8,7 @@ from homeassistant.config_entries import ConfigEntry | ||||
| from homeassistant.const import EntityCategory | ||||
| from pyhon import Hon | ||||
| from pyhon.appliance import HonAppliance | ||||
| from pyhon.parameter.range import HonParameterRange | ||||
|  | ||||
| from .const import DOMAIN | ||||
| from .hon import HonCoordinator, HonEntity | ||||
| @ -97,11 +98,11 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non | ||||
|     coordinators = hass.data[DOMAIN]["coordinators"] | ||||
|     appliances = [] | ||||
|     for device in hon.appliances: | ||||
|         if device.mac_address in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.mac_address] | ||||
|         if device.unique_id in coordinators: | ||||
|             coordinator = hass.data[DOMAIN]["coordinators"][device.unique_id] | ||||
|         else: | ||||
|             coordinator = HonCoordinator(hass, device) | ||||
|             hass.data[DOMAIN]["coordinators"][device.mac_address] = coordinator | ||||
|             hass.data[DOMAIN]["coordinators"][device.unique_id] = coordinator | ||||
|         await coordinator.async_config_entry_first_refresh() | ||||
|  | ||||
|         if descriptions := SWITCHES.get(device.appliance_type): | ||||
|  | ||||
| @ -402,7 +402,64 @@ | ||||
|           "wool": "Wool", | ||||
|           "wool_and_delicates_49": "Wool and Delicates 49'", | ||||
|           "wool_dry": "Wool Dry", | ||||
|           "wool_soft_care": "Wool and Soft Car" | ||||
|           "wool_soft_care": "Wool and Soft Car", | ||||
|           "bakery": "Pasta and Pastries", | ||||
|           "bakery_steam": "Steam-baked bread", | ||||
|           "bottom_heating": "Bottom Heating", | ||||
|           "bottom_heating_fan": "Bottom Heating + Fan", | ||||
|           "bread": "Bread", | ||||
|           "bread_steam": "Steam-baked pastries", | ||||
|           "combi": "Combi", | ||||
|           "convection_fan": "Convection + Fan", | ||||
|           "convection_fan_turnspit": "Convection + Fan + Turnspit", | ||||
|           "conventional": "Conventional", | ||||
|           "conventional_turnspit": "Convection + Turnspit", | ||||
|           "defrost": "Defrost", | ||||
|           "descaling": "Descaling", | ||||
|           "fish": "Fish", | ||||
|           "fish_steam": "Steam-cooked fish", | ||||
|           "grill_cata": "Grill", | ||||
|           "grill_fan_cata": "Grill fan", | ||||
|           "grill_fan_pyro": "Grill + Fan", | ||||
|           "grill_pyro": "Grill", | ||||
|           "h20_clean": "H2O-Clean", | ||||
|           "iot_bread": "Bread", | ||||
|           "iot_h20_clean": "h2O clean", | ||||
|           "leavening": "Leavening", | ||||
|           "light_fan": "Light Fan", | ||||
|           "low_temp_cooking": "Low Temperature Cooking", | ||||
|           "low_temp_cooking_fish": "Low Temperature Cooking - Fish", | ||||
|           "low_temp_cooking_fish_steam": "Low Temperature Steam Cooking - Fish", | ||||
|           "low_temp_cooking_meat": "Low Temperature Cooking - Meat", | ||||
|           "low_temp_cooking_meat_steam": "Low Temperature Steam Cooking - Meat", | ||||
|           "low_temp_cooking_steam": "Low Temperature Steam Cooking", | ||||
|           "meat": "Meat", | ||||
|           "meat_steam": "Steam-cooked meat", | ||||
|           "multi_level": "Multi-Level", | ||||
|           "paella": "Paella", | ||||
|           "pasta_and_bakery": "Pasta and Bakery", | ||||
|           "pizza": "Pizza", | ||||
|           "pyrolysis": "Pyrolysis", | ||||
|           "pyrolysis_plus": "Pyrolysis +", | ||||
|           "red_meat": "Red Meat", | ||||
|           "red_meat_steam": "Steam-cooked red meat", | ||||
|           "regenerate": "Regeneration", | ||||
|           "soft_plus": "Soft+", | ||||
|           "super_grill": "Super Grill", | ||||
|           "tailor_bake": "Tailor bake", | ||||
|           "tailor_bake_cata": "Tailor Bake", | ||||
|           "tailor_bake_pyro": "Tailor Bake", | ||||
|           "vegetables": "Vegetables", | ||||
|           "vegetables_cata": "Vegetables", | ||||
|           "vegetables_pyro": "Vegetables", | ||||
|           "water_discharge": "Water Drain", | ||||
|           "white_meat": "White Meat", | ||||
|           "white_meat_steam": "Steam-cooked white meat", | ||||
|           "iot_standard_boiling": "Boiling", | ||||
|           "iot_standard_frying": "Frying", | ||||
|           "iot_standard_keep_warm": "Keep Warm", | ||||
|           "iot_standard_melting": "Melting", | ||||
|           "iot_standard_simmering": "Simmering" | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	