core: Generic camera stops working after some time, usually several hours

The problem

Generic camera component stops working, usually after several hours after system restart.

What version of Home Assistant Core has the issue?

core-2021.10.6

What was the last working version of Home Assistant Core?

core-2021.9.7

What type of installation are you running?

Home Assistant Core

Integration causing the issue

Generic Camera

Link to integration documentation on our website

https://www.home-assistant.io/integrations/generic/

Example YAML snippet

camera:
  - platform: generic
    still_image_url: http://10.144.1.107/image/jpeg.cgi
    username: !secret camera1_username
    password: !secret camera1_password
  - platform: generic
    name: Dashboard 2 Camera
    still_image_url: http://10.144.1.51:2323/?cmd=getCamshot&password=xxxx
  - platform: generic
    name: Dashboard Camera
    still_image_url: http://10.144.1.139:2323/?cmd=getCamshot&password=yyyy

Anything in the logs that might be useful for us?

2021-10-25 15:55:06 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/aiohttp/web_protocol.py", line 422, in _handle_request
    resp = await self._request_handler(request)
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/aiohttp/web_app.py", line 499, in _handle
    resp = await handler(request)
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/aiohttp/web_middlewares.py", line 119, in impl
    return await handler(request)
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/homeassistant/components/http/security_filter.py", line 60, in security_filter_middleware
    return await handler(request)
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/homeassistant/components/http/forwarded.py", line 98, in forwarded_middleware
    return await handler(request)
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/homeassistant/components/http/request_context.py", line 24, in request_context_middleware
    return await handler(request)
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/homeassistant/components/http/ban.py", line 78, in ban_middleware
    return await handler(request)
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/homeassistant/components/http/auth.py", line 144, in auth_middleware
    return await handler(request)
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/homeassistant/components/http/view.py", line 136, in handle
    result = await result
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/homeassistant/components/camera/__init__.py", line 591, in get
    return await self.handle(request, camera)
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/homeassistant/components/camera/__init__.py", line 609, in handle
    image = await _async_get_image(
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/homeassistant/components/camera/__init__.py", line 164, in _async_get_image
    image_bytes = await camera.async_camera_image(
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/homeassistant/components/generic/camera.py", line 146, in async_camera_image
    response = await async_client.get(
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/httpx/_client.py", line 1740, in get
    return await self.request(
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/httpx/_client.py", line 1494, in request
    response = await self.send(
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/httpx/_client.py", line 1586, in send
    response = await self._send_handling_auth(
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/httpx/_client.py", line 1616, in _send_handling_auth
    response = await self._send_handling_redirects(
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/httpx/_client.py", line 1655, in _send_handling_redirects
    response = await self._send_single_request(request, timeout)
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/httpx/_client.py", line 1699, in _send_single_request
    ) = await transport.handle_async_request(
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/httpx/_transports/default.py", line 281, in handle_async_request
    ) = await self._pool.handle_async_request(
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/httpcore/_async/connection_pool.py", line 219, in handle_async_request
    async with self._connection_acquiry_lock:
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/httpcore/_backends/base.py", line 76, in __aenter__
    await self.acquire()
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/httpcore/_backends/anyio.py", line 104, in acquire
    await self._lock.acquire()
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/anyio/_core/_synchronization.py", line 119, in acquire
    self.acquire_nowait()
  File "/usr/local/share/homeassistant/lib/python3.8/site-packages/anyio/_core/_synchronization.py", line 146, in acquire_nowait
    raise RuntimeError('Attempted to acquire an already held Lock')
RuntimeError: Attempted to acquire an already held Lock

Additional information

I have 3 cameras, 2 are provided by Fully Kiosk Browser android app, 1 is a D-Link IP camera. All 3 stop working at the same time and multiple of above error messages are written to the HA log. Never had similar issue on earlier versions of HA. The installation is on TrueNAS jail, in python venv. Python version is 3.8.6

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 19 (4 by maintainers)

Most upvoted comments

My logs: 2021-12-20 00:17:28 ERROR (MainThread) [aiohttp.server] Error handling request Traceback (most recent call last): File “/usr/local/lib/python3.9/site-packages/aiohttp/web_protocol.py”, line 435, in _handle_request resp = await request_handler(request) File “/usr/local/lib/python3.9/site-packages/aiohttp/web_app.py”, line 504, in _handle resp = await handler(request) File “/usr/local/lib/python3.9/site-packages/aiohttp/web_middlewares.py”, line 117, in impl return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/security_filter.py”, line 60, in security_filter_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/forwarded.py”, line 98, in forwarded_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/request_context.py”, line 28, in request_context_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/ban.py”, line 78, in ban_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/auth.py”, line 181, in auth_middleware return await handler(request) File “/usr/src/homeassistant/homeassistant/components/http/view.py”, line 137, in handle result = await result File “/usr/src/homeassistant/homeassistant/components/camera/init.py”, line 629, in get return await self.handle(request, camera) File “/usr/src/homeassistant/homeassistant/components/camera/init.py”, line 668, in handle stream = await camera.handle_async_mjpeg_stream(request) File “/usr/src/homeassistant/homeassistant/components/proxy/camera.py”, line 268, in handle_async_mjpeg_stream return await async_get_still_stream( File “/usr/src/homeassistant/homeassistant/components/camera/init.py”, line 260, in async_get_still_stream await write_to_mjpeg_stream(img_bytes) File “/usr/src/homeassistant/homeassistant/components/camera/init.py”, line 241, in write_to_mjpeg_stream await response.write( File “/usr/local/lib/python3.9/site-packages/aiohttp/web_response.py”, line 514, in write await self._payload_writer.write(data) File “/usr/local/lib/python3.9/site-packages/aiohttp/http_writer.py”, line 116, in write self._write(chunk) File “/usr/local/lib/python3.9/site-packages/aiohttp/http_writer.py”, line 76, in _write raise ConnectionResetError(“Cannot write to closing transport”) ConnectionResetError: Cannot write to closing transport