Extend zwave_js discovery scheme for lights (#46907)

pull/46979/head
Marcel van der Veldt 2021-02-24 01:31:24 +01:00 committed by GitHub
parent d02b27a5d0
commit d4d68ebc64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 1277 additions and 16 deletions

View File

@ -221,22 +221,6 @@ DISCOVERY_SCHEMAS = [
type={"number"}, type={"number"},
), ),
), ),
# lights
# primary value is the currentValue (brightness)
ZWaveDiscoverySchema(
platform="light",
device_class_generic={"Multilevel Switch", "Remote Switch"},
device_class_specific={
"Tunable Color Light",
"Binary Tunable Color Light",
"Tunable Color Switch",
"Multilevel Remote Switch",
"Multilevel Power Switch",
"Multilevel Scene Switch",
"Unused",
},
primary_value=SWITCH_MULTILEVEL_CURRENT_VALUE_SCHEMA,
),
# binary sensors # binary sensors
ZWaveDiscoverySchema( ZWaveDiscoverySchema(
platform="binary_sensor", platform="binary_sensor",
@ -381,6 +365,15 @@ DISCOVERY_SCHEMAS = [
device_class_specific={"Fan Switch"}, device_class_specific={"Fan Switch"},
primary_value=SWITCH_MULTILEVEL_CURRENT_VALUE_SCHEMA, primary_value=SWITCH_MULTILEVEL_CURRENT_VALUE_SCHEMA,
), ),
# lights
# primary value is the currentValue (brightness)
# catch any device with multilevel CC as light
# NOTE: keep this at the bottom of the discovery scheme,
# to handle all others that need the multilevel CC first
ZWaveDiscoverySchema(
platform="light",
primary_value=SWITCH_MULTILEVEL_CURRENT_VALUE_SCHEMA,
),
] ]

View File

@ -148,6 +148,12 @@ def iblinds_v2_state_fixture():
return json.loads(load_fixture("zwave_js/cover_iblinds_v2_state.json")) return json.loads(load_fixture("zwave_js/cover_iblinds_v2_state.json"))
@pytest.fixture(name="aeon_smart_switch_6_state", scope="session")
def aeon_smart_switch_6_state_fixture():
"""Load the AEON Labs (ZW096) Smart Switch 6 node state fixture data."""
return json.loads(load_fixture("zwave_js/aeon_smart_switch_6_state.json"))
@pytest.fixture(name="ge_12730_state", scope="session") @pytest.fixture(name="ge_12730_state", scope="session")
def ge_12730_state_fixture(): def ge_12730_state_fixture():
"""Load the GE 12730 node state fixture data.""" """Load the GE 12730 node state fixture data."""
@ -362,6 +368,14 @@ def iblinds_cover_fixture(client, iblinds_v2_state):
return node return node
@pytest.fixture(name="aeon_smart_switch_6")
def aeon_smart_switch_6_fixture(client, aeon_smart_switch_6_state):
"""Mock an AEON Labs (ZW096) Smart Switch 6 node."""
node = Node(client, aeon_smart_switch_6_state)
client.driver.controller.nodes[node.node_id] = node
return node
@pytest.fixture(name="ge_12730") @pytest.fixture(name="ge_12730")
def ge_12730_fixture(client, ge_12730_state): def ge_12730_fixture(client, ge_12730_state):
"""Mock a GE 12730 fan controller node.""" """Mock a GE 12730 fan controller node."""

View File

@ -14,6 +14,7 @@ from homeassistant.const import ATTR_SUPPORTED_FEATURES, STATE_OFF, STATE_ON
BULB_6_MULTI_COLOR_LIGHT_ENTITY = "light.bulb_6_multi_color" BULB_6_MULTI_COLOR_LIGHT_ENTITY = "light.bulb_6_multi_color"
EATON_RF9640_ENTITY = "light.allloaddimmer" EATON_RF9640_ENTITY = "light.allloaddimmer"
AEON_SMART_SWITCH_LIGHT_ENTITY = "light.smart_switch_6"
async def test_light(hass, client, bulb_6_multi_color, integration): async def test_light(hass, client, bulb_6_multi_color, integration):
@ -403,3 +404,9 @@ async def test_v4_dimmer_light(hass, client, eaton_rf9640_dimmer, integration):
assert state.state == STATE_ON assert state.state == STATE_ON
# the light should pick currentvalue which has zwave value 22 # the light should pick currentvalue which has zwave value 22
assert state.attributes[ATTR_BRIGHTNESS] == 57 assert state.attributes[ATTR_BRIGHTNESS] == 57
async def test_optional_light(hass, client, aeon_smart_switch_6, integration):
"""Test a device that has an additional light endpoint being identified as light."""
state = hass.states.get(AEON_SMART_SWITCH_LIGHT_ENTITY)
assert state.state == STATE_ON

File diff suppressed because it is too large Load Diff