KNX: Provide project data and parser version via websocket (#100676)
* feat(knxproject-explore): providing knxproject via websocket, also xknxproject version in info mesage * feat(knxproject-explore): adding test case * reverted back adding of xknxproject version * fix(): Enriching get project test case to check against FIXTURE * feat(knxproject-explore): providing knxproject via websocket, also xknxproject version in info mesage * feat(knxproject-explore): adding test case * reverted back adding of xknxproject version * fix(): Enriching get project test case to check against FIXTUREpull/100969/head
parent
176f5dc2d6
commit
f899e5159b
|
@ -115,3 +115,7 @@ class KNXProject:
|
|||
"""Remove project file from storage."""
|
||||
await self._store.async_remove()
|
||||
self.initial_state()
|
||||
|
||||
async def get_knxproject(self) -> KNXProjectModel | None:
|
||||
"""Load the project file from local storage."""
|
||||
return await self._store.async_load()
|
||||
|
|
|
@ -27,6 +27,7 @@ async def register_panel(hass: HomeAssistant) -> None:
|
|||
websocket_api.async_register_command(hass, ws_project_file_remove)
|
||||
websocket_api.async_register_command(hass, ws_group_monitor_info)
|
||||
websocket_api.async_register_command(hass, ws_subscribe_telegram)
|
||||
websocket_api.async_register_command(hass, ws_get_knx_project)
|
||||
|
||||
if DOMAIN not in hass.data.get("frontend_panels", {}):
|
||||
hass.http.register_static_path(
|
||||
|
@ -67,6 +68,7 @@ def ws_info(
|
|||
"name": project_info["name"],
|
||||
"last_modified": project_info["last_modified"],
|
||||
"tool_version": project_info["tool_version"],
|
||||
"xknxproject_version": project_info["xknxproject_version"],
|
||||
}
|
||||
|
||||
connection.send_result(
|
||||
|
@ -80,6 +82,30 @@ def ws_info(
|
|||
)
|
||||
|
||||
|
||||
@websocket_api.require_admin
|
||||
@websocket_api.websocket_command(
|
||||
{
|
||||
vol.Required("type"): "knx/get_knx_project",
|
||||
}
|
||||
)
|
||||
@websocket_api.async_response
|
||||
async def ws_get_knx_project(
|
||||
hass: HomeAssistant,
|
||||
connection: websocket_api.ActiveConnection,
|
||||
msg: dict,
|
||||
) -> None:
|
||||
"""Handle get KNX project."""
|
||||
knx: KNXModule = hass.data[DOMAIN]
|
||||
knxproject = await knx.project.get_knxproject()
|
||||
connection.send_result(
|
||||
msg["id"],
|
||||
{
|
||||
"project_loaded": knx.project.loaded,
|
||||
"knxproject": knxproject,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@websocket_api.require_admin
|
||||
@websocket_api.websocket_command(
|
||||
{
|
||||
|
|
|
@ -138,6 +138,24 @@ async def test_knx_project_file_remove(
|
|||
assert not hass.data[DOMAIN].project.loaded
|
||||
|
||||
|
||||
async def test_knx_get_project(
|
||||
hass: HomeAssistant,
|
||||
knx: KNXTestKit,
|
||||
hass_ws_client: WebSocketGenerator,
|
||||
load_knxproj: None,
|
||||
):
|
||||
"""Test retrieval of kxnproject from store."""
|
||||
await knx.setup_integration({})
|
||||
client = await hass_ws_client(hass)
|
||||
assert hass.data[DOMAIN].project.loaded
|
||||
|
||||
await client.send_json({"id": 3, "type": "knx/get_knx_project"})
|
||||
res = await client.receive_json()
|
||||
assert res["success"], res
|
||||
assert res["result"]["project_loaded"] is True
|
||||
assert res["result"]["knxproject"] == FIXTURE_PROJECT_DATA
|
||||
|
||||
|
||||
async def test_knx_group_monitor_info_command(
|
||||
hass: HomeAssistant, knx: KNXTestKit, hass_ws_client: WebSocketGenerator
|
||||
):
|
||||
|
|
Loading…
Reference in New Issue