diff --git a/homeassistant/components/homeworks/__init__.py b/homeassistant/components/homeworks/__init__.py index a67e69bc9c6..fc787d98eea 100644 --- a/homeassistant/components/homeworks/__init__.py +++ b/homeassistant/components/homeworks/__init__.py @@ -2,10 +2,10 @@ from __future__ import annotations +import asyncio from collections.abc import Mapping from dataclasses import dataclass import logging -from time import sleep from typing import Any from pyhomeworks.pyhomeworks import HW_BUTTON_PRESSED, HW_BUTTON_RELEASED, Homeworks @@ -129,19 +129,6 @@ async def async_send_command(hass: HomeAssistant, data: Mapping[str, Any]) -> No return data return None - def send_commands(controller: Homeworks, commands: list[str]) -> None: - """Send commands to controller.""" - _LOGGER.debug("Send commands: %s", commands) - for command in commands: - if command.lower().startswith("delay"): - delay = int(command.partition(" ")[2]) - _LOGGER.debug("Sleeping for %s ms", delay) - sleep(delay / 1000) - else: - _LOGGER.debug("Sending command '%s'", command) - # pylint: disable-next=protected-access - controller._send(command) - homeworks_data = get_homeworks_data(data[CONF_CONTROLLER_ID]) if not homeworks_data: raise ServiceValidationError( @@ -153,9 +140,20 @@ async def async_send_command(hass: HomeAssistant, data: Mapping[str, Any]) -> No }, ) - await hass.async_add_executor_job( - send_commands, homeworks_data.controller, data[CONF_COMMAND] - ) + commands = data[CONF_COMMAND] + _LOGGER.debug("Send commands: %s", commands) + for command in commands: + if command.lower().startswith("delay"): + delay = int(command.partition(" ")[2]) + _LOGGER.debug("Sleeping for %s ms", delay) + await asyncio.sleep(delay / 1000) + else: + _LOGGER.debug("Sending command '%s'", command) + await hass.async_add_executor_job( + # pylint: disable-next=protected-access + homeworks_data.controller._send, + command, + ) async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: diff --git a/homeassistant/components/homeworks/binary_sensor.py b/homeassistant/components/homeworks/binary_sensor.py index 9773411d26d..9a9f7086ba5 100644 --- a/homeassistant/components/homeworks/binary_sensor.py +++ b/homeassistant/components/homeworks/binary_sensor.py @@ -36,12 +36,12 @@ async def async_setup_entry( data: HomeworksData = hass.data[DOMAIN][entry.entry_id] controller = data.controller controller_id = entry.options[CONF_CONTROLLER_ID] - devs = [] + entities = [] for keypad in entry.options.get(CONF_KEYPADS, []): for button in keypad[CONF_BUTTONS]: if not button[CONF_LED]: continue - dev = HomeworksBinarySensor( + entity = HomeworksBinarySensor( controller, data.keypads[keypad[CONF_ADDR]], controller_id, @@ -50,8 +50,8 @@ async def async_setup_entry( button[CONF_NAME], button[CONF_NUMBER], ) - devs.append(dev) - async_add_entities(devs, True) + entities.append(entity) + async_add_entities(entities, True) class HomeworksBinarySensor(HomeworksEntity, BinarySensorEntity): diff --git a/homeassistant/components/homeworks/button.py b/homeassistant/components/homeworks/button.py index c8cb616d95b..2f3ba482717 100644 --- a/homeassistant/components/homeworks/button.py +++ b/homeassistant/components/homeworks/button.py @@ -2,7 +2,7 @@ from __future__ import annotations -from time import sleep +import asyncio from pyhomeworks.pyhomeworks import Homeworks @@ -32,10 +32,10 @@ async def async_setup_entry( data: HomeworksData = hass.data[DOMAIN][entry.entry_id] controller = data.controller controller_id = entry.options[CONF_CONTROLLER_ID] - devs = [] + entities = [] for keypad in entry.options.get(CONF_KEYPADS, []): for button in keypad[CONF_BUTTONS]: - dev = HomeworksButton( + entity = HomeworksButton( controller, controller_id, keypad[CONF_ADDR], @@ -44,8 +44,8 @@ async def async_setup_entry( button[CONF_NUMBER], button[CONF_RELEASE_DELAY], ) - devs.append(dev) - async_add_entities(devs, True) + entities.append(entity) + async_add_entities(entities, True) class HomeworksButton(HomeworksEntity, ButtonEntity): @@ -68,12 +68,19 @@ class HomeworksButton(HomeworksEntity, ButtonEntity): ) self._release_delay = release_delay - def press(self) -> None: + async def async_press(self) -> None: """Press the button.""" - # pylint: disable-next=protected-access - self._controller._send(f"KBP, {self._addr}, {self._idx}") + await self.hass.async_add_executor_job( + # pylint: disable-next=protected-access + self._controller._send, + f"KBP, {self._addr}, {self._idx}", + ) if not self._release_delay: return - sleep(self._release_delay) + await asyncio.sleep(self._release_delay) # pylint: disable-next=protected-access - self._controller._send(f"KBR, {self._addr}, {self._idx}") + await self.hass.async_add_executor_job( + # pylint: disable-next=protected-access + self._controller._send, + f"KBR, {self._addr}, {self._idx}", + ) diff --git a/homeassistant/components/homeworks/light.py b/homeassistant/components/homeworks/light.py index 3e3c199c75c..20ae08017d3 100644 --- a/homeassistant/components/homeworks/light.py +++ b/homeassistant/components/homeworks/light.py @@ -28,17 +28,17 @@ async def async_setup_entry( data: HomeworksData = hass.data[DOMAIN][entry.entry_id] controller = data.controller controller_id = entry.options[CONF_CONTROLLER_ID] - devs = [] + entities = [] for dimmer in entry.options.get(CONF_DIMMERS, []): - dev = HomeworksLight( + entity = HomeworksLight( controller, controller_id, dimmer[CONF_ADDR], dimmer[CONF_NAME], dimmer[CONF_RATE], ) - devs.append(dev) - async_add_entities(devs, True) + entities.append(entity) + async_add_entities(entities, True) class HomeworksLight(HomeworksEntity, LightEntity):