Closed fcastilloec closed 4 months ago
New firmwares expect messages in sequential order. Sending them in parallel can lead to 401 code from camera which can be seen here.
Solution to this would be fairly complex and require pretty big rewrite. As a workaround, send the automation actions in sequence instead, possibly with delay as well if needed.
That's my workaround right now, I'm sending actions for two entities at a time. I tested with a delay and without, and without works without any problems. I think it'll be a good idea to add some description of this issue to the Troubleshooting | FAQ section. If more people want to simulate the "Away" and "Home" modes from the Tapo app, which just sets some entities to a specific state, by sending parallel actions, will encounter this message too.
Thanks for the quick reply!
Added to FAQ. Thank you!
As a workaround, send the automation actions in sequence instead, possibly with delay as well if needed.
Ok. So where do i find this setting?
Description
First, this might be related to #478 but the error message there is different than mine, and my case can be reproduced reliably. Also, I've never experienced this error with other integrations, so I'm inclined to think it's Tapo's fault more than Home Assistant.
Reproduction Steps
Run a service/script that selects an option from various entities, it has to be 3+ entities to reproduce the error.
Expected behavior
I'm expecting to have those entities set to the particular option, in the case of the above code
normal
, or any of the other options:off
,low
,high
, etcIf applicable, add error logs.
2023-12-20 13:05:03.839 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [281472260724544] Error handling message: Unknown error (unknown_error) Felipe from 192.168.1.2 (Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0) Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/components/websocket_api/decorators.py", line 26, in _handle_async_response await func(hass, connection, msg) File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 782, in handle_execute_script script_result = await script_obj.async_run( ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1578, in async_run return await asyncio.shield(run.async_run()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 420, in async_run await self._async_step(log_exceptions=False) File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 470, in _async_step self._handle_exception( File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 493, in _handle_exception raise exception File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 468, in _async_step await getattr(self, handler)() File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 704, in _async_call_service_step response_data = await self._async_run_long_action( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 666, in _async_run_long_action return long_task.result() ^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/core.py", line 2067, in async_call response_data = await coro ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/core.py", line 2104, in _execute_service return await target(service_call) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 272, in handle_service return await service.entity_service_call( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 903, in entity_service_call raise result from None File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1233, in async_request_call return await coro ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 948, in _handle_entity_call result = await task ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/components/select/init.py", line 106, in async_select_option await entity.async_select_option(option) File "/config/custom_components/tapo_control/select.py", line 701, in async_select_option result = await self.hass.async_add_executor_job( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/pytapo/init.py", line 1358, in setMeowDetection return self.executeFunction("setMeowDetectionConfig", data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/pytapo/init.py", line 491, in executeFunction data = self.performRequest( ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/pytapo/init.py", line 616, in performRequest self.refreshStok() File "/usr/local/lib/python3.11/site-packages/pytapo/init.py", line 423, in refreshStok raise Exception("Invalid authentication data") Exception: Invalid authentication data
Device Firmware
Tapo C120: 1.1.7 Build 231107 Rel.71524n
Integration Version
5.4.12
Using stream component
Yes
Does camera work via official integrations?
Yes
Camera has all attributes filled out in developer tools
Yes
HASS Environment
Debian supervised
Search for similar issues
Yes
Additional information
Toggling the entities on the GUI doesn't show any errors. That might be because it has to be done one at a time. I also tried multiple combinations of entities, thinking a particular one might cause the problem, but the error was shown no matter which entities I selected, or which option I picked, as long as it was 3 or more entities.