Sterk vereenvoudigd script.

Na enige jaren onafgebroken een wolkencamera on line te hebben gehad, vond ik het tijd worden voor een ‘çlean-up’. De RPi Webcam was begonnen in mei 2013 met een eenvoudig script, maar werd later toch met de nodige extra’s uitgebreid. Ongeveer een jaar later kwam daar nog een aanvullende Dropbox toepassing bij. Vorig jaar heb ik zelfs de hele software veranderd naar een geavanceerde Rpi Cam Web Interface met de nodige toeters en bellen.

Allemaal erg mooi, maar met de laatste applicatie merkte ik wel dat de WiFi verbinding regelmatig uitviel op de RPi versie 1 type A (een oude model dus). Hierdoor viel de camera regelmatig stil, vooral als ik niet thuis was. Lastig, dus maar op zoek gegaan naar een oplossing.

Om de WiFi regelmatig te testen op connectie kun je een programmaatje (shell script) maken wat door de crontab (robot) wordt aangeroepen:

#!/bin/sh

TESTIP=192.168.178.1

ping -c4 ${TESTIP} > /dev/null

if [ $? != 0 ]
then
echo “$(date) WiFi seems down, restarting…” >> /home/pi/wifi.log
ifdown –force wlan0
ifup wlan0
else
echo “$(date) WiFi seems up.” >> /home/pi/wifi.log
fi

De TESTIP is het adres van de router. In wifi.log schrijf ik het resultaat van de test. Dit script met de naam testwifi.sh wordt in de /etc/crontab (dit is de system-wide crontab) uitgevoerd met deze regel:

*/10 *  * * *   root    /home/pi/testwifi.sh

Elke 10 minuten wordt er dus gekeken of de WiFi nog verbinding heeft en zo niet dan wordt deze opnieuw gestart. Dus opnieuw verbinding zoeken met behulp van de gegevens in de file /etc/wpa_supplicant/wpa_supplicant.conf:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid=”PA3ANG”
psk=”wachtwoord”
key_mgmt=WPA-PSK
}

Nu ik toch bezig was wilde weer terug naar het eenvoudige webcam script van 2014. Ik had een script met de naam elapse.sh geschreven, met de mogelijkheid om verschillende formaten aan te kunnen bieden plus een website met php mogelijkheid. Redelijk zwaar. In eerste instantie met lighttpd en daarna zelfs met apache. Nou kan de RPi dat makkelijk aan, maar ik houd wel van KISS (Keep It Simple Stupied) en ik kwam een ‘ingebouwde’ webserver gebaseerd op Python tegen die ook nog eens onderdeel is van het standaard RPi pretpakket. Je hoeft dus geen aparte webserver te gebruiken, mits je html gebruikt (dus geen php) en simpele rechttoe rechtaan geschreven pagina’s gebruikt. Wel heb ik daarnaast een ftp mogelijkheid geïnstalleerd en via GitHub een Dropbox upload applicatie.

#!/bin/bash

picture=/var/www/webcam/stills/still.jpg

while [ true ]; do

directory=`date +%Y%m%d`
snaptime=`date +%H%M`
datetext=`date +%d/%m/%Y`
timetext=`date +%H:%M`

raspistill -o $picture -w 720 -h 405 -q 30 -awb auto -sa -70 -br 54

convert $picture -pointsize 20 -fill yellow -annotate +20+30 ‘RPi-Webcam|JO32am’ $picture
convert $picture -pointsize 16 -fill yellow -annotate +230+30 $datetext $picture
convert $picture -pointsize 16 -fill yellow -annotate +320+30 $timetext $picture
convert $picture -pointsize 16 -fill yellow -annotate +620+30 ‘©pa3ang’ $picture

ftp -n pa3ang.nl <<END_SCRIPT
quote USER ftp_user
quote PASS ftp_wachtwoord
binary
put $picture /public_html/webcam/stills/still.jpg
quit
END_SCRIPT

./dropbox_uploader.sh upload $picture $directory/$snaptime.jpg

while [ `date +%H%M` -eq $snaptime ]; do
sleep 1
done

done

Toen ik deze eenvoudige wijze van beeldopslag weer aanzette, merkte ik dat er geen tekst meer op de wolkenfoto was afgebeeld. Hiervoor maar weer google gebruiken en ja hoor, er is een speciaal programmaatje beschikbaar met de naam convert. Even met apt-get installeren en voila ik kan op de foto weer mijn eigen graffiti kwijt.

still

Het raam kan ook wel een schoonmaakbeurt gebruiken zie ik.

Ten slotte nog een toevoeging gemaakt in de /etc/rc.local zodat het programma automatisch start bij het aanzetten van de RPi:

#!/bin/sh -e
# rc.local
# This script is executed at the end of each multiuser runlevel.
# Print the IP address
_IP=$(hostname -I) || true
if [ “$_IP” ]; then
printf “My IP address is %s\n” “$_IP”
fi

#START WEBCAM SESSION
cd /home/pi/webcam
python -m SimpleHTTPServer >/dev/null 2>&1 &
sudo -u pi /home/pi/elapse.sh &

exit 0

Zorg ervoor dat de SimpelHTTPServer naar /dev/null schrijft! anders stopt de server. Ook moet je even opletten met de eigenaarschap van scripts in de /home/pi directory. Ik roep overigens het elapse.sh script aan met -u pi (gebruik user pi) omdat de dropbox api bij mij is ingesteld op gebruiker pi.

Samenvattend heb ik dus nu een superlichte webcam / wolkencamera server, voorzien van een 10 minuten wifi waakhond. Je kunt de server vinden op pa3ang.xs4all.nl en dat is mijn hostnaam thuis. Via de router is de server veilig aangesloten op de buitenwereld.