Closed wavemop closed 2 months ago
I have the same thing now. I was referred to the FAQ. I did everything that was asked but it still doesn't work. Quite an annoying problem.
Device Firmware 1.3.13
Please post full firmware version. New firmware might have broken the integration.
Good news. My camera received this firmware as well, going to test it out.
I updated my camera C200 v3 to 1.3.13 Build 240327 Rel.63336n(4555) and it works as expected.
Tested also via pytapo.
Please run following script and post output:
from pytapo import Tapo
import time
from pytapo.version import PYTAPO_VERSION
host = "192.168.100.105" // set to correct local camera ip
password_cloud = "cloud password" //set to correct cloud password
redactInformation = True
tapo = Tapo(
host,
"admin",
password_cloud,
printDebugInformation=True,
retryStok=True,
)
print(tapo.getMost())
Device Firmware 1.3.13
Please post full firmware version. New firmware might have broken the integration.
Version: 1.3.13 Build 240327 Rel.63336n(4555)
Please run following script and post output:
from pytapo import Tapo import time from pytapo.version import PYTAPO_VERSION host = "192.168.100.105" // set to correct local camera ip password_cloud = "cloud password" //set to correct cloud password redactInformation = True tapo = Tapo( host, "admin", password_cloud, printDebugInformation=True, retryStok=True, ) print(tapo.getMost())
Since it is HA container here, I've (for any reasons) got no terminal access to the docker container via portainer to install pytapo !?
You will need to install it on another machine or computer.
Having the same problem. All my 9 cameras stopped working a couple of days ago. Firmware version: on the C310 cameras: 1.3.9 on the C200 (hardware 2.0): 1.3.9 on the C200 (hardware 3.0)1.3.13
For anyone experiencing this issue the instructions to help debug this are above.
Please post output of the script.
Sorry, I don't know if this is correct, I have almost no Python knowledge
C:\Pytapo>custom_test.py
Refreshing stok...
New request:
{'data': {'method': 'login', 'params': {'encrypt_type': '3', 'username': 'admin'}}, 'headers': {'Host': 'REDACTED', 'Referer': 'REDACTED', 'Accept': 'application/json', 'Accept-Encoding': 'gzip, deflate', 'User-Agent': 'Tapo CameraClient Android', 'Connection': 'close', 'requestByApp': 'true', 'Content-Type': 'application/json; charset=UTF-8'}, 'verify': False}
200
{'error_code': -40413, 'result': {'data': {'code': -40401, 'encrypt_type': ['3'], 'key': 'REDACTED', 'nonce': 'REDACTED', 'device_confirm': 'REDACTED'}}}
Connection is secure.
New request:
{'data': {'method': 'login', 'params': {'cnonce': 'REDACTED', 'encrypt_type': '3', 'username': 'admin'}}, 'headers': {'Host': 'REDACTED', 'Referer': 'REDACTED', 'Accept': 'application/json', 'Accept-Encoding': 'gzip, deflate', 'User-Agent': 'Tapo CameraClient Android', 'Connection': 'close', 'requestByApp': 'true', 'Content-Type': 'application/json; charset=UTF-8'}, 'verify': False}
200
{'error_code': -40413, 'result': {'data': {'code': -40401, 'encrypt_type': ['3'], 'key': 'REDACTED', 'nonce': 'REDACTED', 'device_confirm': 'REDACTED'}}}
Status code: 200
Processing secure response.
Validating device confirm.
Incorrect device_confirm value, retrying: 1/2.
Refreshing stok...
Connection is secure.
New request:
{'data': {'method': 'login', 'params': {'cnonce': 'REDACTED', 'encrypt_type': '3', 'username': 'admin'}}, 'headers': {'Host': 'REDACTED', 'Referer': 'REDACTED', 'Accept': 'application/json', 'Accept-Encoding': 'gzip, deflate', 'User-Agent': 'Tapo CameraClient Android', 'Connection': 'close', 'requestByApp': 'true', 'Content-Type': 'application/json; charset=UTF-8'}, 'verify': False}
200
{'error_code': -40413, 'result': {'data': {'code': -40401, 'encrypt_type': ['3'], 'key': 'REDACTED', 'nonce': 'REDACTED', 'device_confirm': 'REDACTED'}}}
Status code: 200
Processing secure response.
Validating device confirm.
Incorrect device_confirm value, retrying: 2/2.
Refreshing stok...
Connection is secure.
New request:
{'data': {'method': 'login', 'params': {'cnonce': 'REDACTED', 'encrypt_type': '3', 'username': 'admin'}}, 'headers': {'Host': 'REDACTED', 'Referer': 'REDACTED', 'Accept': 'application/json', 'Accept-Encoding': 'gzip, deflate', 'User-Agent': 'Tapo CameraClient Android', 'Connection': 'close', 'requestByApp': 'true', 'Content-Type': 'application/json; charset=UTF-8'}, 'verify': False}
200
{'error_code': -40413, 'result': {'data': {'code': -40401, 'encrypt_type': ['3'], 'key': 'REDACTED', 'nonce': 'REDACTED', 'device_confirm': 'REDACTED'}}}
Status code: 200
Processing secure response.
Validating device confirm.
Incorrect device_confirm value, raising Exception.
Traceback (most recent call last):
File "C:\Pytapo\custom_test.py", line 11, in
It looks like the authorisation model and flow has been changed. Based on the reports it affects only some users and more older firmwares than the latest ones.
I have been in touch with tplink regarding a vulnerability I reported in the past and this might be caused by the fix they implemented for it and seem to be rolling out slowly.
I am currently waiting for the information from them on how can this be fixed and a permission to connect to cloud if needed. I will also unblock one of my cameras to the internet so that hopefully this update gets pushed to me as well and I can test / debug.
At this point, if you were affected and you wish to use this integration further I would suggest rolling back the firmware and factory resetting the camera. Or ideally, help me fix this by investigating on what has changed if you have the knowledge.
Users that were affected: What application are you using? iOS or Android?
Camera C200 hw 3.0 Was carried out:
Same for C510W and C110 camera model
Everything is fine in the TAPO app, the password works. Android app version 3.2.976
Moving to https://github.com/JurajNyiri/HomeAssistant-Tapo-Control/issues/551 please continue discussion there.
Description
2 days ago i ran the new firmware update for my tapo C200 cams. The HA integration asked to "configure" these devices again but rejects the CLOUD password.
Reproduction Steps
In the first Step the (saved) username + password for the CAMERA account were offered, I confirmed them -> worked.
In the second step
After that I -kicked out the cams in HA -hard-reset them in the Tapo-App -discovered them new -> they were found perfectly fine but still the same bug persists...
Expected behavior
integration accepts the CLOUD password
If applicable, add error logs.
Protocol: `2024-04-10 23:06:28.027 WARNING (SyncWorker_2) [homeassistant.loader] We found a custom integration hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant 2024-04-10 23:06:28.035 WARNING (SyncWorker_2) [homeassistant.loader] We found a custom integration tapo_control which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant 2024-04-10 23:06:28.038 WARNING (SyncWorker_2) [homeassistant.loader] We found custom integration tapo which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant 2024-04-10 23:06:28.042 WARNING (SyncWorker_2) [homeassistant.loader] We found a custom integration watchman which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant 2024-04-10 23:06:48.598 WARNING (MainThread) [homeassistant.setup] Setup of bluetooth is taking over 10 seconds. 2024-04-10 23:07:20.085 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/discovery_flow.py", line 96, in _async_start await gather_with_limitedconcurrency( File "/usr/src/homeassistant/homeassistant/util/async.py", line 188, in gather_with_limitedconcurrency return await gather( ^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/util/async.py", line 186, in sem_task return await task ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/config_entries.py", line 947, in async_init flow, result = await task ^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/config_entries.py", line 975, in _async_init result = await self._async_handle_step(flow, flow.init_step, data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 508, in _async_handle_step if result.get("preview") is not None: ^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'get' 2024-04-10 23:07:45.551 WARNING (MainThread) [homeassistant.config_entries] Config entry '192.168.178.81' for tapo_control integration could not authenticate: Invalid authentication data 2024-04-10 23:07:45.879 WARNING (MainThread) [homeassistant.config_entries] Config entry '192.168.178.82' for tapo_control integration could not authenticate: Invalid authentication data 2024-04-10 23:12:37.555 ERROR (MainThread) [frontend.js.latest.202402071] Uncaught error from Firefox 124.0 on Windows 10 TypeError: this.contentElement is null renderHeading (src/components/ha-dialog.ts:53:4) apply (src/scoped-custom-element-registry.js:262:44) mainWindow.history.pushState (src/dialogs/make-dialog-manager.ts:129:7) 2024-04-10 23:12:56.949 ERROR (MainThread) [frontend.js.latest.202402071] Uncaught error from Firefox 124.0 on Windows 10 TypeError: this.contentElement is null renderHeading (src/components/ha-dialog.ts:53:4) apply (src/scoped-custom-element-registry.js:262:44) mainWindow.history.pushState (src/dialogs/make-dialog-manager.ts:129:7) 2024-04-10 23:14:58.894 ERROR (MainThread) [homeassistant.config_entries] Error calling entry remove callback 192.168.178.82 for tapo_control Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/config_entries.py", line 645, in async_remove await component.async_remove_entry(hass, self) File "/config/custom_components/tapo_control/init.py", line 277, in async_remove_entry coldDirPath = getColdDirPathForEntry(hass, entry_id) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/tapo_control/utils.py", line 116, in getColdDirPathForEntry if hass.data[DOMAIN][entry_id]["mediaSyncColdDir"] is False: