Skip to content

Instantly share code, notes, and snippets.

@probonopd
Last active August 23, 2024 18:17
Show Gist options
  • Save probonopd/9aed7e6ab7d75c5053f7f5012834b3ae to your computer and use it in GitHub Desktop.
Save probonopd/9aed7e6ab7d75c5053f7f5012834b3ae to your computer and use it in GitHub Desktop.

tp-link Tapo TC70

This is the no-frills description for the stuff that really matters.

Tapo TC70 is pan-and-tilt (PTZ) camera.

TC70(EU) Ver 3.20 is sold as of Mid-2024 for 30 EUR in retail stores in Germany. This page is about this version. Earlier versions of the C200 used a Realtek SoC, completely different hardware.

Connectivity

"TC70 is basically the same model as the Tapo C200." It has only WLAN, no Ethernet. It comes with a note that GPL firmware is available. The file for "TC70 V3" links to https://static.tp-link.com/upload/gpl-code/2022/202211/20221130/c200v3_GPL.tar.bz2, note the "C200" in the filename.

Tapo C212 has Ethernet. It is not considerably more expensive, so probably the better deal. But its GPL firmware is not on the site.

Power consumption

1.4 watts in day mode, 2.2 watts in night mode. Night mode works extremely well even in total darkness. The camera can switch modes automatically, but one can also manually set the mode in the mobile app.

Need a tp-link account

Apparently one needs their mobile app, which requires a tp-link account. The app connects to the device's WLAN SSID. Maybe the process could be reverse engineered to activate the camera without the need for a tp-link account, but the mobile app would still require it.

Mobile app

The mobile app for Android is ~200 MB in size. Why?

Cloud service

The camera communicates with a cloud service, because the mobile app can access the camera even if it is on another (e.g., mobile) network. This works without much hassle.

The cloud service can send push notifications to the mobile app if movement and/or people are detected. (This must cost the manufacturer money; wonder how long this will work.)

There is seemingly no way to disable the cloud service entirely. (Or is there?)

By default, there is 2FA active, which means that if you want to add a second mobile app, you need to verify a code on the first. This can be disabled in the account settings.

LED

The status LED can be disabled (is green by default all the time, not only when someone is watching!), but it will blink red if the WLAN connection is broken.

Audio

Somewhat surprisingly, the mobile app always plays audio from the camera. There seems to be no video-only option. Optionally one can also speak to the camera, which is reasonably loud but seemingly at a fixed volume.

Resolution

360p, 720p, 1080p. To reduce mobile bandwidth, 360p may be sufficient.

ONVIF

ONVIF is a standard over which PTZ cameras of various manufacturers can be controlled. In order to use it, it needs to be activated using the mobile app, and credentials need to be set.

Once activated, there is also an RTP stream available at rtsp://192.168.0.24:554/stream1, asking for the credentials set above. It works with VLC.

The Windows application "IP CENTCOM" successfully discovered the camera at 192.168.0.24:2020. The application also suggests to expose ONVIF port 2020 and RTSP port 554 via NAT for WAN access.

Apparently the camera only has IPv4 but not IPv6, which is a pity because it means that in order for WAN access, one needs a dyndns service or some VPN-like solution. (Would be nice if we could hack the camera firmware to run it there.)

https://www.onvif.org/wp-content/uploads/2016/12/ONVIF_WG-APG-Application_Programmers_Guide-1.pdf describes the ONVIF API.

Ports

$ nmap -p- 192.168.0.24
Starting Nmap 7.93 ( https://nmap.org ) at 2024-08-17 00:19 CEST
Nmap scan report for 192.168.0.24
Host is up (0.025s latency).
Not shown: 65530 closed tcp ports (conn-refused)
PORT      STATE SERVICE
443/tcp   open  https # ???
554/tcp   open  rtsp # RTSP video streaming, works with VLC
2020/tcp  open  xinupageserver # Actually, ONVIF
8800/tcp  open  sunwebadmin # ONVIF event notifications? See https://gist.github.com/schauveau/c4ff736ae46f9d21527ef1eccee5baa1#port-8800
10123/tcp open  unknown # ???

Hardware

GPL Firmware package has ./c200v3_GPL/camera_slp/slp-sp-target-src/ingenict31/linux-3.10.14/, so we probably have an Ingenic T31 SOC of some sort.

./c200v3_GPL/camera_slp/torchlight/product_config/ALL/buildroot.config says OpenWrt version: Attitude Adjustment (r3039).

https://github.com/RX309Electronics/Tapo-C200V3-cam-research-project documents the innards of TC70(EU) Ver 3.20.

Note:

  • Serial pins
  • Unpopulated USB connector

Original Firmware

The firmware files seem to be encrypted, as binwalk doesn't find anything.

Though different versions all seem to begin with

xxd Tapo_TC70v3_en_1.3.8_Build_230913_Rel.54885n_up_boot-signed_1695869685783.bin | more
00000000: 0000 0200 55aa 4c5e 831f 534b a1f8 f7c9  ....U.L^..SK....
00000010: 18df 8fbf 7da1 aa55 0800 0000 0000 0017  ....}..U........

Open Source Firmware

https://thingino.com/ is a project for Open Source Firmware for Ingenic SoC IP Cameras. As of 8/2024, it does not support many Tapo cameras, yet.

One needs to find out the GPIOs to control the PTZ motors, the IR lights, and the SD enable pin. If one had root access to the stock device, one could possibly look them up by running mount -t debugfs none /sys/kernel/debug; cat /sys/kernel/debug/gpio.

So far, I have found this.

References

What can we learn in Open source from China? | Ingenic T31 MIPS/RISC DIY Embedded Linux

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment