1 """Support for iTach IR devices."""
3 from __future__
import annotations
5 from collections.abc
import Iterable
10 import voluptuous
as vol
16 PLATFORM_SCHEMA
as REMOTE_PLATFORM_SCHEMA,
31 _LOGGER = logging.getLogger(__name__)
34 CONNECT_TIMEOUT = 5000
39 CONF_MODADDR =
"modaddr"
40 CONF_CONNADDR =
"connaddr"
41 CONF_COMMANDS =
"commands"
43 CONF_IR_COUNT =
"ir_count"
45 PLATFORM_SCHEMA = REMOTE_PLATFORM_SCHEMA.extend(
47 vol.Optional(CONF_MAC): cv.string,
48 vol.Required(CONF_HOST): cv.string,
49 vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
50 vol.Required(CONF_DEVICES): vol.All(
54 vol.Optional(CONF_NAME): cv.string,
55 vol.Optional(CONF_MODADDR): cv.positive_int,
56 vol.Required(CONF_CONNADDR): cv.positive_int,
57 vol.Optional(CONF_IR_COUNT): cv.positive_int,
58 vol.Required(CONF_COMMANDS): vol.All(
62 vol.Required(CONF_NAME): cv.string,
63 vol.Required(CONF_DATA): cv.string,
77 add_entities: AddEntitiesCallback,
78 discovery_info: DiscoveryInfoType |
None =
None,
80 """Set up the ITach connection and devices."""
81 itachip2ir = pyitachip2ir.ITachIP2IR(
82 config.get(CONF_MAC), config[CONF_HOST],
int(config[CONF_PORT])
85 if not itachip2ir.ready(CONNECT_TIMEOUT):
86 _LOGGER.error(
"Unable to find iTach")
90 for data
in config[CONF_DEVICES]:
91 name = data.get(CONF_NAME)
92 modaddr =
int(data.get(CONF_MODADDR, DEFAULT_MODADDR))
93 connaddr =
int(data.get(CONF_CONNADDR, DEFAULT_CONNADDR))
94 ir_count =
int(data.get(CONF_IR_COUNT, DEFAULT_IR_COUNT))
96 for cmd
in data.get(CONF_COMMANDS):
97 cmdname = cmd[CONF_NAME].strip()
100 cmddata = cmd[CONF_DATA].strip()
103 cmddatas += f
"{cmdname}\n{cmddata}\n"
104 itachip2ir.addDevice(name, modaddr, connaddr, cmddatas)
110 """Device that sends commands to an ITachIP2IR device."""
113 """Initialize device."""
116 self.
_name_name = name
or DEVICE_DEFAULT_NAME
121 """Return the name of the device."""
122 return self.
_name_name
126 """Return true if device is on."""
130 """Turn the device on."""
136 """Turn the device off."""
142 """Send a command to one device."""
143 num_repeats = kwargs.get(ATTR_NUM_REPEATS, DEFAULT_NUM_REPEATS)
144 for single_command
in command:
146 self.
_name_name, single_command, self.
_ir_count_ir_count * num_repeats
150 """Update the device."""
None turn_off(self, **Any kwargs)
None send_command(self, Iterable[str] command, **Any kwargs)
def __init__(self, itachip2ir, name, ir_count)
None turn_on(self, **Any kwargs)
None schedule_update_ha_state(self, bool force_refresh=False)
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)