Like many HA users, I’ve longed for a baby monitor that I could also pull into HA. I gave up on that until recently, the VTech baby monitor that I own had no RTSP, no ONVIF, no integration of any kind. sharing the result in case anyone else has one of these:
Pure LAN - no VTech cloud, no phone app at runtime
Containerized for ARM64 (tested on Pi 3/debian)
technical: the camera uses ThroughTek’s TUTK/Kalay P2P SDK with a VTech-custom X25519 + ChaCha20-Poly1305 auth/decrypt layer on top. I reimplemented that layer in C, dlopen TUTK’s bionic-only .so files inside a bionic chroot, and serve the resulting plaintext H.264 to go2rtc. The last piece was finding a specific post-handshake IOCtrl (0x719) the app sends to flip the camera from its default 1fps preview into proper live HD streaming.
What you’ll need (one-time setup):
Camera paired via the official app (so it has a UID/password assigned)
Rooted Android phone with KernelSU — used once to extract your camera’s TUTK license key + the AV-channel password via kernel uprobes
An aarch64 host on the cameras vlan (Pi 3B+ class works fine)
Not sure about the official app. As soon as I got this working, I killed the internet connection to the camera and base station screen. The screen still works, whether its on “local” mode or connecting through the LAN.
Thanks for the original research and native bridge. I adapted and extended it for the VM901:
The main difference is credential provisioning: this version recovers the TUTK license and OAuth application values directly from libsecrets.so and retrieves the UID/AV password through the VTech cloud flow.
Hi, really sorry if im being silly but I have tried following the steps on your repo but im not able to open the vtech app once the device is rooted so not able to launche the camera. Are you able to provide a bit more clearer steps if im missing something please.
Boy, sorry - I don’t have a lot of ideas on this one. I’m not super familiar with the android rooting world these days and had to rely heavily on AI when it came to that. Any chance you have setenforce 0 set? Only other thing I’d say to try is to use KernelSU if its possible on your device.