fix(config_flow): bekanntes Geraet auch an der verkuerzten mDNS-MAC erkennen
Die Firmware wirbt im TXT-Satz nur mit den letzten vier Hex-Stellen der MAC. Daraus wurde bisher direkt eine Kennung gebaut - die auf keinen Eintrag passte. Folge: Home Assistant bot nach jedem Neustart dieselben, laengst eingerichteten Strips erneut an, und beim Hinzufuegen kam 'bereits konfiguriert'. Vier Stellen sind keine Kennung, aber ein Hinweis: endet genau ein Eintrag so, ist er gemeint. Bei mehreren bleibt es unentschieden und der Ablauf fragt nach - vier Stellen sind nicht eindeutig genug, um einen fremden Eintrag stillschweigend umzuschreiben. Die Tests sahen das nicht, weil ihr mDNS-Fixture die volle MAC eintrug - eine Welt, die es am Geraet nicht gibt.
This commit is contained in:
@@ -296,3 +296,46 @@ async def test_neu_konfigurieren_lehnt_ein_anderes_geraet_ab(
|
||||
assert ergebnis["type"] is FlowResultType.ABORT
|
||||
assert ergebnis["reason"] == "wrong_device"
|
||||
assert eintrag.data[CONF_HOST] == HOST_K1Y
|
||||
|
||||
|
||||
async def test_mdns_mit_verkuerzter_mac_erkennt_das_bekannte_geraet(
|
||||
hass: HomeAssistant, mock_client: MagicMock
|
||||
) -> None:
|
||||
"""Die Firmware wirbt nur mit den letzten vier Hex-Stellen der MAC.
|
||||
|
||||
Genau so steht es im TXT-Satz am Geraet (`mac=ad4c`). Wird daraus eine
|
||||
Kennung gebaut, passt sie auf keinen Eintrag - und Home Assistant bietet
|
||||
nach jedem Neustart dasselbe, laengst eingerichtete Geraet erneut an.
|
||||
"""
|
||||
eintrag = bestehender_eintrag(hass)
|
||||
ergebnis = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_ZEROCONF}, data=zeroconf_info(mac="ad4c")
|
||||
)
|
||||
assert ergebnis["type"] is FlowResultType.ABORT
|
||||
assert ergebnis["reason"] == "already_configured"
|
||||
assert eintrag.unique_id == MAC_K1Y
|
||||
|
||||
|
||||
async def test_mdns_mit_verkuerzter_mac_bleibt_bei_zwei_treffern_unentschieden(
|
||||
hass: HomeAssistant, mock_client: MagicMock
|
||||
) -> None:
|
||||
"""Vier Hex-Stellen sind nicht eindeutig.
|
||||
|
||||
Enden zwei eingerichtete Geraete gleich, darf keines davon stillschweigend
|
||||
auf die neue Adresse umgeschrieben werden - dann wird gefragt.
|
||||
"""
|
||||
erster = bestehender_eintrag(hass, "192.168.2.5")
|
||||
zweiter = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
title="Zwilling",
|
||||
unique_id="aa:bb:cc:dd:ad:4c",
|
||||
data={CONF_HOST: "192.168.2.6", CONF_TOKEN: TOKEN},
|
||||
)
|
||||
zweiter.add_to_hass(hass)
|
||||
|
||||
ergebnis = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_ZEROCONF}, data=zeroconf_info(mac="ad4c")
|
||||
)
|
||||
assert ergebnis["type"] is FlowResultType.FORM
|
||||
assert erster.data[CONF_HOST] == "192.168.2.5"
|
||||
assert zweiter.data[CONF_HOST] == "192.168.2.6"
|
||||
|
||||
Reference in New Issue
Block a user