mirror of
https://github.com/home-assistant/core.git
synced 2025-07-17 02:07:09 +00:00
Move Magic Home/flux_led coordinator to its own module (#62324)
This commit is contained in:
parent
9128693e71
commit
2f4c29cf1f
@ -14,11 +14,9 @@ from homeassistant.const import CONF_HOST, EVENT_HOMEASSISTANT_STARTED, Platform
|
|||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.exceptions import ConfigEntryNotReady
|
from homeassistant.exceptions import ConfigEntryNotReady
|
||||||
from homeassistant.helpers import device_registry as dr
|
from homeassistant.helpers import device_registry as dr
|
||||||
from homeassistant.helpers.debounce import Debouncer
|
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_send
|
from homeassistant.helpers.dispatcher import async_dispatcher_send
|
||||||
from homeassistant.helpers.event import async_track_time_interval
|
from homeassistant.helpers.event import async_track_time_interval
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
DISCOVER_SCAN_TIMEOUT,
|
DISCOVER_SCAN_TIMEOUT,
|
||||||
@ -28,6 +26,7 @@ from .const import (
|
|||||||
SIGNAL_STATE_UPDATED,
|
SIGNAL_STATE_UPDATED,
|
||||||
STARTUP_SCAN_TIMEOUT,
|
STARTUP_SCAN_TIMEOUT,
|
||||||
)
|
)
|
||||||
|
from .coordinator import FluxLedUpdateCoordinator
|
||||||
from .discovery import (
|
from .discovery import (
|
||||||
async_clear_discovery_cache,
|
async_clear_discovery_cache,
|
||||||
async_discover_device,
|
async_discover_device,
|
||||||
@ -134,32 +133,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
del hass.data[DOMAIN][entry.entry_id]
|
del hass.data[DOMAIN][entry.entry_id]
|
||||||
await device.async_stop()
|
await device.async_stop()
|
||||||
return unload_ok
|
return unload_ok
|
||||||
|
|
||||||
|
|
||||||
class FluxLedUpdateCoordinator(DataUpdateCoordinator):
|
|
||||||
"""DataUpdateCoordinator to gather data for a specific flux_led device."""
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self, hass: HomeAssistant, device: AIOWifiLedBulb, entry: ConfigEntry
|
|
||||||
) -> None:
|
|
||||||
"""Initialize DataUpdateCoordinator to gather data for specific device."""
|
|
||||||
self.device = device
|
|
||||||
self.entry = entry
|
|
||||||
super().__init__(
|
|
||||||
hass,
|
|
||||||
_LOGGER,
|
|
||||||
name=self.device.ipaddr,
|
|
||||||
update_interval=timedelta(seconds=10),
|
|
||||||
# We don't want an immediate refresh since the device
|
|
||||||
# takes a moment to reflect the state change
|
|
||||||
request_refresh_debouncer=Debouncer(
|
|
||||||
hass, _LOGGER, cooldown=REQUEST_REFRESH_DELAY, immediate=False
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
async def _async_update_data(self) -> None:
|
|
||||||
"""Fetch all device and sensor data from api."""
|
|
||||||
try:
|
|
||||||
await self.device.async_update()
|
|
||||||
except FLUX_LED_EXCEPTIONS as ex:
|
|
||||||
raise UpdateFailed(ex) from ex
|
|
||||||
|
49
homeassistant/components/flux_led/coordinator.py
Normal file
49
homeassistant/components/flux_led/coordinator.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
"""The Flux LED/MagicLight integration coordinator."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from datetime import timedelta
|
||||||
|
import logging
|
||||||
|
from typing import Final
|
||||||
|
|
||||||
|
from flux_led.aio import AIOWifiLedBulb
|
||||||
|
|
||||||
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.helpers.debounce import Debouncer
|
||||||
|
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||||
|
|
||||||
|
from .const import FLUX_LED_EXCEPTIONS
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
REQUEST_REFRESH_DELAY: Final = 1.5
|
||||||
|
|
||||||
|
|
||||||
|
class FluxLedUpdateCoordinator(DataUpdateCoordinator):
|
||||||
|
"""DataUpdateCoordinator to gather data for a specific flux_led device."""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self, hass: HomeAssistant, device: AIOWifiLedBulb, entry: ConfigEntry
|
||||||
|
) -> None:
|
||||||
|
"""Initialize DataUpdateCoordinator to gather data for specific device."""
|
||||||
|
self.device = device
|
||||||
|
self.entry = entry
|
||||||
|
super().__init__(
|
||||||
|
hass,
|
||||||
|
_LOGGER,
|
||||||
|
name=self.device.ipaddr,
|
||||||
|
update_interval=timedelta(seconds=10),
|
||||||
|
# We don't want an immediate refresh since the device
|
||||||
|
# takes a moment to reflect the state change
|
||||||
|
request_refresh_debouncer=Debouncer(
|
||||||
|
hass, _LOGGER, cooldown=REQUEST_REFRESH_DELAY, immediate=False
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
async def _async_update_data(self) -> None:
|
||||||
|
"""Fetch all device and sensor data from api."""
|
||||||
|
try:
|
||||||
|
await self.device.async_update()
|
||||||
|
except FLUX_LED_EXCEPTIONS as ex:
|
||||||
|
raise UpdateFailed(ex) from ex
|
@ -14,8 +14,8 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
|||||||
from homeassistant.helpers.entity import DeviceInfo, Entity
|
from homeassistant.helpers.entity import DeviceInfo, Entity
|
||||||
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||||
|
|
||||||
from . import FluxLedUpdateCoordinator
|
|
||||||
from .const import CONF_MINOR_VERSION, CONF_MODEL, SIGNAL_STATE_UPDATED
|
from .const import CONF_MINOR_VERSION, CONF_MODEL, SIGNAL_STATE_UPDATED
|
||||||
|
from .coordinator import FluxLedUpdateCoordinator
|
||||||
|
|
||||||
|
|
||||||
def _async_device_info(
|
def _async_device_info(
|
||||||
|
@ -48,7 +48,6 @@ from homeassistant.util.color import (
|
|||||||
color_temperature_mired_to_kelvin,
|
color_temperature_mired_to_kelvin,
|
||||||
)
|
)
|
||||||
|
|
||||||
from . import FluxLedUpdateCoordinator
|
|
||||||
from .const import (
|
from .const import (
|
||||||
CONF_AUTOMATIC_ADD,
|
CONF_AUTOMATIC_ADD,
|
||||||
CONF_COLORS,
|
CONF_COLORS,
|
||||||
@ -69,6 +68,7 @@ from .const import (
|
|||||||
TRANSITION_JUMP,
|
TRANSITION_JUMP,
|
||||||
TRANSITION_STROBE,
|
TRANSITION_STROBE,
|
||||||
)
|
)
|
||||||
|
from .coordinator import FluxLedUpdateCoordinator
|
||||||
from .entity import FluxOnOffEntity
|
from .entity import FluxOnOffEntity
|
||||||
from .util import _effect_brightness, _flux_color_mode_to_hass, _hass_color_modes
|
from .util import _effect_brightness, _flux_color_mode_to_hass, _hass_color_modes
|
||||||
|
|
||||||
|
@ -11,8 +11,8 @@ from homeassistant.exceptions import HomeAssistantError
|
|||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||||
|
|
||||||
from . import FluxLedUpdateCoordinator
|
|
||||||
from .const import DOMAIN, EFFECT_SPEED_SUPPORT_MODES
|
from .const import DOMAIN, EFFECT_SPEED_SUPPORT_MODES
|
||||||
|
from .coordinator import FluxLedUpdateCoordinator
|
||||||
from .entity import FluxEntity
|
from .entity import FluxEntity
|
||||||
from .util import _effect_brightness, _hass_color_modes
|
from .util import _effect_brightness, _hass_color_modes
|
||||||
|
|
||||||
|
@ -14,13 +14,13 @@ from homeassistant.helpers.entity import EntityCategory
|
|||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||||
|
|
||||||
from . import FluxLedUpdateCoordinator
|
|
||||||
from .const import (
|
from .const import (
|
||||||
CONF_REMOTE_ACCESS_ENABLED,
|
CONF_REMOTE_ACCESS_ENABLED,
|
||||||
CONF_REMOTE_ACCESS_HOST,
|
CONF_REMOTE_ACCESS_HOST,
|
||||||
CONF_REMOTE_ACCESS_PORT,
|
CONF_REMOTE_ACCESS_PORT,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
)
|
)
|
||||||
|
from .coordinator import FluxLedUpdateCoordinator
|
||||||
from .discovery import async_clear_discovery_cache
|
from .discovery import async_clear_discovery_cache
|
||||||
from .entity import FluxBaseEntity, FluxOnOffEntity
|
from .entity import FluxBaseEntity, FluxOnOffEntity
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user