1 """Pencom relay control."""
3 from __future__
import annotations
8 from pencompy.pencompy
import Pencompy
9 import voluptuous
as vol
12 PLATFORM_SCHEMA
as SWITCH_PLATFORM_SCHEMA,
22 _LOGGER = logging.getLogger(__name__)
24 CONF_BOARDS =
"boards"
27 CONF_RELAYS =
"relays"
29 RELAY_SCHEMA = vol.Schema(
31 vol.Required(CONF_NAME): cv.string,
32 vol.Required(CONF_ADDR): cv.positive_int,
33 vol.Optional(CONF_BOARD, default=0): cv.positive_int,
37 PLATFORM_SCHEMA = SWITCH_PLATFORM_SCHEMA.extend(
39 vol.Required(CONF_HOST): cv.string,
40 vol.Required(CONF_PORT): cv.port,
41 vol.Optional(CONF_BOARDS, default=1): cv.positive_int,
42 vol.Required(CONF_RELAYS): vol.All(cv.ensure_list, [RELAY_SCHEMA]),
50 add_entities: AddEntitiesCallback,
51 discovery_info: DiscoveryInfoType |
None =
None,
53 """Pencom relay platform (pencompy)."""
56 host = config[CONF_HOST]
57 port = config[CONF_PORT]
58 boards = config[CONF_BOARDS]
62 hub = Pencompy(host, port, boards=boards)
63 except OSError
as error:
64 _LOGGER.error(
"Could not connect to pencompy: %s", error)
65 raise PlatformNotReady
from error
69 for relay
in config[CONF_RELAYS]:
70 name = relay[CONF_NAME]
71 board = relay[CONF_BOARD]
72 addr = relay[CONF_ADDR]
78 """Representation of a pencom relay."""
91 return self.
_name_name
95 """Return a relay's state."""
99 """Turn a relay on."""
103 """Turn a relay off."""
107 """Refresh a relay's state."""
112 """Return supported attributes."""
113 return {
"board": self.
_board_board,
"addr": self.
_addr_addr}
def __init__(self, hub, board, addr, name)
None turn_on(self, **Any kwargs)
None turn_off(self, **Any kwargs)
def extra_state_attributes(self)
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
web.Response get(self, web.Request request, str config_key)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)