Address late review comments on homeworks PRs (#114867)

This commit is contained in:
Erik Montnemery 2024-04-04 22:48:31 +02:00 committed by GitHub
parent 95ef087fa8
commit b0d1b6555d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 40 additions and 35 deletions

View File

@ -2,10 +2,10 @@
from __future__ import annotations from __future__ import annotations
import asyncio
from collections.abc import Mapping from collections.abc import Mapping
from dataclasses import dataclass from dataclasses import dataclass
import logging import logging
from time import sleep
from typing import Any from typing import Any
from pyhomeworks.pyhomeworks import HW_BUTTON_PRESSED, HW_BUTTON_RELEASED, Homeworks 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 data
return None 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]) homeworks_data = get_homeworks_data(data[CONF_CONTROLLER_ID])
if not homeworks_data: if not homeworks_data:
raise ServiceValidationError( raise ServiceValidationError(
@ -153,8 +140,19 @@ async def async_send_command(hass: HomeAssistant, data: Mapping[str, Any]) -> No
}, },
) )
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( await hass.async_add_executor_job(
send_commands, homeworks_data.controller, data[CONF_COMMAND] # pylint: disable-next=protected-access
homeworks_data.controller._send,
command,
) )

View File

@ -36,12 +36,12 @@ async def async_setup_entry(
data: HomeworksData = hass.data[DOMAIN][entry.entry_id] data: HomeworksData = hass.data[DOMAIN][entry.entry_id]
controller = data.controller controller = data.controller
controller_id = entry.options[CONF_CONTROLLER_ID] controller_id = entry.options[CONF_CONTROLLER_ID]
devs = [] entities = []
for keypad in entry.options.get(CONF_KEYPADS, []): for keypad in entry.options.get(CONF_KEYPADS, []):
for button in keypad[CONF_BUTTONS]: for button in keypad[CONF_BUTTONS]:
if not button[CONF_LED]: if not button[CONF_LED]:
continue continue
dev = HomeworksBinarySensor( entity = HomeworksBinarySensor(
controller, controller,
data.keypads[keypad[CONF_ADDR]], data.keypads[keypad[CONF_ADDR]],
controller_id, controller_id,
@ -50,8 +50,8 @@ async def async_setup_entry(
button[CONF_NAME], button[CONF_NAME],
button[CONF_NUMBER], button[CONF_NUMBER],
) )
devs.append(dev) entities.append(entity)
async_add_entities(devs, True) async_add_entities(entities, True)
class HomeworksBinarySensor(HomeworksEntity, BinarySensorEntity): class HomeworksBinarySensor(HomeworksEntity, BinarySensorEntity):

View File

@ -2,7 +2,7 @@
from __future__ import annotations from __future__ import annotations
from time import sleep import asyncio
from pyhomeworks.pyhomeworks import Homeworks from pyhomeworks.pyhomeworks import Homeworks
@ -32,10 +32,10 @@ async def async_setup_entry(
data: HomeworksData = hass.data[DOMAIN][entry.entry_id] data: HomeworksData = hass.data[DOMAIN][entry.entry_id]
controller = data.controller controller = data.controller
controller_id = entry.options[CONF_CONTROLLER_ID] controller_id = entry.options[CONF_CONTROLLER_ID]
devs = [] entities = []
for keypad in entry.options.get(CONF_KEYPADS, []): for keypad in entry.options.get(CONF_KEYPADS, []):
for button in keypad[CONF_BUTTONS]: for button in keypad[CONF_BUTTONS]:
dev = HomeworksButton( entity = HomeworksButton(
controller, controller,
controller_id, controller_id,
keypad[CONF_ADDR], keypad[CONF_ADDR],
@ -44,8 +44,8 @@ async def async_setup_entry(
button[CONF_NUMBER], button[CONF_NUMBER],
button[CONF_RELEASE_DELAY], button[CONF_RELEASE_DELAY],
) )
devs.append(dev) entities.append(entity)
async_add_entities(devs, True) async_add_entities(entities, True)
class HomeworksButton(HomeworksEntity, ButtonEntity): class HomeworksButton(HomeworksEntity, ButtonEntity):
@ -68,12 +68,19 @@ class HomeworksButton(HomeworksEntity, ButtonEntity):
) )
self._release_delay = release_delay self._release_delay = release_delay
def press(self) -> None: async def async_press(self) -> None:
"""Press the button.""" """Press the button."""
await self.hass.async_add_executor_job(
# pylint: disable-next=protected-access # pylint: disable-next=protected-access
self._controller._send(f"KBP, {self._addr}, {self._idx}") self._controller._send,
f"KBP, {self._addr}, {self._idx}",
)
if not self._release_delay: if not self._release_delay:
return return
sleep(self._release_delay) await asyncio.sleep(self._release_delay)
# pylint: disable-next=protected-access # 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}",
)

View File

@ -28,17 +28,17 @@ async def async_setup_entry(
data: HomeworksData = hass.data[DOMAIN][entry.entry_id] data: HomeworksData = hass.data[DOMAIN][entry.entry_id]
controller = data.controller controller = data.controller
controller_id = entry.options[CONF_CONTROLLER_ID] controller_id = entry.options[CONF_CONTROLLER_ID]
devs = [] entities = []
for dimmer in entry.options.get(CONF_DIMMERS, []): for dimmer in entry.options.get(CONF_DIMMERS, []):
dev = HomeworksLight( entity = HomeworksLight(
controller, controller,
controller_id, controller_id,
dimmer[CONF_ADDR], dimmer[CONF_ADDR],
dimmer[CONF_NAME], dimmer[CONF_NAME],
dimmer[CONF_RATE], dimmer[CONF_RATE],
) )
devs.append(dev) entities.append(entity)
async_add_entities(devs, True) async_add_entities(entities, True)
class HomeworksLight(HomeworksEntity, LightEntity): class HomeworksLight(HomeworksEntity, LightEntity):