====== Raspberry Pi Camera on ZoneMinder ====== I spent a lot of time trying to find some good software to run on a Raspberry Pi to turn it into a camera. Even tried to write my own using Perl, but all the libraries are in Python, so it took too much for a simple project. I found the v4l2rtspserver (https://github.com/mpromonet/v4l2rtspserver) and decided to try it. The author has a good page, but assumes I knew how to configure ZoneMinder (which was mistaken). Anyway, no GUI needed, so I did the Raspberry Pi OS Lite (https://www.raspberrypi.org/software/operating-systems/) and set it up, then did the following. Ended up with a pretty decent camera that is not "phoning home" with all your images. ===== Get raspbian image onto SD ===== - Download the Lite version of Raspbian from [[https://www.raspberrypi.org/downloads/raspbian/]] - write the downloaded image to the micro-sd (do not uncompress) - mount /boot from SD onto /mnt touch /mnt/boot/ssh # enable ssh # only do the following if you need wifi. Change country code, ssid and psk for your system # see [[https://www.raspberrypi.org/documentation/configuration/wireless/headless.md]] cat </mnt/boot/wpa_supplicant.conf ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country= network={ ssid="" psk="" } EOF Insert SD into your Pi and boot up. ===== Configure Raspberry Pi ===== Enable wlan by adding the following to /etc/wpa_supplicant/wpa_supplicant.conf country=US network={ ssid="your ssid" psk="your psk" } Now, do the install # Set up Camera raspi-config # go to Interface, and enable camera reboot ls -lh /dev/video* raspistill -v -o test.jpg # Verify camera works # Remove Swap File sudo systemctl stop dphys-swapfile.service sudo systemctl disable dphys-swapfile.service sudo systemctl mask dphys-swapfile.service sudo rm /var/swap # add zram for swap sudo apt-get install zram-tools sed -i 's\.*ALLOCATION=.*\ALLOCATION=100\g' /etc/default/zramswap sudo systemctl enable zramswap sudo systemctl restart zramswap # Set up ntp sudo apt-get install ntp sudo timedatectl set-timezone America/Chicago # add base packages needed sudo apt install \ liblivemedia-dev liblog4cpp5-dev libasound2-dev git gdebi-core cmake build-essential v4l-utils # get and build v4l2... git clone https://github.com/mpromonet/v4l2rtspserver cd v4l2rtspserver cmake . make sudo make install # do the install sudo gdebi v4l2rtspserver-0.2.0-6-g3542b6f-Linux-armv6l.deb # create systemd module cat </etc/systemd/system/v4l2rtspserver.service # systemd configuration for v4l2rtspserver # /etc/systemd/system/v4l2rtspserver.service [Unit] Description=v4l2rtspserver rtsp streaming server After=network.target [Service] #ExecStartPre=/usr/bin/v4l2-ctl --set-ctrl vertical_flip=1 ExecStartPre=/usr/bin/v4l2-ctl --set-ctrl h264_i_frame_period=5 ExecStart=/usr/local/bin/v4l2rtspserver -F 5 -W 1280 -H 720 #ExecReload=/bin/kill -HUP $MAINPID Type=simple User=root Group=video Restart=always [Install] WantedBy=multi-user.target EOF # enable the service sudo systemctl enable --now v4l2rtspserver.service At this point, you should be able to get an rtsp by pointing vlc to [[rtsp://{pi zero ip}:8554/unicast]] ===== Zoneminder Configuration ===== Create a new monitor in ZoneMinder with the following parameters * Source Type: Remote * Remote Protocol: RTSP * Remote Method: RTP/Unicast * Remote Host Name: Hostname or IP * Remote Host Port: 8554 * Remote Host Path: /unicast * Capture Width: 640 * Capture Height: 480 You should soon see the output in zoneminder. ===== Production ===== For production, change the resolution of //both// the camera and the ZoneMinder configuration - Edit /etc/systemd/system/v4l2rtspserver.service - Change -W and -H (width and height) to your desired parameters - 1920 x 1080 (1080p) Gives you a lot of details, but also transfers a lot of traffic and is fuzzy - 1280 x 720 (720p) Is a lot lower bandwidth and "prettier" picture - # reload the systemctl daemon systemctl daemon-reload # reload the config for v4l2rtspserver systemctl restart v4l2rtspserver # Set v4l2rtspserver to autostart systemctl enable v4l2rtspserver - Edit Monitor on ZoneMinder - Set Capture Resolution to same values as camera ===== Links ===== * https://zoneminder.blogspot.com/p/rasbpeery-pi-zero-camera.html * https://carlos-journal.blogspot.com/2017/05/setting-up-rtsp-server-in-raspberry-pi.html * https://unix.stackexchange.com/questions/322720/why-wont-my-enabled-systemd-service-start-on-boot