Fix tuya network failure startup (#34057)

* Tuya initialization retry on failure

* Rename exception

* Changed managed exception

* Manage different cases of ConnectionError

* Log messages correction

* Test always catching exceptions

* Update for Lint

* Update tuya library to 0.0.6

- Catch new library exception

* Tuya initialization retry on failure

* Rename exception

* Changed managed exception

* Manage different cases of ConnectionError

* Log messages correction

* Test always catching exceptions

* Update for Lint

* Update tuya library to 0.0.6

- Catch new library exception

* Catch wrong credential

* Revert "Catch wrong credential"

This reverts commit 7fb797de5254bf2fa7811793b066174d9d261428.

* Catch wrong credential

* Remove trailing whitespace

* Black formatting

* Import Exception from tuyaapi

* Remove str to exception

* Force CI checks

* Force CI checks

* Rebase conflict

* Tuya initialization retry on failure

* Rename exception

* Changed managed exception

* Manage different cases of ConnectionError

* Log messages correction

* Test always catching exceptions

* Update for Lint

* Update tuya library to 0.0.6

- Catch new library exception

* Catch wrong credential

* Revert "Catch wrong credential"

This reverts commit 7fb797de5254bf2fa7811793b066174d9d261428.

* Tuya initialization retry on failure

* Rename exception

* Changed managed exception

* Catch wrong credential

* Force CI checks

* Force CI checks

* Rebase conflict

* Rebase

* Force Test

* Force Test
This commit is contained in:
ollo69 2020-04-29 13:46:27 +02:00 committed by GitHub
parent 2788de9b10
commit 15569f1e7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 5 deletions

View File

@ -3,6 +3,7 @@ from datetime import timedelta
import logging import logging
from tuyaha import TuyaApi from tuyaha import TuyaApi
from tuyaha.tuyaapi import TuyaAPIException, TuyaNetException, TuyaServerException
import voluptuous as vol import voluptuous as vol
from homeassistant.const import CONF_PASSWORD, CONF_PLATFORM, CONF_USERNAME from homeassistant.const import CONF_PASSWORD, CONF_PLATFORM, CONF_USERNAME
@ -11,7 +12,7 @@ from homeassistant.helpers import discovery
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import async_dispatcher_connect, dispatcher_send from homeassistant.helpers.dispatcher import async_dispatcher_connect, dispatcher_send
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.event import track_time_interval from homeassistant.helpers.event import call_later, track_time_interval
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -22,6 +23,9 @@ PARALLEL_UPDATES = 0
DOMAIN = "tuya" DOMAIN = "tuya"
DATA_TUYA = "data_tuya" DATA_TUYA = "data_tuya"
FIRST_RETRY_TIME = 60
MAX_RETRY_TIME = 900
SIGNAL_DELETE_ENTITY = "tuya_delete" SIGNAL_DELETE_ENTITY = "tuya_delete"
SIGNAL_UPDATE_ENTITY = "tuya_update" SIGNAL_UPDATE_ENTITY = "tuya_update"
@ -52,17 +56,41 @@ CONFIG_SCHEMA = vol.Schema(
) )
def setup(hass, config): def setup(hass, config, retry_delay=FIRST_RETRY_TIME):
"""Set up Tuya Component.""" """Set up Tuya Component."""
_LOGGER.debug("Setting up integration")
tuya = TuyaApi() tuya = TuyaApi()
username = config[DOMAIN][CONF_USERNAME] username = config[DOMAIN][CONF_USERNAME]
password = config[DOMAIN][CONF_PASSWORD] password = config[DOMAIN][CONF_PASSWORD]
country_code = config[DOMAIN][CONF_COUNTRYCODE] country_code = config[DOMAIN][CONF_COUNTRYCODE]
platform = config[DOMAIN][CONF_PLATFORM] platform = config[DOMAIN][CONF_PLATFORM]
hass.data[DATA_TUYA] = tuya try:
tuya.init(username, password, country_code, platform) tuya.init(username, password, country_code, platform)
except (TuyaNetException, TuyaServerException):
_LOGGER.warning(
"Connection error during integration setup. Will retry in %s seconds",
retry_delay,
)
def retry_setup(now):
"""Retry setup if a error happens on tuya API."""
setup(hass, config, retry_delay=min(2 * retry_delay, MAX_RETRY_TIME))
call_later(hass, retry_delay, retry_setup)
return True
except TuyaAPIException as exc:
_LOGGER.error(
"Connection error during integration setup. Error: %s", exc,
)
return False
hass.data[DATA_TUYA] = tuya
hass.data[DOMAIN] = {"entities": {}} hass.data[DOMAIN] = {"entities": {}}
def load_devices(device_list): def load_devices(device_list):

View File

@ -2,6 +2,6 @@
"domain": "tuya", "domain": "tuya",
"name": "Tuya", "name": "Tuya",
"documentation": "https://www.home-assistant.io/integrations/tuya", "documentation": "https://www.home-assistant.io/integrations/tuya",
"requirements": ["tuyaha==0.0.5"], "requirements": ["tuyaha==0.0.6"],
"codeowners": [] "codeowners": []
} }

View File

@ -2062,7 +2062,7 @@ tp-connected==0.0.4
transmissionrpc==0.11 transmissionrpc==0.11
# homeassistant.components.tuya # homeassistant.components.tuya
tuyaha==0.0.5 tuyaha==0.0.6
# homeassistant.components.twentemilieu # homeassistant.components.twentemilieu
twentemilieu==0.3.0 twentemilieu==0.3.0