Fix ONVIF Transport (#35932)
* allow lib to create AsyncTransport * fix transport close issuepull/36070/head
parent
f452e26269
commit
8a9ba7e72d
|
@ -82,13 +82,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
|
||||||
|
|
||||||
if device.capabilities.events and await device.events.async_start():
|
if device.capabilities.events and await device.events.async_start():
|
||||||
platforms += ["binary_sensor", "sensor"]
|
platforms += ["binary_sensor", "sensor"]
|
||||||
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, device.events.async_stop)
|
|
||||||
|
|
||||||
for component in platforms:
|
for component in platforms:
|
||||||
hass.async_create_task(
|
hass.async_create_task(
|
||||||
hass.config_entries.async_forward_entry_setup(entry, component)
|
hass.config_entries.async_forward_entry_setup(entry, component)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, device.async_stop)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ from aiohttp.client_exceptions import ClientConnectionError, ServerDisconnectedE
|
||||||
import onvif
|
import onvif
|
||||||
from onvif import ONVIFCamera
|
from onvif import ONVIFCamera
|
||||||
from onvif.exceptions import ONVIFError
|
from onvif.exceptions import ONVIFError
|
||||||
from zeep.asyncio import AsyncTransport
|
|
||||||
from zeep.exceptions import Fault
|
from zeep.exceptions import Fault
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
@ -20,7 +19,6 @@ from homeassistant.const import (
|
||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
|
@ -141,6 +139,12 @@ class ONVIFDevice:
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
async def async_stop(self, event=None):
|
||||||
|
"""Shut it all down."""
|
||||||
|
if self.events:
|
||||||
|
await self.events.async_stop()
|
||||||
|
await self.device.close()
|
||||||
|
|
||||||
async def async_check_date_and_time(self) -> None:
|
async def async_check_date_and_time(self) -> None:
|
||||||
"""Warns if device and system date not synced."""
|
"""Warns if device and system date not synced."""
|
||||||
LOGGER.debug("Setting up the ONVIF device management service")
|
LOGGER.debug("Setting up the ONVIF device management service")
|
||||||
|
@ -278,7 +282,7 @@ class ONVIFDevice:
|
||||||
is not None,
|
is not None,
|
||||||
)
|
)
|
||||||
|
|
||||||
ptz_service = self.device.get_service("ptz")
|
ptz_service = self.device.create_ptz_service()
|
||||||
presets = await ptz_service.GetPresets(profile.token)
|
presets = await ptz_service.GetPresets(profile.token)
|
||||||
profile.ptz.presets = [preset.token for preset in presets]
|
profile.ptz.presets = [preset.token for preset in presets]
|
||||||
|
|
||||||
|
@ -326,7 +330,7 @@ class ONVIFDevice:
|
||||||
LOGGER.warning("PTZ actions are not supported on device '%s'", self.name)
|
LOGGER.warning("PTZ actions are not supported on device '%s'", self.name)
|
||||||
return
|
return
|
||||||
|
|
||||||
ptz_service = self.device.get_service("ptz")
|
ptz_service = self.device.create_ptz_service()
|
||||||
|
|
||||||
pan_val = distance * PAN_FACTOR.get(pan, 0)
|
pan_val = distance * PAN_FACTOR.get(pan, 0)
|
||||||
tilt_val = distance * TILT_FACTOR.get(tilt, 0)
|
tilt_val = distance * TILT_FACTOR.get(tilt, 0)
|
||||||
|
@ -423,13 +427,11 @@ class ONVIFDevice:
|
||||||
|
|
||||||
def get_device(hass, host, port, username, password) -> ONVIFCamera:
|
def get_device(hass, host, port, username, password) -> ONVIFCamera:
|
||||||
"""Get ONVIFCamera instance."""
|
"""Get ONVIFCamera instance."""
|
||||||
session = async_get_clientsession(hass)
|
|
||||||
transport = AsyncTransport(None, session=session)
|
|
||||||
return ONVIFCamera(
|
return ONVIFCamera(
|
||||||
host,
|
host,
|
||||||
port,
|
port,
|
||||||
username,
|
username,
|
||||||
password,
|
password,
|
||||||
f"{os.path.dirname(onvif.__file__)}/wsdl/",
|
f"{os.path.dirname(onvif.__file__)}/wsdl/",
|
||||||
transport=transport,
|
no_cache=True,
|
||||||
)
|
)
|
||||||
|
|
|
@ -91,7 +91,7 @@ class EventManager:
|
||||||
|
|
||||||
return self.started
|
return self.started
|
||||||
|
|
||||||
async def async_stop(self, event=None) -> None:
|
async def async_stop(self) -> None:
|
||||||
"""Unsubscribe from events."""
|
"""Unsubscribe from events."""
|
||||||
if not self._subscription:
|
if not self._subscription:
|
||||||
return
|
return
|
||||||
|
@ -110,7 +110,7 @@ class EventManager:
|
||||||
async def async_pull_messages(self, _now: dt = None) -> None:
|
async def async_pull_messages(self, _now: dt = None) -> None:
|
||||||
"""Pull messages from device."""
|
"""Pull messages from device."""
|
||||||
try:
|
try:
|
||||||
pullpoint = self.device.get_service("pullpoint")
|
pullpoint = self.device.create_pullpoint_service()
|
||||||
req = pullpoint.create_type("PullMessages")
|
req = pullpoint.create_type("PullMessages")
|
||||||
req.MessageLimit = 100
|
req.MessageLimit = 100
|
||||||
req.Timeout = dt.timedelta(seconds=60)
|
req.Timeout = dt.timedelta(seconds=60)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"domain": "onvif",
|
"domain": "onvif",
|
||||||
"name": "ONVIF",
|
"name": "ONVIF",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/onvif",
|
"documentation": "https://www.home-assistant.io/integrations/onvif",
|
||||||
"requirements": ["onvif-zeep-async==0.3.0", "WSDiscovery==2.0.0"],
|
"requirements": ["onvif-zeep-async==0.4.0", "WSDiscovery==2.0.0"],
|
||||||
"dependencies": ["ffmpeg"],
|
"dependencies": ["ffmpeg"],
|
||||||
"codeowners": ["@hunterjm"],
|
"codeowners": ["@hunterjm"],
|
||||||
"config_flow": true
|
"config_flow": true
|
||||||
|
|
|
@ -994,7 +994,7 @@ oemthermostat==1.1
|
||||||
onkyo-eiscp==1.2.7
|
onkyo-eiscp==1.2.7
|
||||||
|
|
||||||
# homeassistant.components.onvif
|
# homeassistant.components.onvif
|
||||||
onvif-zeep-async==0.3.0
|
onvif-zeep-async==0.4.0
|
||||||
|
|
||||||
# homeassistant.components.opengarage
|
# homeassistant.components.opengarage
|
||||||
open-garage==0.1.4
|
open-garage==0.1.4
|
||||||
|
|
|
@ -414,7 +414,7 @@ numpy==1.18.4
|
||||||
oauth2client==4.0.0
|
oauth2client==4.0.0
|
||||||
|
|
||||||
# homeassistant.components.onvif
|
# homeassistant.components.onvif
|
||||||
onvif-zeep-async==0.3.0
|
onvif-zeep-async==0.4.0
|
||||||
|
|
||||||
# homeassistant.components.openerz
|
# homeassistant.components.openerz
|
||||||
openerz-api==0.1.0
|
openerz-api==0.1.0
|
||||||
|
|
Loading…
Reference in New Issue