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 FIXTURE
pull/100969/head
Michael Hammer 2023-09-26 23:17:37 +02:00 committed by GitHub
parent 176f5dc2d6
commit f899e5159b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 0 deletions

View File

@ -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()

View File

@ -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(
{

View File

@ -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
):