Add get_config_parameters websocket command to zwave_js (#46463)

* Add get_configuration_values websocket command to zwave_js

* Tweak return value

* Review comments and cleanup returned values

* Update test

* Rename to get_config_parameters

* Add get_configuration_values websocket command to zwave_js

* Rename to get_config_parameters

* fix test

* fix tests #2

* Add readable to metadata

Co-authored-by: Raman Gupta <7243222+raman325@users.noreply.github.com>
pull/46931/head
Charles Garwood 2021-02-22 17:03:38 -05:00 committed by GitHub
parent be33336d96
commit 04e07d8b2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 61 additions and 0 deletions

View File

@ -31,6 +31,7 @@ def async_register_api(hass: HomeAssistant) -> None:
websocket_api.async_register_command(hass, websocket_stop_inclusion) websocket_api.async_register_command(hass, websocket_stop_inclusion)
websocket_api.async_register_command(hass, websocket_remove_node) websocket_api.async_register_command(hass, websocket_remove_node)
websocket_api.async_register_command(hass, websocket_stop_exclusion) websocket_api.async_register_command(hass, websocket_stop_exclusion)
websocket_api.async_register_command(hass, websocket_get_config_parameters)
hass.http.register_view(DumpView) # type: ignore hass.http.register_view(DumpView) # type: ignore
@ -263,6 +264,48 @@ async def websocket_remove_node(
) )
@websocket_api.require_admin
@websocket_api.websocket_command(
{
vol.Required(TYPE): "zwave_js/get_config_parameters",
vol.Required(ENTRY_ID): str,
vol.Required(NODE_ID): int,
}
)
@callback
def websocket_get_config_parameters(
hass: HomeAssistant, connection: ActiveConnection, msg: dict
) -> None:
"""Get a list of configuration parameterss for a Z-Wave node."""
entry_id = msg[ENTRY_ID]
node_id = msg[NODE_ID]
client = hass.data[DOMAIN][entry_id][DATA_CLIENT]
node = client.driver.controller.nodes[node_id]
values = node.get_configuration_values()
result = {}
for value_id, zwave_value in values.items():
metadata = zwave_value.metadata
result[value_id] = {
"property": zwave_value.property_,
"configuration_value_type": zwave_value.configuration_value_type.value,
"metadata": {
"description": metadata.description,
"label": metadata.label,
"type": metadata.type,
"min": metadata.min,
"max": metadata.max,
"unit": metadata.unit,
"writeable": metadata.writeable,
"readable": metadata.readable,
},
"value": zwave_value.value,
}
connection.send_result(
msg[ID],
result,
)
class DumpView(HomeAssistantView): class DumpView(HomeAssistantView):
"""View to dump the state of the Z-Wave JS server.""" """View to dump the state of the Z-Wave JS server."""

View File

@ -41,6 +41,24 @@ async def test_websocket_api(hass, integration, multisensor_6, hass_ws_client):
assert not result["is_secure"] assert not result["is_secure"]
assert result["status"] == 1 assert result["status"] == 1
# Test getting configuration parameter values
await ws_client.send_json(
{
ID: 4,
TYPE: "zwave_js/get_config_parameters",
ENTRY_ID: entry.entry_id,
NODE_ID: node.node_id,
}
)
msg = await ws_client.receive_json()
result = msg["result"]
assert len(result) == 61
key = "52-112-0-2-00-00"
assert result[key]["property"] == 2
assert result[key]["metadata"]["type"] == "number"
assert result[key]["configuration_value_type"] == "enumerated"
async def test_add_node( async def test_add_node(
hass, integration, client, hass_ws_client, nortek_thermostat_added_event hass, integration, client, hass_ws_client, nortek_thermostat_added_event