Add configuration url to nexia (#57740)

This commit is contained in:
J. Nick Koston 2021-10-14 17:52:26 -10:00 committed by GitHub
parent e7ac734d01
commit bcff2b7858
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 56 additions and 43 deletions

View file

@ -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)

View file

@ -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():

View file

@ -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()

View file

@ -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"

View 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)

View file

@ -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):

View file

@ -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

View file

@ -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