* First step of an EnOcean integration refactoring, including code reorganisation and support of a setup config flow * Moved title to root of strings file * Fixed pre-commit checks failures * Fixed linter errors * Updated formatted string format in logs * Removed leftover comment * Multiple changes after PR change requests. Using an import flow for yaml config, removed unnecessary logs, added proper unload in __init__ and EnOceanDongle Replaced config state machine by several flows. Serial port validity check done in the EnOceanDongle class asynchronously, removed unique ID from config flow Multiple cosmetic changes * Multiple changes after PR change requests * Added variable to store default value, as setdefault was caught returning None when the empty dict literal was passed as an argument * Literal used directly * Added tests for EnOcean config flows, changed static methods to bundle methods for bundle * Updated variable name * Added missing mock to test, replaced repeated magic strings by constants * Changed imports to avoid an unused import warning from pylint on DOMAIN * Adding pylint exception for unused import * Added proper propagation of setup and unload to platforms, removed dead code, some syntax changes * Removed setup_entry forwarding as the entities can only be configured using yaml * Removed forwarding of unload * Enabled code coverage for config flow only * Clean up coveragerc Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
"""Support for EnOcean devices."""
|
|
|
|
import voluptuous as vol
|
|
|
|
from homeassistant import config_entries, core
|
|
from homeassistant.config_entries import SOURCE_IMPORT
|
|
from homeassistant.const import CONF_DEVICE
|
|
import homeassistant.helpers.config_validation as cv
|
|
|
|
from .const import DATA_ENOCEAN, DOMAIN, ENOCEAN_DONGLE
|
|
from .dongle import EnOceanDongle
|
|
|
|
CONFIG_SCHEMA = vol.Schema(
|
|
{DOMAIN: vol.Schema({vol.Required(CONF_DEVICE): cv.string})}, extra=vol.ALLOW_EXTRA
|
|
)
|
|
|
|
|
|
async def async_setup(hass, config):
|
|
"""Set up the EnOcean component."""
|
|
# support for text-based configuration (legacy)
|
|
if DOMAIN not in config:
|
|
return True
|
|
|
|
if hass.config_entries.async_entries(DOMAIN):
|
|
# We can only have one dongle. If there is already one in the config,
|
|
# there is no need to import the yaml based config.
|
|
return True
|
|
|
|
hass.async_create_task(
|
|
hass.config_entries.flow.async_init(
|
|
DOMAIN, context={"source": SOURCE_IMPORT}, data=config[DOMAIN]
|
|
)
|
|
)
|
|
|
|
return True
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: core.HomeAssistant, config_entry: config_entries.ConfigEntry
|
|
):
|
|
"""Set up an EnOcean dongle for the given entry."""
|
|
enocean_data = hass.data.setdefault(DATA_ENOCEAN, {})
|
|
usb_dongle = EnOceanDongle(hass, config_entry.data[CONF_DEVICE])
|
|
await usb_dongle.async_setup()
|
|
enocean_data[ENOCEAN_DONGLE] = usb_dongle
|
|
|
|
return True
|
|
|
|
|
|
async def async_unload_entry(hass, config_entry):
|
|
"""Unload ENOcean config entry."""
|
|
|
|
enocean_dongle = hass.data[DATA_ENOCEAN][ENOCEAN_DONGLE]
|
|
enocean_dongle.unload()
|
|
hass.data.pop(DATA_ENOCEAN)
|
|
|
|
return True
|