diff --git a/homeassistant/components/nexia/__init__.py b/homeassistant/components/nexia/__init__.py index 6059a639019..827bff50d34 100644 --- a/homeassistant/components/nexia/__init__.py +++ b/homeassistant/components/nexia/__init__.py @@ -1,5 +1,4 @@ """Support for Nexia / Trane XL Thermostats.""" -from datetime import timedelta from functools import partial import logging @@ -12,17 +11,15 @@ from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady import homeassistant.helpers.config_validation as cv -from homeassistant.helpers.update_coordinator import DataUpdateCoordinator -from .const import CONF_BRAND, DOMAIN, NEXIA_DEVICE, PLATFORMS, UPDATE_COORDINATOR +from .const import CONF_BRAND, DOMAIN, PLATFORMS +from .coordinator import NexiaDataUpdateCoordinator from .util import is_invalid_auth_code _LOGGER = logging.getLogger(__name__) CONFIG_SCHEMA = cv.deprecated(DOMAIN) -DEFAULT_UPDATE_RATE = 120 - async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Configure the base Nexia device for Home Assistant.""" @@ -57,23 +54,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: _LOGGER.error("HTTP error from Nexia service: %s", http_ex) raise ConfigEntryNotReady from http_ex - async def _async_update_data(): - """Fetch data from API endpoint.""" - return await hass.async_add_executor_job(nexia_home.update) - - coordinator = DataUpdateCoordinator( - hass, - _LOGGER, - name="Nexia update", - update_method=_async_update_data, - update_interval=timedelta(seconds=DEFAULT_UPDATE_RATE), - ) - - hass.data.setdefault(DOMAIN, {}) - hass.data[DOMAIN][entry.entry_id] = { - NEXIA_DEVICE: nexia_home, - UPDATE_COORDINATOR: coordinator, - } + coordinator = NexiaDataUpdateCoordinator(hass, nexia_home) + hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator hass.config_entries.async_setup_platforms(entry, PLATFORMS) diff --git a/homeassistant/components/nexia/binary_sensor.py b/homeassistant/components/nexia/binary_sensor.py index 9adf47ee2c5..63fb98c9a0b 100644 --- a/homeassistant/components/nexia/binary_sensor.py +++ b/homeassistant/components/nexia/binary_sensor.py @@ -1,17 +1,16 @@ """Support for Nexia / Trane XL Thermostats.""" from homeassistant.components.binary_sensor import BinarySensorEntity +from homeassistant.components.nexia.coordinator import NexiaDataUpdateCoordinator -from .const import DOMAIN, NEXIA_DEVICE, UPDATE_COORDINATOR +from .const import DOMAIN from .entity import NexiaThermostatEntity async def async_setup_entry(hass, config_entry, async_add_entities): """Set up sensors for a Nexia device.""" - - nexia_data = hass.data[DOMAIN][config_entry.entry_id] - nexia_home = nexia_data[NEXIA_DEVICE] - coordinator = nexia_data[UPDATE_COORDINATOR] + coordinator: NexiaDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] + nexia_home = coordinator.nexia_home entities = [] for thermostat_id in nexia_home.get_thermostat_ids(): diff --git a/homeassistant/components/nexia/climate.py b/homeassistant/components/nexia/climate.py index e27a1816a8e..68fafab1718 100644 --- a/homeassistant/components/nexia/climate.py +++ b/homeassistant/components/nexia/climate.py @@ -47,11 +47,10 @@ from .const import ( ATTR_HUMIDIFY_SUPPORTED, ATTR_ZONE_STATUS, DOMAIN, - NEXIA_DEVICE, SIGNAL_THERMOSTAT_UPDATE, SIGNAL_ZONE_UPDATE, - UPDATE_COORDINATOR, ) +from .coordinator import NexiaDataUpdateCoordinator from .entity import NexiaThermostatZoneEntity from .util import percent_conv @@ -90,10 +89,8 @@ NEXIA_TO_HA_HVAC_MODE_MAP = { async def async_setup_entry(hass, config_entry, async_add_entities): """Set up climate for a Nexia device.""" - - nexia_data = hass.data[DOMAIN][config_entry.entry_id] - nexia_home = nexia_data[NEXIA_DEVICE] - coordinator = nexia_data[UPDATE_COORDINATOR] + coordinator: NexiaDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] + nexia_home = coordinator.nexia_home platform = entity_platform.async_get_current_platform() diff --git a/homeassistant/components/nexia/const.py b/homeassistant/components/nexia/const.py index 22b24c3b764..4b076805e71 100644 --- a/homeassistant/components/nexia/const.py +++ b/homeassistant/components/nexia/const.py @@ -9,7 +9,6 @@ NOTIFICATION_TITLE = "Nexia Setup" CONF_BRAND = "brand" -NEXIA_DEVICE = "device" NEXIA_SCAN_INTERVAL = "scan_interval" DOMAIN = "nexia" @@ -25,7 +24,6 @@ ATTR_DEHUMIDIFY_SUPPORTED = "dehumidify_supported" ATTR_HUMIDIFY_SETPOINT = "humidify_setpoint" ATTR_DEHUMIDIFY_SETPOINT = "dehumidify_setpoint" -UPDATE_COORDINATOR = "update_coordinator" MANUFACTURER = "Trane" diff --git a/homeassistant/components/nexia/coordinator.py b/homeassistant/components/nexia/coordinator.py new file mode 100644 index 00000000000..7f92ca9354b --- /dev/null +++ b/homeassistant/components/nexia/coordinator.py @@ -0,0 +1,36 @@ +"""Component to embed TP-Link smart home devices.""" +from __future__ import annotations + +from datetime import timedelta +import logging + +from nexia.home import NexiaHome + +from homeassistant.core import HomeAssistant +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator + +_LOGGER = logging.getLogger(__name__) + +DEFAULT_UPDATE_RATE = 120 + + +class NexiaDataUpdateCoordinator(DataUpdateCoordinator): + """DataUpdateCoordinator for nexia homes.""" + + def __init__( + self, + hass: HomeAssistant, + nexia_home: NexiaHome, + ) -> None: + """Initialize DataUpdateCoordinator for the nexia home.""" + self.nexia_home = nexia_home + super().__init__( + hass, + _LOGGER, + name="Nexia update", + update_interval=timedelta(seconds=DEFAULT_UPDATE_RATE), + ) + + async def _async_update_data(self) -> None: + """Fetch data from API endpoint.""" + return await self.hass.async_add_executor_job(self.nexia_home.update) diff --git a/homeassistant/components/nexia/entity.py b/homeassistant/components/nexia/entity.py index fc69c7ef389..87e06fb05cf 100644 --- a/homeassistant/components/nexia/entity.py +++ b/homeassistant/components/nexia/entity.py @@ -57,6 +57,7 @@ class NexiaThermostatEntity(NexiaEntity): "model": self._thermostat.get_model(), "sw_version": self._thermostat.get_firmware(), "manufacturer": MANUFACTURER, + "configuration_url": self.coordinator.nexia_home.root_url, } async def async_added_to_hass(self): diff --git a/homeassistant/components/nexia/scene.py b/homeassistant/components/nexia/scene.py index 495a8fb4d3a..3eb64fc8d0f 100644 --- a/homeassistant/components/nexia/scene.py +++ b/homeassistant/components/nexia/scene.py @@ -5,7 +5,8 @@ from typing import Any from homeassistant.components.scene import Scene from homeassistant.helpers.event import async_call_later -from .const import ATTR_DESCRIPTION, DOMAIN, NEXIA_DEVICE, UPDATE_COORDINATOR +from .const import ATTR_DESCRIPTION, DOMAIN +from .coordinator import NexiaDataUpdateCoordinator from .entity import NexiaEntity SCENE_ACTIVATION_TIME = 5 @@ -13,10 +14,9 @@ SCENE_ACTIVATION_TIME = 5 async def async_setup_entry(hass, config_entry, async_add_entities): """Set up automations for a Nexia device.""" + coordinator: NexiaDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] + nexia_home = coordinator.nexia_home - nexia_data = hass.data[DOMAIN][config_entry.entry_id] - nexia_home = nexia_data[NEXIA_DEVICE] - coordinator = nexia_data[UPDATE_COORDINATOR] entities = [] # Automation switches diff --git a/homeassistant/components/nexia/sensor.py b/homeassistant/components/nexia/sensor.py index 6e44b8c9883..15479df310b 100644 --- a/homeassistant/components/nexia/sensor.py +++ b/homeassistant/components/nexia/sensor.py @@ -11,7 +11,8 @@ from homeassistant.const import ( TEMP_FAHRENHEIT, ) -from .const import DOMAIN, NEXIA_DEVICE, UPDATE_COORDINATOR +from .const import DOMAIN +from .coordinator import NexiaDataUpdateCoordinator from .entity import NexiaThermostatEntity, NexiaThermostatZoneEntity from .util import percent_conv @@ -19,9 +20,8 @@ from .util import percent_conv async def async_setup_entry(hass, config_entry, async_add_entities): """Set up sensors for a Nexia device.""" - nexia_data = hass.data[DOMAIN][config_entry.entry_id] - nexia_home = nexia_data[NEXIA_DEVICE] - coordinator = nexia_data[UPDATE_COORDINATOR] + coordinator: NexiaDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] + nexia_home = coordinator.nexia_home entities = [] # Thermostat / System Sensors