Security fix & lock for HomeMatic (#11980)
* HomeMatic KeyMatic device become a real lock component * Adds supported features to lock component. Locks may are capable to open the door latch. If component is support it, the SUPPORT_OPENING bitmask can be supplied in the supported_features property. * hound improvements. * Travis improvements. * Improvements from review process * Simplifies is_locked method * Adds an openable lock in the lock demo component * removes blank line * Adds test for openable demo lock and lint and reviewer improvements. * adds new line... * Comment end with a period. * Additional blank line. * Mock service based testing, lint fixes * Update description
This commit is contained in:
parent
8a204fd15b
commit
0d48a8eec6
5 changed files with 121 additions and 10 deletions
58
homeassistant/components/lock/homematic.py
Normal file
58
homeassistant/components/lock/homematic.py
Normal file
|
@ -0,0 +1,58 @@
|
|||
"""
|
||||
Support for Homematic lock.
|
||||
|
||||
For more details about this platform, please refer to the documentation at
|
||||
https://home-assistant.io/components/lock.homematic/
|
||||
"""
|
||||
import logging
|
||||
from homeassistant.components.lock import LockDevice, SUPPORT_OPEN
|
||||
from homeassistant.components.homematic import HMDevice, ATTR_DISCOVER_DEVICES
|
||||
from homeassistant.const import STATE_UNKNOWN
|
||||
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
DEPENDENCIES = ['homematic']
|
||||
|
||||
|
||||
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||
"""Set up the Homematic lock platform."""
|
||||
if discovery_info is None:
|
||||
return
|
||||
|
||||
devices = []
|
||||
for conf in discovery_info[ATTR_DISCOVER_DEVICES]:
|
||||
devices.append(HMLock(conf))
|
||||
|
||||
add_devices(devices)
|
||||
|
||||
|
||||
class HMLock(HMDevice, LockDevice):
|
||||
"""Representation of a Homematic lock aka KeyMatic."""
|
||||
|
||||
@property
|
||||
def is_locked(self):
|
||||
"""Return true if the lock is locked."""
|
||||
return not bool(self._hm_get_state())
|
||||
|
||||
def lock(self, **kwargs):
|
||||
"""Lock the lock."""
|
||||
self._hmdevice.lock()
|
||||
|
||||
def unlock(self, **kwargs):
|
||||
"""Unlock the lock."""
|
||||
self._hmdevice.unlock()
|
||||
|
||||
def open(self, **kwargs):
|
||||
"""Open the door latch."""
|
||||
self._hmdevice.open()
|
||||
|
||||
def _init_data_struct(self):
|
||||
"""Generate the data dictionary (self._data) from metadata."""
|
||||
self._state = "STATE"
|
||||
self._data.update({self._state: STATE_UNKNOWN})
|
||||
|
||||
@property
|
||||
def supported_features(self):
|
||||
"""Flag supported features."""
|
||||
return SUPPORT_OPEN
|
Loading…
Add table
Add a link
Reference in a new issue