104 lines
3.1 KiB
Python
104 lines
3.1 KiB
Python
"""
|
|
Ryobi platform for the cover component.
|
|
|
|
For more details about this platform, please refer to the documentation
|
|
https://home-assistant.io/components/cover.ryobi_gdo/
|
|
"""
|
|
import logging
|
|
import voluptuous as vol
|
|
|
|
import homeassistant.helpers.config_validation as cv
|
|
|
|
from homeassistant.components.cover import (
|
|
CoverDevice, PLATFORM_SCHEMA, SUPPORT_OPEN, SUPPORT_CLOSE)
|
|
from homeassistant.const import (
|
|
CONF_USERNAME, CONF_PASSWORD, STATE_UNKNOWN, STATE_CLOSED)
|
|
|
|
REQUIREMENTS = ['py_ryobi_gdo==0.0.10']
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
CONF_DEVICE_ID = 'device_id'
|
|
|
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
|
vol.Required(CONF_DEVICE_ID): vol.All(cv.ensure_list, [cv.string]),
|
|
vol.Required(CONF_PASSWORD): cv.string,
|
|
vol.Required(CONF_USERNAME): cv.string,
|
|
})
|
|
|
|
SUPPORTED_FEATURES = (SUPPORT_OPEN | SUPPORT_CLOSE)
|
|
|
|
|
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
|
"""Set up the Ryobi covers."""
|
|
from py_ryobi_gdo import RyobiGDO as ryobi_door
|
|
covers = []
|
|
|
|
username = config.get(CONF_USERNAME)
|
|
password = config.get(CONF_PASSWORD)
|
|
devices = config.get(CONF_DEVICE_ID)
|
|
|
|
for device_id in devices:
|
|
my_door = ryobi_door(username, password, device_id)
|
|
_LOGGER.debug("Getting the API key")
|
|
if my_door.get_api_key() is False:
|
|
_LOGGER.error("Wrong credentials, no API key retrieved")
|
|
return
|
|
_LOGGER.debug("Checking if the device ID is present")
|
|
if my_door.check_device_id() is False:
|
|
_LOGGER.error("%s not in your device list", device_id)
|
|
return
|
|
_LOGGER.debug("Adding device %s to covers", device_id)
|
|
covers.append(RyobiCover(hass, my_door))
|
|
if covers:
|
|
_LOGGER.debug("Adding covers")
|
|
add_devices(covers, True)
|
|
|
|
|
|
class RyobiCover(CoverDevice):
|
|
"""Representation of a ryobi cover."""
|
|
|
|
def __init__(self, hass, ryobi_door):
|
|
"""Initialize the cover."""
|
|
self.ryobi_door = ryobi_door
|
|
self._name = 'ryobi_gdo_{}'.format(ryobi_door.get_device_id())
|
|
self._door_state = None
|
|
|
|
@property
|
|
def name(self):
|
|
"""Return the name of the cover."""
|
|
return self._name
|
|
|
|
@property
|
|
def is_closed(self):
|
|
"""Return if the cover is closed."""
|
|
if self._door_state == STATE_UNKNOWN:
|
|
return False
|
|
return self._door_state == STATE_CLOSED
|
|
|
|
@property
|
|
def device_class(self):
|
|
"""Return the class of this device, from component DEVICE_CLASSES."""
|
|
return 'garage'
|
|
|
|
@property
|
|
def supported_features(self):
|
|
"""Flag supported features."""
|
|
return SUPPORTED_FEATURES
|
|
|
|
def close_cover(self, **kwargs):
|
|
"""Close the cover."""
|
|
_LOGGER.debug("Closing garage door")
|
|
self.ryobi_door.close_device()
|
|
|
|
def open_cover(self, **kwargs):
|
|
"""Open the cover."""
|
|
_LOGGER.debug("Opening garage door")
|
|
self.ryobi_door.open_device()
|
|
|
|
def update(self):
|
|
"""Update status from the door."""
|
|
_LOGGER.debug("Updating RyobiGDO status")
|
|
self.ryobi_door.update()
|
|
self._door_state = self.ryobi_door.get_door_status()
|