parallax

Doorbell Camera Without a Subscription
Home Improvement

Motivation

I used Nest doorbell camera for a long time. It was easy to use but it has several problems that are hard to get around

  • Streaming or Playback is much slower than it could be,
  • Cost. $80 per year for the Nest Aware but it only has event based recording.

The root cause is that Nest will record to the cloud. When connecting to the camera even on the same network, there is several seconds of delays, and viewing playback will have more delays.

After moving, I’ve decided to DIY a system. It aims to solve the following problems

  • Local live streaming is instant
  • Local playback is fast
  • Save event based videos for 30 days and save full videos for 7 days.

The search started with no subscription doorbell camera, and here are what will be needed

  • Network Video Recording service (software)
  • Camera that supports NVR.
    • Support public video streaming protocols (RTSP/ONVIF)
    • Could be weird to the doorbell transformer

After some searching, seems Reolink doorbell camera is a one viable option. And Shinobi could be for setting up a NVR.

When it comes to doorbell camera, there are wired and battery powered ones. Those wired ones are normally powered by the 24V transformer. Reolink doorbell cameras like some other Reolink cameras supports a third option, where it could be installed with POE (Power over Ethernet). The doorbell camera setup is pretty straightforward.

Interestingly, those traditional mechanical Chimes are powered by a push button switch and the way it rings by short circuiting actually means those doorbell camera couldn’t get power. So normally to keep the mechanical Chime ringing, a separate device is normally needed in the Chime or inside the doorbell. Probably it’s a capacity to hold enough charges during the short circuit.

Shinobi

Shinobi setup is a bit tricky as it requires MySQL, and getting MySQL permissions right is a big challenge. I got a IntelNUC with Archlinux, and I highly recommend going through the Docker way.

Here are a few things you will need to take care when using the official script https://gitlab.com/Shinobi-Systems/Shinobi-Installer/raw/master/shinobi-docker.sh.

  1. It clones into /home/ShinobiDocker and it normally requires root. But running docker as root in the host is way risker than running docker as root in the container. You could just create this folder and set proper permission. Moreover, it mounts host folder for MySQL container. Running as root will bring more trouble in the long run.
  2. Don’t forget about the MySQL password. The MySQL init file actually missed the password either on purpose or by mistake, but the entry file assumes a password as 1234 . This will bring a lot of errors in the Shinobi container
    1. Where the users are created without password https://gitlab.com/Shinobi-Systems/ShinobiDocker/-/blob/master/mysql-init/user.sql?ref_type=heads
    2. Where Shinobi services assume a password https://gitlab.com/Shinobi-Systems/ShinobiDocker/-/blob/master/entrypoint.sh?ref_type=heads

After successfully run Shinbo, you’ll need to go to a portal with http://host_address:8080/super to create the account with default logins

Blog Image

In Reolink, you’ll need to do a bit tweak to start the RTSP and ONVIF service. It’s in Device Info → Network Information → Advanced

Blog Image

A ffprobe test will be the easiest for testing it out if it’s working.

ffprobe rtsp://${reolink_user_name}:${reolink_password}@${reolink_doorbell_camera_ip}:554 

ffprobe version n7.0.1 Copyright (c) 2007-2024 the FFmpeg developers
  built with gcc 14.1.1 (GCC) 20240522
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-frei0r --enable-gmp --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libdvdnav --enable-libdvdread --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libharfbuzz --enable-libiec61883 --enable-libjack --enable-libjxl --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libplacebo --enable-libpulse --enable-librav1e --enable-librsvg --enable-librubberband --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpl --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-mbedtls --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-vapoursynth --enable-version3 --enable-vulkan
  libavutil      59.  8.100 / 59.  8.100
  libavcodec     61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample   5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
Input #0, rtsp, from 'rtsp://shinobi:helloworld123@192.168.0.37:554':
  Metadata:
    title           : Session streamed by "preview"
  Duration: N/A, start: 0.000250, bitrate: N/A
  Stream #0:0: Video: h264 (High), yuv420p(progressive), 2560x1920, 20 fps, 40 tbr, 90k tbn
  Stream #0:1: Audio: aac (LC), 16000 Hz, mono, fltp

After getting the correct RTSP link, adding the monitor in Shinobi is easy. As a test, streaming from camera is very fast and almost real-time.

Next Steps

  • Setup (event based) recording
  • Optimize video processing & storage
  • Setup event notifications

Sign up for the newsletter

Enter an e-mail address to test out form validation and Flowbite modal via reactive Svelte components. This form does not collect any data.