diff --git a/homeassistant/components/onvif/config_flow.py b/homeassistant/components/onvif/config_flow.py index ceb861fc7dd..1dba697380d 100644 --- a/homeassistant/components/onvif/config_flow.py +++ b/homeassistant/components/onvif/config_flow.py @@ -219,7 +219,8 @@ class OnvifFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): media_service = device.create_media_service() profiles = await media_service.GetProfiles() h264 = any( - profile.VideoEncoderConfiguration.Encoding == "H264" + profile.VideoEncoderConfiguration + and profile.VideoEncoderConfiguration.Encoding == "H264" for profile in profiles ) diff --git a/homeassistant/components/onvif/device.py b/homeassistant/components/onvif/device.py index d6f407f016d..938c960080f 100644 --- a/homeassistant/components/onvif/device.py +++ b/homeassistant/components/onvif/device.py @@ -255,7 +255,10 @@ class ONVIFDevice: profiles = [] for key, onvif_profile in enumerate(result): # Only add H264 profiles - if onvif_profile.VideoEncoderConfiguration.Encoding != "H264": + if ( + not onvif_profile.VideoEncoderConfiguration + or onvif_profile.VideoEncoderConfiguration.Encoding != "H264" + ): continue profile = Profile( @@ -282,9 +285,13 @@ class ONVIFDevice: is not None, ) - ptz_service = self.device.create_ptz_service() - presets = await ptz_service.GetPresets(profile.token) - profile.ptz.presets = [preset.token for preset in presets] + try: + ptz_service = self.device.create_ptz_service() + presets = await ptz_service.GetPresets(profile.token) + profile.ptz.presets = [preset.token for preset in presets] + except (Fault, ServerDisconnectedError): + # It's OK if Presets aren't supported + profile.ptz.presets = [] profiles.append(profile)