mirror of
https://github.com/home-assistant/core.git
synced 2025-07-12 15:57:06 +00:00
Add zdb5100 light to zwave_js (#97586)
* added zdb5100 light * added light to zdb5100 * Update tests/components/zwave_js/conftest.py agree Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Update tests/components/zwave_js/conftest.py agree Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Rename logic_group_zdb5100_light_state.json to logic_group_zdb5100_state.json name change * Update tests/components/zwave_js/test_light.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Update test_light.py updated test and state * Update test_light.py incorrect endpoint * changed the state --------- Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
c77eb70886
commit
74a7bccd65
@ -588,6 +588,19 @@ DISCOVERY_SCHEMAS = [
|
|||||||
),
|
),
|
||||||
absent_values=[SWITCH_MULTILEVEL_CURRENT_VALUE_SCHEMA],
|
absent_values=[SWITCH_MULTILEVEL_CURRENT_VALUE_SCHEMA],
|
||||||
),
|
),
|
||||||
|
# Logic Group ZDB5100
|
||||||
|
ZWaveDiscoverySchema(
|
||||||
|
platform=Platform.LIGHT,
|
||||||
|
hint="black_is_off",
|
||||||
|
manufacturer_id={0x0234},
|
||||||
|
product_id={0x0121},
|
||||||
|
product_type={0x0003},
|
||||||
|
primary_value=ZWaveValueDiscoverySchema(
|
||||||
|
command_class={CommandClass.SWITCH_COLOR},
|
||||||
|
property={CURRENT_COLOR_PROPERTY},
|
||||||
|
property_key={None},
|
||||||
|
),
|
||||||
|
),
|
||||||
# ====== START OF GENERIC MAPPING SCHEMAS =======
|
# ====== START OF GENERIC MAPPING SCHEMAS =======
|
||||||
# locks
|
# locks
|
||||||
# Door Lock CC
|
# Door Lock CC
|
||||||
|
@ -650,6 +650,12 @@ def nice_ibt4zwave_state_fixture():
|
|||||||
return json.loads(load_fixture("zwave_js/cover_nice_ibt4zwave_state.json"))
|
return json.loads(load_fixture("zwave_js/cover_nice_ibt4zwave_state.json"))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="logic_group_zdb5100_state", scope="session")
|
||||||
|
def logic_group_zdb5100_state_fixture():
|
||||||
|
"""Load the Logic Group ZDB5100 node state fixture data."""
|
||||||
|
return json.loads(load_fixture("zwave_js/logic_group_zdb5100_state.json"))
|
||||||
|
|
||||||
|
|
||||||
# model fixtures
|
# model fixtures
|
||||||
|
|
||||||
|
|
||||||
@ -1262,3 +1268,11 @@ def nice_ibt4zwave_fixture(client, nice_ibt4zwave_state):
|
|||||||
node = Node(client, copy.deepcopy(nice_ibt4zwave_state))
|
node = Node(client, copy.deepcopy(nice_ibt4zwave_state))
|
||||||
client.driver.controller.nodes[node.node_id] = node
|
client.driver.controller.nodes[node.node_id] = node
|
||||||
return node
|
return node
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="logic_group_zdb5100")
|
||||||
|
def logic_group_zdb5100_fixture(client, logic_group_zdb5100_state):
|
||||||
|
"""Mock a ZDB5100 light node."""
|
||||||
|
node = Node(client, copy.deepcopy(logic_group_zdb5100_state))
|
||||||
|
client.driver.controller.nodes[node.node_id] = node
|
||||||
|
return node
|
||||||
|
4691
tests/components/zwave_js/fixtures/logic_group_zdb5100_state.json
Normal file
4691
tests/components/zwave_js/fixtures/logic_group_zdb5100_state.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -35,6 +35,7 @@ from .common import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
HSM200_V1_ENTITY = "light.hsm200"
|
HSM200_V1_ENTITY = "light.hsm200"
|
||||||
|
ZDB5100_ENTITY = "light.matrix_office"
|
||||||
|
|
||||||
|
|
||||||
async def test_light(
|
async def test_light(
|
||||||
@ -681,3 +682,180 @@ async def test_black_is_off(
|
|||||||
"property": "targetColor",
|
"property": "targetColor",
|
||||||
}
|
}
|
||||||
assert args["value"] == {"red": 255, "green": 76, "blue": 255}
|
assert args["value"] == {"red": 255, "green": 76, "blue": 255}
|
||||||
|
|
||||||
|
|
||||||
|
async def test_black_is_off_zdb5100(
|
||||||
|
hass: HomeAssistant, client, logic_group_zdb5100, integration
|
||||||
|
) -> None:
|
||||||
|
"""Test the black is off light entity."""
|
||||||
|
node = logic_group_zdb5100
|
||||||
|
state = hass.states.get(ZDB5100_ENTITY)
|
||||||
|
assert state.state == STATE_OFF
|
||||||
|
|
||||||
|
# Attempt to turn on the light and ensure it defaults to white
|
||||||
|
await hass.services.async_call(
|
||||||
|
LIGHT_DOMAIN,
|
||||||
|
SERVICE_TURN_ON,
|
||||||
|
{ATTR_ENTITY_ID: ZDB5100_ENTITY},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
assert len(client.async_send_command.call_args_list) == 1
|
||||||
|
args = client.async_send_command.call_args_list[0][0][0]
|
||||||
|
assert args["command"] == "node.set_value"
|
||||||
|
assert args["nodeId"] == node.node_id
|
||||||
|
assert args["valueId"] == {
|
||||||
|
"commandClass": 51,
|
||||||
|
"endpoint": 1,
|
||||||
|
"property": "targetColor",
|
||||||
|
}
|
||||||
|
assert args["value"] == {"red": 255, "green": 255, "blue": 255}
|
||||||
|
|
||||||
|
client.async_send_command.reset_mock()
|
||||||
|
|
||||||
|
# Force the light to turn off
|
||||||
|
event = Event(
|
||||||
|
type="value updated",
|
||||||
|
data={
|
||||||
|
"source": "node",
|
||||||
|
"event": "value updated",
|
||||||
|
"nodeId": node.node_id,
|
||||||
|
"args": {
|
||||||
|
"commandClassName": "Color Switch",
|
||||||
|
"commandClass": 51,
|
||||||
|
"endpoint": 1,
|
||||||
|
"property": "currentColor",
|
||||||
|
"newValue": {
|
||||||
|
"red": 0,
|
||||||
|
"green": 0,
|
||||||
|
"blue": 0,
|
||||||
|
},
|
||||||
|
"prevValue": {
|
||||||
|
"red": 0,
|
||||||
|
"green": 255,
|
||||||
|
"blue": 0,
|
||||||
|
},
|
||||||
|
"propertyName": "currentColor",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
node.receive_event(event)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
state = hass.states.get(ZDB5100_ENTITY)
|
||||||
|
assert state.state == STATE_OFF
|
||||||
|
|
||||||
|
# Force the light to turn on
|
||||||
|
event = Event(
|
||||||
|
type="value updated",
|
||||||
|
data={
|
||||||
|
"source": "node",
|
||||||
|
"event": "value updated",
|
||||||
|
"nodeId": node.node_id,
|
||||||
|
"args": {
|
||||||
|
"commandClassName": "Color Switch",
|
||||||
|
"commandClass": 51,
|
||||||
|
"endpoint": 1,
|
||||||
|
"property": "currentColor",
|
||||||
|
"newValue": {
|
||||||
|
"red": 0,
|
||||||
|
"green": 255,
|
||||||
|
"blue": 0,
|
||||||
|
},
|
||||||
|
"prevValue": {
|
||||||
|
"red": 0,
|
||||||
|
"green": 0,
|
||||||
|
"blue": 0,
|
||||||
|
},
|
||||||
|
"propertyName": "currentColor",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
node.receive_event(event)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
state = hass.states.get(ZDB5100_ENTITY)
|
||||||
|
assert state.state == STATE_ON
|
||||||
|
|
||||||
|
await hass.services.async_call(
|
||||||
|
LIGHT_DOMAIN,
|
||||||
|
SERVICE_TURN_OFF,
|
||||||
|
{ATTR_ENTITY_ID: ZDB5100_ENTITY},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
assert len(client.async_send_command.call_args_list) == 1
|
||||||
|
args = client.async_send_command.call_args_list[0][0][0]
|
||||||
|
assert args["command"] == "node.set_value"
|
||||||
|
assert args["nodeId"] == node.node_id
|
||||||
|
assert args["valueId"] == {
|
||||||
|
"commandClass": 51,
|
||||||
|
"endpoint": 1,
|
||||||
|
"property": "targetColor",
|
||||||
|
}
|
||||||
|
assert args["value"] == {"red": 0, "green": 0, "blue": 0}
|
||||||
|
|
||||||
|
client.async_send_command.reset_mock()
|
||||||
|
|
||||||
|
# Assert that the last color is restored
|
||||||
|
await hass.services.async_call(
|
||||||
|
LIGHT_DOMAIN,
|
||||||
|
SERVICE_TURN_ON,
|
||||||
|
{ATTR_ENTITY_ID: ZDB5100_ENTITY},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
assert len(client.async_send_command.call_args_list) == 1
|
||||||
|
args = client.async_send_command.call_args_list[0][0][0]
|
||||||
|
assert args["command"] == "node.set_value"
|
||||||
|
assert args["nodeId"] == node.node_id
|
||||||
|
assert args["valueId"] == {
|
||||||
|
"commandClass": 51,
|
||||||
|
"endpoint": 1,
|
||||||
|
"property": "targetColor",
|
||||||
|
}
|
||||||
|
assert args["value"] == {"red": 0, "green": 255, "blue": 0}
|
||||||
|
|
||||||
|
client.async_send_command.reset_mock()
|
||||||
|
|
||||||
|
# Force the light to turn on
|
||||||
|
event = Event(
|
||||||
|
type="value updated",
|
||||||
|
data={
|
||||||
|
"source": "node",
|
||||||
|
"event": "value updated",
|
||||||
|
"nodeId": node.node_id,
|
||||||
|
"args": {
|
||||||
|
"commandClassName": "Color Switch",
|
||||||
|
"commandClass": 51,
|
||||||
|
"endpoint": 1,
|
||||||
|
"property": "currentColor",
|
||||||
|
"newValue": None,
|
||||||
|
"prevValue": {
|
||||||
|
"red": 0,
|
||||||
|
"green": 255,
|
||||||
|
"blue": 0,
|
||||||
|
},
|
||||||
|
"propertyName": "currentColor",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
node.receive_event(event)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
state = hass.states.get(ZDB5100_ENTITY)
|
||||||
|
assert state.state == STATE_UNKNOWN
|
||||||
|
|
||||||
|
client.async_send_command.reset_mock()
|
||||||
|
|
||||||
|
# Assert that call fails if attribute is added to service call
|
||||||
|
await hass.services.async_call(
|
||||||
|
LIGHT_DOMAIN,
|
||||||
|
SERVICE_TURN_ON,
|
||||||
|
{ATTR_ENTITY_ID: ZDB5100_ENTITY, ATTR_RGBW_COLOR: (255, 76, 255, 0)},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
assert len(client.async_send_command.call_args_list) == 1
|
||||||
|
args = client.async_send_command.call_args_list[0][0][0]
|
||||||
|
assert args["command"] == "node.set_value"
|
||||||
|
assert args["nodeId"] == node.node_id
|
||||||
|
assert args["valueId"] == {
|
||||||
|
"commandClass": 51,
|
||||||
|
"endpoint": 1,
|
||||||
|
"property": "targetColor",
|
||||||
|
}
|
||||||
|
assert args["value"] == {"red": 255, "green": 76, "blue": 255}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user