From: dbucklin@sdf.org
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 dave@example.com:/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.