forked from home-assistant/core
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add devolo blinds devices (home-assistant#36597)
* add support for devolo blinds * correct internal sync function * correct naming * fix R1719 in line 73:15 * remove 'break point' print * simplified _sync check * change comment * change log msg
- Loading branch information
Markus Bong
committed
Aug 6, 2020
1 parent
20e85e1
commit e3e9ad1
Showing
4 changed files
with
103 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
"""Platform for cover integration.""" | ||
import logging | ||
|
||
from homeassistant.components.cover import ( | ||
DEVICE_CLASS_BLIND, | ||
SUPPORT_CLOSE, | ||
SUPPORT_OPEN, | ||
SUPPORT_SET_POSITION, | ||
CoverEntity, | ||
) | ||
from homeassistant.config_entries import ConfigEntry | ||
from homeassistant.helpers.typing import HomeAssistantType | ||
|
||
from .const import DOMAIN | ||
from .devolo_device import DevoloDeviceEntity | ||
|
||
_LOGGER = logging.getLogger(__name__) | ||
|
||
|
||
async def async_setup_entry( | ||
hass: HomeAssistantType, entry: ConfigEntry, async_add_entities | ||
) -> None: | ||
"""Get all cover devices and setup them via config entry.""" | ||
entities = [] | ||
|
||
for device in hass.data[DOMAIN]["homecontrol"].multi_level_switch_devices: | ||
for multi_level_switch in device.multi_level_switch_property: | ||
if multi_level_switch.startswith("devolo.Blinds"): | ||
entities.append( | ||
DevoloCoverDeviceEntity( | ||
homecontrol=hass.data[DOMAIN]["homecontrol"], | ||
device_instance=device, | ||
element_uid=multi_level_switch, | ||
) | ||
) | ||
|
||
async_add_entities(entities, False) | ||
|
||
|
||
class DevoloCoverDeviceEntity(DevoloDeviceEntity, CoverEntity): | ||
"""Representation of a cover device within devolo Home Control.""" | ||
|
||
def __init__(self, homecontrol, device_instance, element_uid): | ||
"""Initialize a devolo blinds device.""" | ||
super().__init__( | ||
homecontrol=homecontrol, | ||
device_instance=device_instance, | ||
element_uid=element_uid, | ||
name=device_instance.itemName, | ||
sync=self._sync, | ||
) | ||
|
||
self._multi_level_switch_property = device_instance.multi_level_switch_property.get( | ||
element_uid | ||
) | ||
|
||
self._position = self._multi_level_switch_property.value | ||
|
||
@property | ||
def current_cover_position(self): | ||
"""Return the current position. 0 is closed. 100 is open.""" | ||
return self._position | ||
|
||
@property | ||
def device_class(self): | ||
"""Return the class of the device.""" | ||
return DEVICE_CLASS_BLIND | ||
|
||
@property | ||
def is_closed(self): | ||
"""Return if the blind is closed or not.""" | ||
return not bool(self._position) | ||
|
||
@property | ||
def supported_features(self): | ||
"""Flag supported features.""" | ||
return SUPPORT_OPEN | SUPPORT_CLOSE | SUPPORT_SET_POSITION | ||
|
||
def open_cover(self, **kwargs): | ||
"""Open the blind.""" | ||
self._multi_level_switch_property.set(100) | ||
|
||
def close_cover(self, **kwargs): | ||
"""Close the blind.""" | ||
self._multi_level_switch_property.set(0) | ||
|
||
def set_cover_position(self, **kwargs): | ||
"""Set the blind to the given position.""" | ||
self._multi_level_switch_property.set(kwargs["position"]) | ||
|
||
def _sync(self, message=None): | ||
"""Update the binary sensor state.""" | ||
if message[0] == self._unique_id: | ||
self._position = message[1] | ||
elif message[0].startswith("hdm"): | ||
self._available = self._device_instance.is_online() | ||
else: | ||
_LOGGER.debug("Not valid message received: %s", message) | ||
self.schedule_update_ha_state() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters