1 """Support for Rflink Cover devices."""
3 from __future__
import annotations
8 import voluptuous
as vol
11 PLATFORM_SCHEMA
as COVER_PLATFORM_SCHEMA,
29 CONF_SIGNAL_REPETITIONS,
30 DEVICE_DEFAULTS_SCHEMA,
32 from .entity
import RflinkCommand
34 _LOGGER = logging.getLogger(__name__)
38 TYPE_STANDARD =
"standard"
39 TYPE_INVERTED =
"inverted"
41 PLATFORM_SCHEMA = COVER_PLATFORM_SCHEMA.extend(
45 ): DEVICE_DEFAULTS_SCHEMA,
46 vol.Optional(CONF_DEVICES, default={}): vol.Schema(
49 vol.Optional(CONF_NAME): cv.string,
50 vol.Optional(CONF_TYPE): vol.Any(TYPE_STANDARD, TYPE_INVERTED),
51 vol.Optional(CONF_ALIASES, default=[]): vol.All(
52 cv.ensure_list, [cv.string]
54 vol.Optional(CONF_GROUP_ALIASES, default=[]): vol.All(
55 cv.ensure_list, [cv.string]
57 vol.Optional(CONF_NOGROUP_ALIASES, default=[]): vol.All(
58 cv.ensure_list, [cv.string]
60 vol.Optional(CONF_FIRE_EVENT, default=
False): cv.boolean,
61 vol.Optional(CONF_SIGNAL_REPETITIONS): vol.Coerce(int),
62 vol.Optional(CONF_GROUP, default=
True): cv.boolean,
71 """Return entity class for protocol of a given device_id.
75 entity_type_mapping = {
77 "newkaku": TYPE_INVERTED
79 protocol = device_id.split(
"_")[0]
80 return entity_type_mapping.get(protocol, TYPE_STANDARD)
84 """Translate entity type to entity class.
88 entity_device_mapping = {
90 TYPE_STANDARD: RflinkCover,
93 TYPE_INVERTED: InvertedRflinkCover,
96 return entity_device_mapping.get(entity_type, RflinkCover)
100 """Parse configuration and add Rflink cover devices."""
102 for device_id, config
in domain_config[CONF_DEVICES].items():
105 if CONF_TYPE
in config:
108 entity_type = config.pop(CONF_TYPE)
113 device_config =
dict(domain_config[CONF_DEVICE_DEFAULTS], **config)
114 device = entity_class(device_id, **device_config)
115 devices.append(device)
123 async_add_entities: AddEntitiesCallback,
124 discovery_info: DiscoveryInfoType |
None =
None,
126 """Set up the Rflink cover platform."""
131 """Rflink entity which can switch on/stop/off (eg: cover)."""
134 """Restore RFLink cover state (OPEN/CLOSE)."""
140 """Adjust state if Rflink picks up a remote command for this device."""
143 command = event[
"command"]
144 if command
in [
"on",
"allon",
"up"]:
146 elif command
in [
"off",
"alloff",
"down"]:
151 """Return if the cover is closed."""
156 """Return True because covers can be stopped midway."""
160 """Turn the device close."""
164 """Turn the device open."""
168 """Turn the device stop."""
173 """Rflink cover that has inverted open/close commands."""
176 """Will invert only the UP/DOWN commands."""
177 _LOGGER.debug(
"Getting command: %s for Rflink device: %s", cmd, self.
_device_id_device_id)
178 cmd_inv = {
"UP":
"DOWN",
"DOWN":
"UP"}
bool|None is_closed(self)
None async_open_cover(self, **Any kwargs)
None async_close_cover(self, **Any kwargs)
None async_stop_cover(self, **Any kwargs)
def _async_send_command(self, cmd, repetitions)
None async_added_to_hass(self)
def _async_handle_command(self, command, *args)
def cancel_queued_send_commands(self)
def _handle_event(self, event)
State|None async_get_last_state(self)
def entity_type_for_device_id(device_id)
def entity_class_for_type(entity_type)
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
def devices_from_config(domain_config)