mirror of
https://github.com/home-assistant/core.git
synced 2025-07-17 02:07:09 +00:00
Add zwave_js/subscribe_node_status
WS API cmd (#73249)
* Add zwave_js/subscribe_node_status WS API cmd * add ready to event
This commit is contained in:
parent
45142558ef
commit
7714183118
@ -378,6 +378,7 @@ def node_status(node: Node) -> dict[str, Any]:
|
|||||||
def async_register_api(hass: HomeAssistant) -> None:
|
def async_register_api(hass: HomeAssistant) -> None:
|
||||||
"""Register all of our api endpoints."""
|
"""Register all of our api endpoints."""
|
||||||
websocket_api.async_register_command(hass, websocket_network_status)
|
websocket_api.async_register_command(hass, websocket_network_status)
|
||||||
|
websocket_api.async_register_command(hass, websocket_subscribe_node_status)
|
||||||
websocket_api.async_register_command(hass, websocket_node_status)
|
websocket_api.async_register_command(hass, websocket_node_status)
|
||||||
websocket_api.async_register_command(hass, websocket_node_metadata)
|
websocket_api.async_register_command(hass, websocket_node_metadata)
|
||||||
websocket_api.async_register_command(hass, websocket_node_comments)
|
websocket_api.async_register_command(hass, websocket_node_comments)
|
||||||
@ -422,7 +423,6 @@ def async_register_api(hass: HomeAssistant) -> None:
|
|||||||
hass, websocket_subscribe_controller_statistics
|
hass, websocket_subscribe_controller_statistics
|
||||||
)
|
)
|
||||||
websocket_api.async_register_command(hass, websocket_subscribe_node_statistics)
|
websocket_api.async_register_command(hass, websocket_subscribe_node_statistics)
|
||||||
websocket_api.async_register_command(hass, websocket_node_ready)
|
|
||||||
hass.http.register_view(FirmwareUploadView())
|
hass.http.register_view(FirmwareUploadView())
|
||||||
|
|
||||||
|
|
||||||
@ -497,25 +497,28 @@ async def websocket_network_status(
|
|||||||
|
|
||||||
@websocket_api.websocket_command(
|
@websocket_api.websocket_command(
|
||||||
{
|
{
|
||||||
vol.Required(TYPE): "zwave_js/node_ready",
|
vol.Required(TYPE): "zwave_js/subscribe_node_status",
|
||||||
vol.Required(DEVICE_ID): str,
|
vol.Required(DEVICE_ID): str,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@websocket_api.async_response
|
@websocket_api.async_response
|
||||||
@async_get_node
|
@async_get_node
|
||||||
async def websocket_node_ready(
|
async def websocket_subscribe_node_status(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
connection: ActiveConnection,
|
connection: ActiveConnection,
|
||||||
msg: dict,
|
msg: dict,
|
||||||
node: Node,
|
node: Node,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Subscribe to the node ready event of a Z-Wave JS node."""
|
"""Subscribe to node status update events of a Z-Wave JS node."""
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def forward_event(event: dict) -> None:
|
def forward_event(event: dict) -> None:
|
||||||
"""Forward the event."""
|
"""Forward the event."""
|
||||||
connection.send_message(
|
connection.send_message(
|
||||||
websocket_api.event_message(msg[ID], {"event": event["event"]})
|
websocket_api.event_message(
|
||||||
|
msg[ID],
|
||||||
|
{"event": event["event"], "status": node.status, "ready": node.ready},
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
@ -525,7 +528,10 @@ async def websocket_node_ready(
|
|||||||
unsub()
|
unsub()
|
||||||
|
|
||||||
connection.subscriptions[msg["id"]] = async_cleanup
|
connection.subscriptions[msg["id"]] = async_cleanup
|
||||||
msg[DATA_UNSUBSCRIBE] = unsubs = [node.on("ready", forward_event)]
|
msg[DATA_UNSUBSCRIBE] = unsubs = [
|
||||||
|
node.on(evt, forward_event)
|
||||||
|
for evt in ("alive", "dead", "sleep", "wake up", "ready")
|
||||||
|
]
|
||||||
|
|
||||||
connection.send_result(msg[ID])
|
connection.send_result(msg[ID])
|
||||||
|
|
||||||
|
@ -198,14 +198,14 @@ async def test_network_status(hass, multisensor_6, integration, hass_ws_client):
|
|||||||
assert msg["error"]["code"] == ERR_INVALID_FORMAT
|
assert msg["error"]["code"] == ERR_INVALID_FORMAT
|
||||||
|
|
||||||
|
|
||||||
async def test_node_ready(
|
async def test_subscribe_node_status(
|
||||||
hass,
|
hass,
|
||||||
multisensor_6_state,
|
multisensor_6_state,
|
||||||
client,
|
client,
|
||||||
integration,
|
integration,
|
||||||
hass_ws_client,
|
hass_ws_client,
|
||||||
):
|
):
|
||||||
"""Test the node ready websocket command."""
|
"""Test the subscribe node status websocket command."""
|
||||||
entry = integration
|
entry = integration
|
||||||
ws_client = await hass_ws_client(hass)
|
ws_client = await hass_ws_client(hass)
|
||||||
node_data = deepcopy(multisensor_6_state) # Copy to allow modification in tests.
|
node_data = deepcopy(multisensor_6_state) # Copy to allow modification in tests.
|
||||||
@ -222,7 +222,7 @@ async def test_node_ready(
|
|||||||
await ws_client.send_json(
|
await ws_client.send_json(
|
||||||
{
|
{
|
||||||
ID: 3,
|
ID: 3,
|
||||||
TYPE: "zwave_js/node_ready",
|
TYPE: "zwave_js/subscribe_node_status",
|
||||||
DEVICE_ID: device.id,
|
DEVICE_ID: device.id,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -246,6 +246,25 @@ async def test_node_ready(
|
|||||||
msg = await ws_client.receive_json()
|
msg = await ws_client.receive_json()
|
||||||
|
|
||||||
assert msg["event"]["event"] == "ready"
|
assert msg["event"]["event"] == "ready"
|
||||||
|
assert msg["event"]["status"] == 1
|
||||||
|
assert msg["event"]["ready"]
|
||||||
|
|
||||||
|
event = Event(
|
||||||
|
"wake up",
|
||||||
|
{
|
||||||
|
"source": "node",
|
||||||
|
"event": "wake up",
|
||||||
|
"nodeId": node.node_id,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
node.receive_event(event)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
msg = await ws_client.receive_json()
|
||||||
|
|
||||||
|
assert msg["event"]["event"] == "wake up"
|
||||||
|
assert msg["event"]["status"] == 2
|
||||||
|
assert msg["event"]["ready"]
|
||||||
|
|
||||||
|
|
||||||
async def test_node_status(hass, multisensor_6, integration, hass_ws_client):
|
async def test_node_status(hass, multisensor_6, integration, hass_ws_client):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user