From 907bc445336891de4ad816cb00bab6afad2106b2 Mon Sep 17 00:00:00 2001 From: Andre Basche Date: Mon, 10 Apr 2023 19:51:16 +0200 Subject: [PATCH] Reformat with black --- custom_components/hon/__init__.py | 4 ++- custom_components/hon/binary_sensor.py | 43 ++++++++++++++++-------- custom_components/hon/button.py | 8 +++-- custom_components/hon/config_flow.py | 8 +++-- custom_components/hon/hon.py | 11 ++++-- custom_components/hon/manifest.json | 1 - custom_components/hon/number.py | 29 ++++++++-------- custom_components/hon/select.py | 26 +++++++++------ custom_components/hon/sensor.py | 46 ++++++++++++-------------- custom_components/hon/switch.py | 42 ++++++++++++++++------- 10 files changed, 133 insertions(+), 85 deletions(-) diff --git a/custom_components/hon/__init__.py b/custom_components/hon/__init__.py index c404243..37010b3 100644 --- a/custom_components/hon/__init__.py +++ b/custom_components/hon/__init__.py @@ -28,7 +28,9 @@ CONFIG_SCHEMA = vol.Schema( async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry): session = aiohttp_client.async_get_clientsession(hass) - hon = await Hon(entry.data["email"], entry.data["password"], session=session).create() + hon = await Hon( + entry.data["email"], entry.data["password"], session=session + ).create() hass.data.setdefault(DOMAIN, {}) hass.data[DOMAIN][entry.unique_id] = hon hass.data[DOMAIN]["coordinators"] = {} diff --git a/custom_components/hon/binary_sensor.py b/custom_components/hon/binary_sensor.py index e6bccf8..18f0f8b 100644 --- a/custom_components/hon/binary_sensor.py +++ b/custom_components/hon/binary_sensor.py @@ -3,8 +3,11 @@ from dataclasses import dataclass from pyhon import Hon -from homeassistant.components.binary_sensor import BinarySensorEntityDescription, BinarySensorDeviceClass, \ - BinarySensorEntity +from homeassistant.components.binary_sensor import ( + BinarySensorEntityDescription, + BinarySensorDeviceClass, + BinarySensorEntity, +) from homeassistant.config_entries import ConfigEntry from homeassistant.core import callback from .const import DOMAIN @@ -19,7 +22,9 @@ class HonBinarySensorEntityDescriptionMixin: @dataclass -class HonBinarySensorEntityDescription(HonBinarySensorEntityDescriptionMixin, BinarySensorEntityDescription): +class HonBinarySensorEntityDescription( + HonBinarySensorEntityDescriptionMixin, BinarySensorEntityDescription +): pass @@ -30,7 +35,7 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = { name="Remote Control", device_class=BinarySensorDeviceClass.CONNECTIVITY, on_value="CONNECTED", - icon="mdi:remote" + icon="mdi:remote", ), HonBinarySensorEntityDescription( key="doorLockStatus", @@ -65,7 +70,7 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = { name="Remote Control", device_class=BinarySensorDeviceClass.CONNECTIVITY, on_value="CONNECTED", - icon="mdi:remote" + icon="mdi:remote", ), HonBinarySensorEntityDescription( key="startProgram.prewash", @@ -102,21 +107,21 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = { name="Online", device_class=BinarySensorDeviceClass.CONNECTIVITY, on_value="CONNECTED", - icon="mdi:wifi" + icon="mdi:wifi", ), HonBinarySensorEntityDescription( key="attributes.parameters.remoteCtrValid", name="On", device_class=BinarySensorDeviceClass.CONNECTIVITY, on_value="1", - icon="mdi:remote" + icon="mdi:remote", ), HonBinarySensorEntityDescription( key="attributes.parameters.onOffStatus", name="On", device_class=BinarySensorDeviceClass.RUNNING, on_value="1", - icon="mdi:power-cycle" + icon="mdi:power-cycle", ), ), } @@ -137,10 +142,16 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non if descriptions := BINARY_SENSORS.get(device.appliance_type): for description in descriptions: if not device.get(description.key): - _LOGGER.warning("[%s] Can't setup %s", device.appliance_type, description.key) + _LOGGER.warning( + "[%s] Can't setup %s", device.appliance_type, description.key + ) continue - appliances.extend([ - HonBinarySensorEntity(hass, coordinator, entry, device, description)] + appliances.extend( + [ + HonBinarySensorEntity( + hass, coordinator, entry, device, description + ) + ] ) async_add_entities(appliances) @@ -159,9 +170,15 @@ class HonBinarySensorEntity(HonEntity, BinarySensorEntity): @property def is_on(self) -> bool: - return self._device.get(self.entity_description.key, "") == self.entity_description.on_value + return ( + self._device.get(self.entity_description.key, "") + == self.entity_description.on_value + ) @callback def _handle_coordinator_update(self): - self._attr_native_value = self._device.get(self.entity_description.key, "") == self.entity_description.on_value + self._attr_native_value = ( + self._device.get(self.entity_description.key, "") + == self.entity_description.on_value + ) self.async_write_ha_state() diff --git a/custom_components/hon/button.py b/custom_components/hon/button.py index a2386b4..949747f 100644 --- a/custom_components/hon/button.py +++ b/custom_components/hon/button.py @@ -38,15 +38,17 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non for description in descriptions: if not device.commands.get(description.key): continue - appliances.extend([ - HonButtonEntity(hass, coordinator, entry, device, description)] + appliances.extend( + [HonButtonEntity(hass, coordinator, entry, device, description)] ) async_add_entities(appliances) class HonButtonEntity(HonEntity, ButtonEntity): - def __init__(self, hass, coordinator, entry, device: HonAppliance, description) -> None: + def __init__( + self, hass, coordinator, entry, device: HonAppliance, description + ) -> None: super().__init__(hass, entry, coordinator, device) self._coordinator = coordinator diff --git a/custom_components/hon/config_flow.py b/custom_components/hon/config_flow.py index e4ec404..442d109 100644 --- a/custom_components/hon/config_flow.py +++ b/custom_components/hon/config_flow.py @@ -20,8 +20,12 @@ class HonFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user(self, user_input=None): if user_input is None: - return self.async_show_form(step_id="user", data_schema=vol.Schema( - {vol.Required(CONF_EMAIL): str, vol.Required(CONF_PASSWORD): str})) + return self.async_show_form( + step_id="user", + data_schema=vol.Schema( + {vol.Required(CONF_EMAIL): str, vol.Required(CONF_PASSWORD): str} + ), + ) self._email = user_input[CONF_EMAIL] self._password = user_input[CONF_PASSWORD] diff --git a/custom_components/hon/hon.py b/custom_components/hon/hon.py index f68cf2b..6b197f9 100644 --- a/custom_components/hon/hon.py +++ b/custom_components/hon/hon.py @@ -29,7 +29,9 @@ class HonEntity(CoordinatorEntity): return DeviceInfo( identifiers={(DOMAIN, self._device.mac_address)}, manufacturer=self._device.get("brand", ""), - name=self._device.nick_name if self._device.nick_name else self._device.model_name, + name=self._device.nick_name + if self._device.nick_name + else self._device.model_name, model=self._device.model_name, sw_version=self._device.get("fwVersion", ""), ) @@ -38,7 +40,12 @@ class HonEntity(CoordinatorEntity): class HonCoordinator(DataUpdateCoordinator): def __init__(self, hass, device: HonAppliance): """Initialize my coordinator.""" - super().__init__(hass, _LOGGER, name=device.mac_address, update_interval=timedelta(seconds=30)) + super().__init__( + hass, + _LOGGER, + name=device.mac_address, + update_interval=timedelta(seconds=30), + ) self._device = device async def _async_update_data(self): diff --git a/custom_components/hon/manifest.json b/custom_components/hon/manifest.json index 608e685..75966fb 100644 --- a/custom_components/hon/manifest.json +++ b/custom_components/hon/manifest.json @@ -9,4 +9,3 @@ "requirements": ["pyhOn==0.6.2"], "version": "0.5.0-beta.3" } - diff --git a/custom_components/hon/number.py b/custom_components/hon/number.py index c2f588c..ed69dbd 100644 --- a/custom_components/hon/number.py +++ b/custom_components/hon/number.py @@ -22,20 +22,20 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = { name="Delay Time", icon="mdi:timer-plus", entity_category=EntityCategory.CONFIG, - native_unit_of_measurement=UnitOfTime.MINUTES + native_unit_of_measurement=UnitOfTime.MINUTES, ), NumberEntityDescription( key="startProgram.rinseIterations", name="Rinse Iterations", icon="mdi:rotate-right", - entity_category=EntityCategory.CONFIG + entity_category=EntityCategory.CONFIG, ), NumberEntityDescription( key="startProgram.mainWashTime", name="Main Wash Time", icon="mdi:clock-start", entity_category=EntityCategory.CONFIG, - native_unit_of_measurement=UnitOfTime.MINUTES + native_unit_of_measurement=UnitOfTime.MINUTES, ), ), "TD": ( @@ -44,34 +44,34 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = { name="Delay time", icon="mdi:timer-plus", entity_category=EntityCategory.CONFIG, - native_unit_of_measurement=UnitOfTime.MINUTES + native_unit_of_measurement=UnitOfTime.MINUTES, ), NumberEntityDescription( key="startProgram.dryLevel", name="Dry level", entity_category=EntityCategory.CONFIG, icon="mdi:hair-dryer", - translation_key="tumbledryerdrylevel" + translation_key="tumbledryerdrylevel", ), NumberEntityDescription( key="startProgram.tempLevel", name="Temperature level", entity_category=EntityCategory.CONFIG, icon="mdi:thermometer", - translation_key="tumbledryertemplevel" + translation_key="tumbledryertemplevel", ), NumberEntityDescription( key="startProgram.antiCreaseTime", name="Anti-Crease time", entity_category=EntityCategory.CONFIG, icon="mdi:timer", - native_unit_of_measurement=UnitOfTime.MINUTES + native_unit_of_measurement=UnitOfTime.MINUTES, ), NumberEntityDescription( key="startProgram.sterilizationStatus", name="Sterilization status", icon="mdi:clock-start", - entity_category=EntityCategory.CONFIG + entity_category=EntityCategory.CONFIG, ), ), "WD": ( @@ -80,7 +80,7 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = { name="Delay Time", icon="mdi:timer-plus", entity_category=EntityCategory.CONFIG, - native_unit_of_measurement=UnitOfTime.MINUTES + native_unit_of_measurement=UnitOfTime.MINUTES, ), ), "OV": ( @@ -89,22 +89,21 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = { name="Delay time", icon="mdi:timer-plus", entity_category=EntityCategory.CONFIG, - native_unit_of_measurement=UnitOfTime.MINUTES + 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 + 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 + native_unit_of_measurement=UnitOfTime.MINUTES, ), ), } @@ -126,8 +125,8 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non for description in descriptions: if not device.settings.get(description.key): continue - appliances.extend([ - HonNumberEntity(hass, coordinator, entry, device, description)] + appliances.extend( + [HonNumberEntity(hass, coordinator, entry, device, description)] ) async_add_entities(appliances) diff --git a/custom_components/hon/select.py b/custom_components/hon/select.py index ef8b010..fee762b 100644 --- a/custom_components/hon/select.py +++ b/custom_components/hon/select.py @@ -24,20 +24,20 @@ SELECTS = { name="Spin speed", entity_category=EntityCategory.CONFIG, icon="mdi:numeric", - unit_of_measurement=REVOLUTIONS_PER_MINUTE + unit_of_measurement=REVOLUTIONS_PER_MINUTE, ), SelectEntityDescription( key="startProgram.temp", name="Temperature", entity_category=EntityCategory.CONFIG, icon="mdi:thermometer", - unit_of_measurement=UnitOfTemperature.CELSIUS + unit_of_measurement=UnitOfTemperature.CELSIUS, ), SelectEntityDescription( key="startProgram.program", name="Program", entity_category=EntityCategory.CONFIG, - translation_key="programs" + translation_key="programs", ), ), "TD": ( @@ -45,14 +45,14 @@ SELECTS = { key="startProgram.program", name="Program", entity_category=EntityCategory.CONFIG, - translation_key="programs" + translation_key="programs", ), SelectEntityDescription( key="startProgram.dryTimeMM", name="Time", entity_category=EntityCategory.CONFIG, icon="mdi:timer", - unit_of_measurement=UnitOfTime.MINUTES + unit_of_measurement=UnitOfTime.MINUTES, ), ), "WD": ( @@ -60,7 +60,7 @@ SELECTS = { key="startProgram.program", name="Program", entity_category=EntityCategory.CONFIG, - translation_key="programs" + translation_key="programs", ), ), "OV": ( @@ -72,7 +72,7 @@ SELECTS = { SelectEntityDescription( key="startProgram.preheatStatus", name="Preheat", - entity_category=EntityCategory.CONFIG + entity_category=EntityCategory.CONFIG, ), ), } @@ -94,14 +94,16 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non for description in descriptions: if not device.settings.get(description.key): continue - appliances.extend([ - HonSelectEntity(hass, coordinator, entry, device, description)] + appliances.extend( + [HonSelectEntity(hass, coordinator, entry, device, description)] ) async_add_entities(appliances) class HonSelectEntity(HonEntity, SelectEntity): - def __init__(self, hass, coordinator, entry, device: HonAppliance, description) -> None: + def __init__( + self, hass, coordinator, entry, device: HonAppliance, description + ) -> None: super().__init__(hass, entry, coordinator, device) self._coordinator = coordinator @@ -128,7 +130,9 @@ class HonSelectEntity(HonEntity, SelectEntity): @callback def _handle_coordinator_update(self): setting = self._device.settings[self.entity_description.key] - if not isinstance(self._device.settings[self.entity_description.key], HonParameterFixed): + if not isinstance( + self._device.settings[self.entity_description.key], HonParameterFixed + ): self._attr_options: list[str] = setting.values else: self._attr_options = [setting.value] diff --git a/custom_components/hon/sensor.py b/custom_components/hon/sensor.py index 1bff6ff..dfae684 100644 --- a/custom_components/hon/sensor.py +++ b/custom_components/hon/sensor.py @@ -16,7 +16,7 @@ from homeassistant.const import ( UnitOfMass, UnitOfPower, UnitOfTime, - UnitOfTemperature + UnitOfTemperature, ) from homeassistant.core import callback from homeassistant.helpers.entity import EntityCategory @@ -34,20 +34,20 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = { name="Total Power", device_class=SensorDeviceClass.ENERGY, state_class=SensorStateClass.TOTAL_INCREASING, - native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR + native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR, ), SensorEntityDescription( key="totalWaterUsed", name="Total Water", device_class=SensorDeviceClass.WATER, state_class=SensorStateClass.TOTAL_INCREASING, - native_unit_of_measurement=UnitOfVolume.LITERS + native_unit_of_measurement=UnitOfVolume.LITERS, ), SensorEntityDescription( key="totalWashCycle", name="Total Wash Cycle", state_class=SensorStateClass.TOTAL_INCREASING, - icon="mdi:counter" + icon="mdi:counter", ), SensorEntityDescription( key="currentElectricityUsed", @@ -55,13 +55,13 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = { state_class=SensorStateClass.MEASUREMENT, device_class=SensorDeviceClass.POWER, native_unit_of_measurement=UnitOfPower.KILO_WATT, - icon="mdi:lightning-bolt" + icon="mdi:lightning-bolt", ), SensorEntityDescription( key="currentWaterUsed", name="Current Water Used", state_class=SensorStateClass.MEASUREMENT, - icon="mdi:water" + icon="mdi:water", ), SensorEntityDescription( key="startProgram.weight", @@ -69,19 +69,16 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = { state_class=SensorStateClass.MEASUREMENT, entity_category=EntityCategory.CONFIG, native_unit_of_measurement=UnitOfMass.KILOGRAMS, - icon="mdi:weight-kilogram" + icon="mdi:weight-kilogram", ), SensorEntityDescription( key="machMode", name="Machine Status", icon="mdi:information", - translation_key="mode" + translation_key="mode", ), SensorEntityDescription( - key="errors", - name="Error", - icon="mdi:math-log", - translation_key="errors" + key="errors", name="Error", icon="mdi:math-log", translation_key="errors" ), SensorEntityDescription( key="remainingTimeMM", @@ -103,13 +100,10 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = { key="machMode", name="Machine Status", icon="mdi:information", - translation_key="mode" + translation_key="mode", ), SensorEntityDescription( - key="errors", - name="Error", - icon="mdi:math-log", - translation_key="errors" + key="errors", name="Error", icon="mdi:math-log", translation_key="errors" ), SensorEntityDescription( key="remainingTimeMM", @@ -129,25 +123,25 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = { key="prCode", name="Program", icon="mdi:tumble-dryer", - translation_key="tumbledryerprogram" + translation_key="tumbledryerprogram", ), SensorEntityDescription( key="prPhase", name="Program Phase", icon="mdi:tumble-dryer", - translation_key="tumbledryerprogramphase" + translation_key="tumbledryerprogramphase", ), SensorEntityDescription( key="dryLevel", name="Dry level", icon="mdi:hair-dryer", - translation_key="tumbledryerdrylevel" + translation_key="tumbledryerdrylevel", ), SensorEntityDescription( key="tempLevel", name="Temperature level", icon="mdi:thermometer", - translation_key="tumbledryertemplevel" + translation_key="tumbledryertemplevel", ), ), "WD": ( @@ -155,7 +149,7 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = { key="machMode", name="Machine Status", icon="mdi:information", - translation_key="mode" + translation_key="mode", ), SensorEntityDescription( key="spinSpeed", @@ -245,10 +239,12 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non if descriptions := SENSORS.get(device.appliance_type): for description in descriptions: if not device.get(description.key): - _LOGGER.warning("[%s] Can't setup %s", device.appliance_type, description.key) + _LOGGER.warning( + "[%s] Can't setup %s", device.appliance_type, description.key + ) continue - appliances.extend([ - HonSensorEntity(hass, coordinator, entry, device, description)] + appliances.extend( + [HonSensorEntity(hass, coordinator, entry, device, description)] ) async_add_entities(appliances) diff --git a/custom_components/hon/switch.py b/custom_components/hon/switch.py index d37ceea..e30b662 100644 --- a/custom_components/hon/switch.py +++ b/custom_components/hon/switch.py @@ -22,9 +22,9 @@ class HonSwitchEntityDescriptionMixin: @dataclass -class HonSwitchEntityDescription(HonSwitchEntityDescriptionMixin, - SwitchEntityDescription - ): +class HonSwitchEntityDescription( + HonSwitchEntityDescriptionMixin, SwitchEntityDescription +): pass @@ -48,13 +48,13 @@ SWITCHES: dict[str, tuple[HonSwitchEntityDescription, ...]] = { key="startProgram.delayStatus", name="Delay Status", icon="mdi:timer-check", - entity_category=EntityCategory.CONFIG + entity_category=EntityCategory.CONFIG, ), HonSwitchEntityDescription( key="startProgram.haier_SoakPrewashSelection", name="Soak Prewash Selection", icon="mdi:tshirt-crew", - entity_category=EntityCategory.CONFIG + entity_category=EntityCategory.CONFIG, ), ), "TD": ( @@ -106,12 +106,17 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non if descriptions := SWITCHES.get(device.appliance_type): for description in descriptions: - if device.get(description.key) is not None or device.commands.get(description.key) is not None: - appliances.extend([ - HonSwitchEntity(hass, coordinator, entry, device, description)] + if ( + device.get(description.key) is not None + or device.commands.get(description.key) is not None + ): + appliances.extend( + [HonSwitchEntity(hass, coordinator, entry, device, description)] ) else: - _LOGGER.warning("[%s] Can't setup %s", device.appliance_type, description.key) + _LOGGER.warning( + "[%s] Can't setup %s", device.appliance_type, description.key + ) async_add_entities(appliances) @@ -119,7 +124,14 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non class HonSwitchEntity(HonEntity, SwitchEntity): entity_description: HonSwitchEntityDescription - def __init__(self, hass, coordinator, entry, device: HonAppliance, description: HonSwitchEntityDescription) -> None: + def __init__( + self, + hass, + coordinator, + entry, + device: HonAppliance, + description: HonSwitchEntityDescription, + ) -> None: super().__init__(hass, entry, coordinator, device) self._coordinator = coordinator self._device = device @@ -128,7 +140,9 @@ class HonSwitchEntity(HonEntity, SwitchEntity): def available(self) -> bool: if self.entity_category == EntityCategory.CONFIG: - return self._device.settings[self.entity_description.key].typology != "fixed" + return ( + self._device.settings[self.entity_description.key].typology != "fixed" + ) return True @property @@ -136,7 +150,11 @@ class HonSwitchEntity(HonEntity, SwitchEntity): """Return True if entity is on.""" if self.entity_category == EntityCategory.CONFIG: setting = self._device.settings[self.entity_description.key] - return setting.value == "1" or hasattr(setting, "min") and setting.value != setting.min + return ( + setting.value == "1" + or hasattr(setting, "min") + and setting.value != setting.min + ) return self._device.get(self.entity_description.key, False) async def async_turn_on(self, **kwargs: Any) -> None: