Dedicated Camera Monitor
From:     https://wiki.zoneminder.com/Dedicated_SBC_Camera_Monitor


Intro Contents Desktop SBC Cam Mon RPI Mon



Dedicated SBC Camera Monitor
A guide to setup an SBC (Beaglebone black) or Desktop that will monitor a
video feed from ZM. Simply add power, and the video feed will appear on boot.
OS will be Devuan Jessie, WM will be dwm, terminal st, and browser will be surf.
It will be a minimal installation. Leaner than LXDE, the default DE for beaglebone.
I'll include optional steps to setup Device Trees and the I2C peripheral
(Beaglebone specific) and read a sensor. Combine with ZMTrigger.
This is noticeably more difficult than connecting a coaxial cable to a CRT
such that an analog, older setup would have. But is more flexible. A desktop
is generally recommended here, but SBC's can be used as well.
After you setup this OS once, it's advisable to copy to an img and then
deploy on as many machines as necessary. A good size for the single OS root
partition might be 4GB.
Tested in 03/2017 on a Desktop and Beaglebone with Devuan Jessie

Note that in the end, due to faulty video display, I ended up using an old
laptop instead. A BBB is able to handle one stream, but seemed to have a bug
in the final deployment.

Update: 08/2018 Tested with Rpi3 and Debian Stretch migrated to Devuan Ascii
here Dedicated_RPI_Camera_Monitor

Another companion to this guide is the Desktop_SBC_Camera_Monitor

11/2018: See also Zoneminder Blogspot - ODroid XU4 Zoneminder Client guide.


