Expand to respond to basic node events (#2615)

Allows zwave devices that can only push out basic set commands to be
captured by hass as zwave.node_events.
pull/2652/merge
John 2016-07-29 15:56:03 -04:00 committed by John Arild Berentsen
parent 48fbec0a49
commit caa7e770be
1 changed files with 25 additions and 5 deletions

View File

@ -38,6 +38,7 @@ SERVICE_SOFT_RESET = "soft_reset"
SERVICE_TEST_NETWORK = "test_network" SERVICE_TEST_NETWORK = "test_network"
EVENT_SCENE_ACTIVATED = "zwave.scene_activated" EVENT_SCENE_ACTIVATED = "zwave.scene_activated"
EVENT_NODE_EVENT = "zwave.node_event"
COMMAND_CLASS_WHATEVER = None COMMAND_CLASS_WHATEVER = None
COMMAND_CLASS_SENSOR_MULTILEVEL = 49 COMMAND_CLASS_SENSOR_MULTILEVEL = 49
@ -180,8 +181,10 @@ DISCOVERY_COMPONENTS = [
ATTR_NODE_ID = "node_id" ATTR_NODE_ID = "node_id"
ATTR_VALUE_ID = "value_id" ATTR_VALUE_ID = "value_id"
ATTR_OBJECT_ID = "object_id"
ATTR_SCENE_ID = "scene_id" ATTR_SCENE_ID = "scene_id"
ATTR_BASIC_LEVEL = "basic_level"
NETWORK = None NETWORK = None
@ -206,6 +209,14 @@ def _value_name(value):
return "{} {}".format(_node_name(value.node), value.label) return "{} {}".format(_node_name(value.node), value.label)
def _node_object_id(node):
"""Return the object_id of the node."""
node_object_id = "{}_{}".format(slugify(_node_name(node)),
node.node_id)
return node_object_id
def _object_id(value): def _object_id(value):
"""Return the object_id of the device value. """Return the object_id of the device value.
@ -293,7 +304,9 @@ def setup(hass, config):
print("") print("")
print("SIGNAL *****", signal) print("SIGNAL *****", signal)
if value and signal in (ZWaveNetwork.SIGNAL_VALUE_CHANGED, if value and signal in (ZWaveNetwork.SIGNAL_VALUE_CHANGED,
ZWaveNetwork.SIGNAL_VALUE_ADDED): ZWaveNetwork.SIGNAL_VALUE_ADDED,
ZWaveNetwork.SIGNAL_SCENE_EVENT,
ZWaveNetwork.SIGNAL_NODE_EVENT):
pprint(_obj_to_dict(value)) pprint(_obj_to_dict(value))
print("") print("")
@ -363,18 +376,25 @@ def setup(hass, config):
def scene_activated(node, scene_id): def scene_activated(node, scene_id):
"""Called when a scene is activated on any node in the network.""" """Called when a scene is activated on any node in the network."""
name = _node_name(node)
object_id = "{}_{}".format(slugify(name), node.node_id)
hass.bus.fire(EVENT_SCENE_ACTIVATED, { hass.bus.fire(EVENT_SCENE_ACTIVATED, {
ATTR_ENTITY_ID: object_id, ATTR_ENTITY_ID: _node_object_id(node),
ATTR_OBJECT_ID: _node_object_id(node),
ATTR_SCENE_ID: scene_id ATTR_SCENE_ID: scene_id
}) })
def node_event_activated(node, value):
"""Called when a nodeevent is activated on any node in the network."""
hass.bus.fire(EVENT_NODE_EVENT, {
ATTR_OBJECT_ID: _node_object_id(node),
ATTR_BASIC_LEVEL: value
})
dispatcher.connect( dispatcher.connect(
value_added, ZWaveNetwork.SIGNAL_VALUE_ADDED, weak=False) value_added, ZWaveNetwork.SIGNAL_VALUE_ADDED, weak=False)
dispatcher.connect( dispatcher.connect(
scene_activated, ZWaveNetwork.SIGNAL_SCENE_EVENT, weak=False) scene_activated, ZWaveNetwork.SIGNAL_SCENE_EVENT, weak=False)
dispatcher.connect(
node_event_activated, ZWaveNetwork.SIGNAL_NODE_EVENT, weak=False)
def add_node(service): def add_node(service):
"""Switch into inclusion mode.""" """Switch into inclusion mode."""