Various fixes for missing components and rollershutter. (#2698)

* Various fixes for missing components, rollershutter.

* Setting up different method for catching value of correct type.
This commit is contained in:
John Arild Berentsen 2016-08-10 08:31:44 +02:00 committed by GitHub
parent 1726c4b45a
commit a03691455b
2 changed files with 42 additions and 16 deletions

View File

@ -40,10 +40,14 @@ class ZwaveRollershutter(zwave.ZWaveDeviceEntity, RollershutterDevice):
def __init__(self, value): def __init__(self, value):
"""Initialize the zwave rollershutter.""" """Initialize the zwave rollershutter."""
import libopenzwave
from openzwave.network import ZWaveNetwork from openzwave.network import ZWaveNetwork
from pydispatch import dispatcher from pydispatch import dispatcher
ZWaveDeviceEntity.__init__(self, value, DOMAIN) ZWaveDeviceEntity.__init__(self, value, DOMAIN)
self._lozwmgr = libopenzwave.PyManager()
self._lozwmgr.create()
self._node = value.node self._node = value.node
self._current_position = None
dispatcher.connect( dispatcher.connect(
self.value_changed, ZWaveNetwork.SIGNAL_VALUE_CHANGED) self.value_changed, ZWaveNetwork.SIGNAL_VALUE_CHANGED)
@ -51,32 +55,53 @@ class ZwaveRollershutter(zwave.ZWaveDeviceEntity, RollershutterDevice):
"""Called when a value has changed on the network.""" """Called when a value has changed on the network."""
if self._value.value_id == value.value_id or \ if self._value.value_id == value.value_id or \
self._value.node == value.node: self._value.node == value.node:
self.update_properties()
self.update_ha_state() self.update_ha_state()
_LOGGER.debug("Value changed on network %s", value) _LOGGER.debug("Value changed on network %s", value)
def update_properties(self):
"""Callback on data change for the registered node/value pair."""
# Position value
for value in self._node.get_values(
class_id=COMMAND_CLASS_SWITCH_MULTILEVEL).values():
if value.command_class == zwave.COMMAND_CLASS_SWITCH_MULTILEVEL \
and value.label == 'Level':
self._current_position = value.data
@property @property
def current_position(self): def current_position(self):
"""Return the current position of Zwave roller shutter.""" """Return the current position of Zwave roller shutter."""
if self._value.data <= 5: if self._current_position is not None:
return 100 if self._current_position <= 5:
elif self._value.data >= 95: return 100
return 0 elif self._current_position >= 95:
else: return 0
return 100 - self._value.data else:
return 100 - self._current_position
def move_up(self, **kwargs): def move_up(self, **kwargs):
"""Move the roller shutter up.""" """Move the roller shutter up."""
self._node.set_dimmer(self._value.value_id, 100) for value in self._node.get_values(
class_id=COMMAND_CLASS_SWITCH_MULTILEVEL).values():
if value.command_class == zwave.COMMAND_CLASS_SWITCH_MULTILEVEL \
and value.label == 'Open':
self._lozwmgr.pressButton(value.value_id)
break
def move_down(self, **kwargs): def move_down(self, **kwargs):
"""Move the roller shutter down.""" """Move the roller shutter down."""
self._node.set_dimmer(self._value.value_id, 0) for value in self._node.get_values(
class_id=COMMAND_CLASS_SWITCH_MULTILEVEL).values():
if value.command_class == zwave.COMMAND_CLASS_SWITCH_MULTILEVEL \
and value.label == 'Close':
self._lozwmgr.pressButton(value.value_id)
break
def stop(self, **kwargs): def stop(self, **kwargs):
"""Stop the roller shutter.""" """Stop the roller shutter."""
for value in self._node.get_values( for value in self._node.get_values(
class_id=COMMAND_CLASS_SWITCH_BINARY).values(): class_id=COMMAND_CLASS_SWITCH_MULTILEVEL).values():
# Rollershutter will toggle between UP (True), DOWN (False). if value.command_class == zwave.COMMAND_CLASS_SWITCH_MULTILEVEL \
# It also stops the shutter if the same value is sent while moving. and value.label == 'Open':
value.data = value.data self._lozwmgr.releaseButton(value.value_id)
break break

View File

@ -66,10 +66,10 @@ COMMAND_CLASS_SENSOR_ALARM = 156
GENERIC_COMMAND_CLASS_WHATEVER = None GENERIC_COMMAND_CLASS_WHATEVER = None
GENERIC_COMMAND_CLASS_REMOTE_CONTROLLER = 1 GENERIC_COMMAND_CLASS_REMOTE_CONTROLLER = 1
GENERIC_COMMAND_CLASS_NOTIFICATION = 7 GENERIC_COMMAND_CLASS_NOTIFICATION = 7
GENERIC_COMMAND_CLASS_REMOTE_SWITCH = 12
GENERIC_COMMAND_CLASS_REPEATER_SLAVE = 15 GENERIC_COMMAND_CLASS_REPEATER_SLAVE = 15
GENERIC_COMMAND_CLASS_MULTILEVEL_SWITCH = 17
GENERIC_COMMAND_CLASS_BINARY_SWITCH = 16 GENERIC_COMMAND_CLASS_BINARY_SWITCH = 16
GENERIC_COMMAND_CLASS_MULTILEVEL_SWITCH = 17
GENERIC_COMMAND_CLASS_REMOTE_SWITCH = 18
GENERIC_COMMAND_CLASS_WALL_CONTROLLER = 24 GENERIC_COMMAND_CLASS_WALL_CONTROLLER = 24
GENERIC_COMMAND_CLASS_ENTRY_CONTROL = 64 GENERIC_COMMAND_CLASS_ENTRY_CONTROL = 64
GENERIC_COMMAND_CLASS_BINARY_SENSOR = 32 GENERIC_COMMAND_CLASS_BINARY_SENSOR = 32
@ -113,7 +113,8 @@ DISCOVERY_COMPONENTS = [
TYPE_WHATEVER, TYPE_WHATEVER,
GENRE_USER), GENRE_USER),
('light', ('light',
[GENERIC_COMMAND_CLASS_MULTILEVEL_SWITCH], [GENERIC_COMMAND_CLASS_MULTILEVEL_SWITCH,
GENERIC_COMMAND_CLASS_REMOTE_SWITCH],
[SPECIFIC_DEVICE_CLASS_MULTILEVEL_POWER_SWITCH, [SPECIFIC_DEVICE_CLASS_MULTILEVEL_POWER_SWITCH,
SPECIFIC_DEVICE_CLASS_MULTILEVEL_SCENE, SPECIFIC_DEVICE_CLASS_MULTILEVEL_SCENE,
SPECIFIC_DEVICE_CLASS_NOT_USED], SPECIFIC_DEVICE_CLASS_NOT_USED],