Hi, thanks for all the work in this application. I have got it working but had to remove the SD cards from the cameras (C310) because I kept getting a message in the Tapo app saying SD card recording didn’t work well with NVD ect. recording so NVD recording was disabled and to remove SD card if you wanted to use it, otherwise I got no stream.
Is there a way to use this integration with the card in because I have been using continuous recording to the cards?
I just found this:
Q3.4: Why can’t I use Tapo Care, SD card, and NVR at the same time?
A: Due to the limited hardware performance of the camera itself, Tapo Care works best with one of the NVR or SD card recordings.
If you are using an SD card and Tapo Care at the same time, the NVR(RTSP/ONVIF) will be disabled.
To restart the recording on the NVR, please remove the SD card from the camera.
And actually the answer for the amount of streams is there as well:
Is there a a way to use the integration to stream and control the camera with no recording so you can record on the card but not in HA?
Or can you set it up just using HA and SD card no Tapo care?
Sorry for all the questions but I’m a newbie to all this
Home assistant acts as “NVR(RTSP/ONVIF)”. The rest is in the quote you sent, you need to choose.
Thanks for that. But when you set up the Tapo camera control integration it asks for a cloud id. How do you set it up and not use the cloud, only SD card? I don’t need the cloud.
This integration does not ask for cloud ID. It asks for the account credentials that you create and optionally your cloud password.
You are mistaking cloud account for Tapo subscription, this integration does not need the paid subscription but every camera needs to have a cloud account (your email and password which you use to sign into app).
OH Ok. The Cloud password is optional? it will set up and work without it? I assumed that it was needed so I signed up to Tapo care.
So I can cancel the cloud subscription and setup HA with no cloud password and just use the card then?
Thanks for all your help and patience
Cloud account does not mean cloud subscription, it is two separate things, read my message above again carefully.
OK, I see that now. So the “cloud” password it asks for is only the app password. You say that it is optional so do you need to enter the app password for it to work or can you not enter it?
If by app password you mean your tplink cloud account yes. Some cameras require it, some not, it will be handled during setup automatically if it asks for it enter it. It does not mean it needs Tapo care subscription.
Ok Thank you very much for your help.
Great integration.
Well, I really don’t know what to make of it.
I deleted all the cameras and uninstalled the custom component. Then reinstalled it again.
After that I couldn’t even add the Tapo C200: “Invalid authentication data…” during the initial configuration. The same with the other cameras C310.
There was a initial (local) connection as putting the ip address it went to ask the username and the password, but after that it seems to be rejected by ¿TP-Link’s cloud?
So I uninstall all cameras from the Tapo’s App and added them again.
After that I could, again, add the C200 to the integration; but no such luck with the others. Still the same: “Invalid authentication data…”.
I even turned off Synology’s Surveillance Station and Frigate; also closed Tapo’s App. Trying to reduce the number of streams, but still the same results.
But what I find strange about it is that even while I’m using all the streams for third parties apps, I can still use VLC to see another stream (in fact, both streams 1 & 2); so it shouldn’t really be a problem of TP-Link restrictions.
Also, they were working fine before.
Anyone else having problems with the C310?
You are overloading the camera with too many services running off them. Assign new IP to them, restart them, point Home Assistant only to the new IP without putting IP to anything else and it will work. If not, you are most probably entering incorrect credentials or have unstable network.
It should be, but I’m not really looking to loosing any of the other services… And all of them, with this component included, were working well, till some time ago; and did so for months on and on.
A pity.
I had some nice automations, with the motion sensors, like warning me the dog was back after going outside in the early mornings.
I am using the camera with frigate too without any issues. What I have done is used hd streams for frigate and SD streams for HA.
If you do not mind stream with a few sec delay you can use restream provided by frigate and enter the URL for it inside this integration options. That way you use only 1 stream from camera.
You can also use the restream from frigate for Synology NVR or anything else.
Hello,
first of all many thanks for this great integration.
I have a C110 and a C320WS integrated in Homeassistant.
Everything works fine with the C110.
With the C320, unfortunately, the motion detection does not work. I get a notification via the Tapo app on my phone, but the binary sensor in HA does not appear.
I have worked through all the suggestions in the readme.
The following error message appears as soon as motion is detected
Logger: custom_components.tapo_control
Source: components/onvif/event.py:82
Integration: Tapo: Kamerasteuerung (documentation, issues)
First occurred: 19:44:16 (56 occurrences)
Last logged: 19:58:14
Unexpected error fetching Tapo resource status data: illegal status line: bytearray(b'POST /onvif/service\x00HTTP/1.1\x00\x00Host\x00 192.168.20.108:2020\x00\x00Accept\x00 */*\x00\x00Accept-Encoding\x00 gzip, deflate, br\x00\x00Connection\x00 keep-alive\x00\x00User-Agent\x00 ZHTTP/1.1 500 Internal Server Error')
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/httpcore/_exceptions.py", line 10, in map_exceptions
yield
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/http11.py", line 188, in _receive_event
event = self._h11_state.next_event()
File "/usr/local/lib/python3.10/site-packages/h11/_connection.py", line 487, in next_event
exc._reraise_as_remote_protocol_error()
File "/usr/local/lib/python3.10/site-packages/h11/_util.py", line 77, in _reraise_as_remote_protocol_error
raise self
File "/usr/local/lib/python3.10/site-packages/h11/_connection.py", line 469, in next_event
event = self._extract_next_receive_event()
File "/usr/local/lib/python3.10/site-packages/h11/_connection.py", line 411, in _extract_next_receive_event
event = self._reader(self._receive_buffer)
File "/usr/local/lib/python3.10/site-packages/h11/_readers.py", line 104, in maybe_read_from_SEND_RESPONSE_server
matches = validate(status_line_re, lines[0], "illegal status line: {!r}", lines[0])
File "/usr/local/lib/python3.10/site-packages/h11/_util.py", line 91, in validate
raise LocalProtocolError(msg)
h11._util.RemoteProtocolError: illegal status line: bytearray(b'POST /onvif/service\x00HTTP/1.1\x00\x00Host\x00 192.168.20.108:2020\x00\x00Accept\x00 */*\x00\x00Accept-Encoding\x00 gzip, deflate, br\x00\x00Connection\x00 keep-alive\x00\x00User-Agent\x00 ZHTTP/1.1 500 Internal Server Error')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/httpx/_transports/default.py", line 60, in map_httpcore_exceptions
yield
File "/usr/local/lib/python3.10/site-packages/httpx/_transports/default.py", line 353, in handle_async_request
resp = await self._pool.handle_async_request(req)
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/connection_pool.py", line 253, in handle_async_request
raise exc
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/connection_pool.py", line 237, in handle_async_request
response = await connection.handle_async_request(request)
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/connection.py", line 90, in handle_async_request
return await self._connection.handle_async_request(request)
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/http11.py", line 112, in handle_async_request
raise exc
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/http11.py", line 91, in handle_async_request
) = await self._receive_response_headers(**kwargs)
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/http11.py", line 155, in _receive_response_headers
event = await self._receive_event(timeout=timeout)
File "/usr/local/lib/python3.10/site-packages/httpcore/_async/http11.py", line 187, in _receive_event
with map_exceptions({h11.RemoteProtocolError: RemoteProtocolError}):
File "/usr/local/lib/python3.10/contextlib.py", line 153, in __exit__
self.gen.throw(typ, value, traceback)
File "/usr/local/lib/python3.10/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
raise to_exc(exc)
httpcore.RemoteProtocolError: illegal status line: bytearray(b'POST /onvif/service\x00HTTP/1.1\x00\x00Host\x00 192.168.20.108:2020\x00\x00Accept\x00 */*\x00\x00Accept-Encoding\x00 gzip, deflate, br\x00\x00Connection\x00 keep-alive\x00\x00User-Agent\x00 ZHTTP/1.1 500 Internal Server Error')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 225, in _async_refresh
self.data = await self._async_update_data()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 181, in _async_update_data
return await self.update_method()
File "/config/custom_components/tapo_control/__init__.py", line 210, in async_update_data
await setupOnvif(hass, entry)
File "/config/custom_components/tapo_control/utils.py", line 402, in setupOnvif
hass.data[DOMAIN][entry.entry_id]["eventsSetup"] = await setupEvents(
File "/config/custom_components/tapo_control/utils.py", line 412, in setupEvents
if await events.async_start():
File "/usr/src/homeassistant/homeassistant/components/onvif/event.py", line 82, in async_start
if await self.device.create_pullpoint_subscription():
File "/usr/local/lib/python3.10/site-packages/onvif/client.py", line 311, in create_pullpoint_subscription
pullpoint = await events.CreatePullPointSubscription()
File "/usr/local/lib/python3.10/site-packages/zeep/proxy.py", line 64, in __call__
return await self._proxy._binding.send_async(
File "/usr/local/lib/python3.10/site-packages/zeep/wsdl/bindings/soap.py", line 156, in send_async
response = await client.transport.post_xml(
File "/usr/local/lib/python3.10/site-packages/zeep/transports.py", line 235, in post_xml
response = await self.post(address, message, headers)
File "/usr/local/lib/python3.10/site-packages/zeep/transports.py", line 220, in post
response = await self.client.post(
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1848, in post
return await self.request(
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1533, in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1620, in send
response = await self._send_handling_auth(
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1648, in _send_handling_auth
response = await self._send_handling_redirects(
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1685, in _send_handling_redirects
response = await self._send_single_request(request)
File "/usr/local/lib/python3.10/site-packages/httpx/_client.py", line 1722, in _send_single_request
response = await transport.handle_async_request(request)
File "/usr/local/lib/python3.10/site-packages/httpx/_transports/default.py", line 352, in handle_async_request
with map_httpcore_exceptions():
File "/usr/local/lib/python3.10/contextlib.py", line 153, in __exit__
self.gen.throw(typ, value, traceback)
File "/usr/local/lib/python3.10/site-packages/httpx/_transports/default.py", line 77, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.RemoteProtocolError: illegal status line: bytearray(b'POST /onvif/service\x00HTTP/1.1\x00\x00Host\x00 192.168.20.108:2020\x00\x00Accept\x00 */*\x00\x00Accept-Encoding\x00 gzip, deflate, br\x00\x00Connection\x00 keep-alive\x00\x00User-Agent\x00 ZHTTP/1.1 500 Internal Server Error')
When I use the ONVIF integration no motion message pops up either.
Thanks a lot for your help!
Using this for my Tapo C310 but is Tapo C500 supported or will it be suported
How could I uninstall it from HACS? There is no disable or uninstall option. Thanks
Try it out and let us know! It will most probably just work, but if not we can get it supported!
sorry I actually fixed it myself. I just added all three actions inside a parallel action and it worked!
Hi, I have 3 cameras (C200, C200 and C210), connected through Tapo Control integration.
I have 1 trigger that should have all cameras take a snapshot at same time. However there appears to be a 5-10 seconds delay between them (as seen in pictures timestamp) as the cameras are actually taking pictures in the order they are placed in the actions (pics below). so camera 2 shots about 5 seconds after camera 1, and camera 3 shots about 5 seconds after camera 2.
Has anyone experienced similar thing? Perhaps there is another way to deal with multiple actions and same trigger?
Thanks