core/homeassistant/components/somfy_mylink/cover.py

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)