Fix yeelight name changing to ip address if discovery fails (#60967)

This commit is contained in:
J. Nick Koston 2021-12-03 21:41:58 -10:00 committed by GitHub
parent b8071c688b
commit 10e669e69e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 2 deletions

View File

@ -244,7 +244,7 @@ async def _async_get_device(
# Set up device
bulb = AsyncBulb(host, model=model or None)
device = YeelightDevice(hass, host, entry.options, bulb)
device = YeelightDevice(hass, host, {**entry.options, **entry.data}, bulb)
# start listening for local pushes
await device.bulb.async_listen(device.async_update_callback)

View File

@ -7,7 +7,7 @@ import logging
from yeelight import BulbException
from yeelight.aio import KEY_CONNECTED
from homeassistant.const import CONF_NAME
from homeassistant.const import CONF_ID, CONF_NAME
from homeassistant.core import callback
from homeassistant.helpers.dispatcher import async_dispatcher_send
from homeassistant.helpers.event import async_call_later
@ -199,6 +199,8 @@ class YeelightDevice:
elif self.capabilities:
# Generate name from model and id when capabilities is available
self._name = _async_unique_name(self.capabilities)
elif self.model and (id_ := self._config.get(CONF_ID)):
self._name = f"Yeelight {async_format_model_id(self.model, id_)}"
else:
self._name = self._host # Default name is host

View File

@ -588,3 +588,25 @@ async def test_non_oserror_exception_on_first_update(
await hass.async_block_till_done()
assert hass.states.get("light.test_name").state != STATE_UNAVAILABLE
async def test_async_setup_with_discovery_not_working(hass: HomeAssistant):
"""Test we can setup even if discovery is broken."""
config_entry = MockConfigEntry(
domain=DOMAIN,
data={CONF_HOST: "127.0.0.1", CONF_ID: ID},
options={},
unique_id=ID,
)
config_entry.add_to_hass(hass)
with _patch_discovery(
no_device=True
), _patch_discovery_timeout(), _patch_discovery_interval(), patch(
f"{MODULE}.AsyncBulb", return_value=_mocked_bulb()
):
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
assert config_entry.state is ConfigEntryState.LOADED
assert hass.states.get("light.yeelight_color_0x15243f").state == STATE_ON