mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Update ozw get_config_parameter websocket response (#43058)
This commit is contained in:
parent
6daf40b254
commit
71b8aad91b
@ -15,6 +15,7 @@ from openzwavemqtt.util.node import (
|
|||||||
set_config_parameter,
|
set_config_parameter,
|
||||||
)
|
)
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
import voluptuous_serialize
|
||||||
|
|
||||||
from homeassistant.components import websocket_api
|
from homeassistant.components import websocket_api
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
@ -29,6 +30,7 @@ OZW_INSTANCE = "ozw_instance"
|
|||||||
NODE_ID = "node_id"
|
NODE_ID = "node_id"
|
||||||
PARAMETER = ATTR_CONFIG_PARAMETER
|
PARAMETER = ATTR_CONFIG_PARAMETER
|
||||||
VALUE = ATTR_CONFIG_VALUE
|
VALUE = ATTR_CONFIG_VALUE
|
||||||
|
SCHEMA = "schema"
|
||||||
|
|
||||||
ATTR_NODE_QUERY_STAGE = "node_query_stage"
|
ATTR_NODE_QUERY_STAGE = "node_query_stage"
|
||||||
ATTR_IS_ZWAVE_PLUS = "is_zwave_plus"
|
ATTR_IS_ZWAVE_PLUS = "is_zwave_plus"
|
||||||
@ -106,6 +108,59 @@ def _call_util_function(hass, connection, msg, send_result, function, *args):
|
|||||||
connection.send_result(msg[ID])
|
connection.send_result(msg[ID])
|
||||||
|
|
||||||
|
|
||||||
|
def _get_config_params(node, *args):
|
||||||
|
raw_values = get_config_parameters(node)
|
||||||
|
config_params = []
|
||||||
|
|
||||||
|
for param in raw_values:
|
||||||
|
schema = {}
|
||||||
|
|
||||||
|
if param["type"] in ["Byte", "Int", "Short"]:
|
||||||
|
schema = vol.Schema(
|
||||||
|
{
|
||||||
|
vol.Required(param["label"], default=param["value"]): vol.All(
|
||||||
|
vol.Coerce(int), vol.Range(min=param["min"], max=param["max"])
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
data = {param["label"]: param["value"]}
|
||||||
|
|
||||||
|
if param["type"] == "List":
|
||||||
|
|
||||||
|
for options in param["options"]:
|
||||||
|
if options["Label"] == param["value"]:
|
||||||
|
selected = options
|
||||||
|
break
|
||||||
|
|
||||||
|
schema = vol.Schema(
|
||||||
|
{
|
||||||
|
vol.Required(param["label"],): vol.In(
|
||||||
|
{
|
||||||
|
option["Value"]: option["Label"]
|
||||||
|
for option in param["options"]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
data = {param["label"]: selected["Value"]}
|
||||||
|
|
||||||
|
config_params.append(
|
||||||
|
{
|
||||||
|
"type": param["type"],
|
||||||
|
"label": param["label"],
|
||||||
|
"parameter": param["parameter"],
|
||||||
|
"help": param["help"],
|
||||||
|
"value": param["value"],
|
||||||
|
"schema": voluptuous_serialize.convert(
|
||||||
|
schema, custom_serializer=cv.custom_serializer
|
||||||
|
),
|
||||||
|
"data": data,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return config_params
|
||||||
|
|
||||||
|
|
||||||
@websocket_api.websocket_command({vol.Required(TYPE): "ozw/get_instances"})
|
@websocket_api.websocket_command({vol.Required(TYPE): "ozw/get_instances"})
|
||||||
def websocket_get_instances(hass, connection, msg):
|
def websocket_get_instances(hass, connection, msg):
|
||||||
"""Get a list of OZW instances."""
|
"""Get a list of OZW instances."""
|
||||||
@ -213,7 +268,7 @@ def websocket_get_code_slots(hass, connection, msg):
|
|||||||
)
|
)
|
||||||
def websocket_get_config_parameters(hass, connection, msg):
|
def websocket_get_config_parameters(hass, connection, msg):
|
||||||
"""Get a list of configuration parameters for an OZW node instance."""
|
"""Get a list of configuration parameters for an OZW node instance."""
|
||||||
_call_util_function(hass, connection, msg, True, get_config_parameters)
|
_call_util_function(hass, connection, msg, True, _get_config_params)
|
||||||
|
|
||||||
|
|
||||||
@websocket_api.websocket_command(
|
@websocket_api.websocket_command(
|
||||||
@ -245,7 +300,7 @@ def websocket_get_config_parameters(hass, connection, msg):
|
|||||||
def websocket_set_config_parameter(hass, connection, msg):
|
def websocket_set_config_parameter(hass, connection, msg):
|
||||||
"""Set a config parameter to a node."""
|
"""Set a config parameter to a node."""
|
||||||
_call_util_function(
|
_call_util_function(
|
||||||
hass, connection, msg, False, set_config_parameter, msg[PARAMETER], msg[VALUE]
|
hass, connection, msg, True, set_config_parameter, msg[PARAMETER], msg[VALUE]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ from homeassistant.components.ozw.websocket_api import (
|
|||||||
NODE_ID,
|
NODE_ID,
|
||||||
OZW_INSTANCE,
|
OZW_INSTANCE,
|
||||||
PARAMETER,
|
PARAMETER,
|
||||||
|
SCHEMA,
|
||||||
TYPE,
|
TYPE,
|
||||||
VALUE,
|
VALUE,
|
||||||
)
|
)
|
||||||
@ -152,16 +153,17 @@ async def test_websocket_api(hass, generic_data, hass_ws_client):
|
|||||||
|
|
||||||
# Test set config parameter
|
# Test set config parameter
|
||||||
config_param = result[0]
|
config_param = result[0]
|
||||||
|
print(config_param)
|
||||||
current_val = config_param[ATTR_VALUE]
|
current_val = config_param[ATTR_VALUE]
|
||||||
new_val = next(
|
new_val = next(
|
||||||
option["Value"]
|
option[0]
|
||||||
for option in config_param[ATTR_OPTIONS]
|
for option in config_param[SCHEMA][0][ATTR_OPTIONS]
|
||||||
if option["Label"] != current_val
|
if option[0] != current_val
|
||||||
)
|
)
|
||||||
new_label = next(
|
new_label = next(
|
||||||
option["Label"]
|
option[1]
|
||||||
for option in config_param[ATTR_OPTIONS]
|
for option in config_param[SCHEMA][0][ATTR_OPTIONS]
|
||||||
if option["Label"] != current_val and option["Value"] != new_val
|
if option[1] != current_val and option[0] != new_val
|
||||||
)
|
)
|
||||||
await client.send_json(
|
await client.send_json(
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user