mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Add configuration url to nexia (#57740)
This commit is contained in:
parent
e7ac734d01
commit
bcff2b7858
@ -1,5 +1,4 @@
|
|||||||
"""Support for Nexia / Trane XL Thermostats."""
|
"""Support for Nexia / Trane XL Thermostats."""
|
||||||
from datetime import timedelta
|
|
||||||
from functools import partial
|
from functools import partial
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@ -12,17 +11,15 @@ from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.exceptions import ConfigEntryNotReady
|
from homeassistant.exceptions import ConfigEntryNotReady
|
||||||
import homeassistant.helpers.config_validation as cv
|
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
|
from .util import is_invalid_auth_code
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
CONFIG_SCHEMA = cv.deprecated(DOMAIN)
|
CONFIG_SCHEMA = cv.deprecated(DOMAIN)
|
||||||
|
|
||||||
DEFAULT_UPDATE_RATE = 120
|
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
"""Configure the base Nexia device for Home Assistant."""
|
"""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)
|
_LOGGER.error("HTTP error from Nexia service: %s", http_ex)
|
||||||
raise ConfigEntryNotReady from http_ex
|
raise ConfigEntryNotReady from http_ex
|
||||||
|
|
||||||
async def _async_update_data():
|
coordinator = NexiaDataUpdateCoordinator(hass, nexia_home)
|
||||||
"""Fetch data from API endpoint."""
|
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
|
||||||
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,
|
|
||||||
}
|
|
||||||
|
|
||||||
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
|
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
|
||||||
|
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
"""Support for Nexia / Trane XL Thermostats."""
|
"""Support for Nexia / Trane XL Thermostats."""
|
||||||
|
|
||||||
from homeassistant.components.binary_sensor import BinarySensorEntity
|
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
|
from .entity import NexiaThermostatEntity
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(hass, config_entry, async_add_entities):
|
async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||||
"""Set up sensors for a Nexia device."""
|
"""Set up sensors for a Nexia device."""
|
||||||
|
coordinator: NexiaDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
|
||||||
nexia_data = hass.data[DOMAIN][config_entry.entry_id]
|
nexia_home = coordinator.nexia_home
|
||||||
nexia_home = nexia_data[NEXIA_DEVICE]
|
|
||||||
coordinator = nexia_data[UPDATE_COORDINATOR]
|
|
||||||
|
|
||||||
entities = []
|
entities = []
|
||||||
for thermostat_id in nexia_home.get_thermostat_ids():
|
for thermostat_id in nexia_home.get_thermostat_ids():
|
||||||
|
@ -47,11 +47,10 @@ from .const import (
|
|||||||
ATTR_HUMIDIFY_SUPPORTED,
|
ATTR_HUMIDIFY_SUPPORTED,
|
||||||
ATTR_ZONE_STATUS,
|
ATTR_ZONE_STATUS,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
NEXIA_DEVICE,
|
|
||||||
SIGNAL_THERMOSTAT_UPDATE,
|
SIGNAL_THERMOSTAT_UPDATE,
|
||||||
SIGNAL_ZONE_UPDATE,
|
SIGNAL_ZONE_UPDATE,
|
||||||
UPDATE_COORDINATOR,
|
|
||||||
)
|
)
|
||||||
|
from .coordinator import NexiaDataUpdateCoordinator
|
||||||
from .entity import NexiaThermostatZoneEntity
|
from .entity import NexiaThermostatZoneEntity
|
||||||
from .util import percent_conv
|
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):
|
async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||||
"""Set up climate for a Nexia device."""
|
"""Set up climate for a Nexia device."""
|
||||||
|
coordinator: NexiaDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
|
||||||
nexia_data = hass.data[DOMAIN][config_entry.entry_id]
|
nexia_home = coordinator.nexia_home
|
||||||
nexia_home = nexia_data[NEXIA_DEVICE]
|
|
||||||
coordinator = nexia_data[UPDATE_COORDINATOR]
|
|
||||||
|
|
||||||
platform = entity_platform.async_get_current_platform()
|
platform = entity_platform.async_get_current_platform()
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ NOTIFICATION_TITLE = "Nexia Setup"
|
|||||||
|
|
||||||
CONF_BRAND = "brand"
|
CONF_BRAND = "brand"
|
||||||
|
|
||||||
NEXIA_DEVICE = "device"
|
|
||||||
NEXIA_SCAN_INTERVAL = "scan_interval"
|
NEXIA_SCAN_INTERVAL = "scan_interval"
|
||||||
|
|
||||||
DOMAIN = "nexia"
|
DOMAIN = "nexia"
|
||||||
@ -25,7 +24,6 @@ ATTR_DEHUMIDIFY_SUPPORTED = "dehumidify_supported"
|
|||||||
ATTR_HUMIDIFY_SETPOINT = "humidify_setpoint"
|
ATTR_HUMIDIFY_SETPOINT = "humidify_setpoint"
|
||||||
ATTR_DEHUMIDIFY_SETPOINT = "dehumidify_setpoint"
|
ATTR_DEHUMIDIFY_SETPOINT = "dehumidify_setpoint"
|
||||||
|
|
||||||
UPDATE_COORDINATOR = "update_coordinator"
|
|
||||||
|
|
||||||
MANUFACTURER = "Trane"
|
MANUFACTURER = "Trane"
|
||||||
|
|
||||||
|
36
homeassistant/components/nexia/coordinator.py
Normal file
36
homeassistant/components/nexia/coordinator.py
Normal file
@ -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)
|
@ -57,6 +57,7 @@ class NexiaThermostatEntity(NexiaEntity):
|
|||||||
"model": self._thermostat.get_model(),
|
"model": self._thermostat.get_model(),
|
||||||
"sw_version": self._thermostat.get_firmware(),
|
"sw_version": self._thermostat.get_firmware(),
|
||||||
"manufacturer": MANUFACTURER,
|
"manufacturer": MANUFACTURER,
|
||||||
|
"configuration_url": self.coordinator.nexia_home.root_url,
|
||||||
}
|
}
|
||||||
|
|
||||||
async def async_added_to_hass(self):
|
async def async_added_to_hass(self):
|
||||||
|
@ -5,7 +5,8 @@ from typing import Any
|
|||||||
from homeassistant.components.scene import Scene
|
from homeassistant.components.scene import Scene
|
||||||
from homeassistant.helpers.event import async_call_later
|
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
|
from .entity import NexiaEntity
|
||||||
|
|
||||||
SCENE_ACTIVATION_TIME = 5
|
SCENE_ACTIVATION_TIME = 5
|
||||||
@ -13,10 +14,9 @@ SCENE_ACTIVATION_TIME = 5
|
|||||||
|
|
||||||
async def async_setup_entry(hass, config_entry, async_add_entities):
|
async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||||
"""Set up automations for a Nexia device."""
|
"""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 = []
|
entities = []
|
||||||
|
|
||||||
# Automation switches
|
# Automation switches
|
||||||
|
@ -11,7 +11,8 @@ from homeassistant.const import (
|
|||||||
TEMP_FAHRENHEIT,
|
TEMP_FAHRENHEIT,
|
||||||
)
|
)
|
||||||
|
|
||||||
from .const import DOMAIN, NEXIA_DEVICE, UPDATE_COORDINATOR
|
from .const import DOMAIN
|
||||||
|
from .coordinator import NexiaDataUpdateCoordinator
|
||||||
from .entity import NexiaThermostatEntity, NexiaThermostatZoneEntity
|
from .entity import NexiaThermostatEntity, NexiaThermostatZoneEntity
|
||||||
from .util import percent_conv
|
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):
|
async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||||
"""Set up sensors for a Nexia device."""
|
"""Set up sensors for a Nexia device."""
|
||||||
|
|
||||||
nexia_data = hass.data[DOMAIN][config_entry.entry_id]
|
coordinator: NexiaDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
|
||||||
nexia_home = nexia_data[NEXIA_DEVICE]
|
nexia_home = coordinator.nexia_home
|
||||||
coordinator = nexia_data[UPDATE_COORDINATOR]
|
|
||||||
entities = []
|
entities = []
|
||||||
|
|
||||||
# Thermostat / System Sensors
|
# Thermostat / System Sensors
|
||||||
|
Loading…
x
Reference in New Issue
Block a user