Add zwave_js device triggers (#51968)
* Initial support for zwave_js device triggers * lint * Add node status changed trigger * comments * create helper function and simplify trigger logic * simplify code * fix exception * remove unused type ignore * switch to append to make future changes easier * make exception consistent * Add state config schema validation * comment * remove 0 from falsy check * increase test coverage * typos * Add central scene and scene activation value notification triggers * reorder things for readability and enumerate node statuses * Add support for Basic CC value notifications * fix schemas since additional fields on triggers aren't very flexible * pylint * remove extra logger statement * fix comment * dont use get when we know key will be available in dict * tweak text * use better schema for required extra fields that are ints * rename trigger types to make them easier to parse * fix strings * missed renaming of one trigger type * typo * Fix strings * reduce complexity * Use Al's suggestion for strings * add additional failure test cases * remove errant logging statement * make CC required * raise vol.Invalid when value ID isn't legit to prepare for next PR * Use helper function * fix tests * black
This commit is contained in:
parent
4d711898c7
commit
dd908caeba
8 changed files with 1970 additions and 1 deletions
|
@ -429,6 +429,12 @@ def wallmote_central_scene_state_fixture():
|
|||
return json.loads(load_fixture("zwave_js/wallmote_central_scene_state.json"))
|
||||
|
||||
|
||||
@pytest.fixture(name="ge_in_wall_dimmer_switch_state", scope="session")
|
||||
def ge_in_wall_dimmer_switch_state_fixture():
|
||||
"""Load the ge in-wall dimmer switch node state fixture data."""
|
||||
return json.loads(load_fixture("zwave_js/ge_in_wall_dimmer_switch_state.json"))
|
||||
|
||||
|
||||
@pytest.fixture(name="aeotec_zw164_siren_state", scope="session")
|
||||
def aeotec_zw164_siren_state_fixture():
|
||||
"""Load the aeotec zw164 siren node state fixture data."""
|
||||
|
@ -795,6 +801,14 @@ def wallmote_central_scene_fixture(client, wallmote_central_scene_state):
|
|||
return node
|
||||
|
||||
|
||||
@pytest.fixture(name="ge_in_wall_dimmer_switch")
|
||||
def ge_in_wall_dimmer_switch_fixture(client, ge_in_wall_dimmer_switch_state):
|
||||
"""Mock a ge in-wall dimmer switch scene node."""
|
||||
node = Node(client, copy.deepcopy(ge_in_wall_dimmer_switch_state))
|
||||
client.driver.controller.nodes[node.node_id] = node
|
||||
return node
|
||||
|
||||
|
||||
@pytest.fixture(name="aeotec_zw164_siren")
|
||||
def aeotec_zw164_siren_fixture(client, aeotec_zw164_siren_state):
|
||||
"""Mock a wallmote central scene node."""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue