90 lines
3.1 KiB
Python
Executable File
90 lines
3.1 KiB
Python
Executable File
"""Cover Platform for the Somfy MyLink component."""
|
|
import logging
|
|
|
|
from homeassistant.components.cover import ENTITY_ID_FORMAT, CoverDevice
|
|
from homeassistant.util import slugify
|
|
|
|
from . import CONF_DEFAULT_REVERSE, DATA_SOMFY_MYLINK
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
async def async_setup_platform(hass,
|
|
config,
|
|
async_add_entities,
|
|
discovery_info=None):
|
|
"""Discover and configure Somfy covers."""
|
|
if discovery_info is None:
|
|
return
|
|
somfy_mylink = hass.data[DATA_SOMFY_MYLINK]
|
|
cover_list = []
|
|
try:
|
|
mylink_status = await somfy_mylink.status_info()
|
|
except TimeoutError:
|
|
_LOGGER.error("Unable to connect to the Somfy MyLink device, "
|
|
"please check your settings")
|
|
return
|
|
for cover in mylink_status['result']:
|
|
entity_id = ENTITY_ID_FORMAT.format(slugify(cover['name']))
|
|
entity_config = discovery_info.get(entity_id, {})
|
|
default_reverse = discovery_info[CONF_DEFAULT_REVERSE]
|
|
cover_config = {}
|
|
cover_config['target_id'] = cover['targetID']
|
|
cover_config['name'] = cover['name']
|
|
cover_config['reverse'] = entity_config.get('reverse', default_reverse)
|
|
cover_list.append(SomfyShade(somfy_mylink, **cover_config))
|
|
_LOGGER.info('Adding Somfy Cover: %s with targetID %s',
|
|
cover_config['name'], cover_config['target_id'])
|
|
async_add_entities(cover_list)
|
|
|
|
|
|
class SomfyShade(CoverDevice):
|
|
"""Object for controlling a Somfy cover."""
|
|
|
|
def __init__(self, somfy_mylink, target_id='AABBCC', name='SomfyShade',
|
|
reverse=False, device_class='window'):
|
|
"""Initialize the cover."""
|
|
self.somfy_mylink = somfy_mylink
|
|
self._target_id = target_id
|
|
self._name = name
|
|
self._reverse = reverse
|
|
self._device_class = device_class
|
|
|
|
@property
|
|
def name(self):
|
|
"""Return the name of the cover."""
|
|
return self._name
|
|
|
|
@property
|
|
def is_closed(self):
|
|
"""Return if the cover is closed."""
|
|
return None
|
|
|
|
@property
|
|
def assumed_state(self):
|
|
"""Let HA know the integration is assumed state."""
|
|
return True
|
|
|
|
@property
|
|
def device_class(self):
|
|
"""Return the class of this device, from component DEVICE_CLASSES."""
|
|
return self._device_class
|
|
|
|
async def async_open_cover(self, **kwargs):
|
|
"""Wrap Homeassistant calls to open the cover."""
|
|
if not self._reverse:
|
|
await self.somfy_mylink.move_up(self._target_id)
|
|
else:
|
|
await self.somfy_mylink.move_down(self._target_id)
|
|
|
|
async def async_close_cover(self, **kwargs):
|
|
"""Wrap Homeassistant calls to close the cover."""
|
|
if not self._reverse:
|
|
await self.somfy_mylink.move_down(self._target_id)
|
|
else:
|
|
await self.somfy_mylink.move_up(self._target_id)
|
|
|
|
async def async_stop_cover(self, **kwargs):
|
|
"""Stop the cover."""
|
|
await self.somfy_mylink.move_stop(self._target_id)
|