Fix ONVIF subscription renewal (#35792)
* fix subscription renewal * catch ValueError for #35762pull/35799/head
parent
ef6b1f9302
commit
aeae4edb74
|
@ -54,6 +54,8 @@ class ONVIFDevice:
|
||||||
self.profiles: List[Profile] = []
|
self.profiles: List[Profile] = []
|
||||||
self.max_resolution: int = 0
|
self.max_resolution: int = 0
|
||||||
|
|
||||||
|
self._dt_diff_seconds: int = 0
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
"""Return the name of this device."""
|
"""Return the name of this device."""
|
||||||
|
@ -100,6 +102,16 @@ class ONVIFDevice:
|
||||||
if self.capabilities.ptz:
|
if self.capabilities.ptz:
|
||||||
self.device.create_ptz_service()
|
self.device.create_ptz_service()
|
||||||
|
|
||||||
|
if self._dt_diff_seconds > 300 and self.capabilities.events:
|
||||||
|
self.capabilities.events = False
|
||||||
|
LOGGER.warning(
|
||||||
|
"The system clock on '%s' is more than 5 minutes off. "
|
||||||
|
"Although this device supports events, they will be "
|
||||||
|
"disabled until the device clock is fixed as we will "
|
||||||
|
"not be able to renew the subscription.",
|
||||||
|
self.name,
|
||||||
|
)
|
||||||
|
|
||||||
if self.capabilities.events:
|
if self.capabilities.events:
|
||||||
self.events = EventManager(
|
self.events = EventManager(
|
||||||
self.hass, self.device, self.config_entry.unique_id
|
self.hass, self.device, self.config_entry.unique_id
|
||||||
|
@ -179,9 +191,9 @@ class ONVIFDevice:
|
||||||
)
|
)
|
||||||
|
|
||||||
dt_diff = cam_date - system_date
|
dt_diff = cam_date - system_date
|
||||||
dt_diff_seconds = dt_diff.total_seconds()
|
self._dt_diff_seconds = dt_diff.total_seconds()
|
||||||
|
|
||||||
if dt_diff_seconds > 5:
|
if self._dt_diff_seconds > 5:
|
||||||
LOGGER.warning(
|
LOGGER.warning(
|
||||||
"The date/time on the device (UTC) is '%s', "
|
"The date/time on the device (UTC) is '%s', "
|
||||||
"which is different from the system '%s', "
|
"which is different from the system '%s', "
|
||||||
|
|
|
@ -104,7 +104,8 @@ class EventManager:
|
||||||
if not self._subscription:
|
if not self._subscription:
|
||||||
return
|
return
|
||||||
|
|
||||||
await self._subscription.Renew(dt_util.utcnow() + dt.timedelta(minutes=10))
|
termination_time = (dt_util.utcnow() + dt.timedelta(minutes=30)).isoformat()
|
||||||
|
await self._subscription.Renew(termination_time)
|
||||||
|
|
||||||
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."""
|
||||||
|
|
|
@ -308,7 +308,7 @@ async def async_parse_last_reboot(uid: str, msg) -> Event:
|
||||||
dt_util.parse_datetime(msg.Message._value_1.Data.SimpleItem[0].Value)
|
dt_util.parse_datetime(msg.Message._value_1.Data.SimpleItem[0].Value)
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
except (AttributeError, KeyError):
|
except (AttributeError, KeyError, ValueError):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@ -331,7 +331,7 @@ async def async_parse_last_reset(uid: str, msg) -> Event:
|
||||||
),
|
),
|
||||||
entity_enabled=False,
|
entity_enabled=False,
|
||||||
)
|
)
|
||||||
except (AttributeError, KeyError):
|
except (AttributeError, KeyError, ValueError):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@ -354,5 +354,5 @@ async def async_parse_last_clock_sync(uid: str, msg) -> Event:
|
||||||
),
|
),
|
||||||
entity_enabled=False,
|
entity_enabled=False,
|
||||||
)
|
)
|
||||||
except (AttributeError, KeyError):
|
except (AttributeError, KeyError, ValueError):
|
||||||
return None
|
return None
|
||||||
|
|
Loading…
Reference in New Issue