Z-Wave: ESPHome discovery to update all options (#154113)

This commit is contained in:
Paulus Schoutsen
2025-10-09 17:14:53 -04:00
committed by GitHub
parent 929d76e236
commit 96bb67bef9
2 changed files with 26 additions and 3 deletions

View File

@@ -956,6 +956,9 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
CONF_ADDON_LR_S2_AUTHENTICATED_KEY: self.lr_s2_authenticated_key,
}
)
if self.restart_addon:
manager = get_addon_manager(self.hass)
await manager.async_stop_addon()
self._abort_if_unique_id_configured(
updates={
@@ -1524,10 +1527,19 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
# And use the add-on
and existing_entry.data.get(CONF_USE_ADDON)
):
manager = get_addon_manager(self.hass)
await self._async_set_addon_config(
{CONF_ADDON_SOCKET: discovery_info.socket_path}
)
# Reloading will sync add-on options to config entry data
if self.restart_addon:
await manager.async_stop_addon()
self.hass.config_entries.async_update_entry(
existing_entry,
data={
**existing_entry.data,
CONF_SOCKET_PATH: discovery_info.socket_path,
},
)
self.hass.config_entries.async_schedule_reload(existing_entry.entry_id)
return self.async_abort(reason="already_configured")

View File

@@ -1287,11 +1287,12 @@ async def test_esphome_discovery_intent_custom(
assert len(mock_setup_entry.mock_calls) == 1
@pytest.mark.usefixtures("supervisor", "addon_installed", "addon_running", "addon_info")
@pytest.mark.usefixtures("supervisor", "addon_running", "addon_running", "addon_info")
async def test_esphome_discovery_intent_recommended(
hass: HomeAssistant,
set_addon_options: AsyncMock,
addon_options: dict,
stop_addon: AsyncMock,
) -> None:
"""Test ESPHome discovery success path."""
addon_options.update(
@@ -1359,15 +1360,18 @@ async def test_esphome_discovery_intent_recommended(
}
),
)
assert stop_addon.call_count == 1
assert stop_addon.call_args == call("core_zwave_js")
assert len(mock_setup.mock_calls) == 1
assert len(mock_setup_entry.mock_calls) == 1
@pytest.mark.usefixtures("supervisor", "addon_installed", "addon_info")
@pytest.mark.usefixtures("supervisor", "addon_running", "addon_info")
async def test_esphome_discovery_already_configured(
hass: HomeAssistant,
set_addon_options: AsyncMock,
addon_options: dict[str, Any],
stop_addon: AsyncMock,
) -> None:
"""Test ESPHome discovery success path."""
addon_options[CONF_ADDON_SOCKET] = "esphome://existing-device:6053"
@@ -1408,6 +1412,13 @@ async def test_esphome_discovery_already_configured(
}
),
)
assert entry.data == {
CONF_SOCKET_PATH: "esphome://192.168.1.100:6053",
"use_addon": True,
"integration_created_addon": True,
}
assert stop_addon.call_count == 1
assert stop_addon.call_args == call("core_zwave_js")
@pytest.mark.usefixtures("supervisor", "addon_not_installed", "addon_info")