mirror of
https://github.com/home-assistant/core.git
synced 2025-06-25 01:21:51 +02:00
Retry zoneminder connection setup (#107519)
* zoneminder setup retry connection Makes ZM setup be async for enabling connection retry attempts This also requires zm-py version bump v0.5.4 as that dependency was patched in conjunction to resolve this issue Closes #105271 Signed-off-by: Nic Boet <nic@boet.cc> * ruff format Signed-off-by: Nic Boet <nic@boet.cc> * ruff fixes Signed-off-by: Nic Boet <nic@boet.cc> * RequestsConnectionError Signed-off-by: Nic Boet <nic@boet.cc> * revert async changes Signed-off-by: Nic Boet <nic@boet.cc> --------- Signed-off-by: Nic Boet <nic@boet.cc>
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
"""Support for ZoneMinder."""
|
||||
import logging
|
||||
|
||||
from requests.exceptions import ConnectionError as RequestsConnectionError
|
||||
import voluptuous as vol
|
||||
from zoneminder.zm import ZoneMinder
|
||||
|
||||
@ -75,7 +76,14 @@ def setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||
)
|
||||
hass.data[DOMAIN][host_name] = zm_client
|
||||
|
||||
success = zm_client.login() and success
|
||||
try:
|
||||
success = zm_client.login() and success
|
||||
except RequestsConnectionError as ex:
|
||||
_LOGGER.error(
|
||||
"ZoneMinder connection failure to %s: %s",
|
||||
host_name,
|
||||
ex,
|
||||
)
|
||||
|
||||
def set_active_state(call: ServiceCall) -> None:
|
||||
"""Set the ZoneMinder run state to the given state name."""
|
||||
|
@ -8,6 +8,7 @@ from zoneminder.zm import ZoneMinder
|
||||
|
||||
from homeassistant.components.mjpeg import MjpegCamera, filter_urllib3_logging
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import PlatformNotReady
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||
|
||||
@ -28,8 +29,9 @@ def setup_platform(
|
||||
zm_client: ZoneMinder
|
||||
for zm_client in hass.data[ZONEMINDER_DOMAIN].values():
|
||||
if not (monitors := zm_client.get_monitors()):
|
||||
_LOGGER.warning("Could not fetch monitors from ZoneMinder host: %s")
|
||||
return
|
||||
raise PlatformNotReady(
|
||||
"Camera could not fetch any monitors from ZoneMinder"
|
||||
)
|
||||
|
||||
for monitor in monitors:
|
||||
_LOGGER.info("Initializing camera %s", monitor.id)
|
||||
|
@ -5,5 +5,5 @@
|
||||
"documentation": "https://www.home-assistant.io/integrations/zoneminder",
|
||||
"iot_class": "local_polling",
|
||||
"loggers": ["zoneminder"],
|
||||
"requirements": ["zm-py==0.5.3"]
|
||||
"requirements": ["zm-py==0.5.4"]
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ from homeassistant.components.sensor import (
|
||||
)
|
||||
from homeassistant.const import CONF_MONITORED_CONDITIONS
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import PlatformNotReady
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||
@ -77,7 +78,9 @@ def setup_platform(
|
||||
zm_client: ZoneMinder
|
||||
for zm_client in hass.data[ZONEMINDER_DOMAIN].values():
|
||||
if not (monitors := zm_client.get_monitors()):
|
||||
_LOGGER.warning("Could not fetch any monitors from ZoneMinder")
|
||||
raise PlatformNotReady(
|
||||
"Sensor could not fetch any monitors from ZoneMinder"
|
||||
)
|
||||
|
||||
for monitor in monitors:
|
||||
sensors.append(ZMSensorMonitors(monitor))
|
||||
|
@ -11,6 +11,7 @@ from zoneminder.zm import ZoneMinder
|
||||
from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchEntity
|
||||
from homeassistant.const import CONF_COMMAND_OFF, CONF_COMMAND_ON
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import PlatformNotReady
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||
@ -42,8 +43,9 @@ def setup_platform(
|
||||
zm_client: ZoneMinder
|
||||
for zm_client in hass.data[ZONEMINDER_DOMAIN].values():
|
||||
if not (monitors := zm_client.get_monitors()):
|
||||
_LOGGER.warning("Could not fetch monitors from ZoneMinder")
|
||||
return
|
||||
raise PlatformNotReady(
|
||||
"Switch could not fetch any monitors from ZoneMinder"
|
||||
)
|
||||
|
||||
for monitor in monitors:
|
||||
switches.append(ZMSwitchMonitors(monitor, on_state, off_state))
|
||||
|
@ -2902,7 +2902,7 @@ zigpy-znp==0.12.1
|
||||
zigpy==0.60.4
|
||||
|
||||
# homeassistant.components.zoneminder
|
||||
zm-py==0.5.3
|
||||
zm-py==0.5.4
|
||||
|
||||
# homeassistant.components.zwave_js
|
||||
zwave-js-server-python==0.55.3
|
||||
|
Reference in New Issue
Block a user