1 """Support for testing internet speed via Speedtest.net."""
3 from __future__
import annotations
5 from functools
import partial
15 from .coordinator
import SpeedTestDataCoordinator
17 PLATFORMS = [Platform.SENSOR]
19 type SpeedTestConfigEntry = ConfigEntry[SpeedTestDataCoordinator]
23 hass: HomeAssistant, config_entry: SpeedTestConfigEntry
25 """Set up the Speedtest.net component."""
27 api = await hass.async_add_executor_job(
28 partial(speedtest.Speedtest, secure=
True)
31 except speedtest.SpeedtestException
as err:
32 raise ConfigEntryNotReady
from err
34 config_entry.runtime_data = coordinator
36 async
def _async_finish_startup(hass: HomeAssistant) ->
None:
37 """Run this only when HA has finished its startup."""
38 if config_entry.state
is ConfigEntryState.LOADED:
39 await coordinator.async_refresh()
41 await coordinator.async_config_entry_first_refresh()
46 await hass.config_entries.async_forward_entry_setups(config_entry, PLATFORMS)
47 config_entry.async_on_unload(config_entry.add_update_listener(update_listener))
53 """Unload SpeedTest Entry from config_entry."""
54 return await hass.config_entries.async_unload_platforms(config_entry, PLATFORMS)
57 async
def update_listener(hass: HomeAssistant, config_entry: ConfigEntry) ->
None:
58 """Handle options update."""
59 await hass.config_entries.async_reload(config_entry.entry_id)
None update_listener(HomeAssistant hass, ConfigEntry config_entry)
bool async_setup_entry(HomeAssistant hass, SpeedTestConfigEntry config_entry)
bool async_unload_entry(HomeAssistant hass, ConfigEntry config_entry)
CALLBACK_TYPE async_at_started(HomeAssistant hass, Callable[[HomeAssistant], Coroutine[Any, Any, None]|None] at_start_cb)