mathieu-mp / aio-intex-spa

Python client for Intex Spa wifi interface
https://pypi.org/project/aio-intex-spa/
MIT License
17 stars 2 forks source link

Handle simultaneous requests #5

Closed mathieu-mp closed 2 years ago

mathieu-mp commented 2 years ago

Describe the bug The package does not support multiple simultaneous requests.

Exception is raised

log from Home Assistant

2022-06-20 16:33:43 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [139669599812720] readuntil() called while another coroutine is already waiting for incoming data
Traceback (most recent call last):
  File "/usr/local/python/lib/python3.10/site-packages/homeassistant/components/websocket_api/commands.py", line 193, in handle_call_service
    await hass.services.async_call(
  File "/usr/local/python/lib/python3.10/site-packages/homeassistant/core.py", line 1706, in async_call
    task.result()
  File "/usr/local/python/lib/python3.10/site-packages/homeassistant/core.py", line 1743, in _execute_service
    await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
  File "/usr/local/python/lib/python3.10/site-packages/homeassistant/helpers/entity_component.py", line 204, in handle_service
    await service.entity_service_call(
  File "/usr/local/python/lib/python3.10/site-packages/homeassistant/helpers/service.py", line 680, in entity_service_call
    future.result()  # pop exception if have
  File "/usr/local/python/lib/python3.10/site-packages/homeassistant/helpers/entity.py", line 900, in async_request_call
    await coro
  File "/usr/local/python/lib/python3.10/site-packages/homeassistant/helpers/service.py", line 717, in _handle_entity_call
    await result
  File "/config/custom_components/intex_spa/switch.py", line 87, in async_turn_off
    status = await self.coordinator.api.async_set(self._switch_type, False)
  File "/usr/local/python/lib/python3.10/site-packages/intex_spa/intex_spa.py", line 152, in async_set
    return await self._async_handle_intent(parameter, expected_state)
  File "/usr/local/python/lib/python3.10/site-packages/intex_spa/intex_spa.py", line 83, in _async_handle_intent
    await self.async_update_status()
  File "/usr/local/python/lib/python3.10/site-packages/intex_spa/intex_spa.py", line 139, in async_update_status
    return await self._async_handle_intent("status")
  File "/usr/local/python/lib/python3.10/site-packages/intex_spa/intex_spa.py", line 104, in _async_handle_intent
    received_bytes = await self.network.async_receive()
  File "/usr/local/python/lib/python3.10/site-packages/intex_spa/intex_spa_network_layer.py", line 82, in async_receive
    response_as_bytes = await self.reader.readline()
  File "/usr/local/python/lib/python3.10/asyncio/streams.py", line 525, in readline
    line = await self.readuntil(sep)
  File "/usr/local/python/lib/python3.10/asyncio/streams.py", line 617, in readuntil
    await self._wait_for_data('readuntil')
  File "/usr/local/python/lib/python3.10/asyncio/streams.py", line 488, in _wait_for_data
    raise RuntimeError(
RuntimeError: readuntil() called while another coroutine is already waiting for incoming data