Contents
Setup
Installation Requirements Install Beaglebone Black Debian Jessie using elinux.com's BeagleBoardDebian page. Use the direct image (under Demo, below NetInstall). Not the netinstall, which is slower, unless you know what you are doing. After booting from the SD card, make sure the network interface is set to load in: nano /etc/network/interfaces Next, migrate to Devuan using Dev1fanboy Upgrade-Install-Devuan wiki guide. Skip most of the part about the display environment. Reboot after apt-get dist-upgrade. Try the purge of libsystemd0 in DE section, if you like. May not work. RCN repo seems to want it. Complete the following commands su root Remove non-free from /etc/apt/sources nano /etc/apt/sources.list apt-get install xorg libx11-dev libxft-dev libxinerama-dev gcc make htopsudo tcpdump git For Surf apt-get install libwebkitgtk-dev libgtk2.0-dev linux-headers-$(uname -r) Download simple programs git clone http://git.suckless.org/dwm && git clone git://git.suckless.org/st && git clone git://git.suckless.org/surf Edit the config for dwm nano dwm/config.def.h cd dwm make make install cd ../st nano config.def.h make make install
Cleanup apt-get remove nfs-common rpcbind wpasupplicant avahi-daemon ofono apache2 Leave wpasupplicant if you use wifi. Net installer may want to install acpid. Beware of removing cron. Just disable the service. Remove Exim4 if you want. At this point maybe 40MB RAM, and <5% CPU. Compare to LXDE.
Clock Only needed if you are keeping time. # apt-get install openntpd You can run ntpdate for manual updates but an ntpd daemon seems to run better (albeit, it opens ports and uses more resources).
Auto Start Edit .xinitrc, /etc/rc.local, /etc/inittab, and .bash_profile to auto startx without requiring a login, load surf with the path of the zm server monitor feed, and disable the screensaver. Added to /etc/inittab (comment out existing, and add this below. Replace username with your new user): 1:2345:respawn:/bin/login -f USERNAME tty1 </dev/tty1 >dev/tty1 2>&1 Copy /etc/profile to user that will be auto logging in: cp /etc/profile /home/USERNAME/.bash_profile Appended to /home/USERNAME/.bash_profile : exec startx When startx loads, it will pull settings from ~/.xinitrc for USERNAME so edit that (note that .xinitrc requires & after all commands that are not the final wm). #!/bin/bash /usr/local/bin/surf "localhost/zm/cgi-bin/nph-zms??mode=jpeg &monitor=1&scale=100&maxfps=5&buffer=1000&user=user&pass=pass" & exec dwm Add an additional user beside the one used for the auto login, otherwise ssh will fail. ssh will try to startx when it loads, and it won't be able to. Add USERNAME2 permissions to sudoers. # adduser USERNAME2 nano /etc/sudoers Disable screensaver for the first USERNAME per Arch Wiki: Display Power Management SIgnaling nano /home/USERNAME/.xinitrc export DISPLAY=:0 & xset s off & xset -dpms & These go before the other commands in .xinitrc, as they have the & symbol. The total .xinitrc will be something like: #!/bin/bash export DISPLAY=:0 & xset s off & xset -dpms & /usr/local/bin/surf "localhost/zm/cgi-bin/nph-zms??mode=jpeg &monitor=1&scale=100&maxfps=5&buffer=1000&user=user&pass=pass" & exec dwm Note: When troubleshooting xset. You must be the same user that is running X (ssh in as different user, then su to user). And, you must export DISPLAY to :0 or similar. Finally xset q should query the current settings.
Fine Tuning At this point, you should be able to boot the SBC or desktop and receive a video feed without user interaction. However there are two problems (Beagle). One, it is not full screen. Two, video may be flickering.
Flickering Video This is a known issue with Beaglebone. The simple solution is: install devmem2 or some other memory editing program, change an address. For details of why this is occuring see: [1] and [2] or search online. Steps: git clone https://github.com/VCTLabs/devmem2 cd devmem2 make make install Append the memory adjustment to rc.local nano /etc/rc.local devmem2 0x4c000054 w 0x00FFFFF10 Watch syslog and FIFO errors should immediately stop upon entering write command on memory. Install steps source: Scivision: Devmem2 on the beaglebone black The author of devmem2 (Jan-Derk Bakker, website and code found at lartmaker.nl), his website is down at the moment. You can view the root domain at internet archive, but the page for devmem2 is not available. Others like VCTLabs above have copied his code to various spots. See also the Notes section below.
Full Screen Video Feed Two options come to mind: First Is easiest. Make an html file. Be sure to include http prefix. <html> <img width="###px" height=###px" src="http://serverip/zm/cgi-bin/nph-zms?mode=jpeg&monitor=####&scale=100&maxfps=5&user=username&pass=password"/> </html> Call it on .xinitrc before dwm surf file:///home/username/file.html & Customize the width and height of the img tag to fit your monitor. In my case I put st in the .xinitrc of my beagle instead of surf, restarted, and from the terminal ran xrandr to see what display it was using. I had 1440x900 but the width and height I could get out of surf without borders causing trouble was 1415 and 875. Multiple img tags can be embedded into an html file however you like. See also Example Camera View HTML
Refresh Screen Periodically You will want to have the web browser refresh every few minutes. Otherwise, if the feed drops out, it will not return unless you reboot. The way I accomplished this was: Install xdotool # apt-get install xdotool Edit surf config.h and add the following to the keybindings section, then make and make install. { 0, GDK_F5, reload, { .b = FALSE } }, Add to /etc/crontab DISPLAY=:0 */5 * * * * username /usr/bin/xdotool key F5 To make sure this works, with the browser watching a camera stream, restart apache2 on the ZM server, and the browser feed will freeze. A successful F5 from xdotool will refresh the screen, as long as surf has a keybinding for it.
Accessing headless X via VNC In the case that you have a headless device (no monitor attached) yet X is running, here's some tips for accessing the desktop via VNC. sudo apt-get install xserver-xorg-legacy add: allowed-users:anybody in /etc/X11/Xwrapper.config apt-get install x11vnc Final command may be something like ssh -L 5900:localhost:5900 user@pineboard x11vnc -safer -localhost -nopw -once -auth /tmp/serverauth* -display :0 If you are doing headless on vnc, get rid of startx on bash profile and just run it manually. Test x11vnc with x11vnc -display :0 But none of the other flags to start. When in doubt, break the commands down to make troubleshooting easier.
Using the Breakout Headers These steps are optional. They were used to include an RTC, so the BBB could be used as a dashcam.
Device Trees and Pin Initialization Here are some notes, from my own setup of I2C. It can be confusing if you are new to the Beagle. This guide is also helpful for configuring other peripherals such as GPIO, UART, and SPI. https://github.com/beagleboard/bb.org-overlays Follow this link for developers. Ignore the part about pre built kernels if you used the RCN based installer or image from elinux.org's BeagleBoardDebian. You already have cape manager support. If you don't have DTC where is asks for it in the 2nd step for dtc -version, ignore that step. The ./dtc_overlay.sh script will install the latest compatible device tree compiler.
Next https://github.com/cdsteinkuehler/beaglebone-universal-io And use this to configure the pins. There are also preset modes with the pins configured in various states, but I found it more satisfying to customize them to my needs. cd .. git clone https://github.com/cdsteinkuehler/beaglebone-universal-io cd beaglebone-universal-io No installation is required for config-pin. Test it now: ./config-pin overlay cape-universal This will allow a lot of pins to be edited. This must be done first. Then you can configure pins. There are other modes as well, see github. Cape -universal exports all pins except for HDMI and EMMC pins. #:~/beaglebone-universal-io# cat /sys/devices/platform/bone_capemgr/slots 0: PF---- -1 1: PF---- -1 2: PF---- -1 3: PF---- -1 7: P-O-L- 0 Override Board Name, 00A0,Override Manuf, cape-universal Now you can run something like this: ./config-pin p8_07 hi To set Pin 07 on header 8 to GPIO HI To see more options ./config-pin -h e.g. ./config-pin -l 9_11 default gpio gpio_pu gpio_pd uart Showing us we can set the pin to UART or one of the GPIO modes. ./config-pin -a 9_11 uart Then we can access the UART through either the direct memory registers, or the linux file system access (search online for more details). The config-pin overlay cape-universal can be set in /etc/rc.local as well as individual pin settings.
I2C Usage # apt-get install i2c-tools List # i2cdetect -l The i2c peripheral, after being connected to the BBB, will be on one of the three i2c buses. Either 0,1, or 2. # i2cdetect -r 0 Here we search on 0. I used a BMP180 barometer and mine showed up at 77. Unfortunately, the sensor can't be read from without a driver. What you will need to do is recompile the kernel with that driver included, as linux has a driver for the BMP085, but not by default. References: (from http://elinux.org/EBC_Exercise_12_I2C) [3] [4]
Recompile Kernel With Sensor Driver I built the kernel natively on the Beagle, but this failed. It easiest to cross compile from a Debian based distro. I received an error trying to cross compile on Gentoo. http://elinux.org/EBC_Installing_Kernel_Source is a good guide that doesn't require javascript (as RCN's docs do). I installed via the SD card, not through sshfs. Latter did not work. When searching for the driver, in the kernel compile menu, easiest is to hit "/" key and search. In my case "/" then BMP returns the place of the barometer driver. Finally, with the kernel built with support for your i2c device: su root echo bmp085 0x77 > /sys/class/i2c-adapter/i2c-1/new_device 0x77 Can be found from i2c-detect. See references. These steps are only valid for the bmp pressure sensor, and when it's on i2c -1. Review dmesg to see if kernel recognized device. $ dmesg -T Navigate to /sys/bus/i2c/drivers/bmp085/1-0077/ and review what the file system provides access to from the sensor using the newly installed driver.
Instantiate BMP on boot Two quick user space options: echo bmp085 0x77 > /sys/class/i2c-adapter/i2c-2/new_device in /etc/rc.local. Or add an init.d service (same idea). References: Elinux.org - BMP on Beaglebone Black Raspberry Pi S.Exchange Cannot Perform Echo command to load driver for rtc module [5] [6]
Todo
Notes / Errata
Troubleshooting
Installing and updating is slow! On an SBC a counterfeit SD card could be the cause. A counterfeit or non name brand SD may take one day, what takes 2 hours to do with a name brand card.
Video monitor flickers, syslog says FIFO underflow! See install steps regarding adjusting memory addresses with devmem2.
How do I disable keypresses for kiosk mode? I don't have the need, but it's possible to do further lockdown. Look online.
Video is still flickering after devmem2 changes! See my note. More research is needed. I was able to see the BBB running a ~3FPS 720p stream without error at one point, but at a later point, it began to drop out occasionally. It may be best to either run the viewing feed at a lower resolution, or to use a more powerful ARM based board (or a desktop if you don't need low power).
See Also =======================================================
Desktop SBC Camera Monitor From: https://wiki.zoneminder.com/Desktop_SBC_Camera_Monitor This is an continuation of Dedicated SBC Camera Monitor. The tips here are for a Desktop that will use Firefox to monitor > 1 camera streams at once, but otherwise uses the earlier guide. There are some differences. Contents
How to watch > 6 Monitors Firefox is the easiest to setup here. It's not known how to configure other browsers for > 6 monitors. # apt-get install firefox-esr Then see: Dummies Guide - Notes
How to load firefox in full screen by default The best add-on for this I've found is mFull. It can be configured to load full screen, and to remove or autohide the toolbars and navigation bar. There is also RKiosk but this disables all keys and is not needed in my scenario. I've seen some strange behavior with this plugin. On some machines it works and on other machines it will not work. Your guess is as good as mine. Note this addon was used in Firefox 52 or earlier.
I loaded dwm but firefox isn't anywhere? Sometimes firefox will load on workspace 9 in dwm. Remove all other workspaces (config.h, tags) and firefox will load on the first workspace.
What to install from Devuan iso? You should already know this. Standard system utilities and SSH server. Do not install any DE. Do not use automated install which will install DE if you miss pressing a button in time.
Shutdown machine automatically? # nano /etc/crontab 00 18 * * * root /sbin/poweroff The problem is you need full path to poweroff or shutdown -h now. If you are on a separate lan, you may need to use ntp and query some local ntp server, if RTC is off.
Refresh Screen Periodically? Reload every can be set in about:config to reload all new tabs at a specified interval (add on). Set new tabs to autoreload. Set interval, then add the monitor tab, restart and if done correctly, the tab should refresh periodically. However, I recommend this guide.
=======================================================
Dedicated RPI Cam Monitor From: https://wiki.zoneminder.com/Dedicated_RPI_Camera_Monitor Following the similar Dedicated_SBC_Camera_Monitor guide, I'll do the same thing with a Raspberry Pi model 3, and Devuan Ascii, this time (migrated from Debian Stretch Lite) This guide is considered an addendum to the above guide, so please be familiar (at least read through it) first. You will be going back to that guide, at certain points, to follow those steps. I will not repeat them here. There is no need.
Start First, image the Debian Stretch Lite to your SD card. Boot up and enable ssh (service ssh start), change your password (passwd pi), and apt-get update && apt-get dist-upgrade If you later want to use ffmpeg and hwaccel to view streams, you will want to install ffmpeg now from the official rpi repos (more details further down). Now we will migrate following these instructions [1] but first read the next paragraph. Before installing sysvinit-core I created an /etc/network/interfaces file with the following: auto eth0 iface eth0 inet dhcp Before rebooting, after apt-get install sysvinit-core, make sure /etc/inittab exists, and has startup data. I've had issues where, when migrating a VPS to devuan Jessie, inittab did not exist, and the VPS would fail to boot. Continue with the ascii migration guide. At the end, go to /etc/apt/sources.list.d/ and remove the raspberry pi link there. Sidenote: This particular arm OS is armhf (arm with hardware float peripheral included). There is also armel, and arm64 (arm with software float, and arm 64 bit respectively) that is available for debian on the pi. The devuan sd card image for rpi3, if used from the devuan mirrors, is arm64. This is an important distinction in the case that you might want to use this platform for something else. Some apt packages and external software that is available for armhf, are not supported (officially supported) as well in arm64, and possibly vice versa. The main raspberry pi 3 images are armhf, so from that, most software is compatible with armhf. I will try install firefox-esr here. NOTE: it's truly best to use VLC or mplayer with the hwaccel codecs, and directly view the RTSP stream of the camera, but I happen to be using this for viewing an internet stream in this use case scenario. For those interested in using VLC or mplayer direct with hwaccel codecs, please see this thread [2]. Continue following the Dedicated SBC guide, where you install htop, tcpdump, and git clone the repos for dwm and st. make and install dwm and st apt-get remove nfs-common rpcbind avahi-daemon continue following that guide .xinitrc for your new user will be #!/bin/bash export DISPLAY=:0 & xset s off & xset -dpms & /usr/bin/firefox & exec dwm And follow the rest of the guide. If everything goes well (as it did for me) you will be able to reboot and see firefox and dwm startup.
Notes Note: Firefox starts in workspace 9, so you might have to change over to it in dwm upon boot. You can remove all workspaces except for #1, and then ff will boot by default on the first. I tested video (though not sound) and was able to watch one without any skipping. Those who use ffmpeg and hwaccel may have even better results.