Explain why a LED BLE device could not be found (#172764)

This commit is contained in:
J. Nick Koston
2026-06-01 20:11:09 +01:00
committed by GitHub
parent cad177cdff
commit 1865c16041
3 changed files with 58 additions and 2 deletions
+12 -2
View File
@@ -5,12 +5,13 @@ import asyncio
from led_ble import LEDBLE
from homeassistant.components import bluetooth
from homeassistant.components.bluetooth import BluetoothReachabilityIntent
from homeassistant.components.bluetooth.match import ADDRESS, BluetoothCallbackMatcher
from homeassistant.const import CONF_ADDRESS, EVENT_HOMEASSISTANT_STOP, Platform
from homeassistant.core import Event, HomeAssistant, callback
from homeassistant.exceptions import ConfigEntryNotReady
from .const import DEVICE_TIMEOUT
from .const import DEVICE_TIMEOUT, DOMAIN
from .coordinator import LEDBLEConfigEntry, LEDBLECoordinator, LEDBLEData
PLATFORMS: list[Platform] = [Platform.LIGHT]
@@ -22,7 +23,16 @@ async def async_setup_entry(hass: HomeAssistant, entry: LEDBLEConfigEntry) -> bo
ble_device = bluetooth.async_ble_device_from_address(hass, address.upper(), True)
if not ble_device:
raise ConfigEntryNotReady(
f"Could not find LED BLE device with address {address}"
translation_domain=DOMAIN,
translation_key="device_not_found",
translation_placeholders={
"address": address,
"reason": bluetooth.async_address_reachability_diagnostics(
hass,
address.upper(),
BluetoothReachabilityIntent.CONNECTION,
),
},
)
led_ble = LEDBLE(ble_device)
@@ -18,5 +18,10 @@
}
}
}
},
"exceptions": {
"device_not_found": {
"message": "Could not find LED BLE device with address {address}: {reason}"
}
}
}
+41
View File
@@ -0,0 +1,41 @@
"""Test the LED BLE integration init."""
from unittest.mock import patch
import pytest
from homeassistant.components.led_ble.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import CONF_ADDRESS
from homeassistant.core import HomeAssistant
from . import LED_BLE_DISCOVERY_INFO
from tests.common import MockConfigEntry
async def test_setup_retries_when_device_not_found(
hass: HomeAssistant,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test setup is retried with a diagnostic reason when the device is missing."""
entry = MockConfigEntry(
domain=DOMAIN,
unique_id=LED_BLE_DISCOVERY_INFO.address,
data={CONF_ADDRESS: LED_BLE_DISCOVERY_INFO.address},
)
entry.add_to_hass(hass)
with patch(
"homeassistant.components.led_ble.bluetooth."
"async_address_reachability_diagnostics",
return_value="mock reachability reason",
):
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
assert entry.state is ConfigEntryState.SETUP_RETRY
assert (
"Could not find LED BLE device with address "
f"{LED_BLE_DISCOVERY_INFO.address}: mock reachability reason" in caplog.text
)