From ba0a2f9ed86a78459f84ec20ec29a351287ebf15 Mon Sep 17 00:00:00 2001 From: bittles Date: Sat, 27 Apr 2024 17:35:41 -0500 Subject: [PATCH] revert async to push minimal change update for release has StateVacuumEntity but no async, will push release like this that should work and push another release with async --- custom_components/ecovacs/__init__.py | 76 +++++++++++++-------------- custom_components/ecovacs/vacuum.py | 15 +++--- 2 files changed, 43 insertions(+), 48 deletions(-) diff --git a/custom_components/ecovacs/__init__.py b/custom_components/ecovacs/__init__.py index 039d2d9..fd5af4e 100644 --- a/custom_components/ecovacs/__init__.py +++ b/custom_components/ecovacs/__init__.py @@ -1,3 +1,4 @@ + """Support for Ecovacs Deebot vacuums.""" import random import string @@ -44,60 +45,55 @@ ECOVACS_API_DEVICEID = "".join( random.choice(string.ascii_uppercase + string.digits) for _ in range(8) ) -async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: +def setup(hass: HomeAssistant, config: ConfigType) -> bool: """Set up the Ecovacs component.""" LOGGER.debug("Creating new Ecovacs component") - def get_devices() -> list[VacBot]: - ecovacs_api = EcoVacsAPI( - ECOVACS_API_DEVICEID, - config[DOMAIN].get(CONF_USERNAME), - EcoVacsAPI.md5(config[DOMAIN].get(CONF_PASSWORD)), - config[DOMAIN].get(CONF_COUNTRY), - config[DOMAIN].get(CONF_CONTINENT), - ) - ecovacs_devices = ecovacs_api.devices() - _LOGGER.debug("Ecobot devices: %s", ecovacs_devices) - + hass.data[ECOVACS_DEVICES] = [] SERVER_ADDRESS = None - devices: list[VacBot] = [] - for device in ecovacs_devices: - _LOGGER.info( - "Discovered Ecovacs device on account: %s with nickname %s", - device.get("did"), - device.get("nick"), - ) - vacbot = VacBot( - ecovacs_api.uid, - ecovacs_api.REALM, - ecovacs_api.resource, - ecovacs_api.user_access_token, - device, - config[DOMAIN].get(CONF_CONTINENT).lower(), - config[DOMAIN].get(CONF_VERIFY_SSL), # add to class call - monitor=True, - ) + ecovacs_api = EcoVacsAPI( + ECOVACS_API_DEVICEID, + config[DOMAIN].get(CONF_USERNAME), + EcoVacsAPI.md5(config[DOMAIN].get(CONF_PASSWORD)), + config[DOMAIN].get(CONF_COUNTRY), + config[DOMAIN].get(CONF_CONTINENT), + config[DOMAIN].get(CONF_VERIFY_SSL), # add to class call + ) - devices.append(vacbot) - return devices + devices = ecovacs_api.devices() + LOGGER.debug("Ecobot devices: %s", devices) - hass.data[ECOVACS_DEVICES] = await hass.async_add_executor_job(get_devices) + for device in devices: + LOGGER.info( + "Discovered Ecovacs device on account: %s with nickname %s", + device.get("did"), + device.get("nick"), + ) + vacbot = VacBot( + ecovacs_api.uid, + ecovacs_api.REALM, + ecovacs_api.resource, + ecovacs_api.user_access_token, + device, + config[DOMAIN].get(CONF_CONTINENT).lower(), + SERVER_ADDRESS, # include server address in class, if it's null should be no effect + config[DOMAIN].get(CONF_VERIFY_SSL), # add to class call + monitor=True + ) + hass.data[ECOVACS_DEVICES].append(vacbot) - async def async_stop(event: object) -> None: + def stop(event: object) -> None: """Shut down open connections to Ecovacs XMPP server.""" - devices: list[VacBot] = hass.data[ECOVACS_DEVICES] - for device in devices: + for device in hass.data[ECOVACS_DEVICES]: LOGGER.info( "Shutting down connection to Ecovacs device %s", device.vacuum.get("did"), ) - await hass.async_add_executor_job(device.disconnect) + device.disconnect() # Listen for HA stop to disconnect. - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, async_stop) + hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop) if hass.data[ECOVACS_DEVICES]: LOGGER.debug("Starting vacuum components") - hass.async_create_task( - discovery.async_load_platform(hass, Platform.VACUUM, DOMAIN, {}, config) - ) + discovery.load_platform(hass, Platform.VACUUM, DOMAIN, {}, config) return True diff --git a/custom_components/ecovacs/vacuum.py b/custom_components/ecovacs/vacuum.py index b5376dd..50f283c 100644 --- a/custom_components/ecovacs/vacuum.py +++ b/custom_components/ecovacs/vacuum.py @@ -21,20 +21,18 @@ ATTR_ERROR = "error" ATTR_COMPONENT_PREFIX = "component_" -async def async_setup_platform( +def setup_platform( hass: HomeAssistant, config: ConfigType, - async_add_entities: AddEntitiesCallback, + add_entities: AddEntitiesCallback, discovery_info: DiscoveryInfoType | None = None, ) -> None: """Set up the Ecovacs vacuums.""" vacuums = [] - devices: list[sucks.VacBot] = hass.data[ECOVACS_DEVICES] - for device in devices: - await hass.async_add_executor_job(device.connect_and_wait_until_ready) + for device in hass.data[ECOVACS_DEVICES]: vacuums.append(EcovacsVacuum(device)) _LOGGER.debug("Adding Ecovacs Vacuums to Home Assistant: %s", vacuums) - async_add_entities(vacuums) + add_entities(vacuums, True) class EcovacsVacuum(StateVacuumEntity): @@ -58,7 +56,7 @@ class EcovacsVacuum(StateVacuumEntity): def __init__(self, device: sucks.VacBot) -> None: """Initialize the Ecovacs Vacuum.""" self.device = device - + self.device.connect_and_wait_until_ready() if self.device.vacuum.get("nick") is not None: self._attr_name = str(self.device.vacuum["nick"]) else: @@ -66,6 +64,7 @@ class EcovacsVacuum(StateVacuumEntity): self._attr_name = str(format(self.device.vacuum["did"])) self._error = None + _LOGGER.debug("Vacuum initialized: %s", self.name) async def async_added_to_hass(self) -> None: """Set up the event listeners now that hass is ready.""" @@ -184,4 +183,4 @@ class EcovacsVacuum(StateVacuumEntity): attr_name = ATTR_COMPONENT_PREFIX + key data[attr_name] = int(val * 100) - return data + return data \ No newline at end of file