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:
Michael Sauer
2026-09-26 01:05:25 +02:00
parent 616515ef77
commit d1db07f522
2 changed files with 70 additions and 2 deletions
+43
View File
@@ -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"