73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
"""The Gree Climate integration."""
|
|
import asyncio
|
|
import logging
|
|
|
|
from homeassistant.components.climate import DOMAIN as CLIMATE_DOMAIN
|
|
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from .bridge import CannotConnect, DeviceDataUpdateCoordinator, DeviceHelper
|
|
from .const import COORDINATOR, DOMAIN
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
async def async_setup(hass: HomeAssistant, config: dict):
|
|
"""Set up the Gree Climate component."""
|
|
hass.data[DOMAIN] = {}
|
|
return True
|
|
|
|
|
|
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
|
|
"""Set up Gree Climate from a config entry."""
|
|
devices = []
|
|
|
|
# First we'll grab as many devices as we can find on the network
|
|
# it's necessary to bind static devices anyway
|
|
_LOGGER.debug("Scanning network for Gree devices")
|
|
|
|
for device_info in await DeviceHelper.find_devices():
|
|
try:
|
|
device = await DeviceHelper.try_bind_device(device_info)
|
|
except CannotConnect:
|
|
_LOGGER.error("Unable to bind to gree device: %s", device_info)
|
|
continue
|
|
|
|
_LOGGER.debug(
|
|
"Adding Gree device at %s:%i (%s)",
|
|
device.device_info.ip,
|
|
device.device_info.port,
|
|
device.device_info.name,
|
|
)
|
|
devices.append(device)
|
|
|
|
coordinators = [DeviceDataUpdateCoordinator(hass, d) for d in devices]
|
|
await asyncio.gather(*[x.async_refresh() for x in coordinators])
|
|
|
|
hass.data[DOMAIN][COORDINATOR] = coordinators
|
|
hass.async_create_task(
|
|
hass.config_entries.async_forward_entry_setup(entry, CLIMATE_DOMAIN)
|
|
)
|
|
hass.async_create_task(
|
|
hass.config_entries.async_forward_entry_setup(entry, SWITCH_DOMAIN)
|
|
)
|
|
|
|
return True
|
|
|
|
|
|
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
|
|
"""Unload a config entry."""
|
|
results = asyncio.gather(
|
|
hass.config_entries.async_forward_entry_unload(entry, CLIMATE_DOMAIN),
|
|
hass.config_entries.async_forward_entry_unload(entry, SWITCH_DOMAIN),
|
|
)
|
|
|
|
unload_ok = all(await results)
|
|
if unload_ok:
|
|
hass.data[DOMAIN].pop("devices", None)
|
|
hass.data[DOMAIN].pop(CLIMATE_DOMAIN, None)
|
|
hass.data[DOMAIN].pop(SWITCH_DOMAIN, None)
|
|
|
|
return unload_ok
|