Fix issue at Netatmo startup (#47452)
This commit is contained in:
parent
793929f2ea
commit
b3c33fc1be
5 changed files with 56 additions and 33 deletions
|
@ -7,6 +7,7 @@ import voluptuous as vol
|
|||
|
||||
from homeassistant.components.camera import SUPPORT_STREAM, Camera
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.exceptions import PlatformNotReady
|
||||
from homeassistant.helpers import config_validation as cv, entity_platform
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
|
||||
|
@ -49,15 +50,17 @@ async def async_setup_entry(hass, entry, async_add_entities):
|
|||
|
||||
data_handler = hass.data[DOMAIN][entry.entry_id][DATA_HANDLER]
|
||||
|
||||
async def get_entities():
|
||||
"""Retrieve Netatmo entities."""
|
||||
await data_handler.register_data_class(
|
||||
CAMERA_DATA_CLASS_NAME, CAMERA_DATA_CLASS_NAME, None
|
||||
)
|
||||
|
||||
data = data_handler.data
|
||||
if CAMERA_DATA_CLASS_NAME not in data_handler.data:
|
||||
raise PlatformNotReady
|
||||
|
||||
if not data.get(CAMERA_DATA_CLASS_NAME):
|
||||
async def get_entities():
|
||||
"""Retrieve Netatmo entities."""
|
||||
|
||||
if not data_handler.data.get(CAMERA_DATA_CLASS_NAME):
|
||||
return []
|
||||
|
||||
data_class = data_handler.data[CAMERA_DATA_CLASS_NAME]
|
||||
|
@ -94,9 +97,10 @@ async def async_setup_entry(hass, entry, async_add_entities):
|
|||
|
||||
async_add_entities(await get_entities(), True)
|
||||
|
||||
await data_handler.unregister_data_class(CAMERA_DATA_CLASS_NAME, None)
|
||||
|
||||
platform = entity_platform.current_platform.get()
|
||||
|
||||
if data_handler.data[CAMERA_DATA_CLASS_NAME] is not None:
|
||||
platform.async_register_entity_service(
|
||||
SERVICE_SET_PERSONS_HOME,
|
||||
{vol.Required(ATTR_PERSONS): vol.All(cv.ensure_list, [cv.string])},
|
||||
|
|
|
@ -25,6 +25,7 @@ from homeassistant.const import (
|
|||
TEMP_CELSIUS,
|
||||
)
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.exceptions import PlatformNotReady
|
||||
from homeassistant.helpers import config_validation as cv, entity_platform
|
||||
from homeassistant.helpers.device_registry import async_get_registry
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
|
@ -81,6 +82,7 @@ NETATMO_MAP_PRESET = {
|
|||
STATE_NETATMO_AWAY: PRESET_AWAY,
|
||||
STATE_NETATMO_OFF: STATE_NETATMO_OFF,
|
||||
STATE_NETATMO_MANUAL: STATE_NETATMO_MANUAL,
|
||||
STATE_NETATMO_HOME: PRESET_SCHEDULE,
|
||||
}
|
||||
|
||||
HVAC_MAP_NETATMO = {
|
||||
|
@ -111,8 +113,8 @@ async def async_setup_entry(hass, entry, async_add_entities):
|
|||
)
|
||||
home_data = data_handler.data.get(HOMEDATA_DATA_CLASS_NAME)
|
||||
|
||||
if not home_data:
|
||||
return
|
||||
if HOMEDATA_DATA_CLASS_NAME not in data_handler.data:
|
||||
raise PlatformNotReady
|
||||
|
||||
async def get_entities():
|
||||
"""Retrieve Netatmo entities."""
|
||||
|
@ -151,6 +153,8 @@ async def async_setup_entry(hass, entry, async_add_entities):
|
|||
|
||||
async_add_entities(await get_entities(), True)
|
||||
|
||||
await data_handler.unregister_data_class(HOMEDATA_DATA_CLASS_NAME, None)
|
||||
|
||||
platform = entity_platform.current_platform.get()
|
||||
|
||||
if home_data is not None:
|
||||
|
|
|
@ -129,7 +129,11 @@ class NetatmoDataHandler:
|
|||
if update_callback:
|
||||
update_callback()
|
||||
|
||||
except (pyatmo.NoDevice, pyatmo.ApiError) as err:
|
||||
except pyatmo.NoDevice as err:
|
||||
_LOGGER.debug(err)
|
||||
self.data[data_class_entry] = None
|
||||
|
||||
except pyatmo.ApiError as err:
|
||||
_LOGGER.debug(err)
|
||||
|
||||
async def register_data_class(
|
||||
|
|
|
@ -31,18 +31,15 @@ async def async_setup_entry(hass, entry, async_add_entities):
|
|||
|
||||
data_handler = hass.data[DOMAIN][entry.entry_id][DATA_HANDLER]
|
||||
|
||||
if CAMERA_DATA_CLASS_NAME not in data_handler.data:
|
||||
raise PlatformNotReady
|
||||
|
||||
async def get_entities():
|
||||
"""Retrieve Netatmo entities."""
|
||||
await data_handler.register_data_class(
|
||||
CAMERA_DATA_CLASS_NAME, CAMERA_DATA_CLASS_NAME, None
|
||||
)
|
||||
|
||||
entities = []
|
||||
all_cameras = []
|
||||
|
||||
if CAMERA_DATA_CLASS_NAME not in data_handler.data:
|
||||
raise PlatformNotReady
|
||||
|
||||
try:
|
||||
for home in data_handler.data[CAMERA_DATA_CLASS_NAME].cameras.values():
|
||||
for camera in home.values():
|
||||
|
|
|
@ -20,6 +20,7 @@ from homeassistant.const import (
|
|||
TEMP_CELSIUS,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.exceptions import PlatformNotReady
|
||||
from homeassistant.helpers.device_registry import async_entries_for_config_entry
|
||||
from homeassistant.helpers.dispatcher import (
|
||||
async_dispatcher_connect,
|
||||
|
@ -129,14 +130,25 @@ async def async_setup_entry(hass, entry, async_add_entities):
|
|||
"""Set up the Netatmo weather and homecoach platform."""
|
||||
data_handler = hass.data[DOMAIN][entry.entry_id][DATA_HANDLER]
|
||||
|
||||
await data_handler.register_data_class(
|
||||
WEATHERSTATION_DATA_CLASS_NAME, WEATHERSTATION_DATA_CLASS_NAME, None
|
||||
)
|
||||
await data_handler.register_data_class(
|
||||
HOMECOACH_DATA_CLASS_NAME, HOMECOACH_DATA_CLASS_NAME, None
|
||||
)
|
||||
|
||||
async def find_entities(data_class_name):
|
||||
"""Find all entities."""
|
||||
await data_handler.register_data_class(data_class_name, data_class_name, None)
|
||||
if data_class_name not in data_handler.data:
|
||||
raise PlatformNotReady
|
||||
|
||||
all_module_infos = {}
|
||||
data = data_handler.data
|
||||
|
||||
if not data.get(data_class_name):
|
||||
if data_class_name not in data:
|
||||
return []
|
||||
|
||||
if data[data_class_name] is None:
|
||||
return []
|
||||
|
||||
data_class = data[data_class_name]
|
||||
|
@ -174,6 +186,8 @@ async def async_setup_entry(hass, entry, async_add_entities):
|
|||
NetatmoSensor(data_handler, data_class_name, module, condition)
|
||||
)
|
||||
|
||||
await data_handler.unregister_data_class(data_class_name, None)
|
||||
|
||||
return entities
|
||||
|
||||
for data_class_name in [
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue