Daily Archives: 2025-12-25


Installing Thingino on a Vanhua FJZ camera  

Two months ago my brother asked me: Which security IP camera should I buy? I needed some time to find a suitable solution.

I used a Yi Camera for several years, but the mobile app was overloaded with ads constantly pushing their cloud video storage services. I cannot recommend Yi or any other vendor whose business model relies on selling inexpensive cameras just to lock you into their cloud services.

My requirements were:

  • Open source firmware.
  • No Wi-Fi to increase security.
  • Ceiling mount.
  • Power over Ethernet (PoE) to simplify the setup in the ceiling.
  • Support for self-hosted recording services (I use Frigate).
  • H265 codec support to save storage (but I needed ti use H264 to support Telegram).
  • On camera motion detection.

It is quite hard to find cameras that clearly show their chipset in the listing. Finally I bought an inexpensive Vanhua FJZ OEM camera from Aliexpress.

Camera specs

  • Chipset: Ingenic T31X (should be enough for H265 and motion detection)
  • Sensor: GC4653 5 MP
  • Flash: 16 MB
  • Connectivity: Ethernet only
  • Power: PoE, 48 V
  • Storage: No SD card
  • Metal housing

After opening the camera, the board dindn’t match the images of the Aliexpress listing, so I initially thought it was a scam, but the camera was perfect, the listing is outdated.

Why switch firmware?

The camera shipped with an unreliable Chinese firmware. For example, viewing video through a browser required a plugin that didn’t work on Linux or Mac. To improve functionality and security, I decided to install Thingino (https://thingino.com/).

OpenIPC was another option, but Thingino seemed better maintained and feature-rich. However, Thingino isn’t perfect: There are bugs, and updates are frequent. Updating can be tricky since fixing bugs often requires SSH access and manual edits.

Installing the firmware

Installing Thingino isn’t straightforward. You need to disassemble the camera and follow the steps in the Thingino wiki.

Some notes from my experience:

  • I had to make a pogo-pin connector for the serial port.
  • The camera has two serial ports, and I initially connected to the wrong one.
  • The bootloader is locked. To access it, you need to trigger an error by shorting two pins of the flash chip so it fails to read the kernel during initialization.
  • Firmware is uploaded via the serial port using ymodem.

The correct serial port and the pins to short:

Accessing the camera

By default, the camera obtains an IP via DHCP.

  • Web interface: http://<camera_ip>
  • SSH: ssh root@<camera_ip> (default password: root, you’ll be prompted to change it on first login)

Configuring streams

In the web interface under Settings → Streamer/OSD, you can configure two streams:

  • Main stream: I’m using 2560×1440 30 FPS H264 15000 kbps
  • Substream: For previews or motion detection. I’m using 640×360 10 FPS H264 1000 kbps

Stream settings are saved in /etc/prudynt.json.

RTSP URLs:

  • Main: rtsp://thingino:thingino@<camera_ip>:554/ch0
  • Substream: rtsp://thingino:thingino@<camera_ip>:554/ch1

These streams can be linked to recording apps like Frigate or tested from Linux using ffplay <stream_url>.

Motion detection

Motion detection is enabled from the web interface by clicking the person icon.

Default settings won’t work without a secondary stream. Thingino supports simple motion detection with rectangular zones defined in JSON. For advanced detection, I plan to use Frigate.

On motion detection Thingino can send messages to:

  • Email
  • FTP
  • MQTT
  • Telegram
  • Webhooks
  • Ntfy.sh

Telegram is particularly useful as it sends notifications to the phone and can store video clips.

Some configuration quirks:

  • /etc/prudynt.json stores motion detection settings.under a “motion” object.
  • Telegram sometimes fails to save; you may need to manually set "send2telegram": true.
  • Motion triggers the script /sbin/motion, which has a bug: it starts a video recording and calls /sbin/send2telegram, which tries to start another recording and fails. You need to comment out the redundant recording call in /sbin/motion.

Publishing to Telegram

To enable Telegram notifications:

  1. Create a bot with @BotFather.
  2. Create a channel and make the bot an administrator.
  3. Enter the bot token and channel ID in the Thingino web interface: Tools → Send to Telegram.

By default, /sbin/motion tries to send a photo and video to Telegram. This did not work in this camera, and I needed to change the call to /sbin/send2telegram clip to send only the video.

Another drawback is that the Telegram app does not support playing H265 videos, the main stream needs to be set to H264.

Telegram bot features

The bot can also respond to commands from authorized users to send live snapshots or video clips. Enable it in the web interface under Services → Telegram bot, and modify the default actions to run binaries in /sbin/ instead of /usr/bin/.

Final thoughts

Installing Thingino on the Vanhua FJZ is a rewarding but technical process. You gain better control and privacy, but it requires patience and careful troubleshooting. I will need another post to explain the Frigate setup.