From:
[email protected]
Date: 2019-06-30
Subject: Setting Up a Pi-based Webcam
I set up a camera so that we can check in on our cat during the
day. I had a Logitech C270 webcam sitting around (Amazon says I
bought it June 23 2016). I connected the camera to a Raspberry Pi
3 that was gathering dust and, 24 hours later, I had a working web-
cam.
The Pi already had Debian installed from a previous project.
First, I updated everything with apt. I spent some time updating
the configuration of wpa_supplicant to match my current Wi-Fi set-
tings. I then installed webcam, software that grabs an image from
an attached camera and uploads it anywhere you like. I copied the
default configuration from webcam's man page to .webcamrc, updated
a few settings, added myself to the video group (/dev/video0 is
660, owned by root:video), and started capturing images.
I ran into an issue with the file transfer to my web server. When
connecting to my VPS, I use a public key. The location of the key
is specified in the -i option to scp. I didn't see a way to speci-
fy that in webcam's configuration. So, I wrote a wrapper in bash
that captured the image locally using webcam and then uploaded the
image in a separate step using scp.
I had another issue when capturing images. Webcam would often fail
to grab an image from the camera in the first few attempts. It
would die because /dev/video0 was missing, busy, or because I
didn't have permission. Oddly, this issue would usually resolve
itself after a few attempts. I extended my bash script to run web-
cam until it successfully captured an image or failed five times,
whichever came first. This setup has been reliable so far.
Here's the script:
#!/bin/bash
tries="5"
while [[ "$tries" != "0" ]]; do
tries=$(($tries - 1))
webcam && scp -i keyfile /home/dave/webcam.jpeg
[email protected]:/var/www/ && tries="0"
sleep 2
done
With the capture and upload working, I wanted to make it run auto-
matically. Technically, webcam can do that on its own but, due to
my workarounds, I decided to create a cron task for it.
I added the following line to my crontab:
*/10 8-17 * * * bash /home/dave/capture.bash >/dev/null 2>&1
Cron will run my capture script every ten minutes between 8 a.m.
and 5 p.m. I throw away all the output, otherwise cron will send
it to me in an email and I don't want those stacking up.
The Pi and webcam are now set up in an out-of-the-way corner. The
camera is pointed at one of our cat's favorite lounging spots.
When we're out and about, we can pull up the most recent webcam im-
age on our phone and possibly catch our cat napping by the window.