MACROVIS

Inhalt

Einleitung

Ziel dieses kleinen Tutorials soll es sein einen Raspberry mit Kameramodul in Betrieb zu nehmen und automatisiert Bilder auf einen FTP-Server zu laden. Da sich meine Linuxkenntnisse sehr in Grenzen halten habe ich sämtliche Anleitung die ich nützlich fand zusammengefasst und dokumentiert. Viel Spass!

Installation

Zuerst brauchen wir eine Software um das Image auf die SD-Karte zu bekommen, dazu nutzen wir am MAC ApplePi Baker (Direktlink). Das Image von Raspbian gibt es über den Direktlink.

Setup

Jetzt booten wir von der SD-Karte und passen die raspi-config an. Gute Anleitungen gibts es hier und hier. Das Setup kann jederzeit wieder aufgerufen werden:
sudo raspi-config
Anpassungen die ich vergenommen habe:
  • expand_rootfs (Lief allerdings bei mir auf Fehler, kann man probieren)
  • change_pass
  • internationalisation options: Change Locale, Change Keyboard Layout und change_timezone
  • enable camera
  • advanced: hostname/memory split/ssh/update
Dann schließen wir die Grundkonfiguration mit [Finish] ab

Anpassungen

Nun booten wir vom Raspberry und wählen als Benutzer pi und Kennwort unser zuvor vergebenes. Ansonsten ist das Defaultpasswort raspberry. Die nachfolgenden Schritte habe ich von hier. Wir holen uns erstmal Rechte als sudo
sudo su -
Wir aktualisieren unserer Softwarequellen (hierfür solle der Pi natürlich am LAN-Kabel hängen)
aptitude update; aptitude upgrade

WLAN einrichten

Ich nutze für die Internetkommunikation einen WLAN-USB-Dongle. Für diesen installieren wir wpasupplicant
aptitude install wpasupplicant
Nachfolgend noch den komfortablen Editor mc, Midnight Commander ist besonders elegant wenn keine Maus am Pi angeschlossen ist und man kopieren und einfügen muss.
aptitude install mc
Mittels cd wechseln wir in/etc/wpa_supplicant
cd /etc/wpa_supplicant
Mit wpa_passphrase erstellen wir eine WLAN-Konfig für unser bestehendes WLAN und speichern diese in der Datei wlan.txt ID steht hier für unsere WLAN-SSID und PWD für das Passwort:
wpa_passphrase ID PWD > wlan.txt
Jetzt öffnen wir mit mcedit die Datei wpa_supplicant.conf
mcedit wpa_supplicant.conf
Wir wechseln in die letzte Zeile Über das Menü F9 (Menü) - Pfeil unten - Datei einfügen schreiben wir /etc/wpa_supplicant/wlan.txt rein. Jetzt ist der Inhalt von wlan.txt eingefügt ans Ende von wpa_supplicant.conf Nun einfach nur noch F2 (Speichern), Bestätigen und F10 (Beenden) Nun muss WLAN nur noch korrekt in den Adaptereinstellungen hinterlegt werden. Wir öffnen interfaces mit
mcedit /etc/network/interfaces
Ich verpasse dem WLAN-Stick eine feste IP um dann auch komfortabel darauf zugreifen zu können Meine interfaces:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
address 192.168.2.37
netmask 255.255.255.0
gateway 192.168.2.1
iface default inet dhcp
wireless-power off
Damit hätten wir WLAN eingerichtet! Zu Sicherheit booten wir mal den Pi und kontrollieren
reboot
Mit ifconfig sehen wir ob wlan0 auch unsere IP 192.168.2.37 gezogen hat. Jetzt kann der Pi theoretisch von Ein- und Ausgabegeräten getrennt werden, alles weitere geht jetzt via SSH.

FTP Server & Client

FTP-Server

Lektüre für den FTP Server kann man hier und hier nachlesen. Der Server ist insofern praktisch dass man im lokalen Netzwerk z.B. den Bilderordner auslesen kann Nach unserem reboot sind wir natürlich kein su, also alle Eingaben jetzt mit sudo Zum Einsatz kommt proftpd, ein weit verbreitester FTP Server für Unix Platformen Also installieren wir:
sudo aptitude install proftpd
Die Konfiguration des Servers findet in der Datei /etc/proftpd/proftpd.conf statt, diese öffnen wir auch gleich
sudo mcedit /etc/proftpd/proftpd.conf
Um virtuelle Benutzer zu erstellen fügen wir folgende Zeilen am Ende ein:

DefaultRoot ~
AuthOrder mod_auth_file.c mod_auth_unix.c
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
RequireValidShell off
Wir legen einen neuen Ordner an:
mkdir /home/pi/PiFTP
Und passen die Rechte entsprechend an:

sudo chmod g+s /home/pi/PiFTP
sudo chmod 775 /home/pi/PiFTP
Den virtuellen Benutzer erstellen wir in /etc/proftpd/, also
cd /etc/proftpd/
Wir taufen ihn auf den Namen pi, dazu schreiben wir:
sudo ftpasswd --passwd --name pi --uid 33 --gid 33 --home /home/pi/PiFTP --shell /bin/false
Jetzt kommt eine Passwortabfrage für die man 2x ein beliebiges Passwort wählt. Damit jetzt alles greift starten wir unseren FTP Server mal neu
sudo /etc/init.d/proftpd restart

FTP-Client

Dieser wird benötigt um unsere Bilder auf einen Web-FTP zu laden. Hierzu nutze ich lftp.
sudo aptitude install lftp
Damit wäre die Installation schon geschafft, allerdings lief es so auf Fehler. Ich musste noch die SSL-Verifikation deaktivieren Dazu die Datei /etc/lftp.conf öffnen:
sudo mcedit /etc/lftp.conf
Und folgende Zeile am Ende hinzufügen:
set ssl:verify-certificate no
F2 (Speichern), Bestätigen und F10 (Beenden) Fertig!

Kamera

Unser Ziel ist es ja unsere aufgenommenen Bilder dann via FTP zu verschicken, dazu konfigurieren wir erst einmal unsere angeschlossene Kamera. Die Kamera hat eine Rote LED die stören kann, diese deaktivieren wir. Damit dies dauerhaft bleibt schreiben wir es in die /boot/config.txt
sudo mcedit /boot/config.txt
Und ans Ende kommt die Zeile
disable_camera_led=1
F2 (Speichern), Bestätigen und F10 (Beenden) Knipsen wir also mal ein paar Bilder, ein guter Anfang ist die offizielle Doku. Ab in unser Homeverzeichnis mit
cd $home
Kamera ist angeschlossen, also los
raspistill -o cam.jpg
raspistill nimmt uns die Datei cam.jpg auf. Eine Übersicht zu den verfügbaren Parametern findet sich hier. Lange Rede, kurzer Sinn: meine finale Fassung:
raspistill -v --contrast 10 --quality 80 --nopreview --ev 4 --verbose -o raspistill.jpg -w 960 -h 540 -vf -hf
Angepasster Kontrast, Qualität, keine Vorschau, Belichtungskorrektur, Auflösung von 960x540, umgedreht und gespielt.

Script

Jetzt basteln wir uns ein Script welches bei Aufruf ein Bild knipst und direkt auf unseren Web-FTP-Server hochlädt. Dazu erstellen wir im Verzeichnis /home/pi/PiFTP eine Datei namens ftpupload.sh
touch ftpupload.sh
Diese öffnen wir auch gleich
mcedit ftpupload.sh

#!/bin/bash

#FTP Server
HOST=FTP-Server
USER=FTP-Benutzer
PASS=FTP-Passwort

#Verzeichnis wechseln
cd /home/pi/PiFTP

#alte Bilder löschen
rm raspistill.jpg
rm pre_webcam.jpg
rm w1.jpg
rm webcam.jpg

#Bild aufnehmen
raspistill -v --contrast 10 --quality 80 --nopreview --ev 4 --verbose -o raspistill.jpg -w 960 -h 540

#Bilder zusammenführen
composite -gravity center bg.png raspistill.jpg pre_webcam.jpg

#Bild beschriften
convert -pointsize 14 -fill orange -draw "text 10,526 '$(date +"%d.%m.%Y %T UTC") '" pre_webcam.jpg
convert -pointsize 14 -fill orange -draw "text 900,526 'Leipzig'" w1.jpg webcam.jpg

#FTP Upload
lftp -e 'put /home/pi/PiFTP/webcam.jpg; bye' -u $USER,$PASS $HOST
In der Anleitung sind die einzelnen Schritte erklärt, das erspare ich mir jetzt. Die benötigte bg.png findet man hier. F2 (Speichern), Bestätigen und F10 (Beenden) Wir müssen unser Script aber noch ausführbar machen, das funktioniert mit chmod.
chmod +x ftpupload.sh
Script ist fertig, testen wir einen Aufruf:
./ftpupload.sh
Damit wir aber nicht jedes Mal das Script manuell aufrufen müssen erstellen wir im nächsten Kapitel eine Automatisierung.

Cronjob

Ein Cronjob wird die Aufgabe übernehmen alle 5 Minuten unser Script auszuführen. Dazu öffnen wir crontab mit:
crontab -e
Und fügen mal wieder diese Zeile ans Ende ein:
*/5 * * * * /home/pi/PiFTP/ftpupload.sh
Mit Strg + O und Enter abspeichern, mit Strg + X beenden. Cronjob fertig!

Zusammenfassung

Wir haben also jetzt unsere Webcam fertig. Geplant ist noch die Anbringung eines Temperatursensors und das Schreiben der aktuellen Temperatur in eine Datenbank & grafische Auswertung

Zusatz

RAM-Disk

Nach und nach fallen einem ja immer noch Optimierungen ein, meine erste war eine RAM-Disk um die Schreibzyklen auf der SD-Karte zu minimieren. Dazu erstellen wir in /media/ den Ordner ramdisk:
sudo mkdir -p /media/ramdisk
Dann wird die Datei fstab geöffnet. Unsere RAM-Disk hat hiermit eine Größe von 100MB.
sudo mcedit /etc/fstab
Und um folgende Zeile ergänzt:
tmpfs    /media/ramdisk    tmpfs    defaults,size=100      0       0
Unser ftupload.sh Skript wird noch angepasst:

#!/bin/bash

#FTP Server
HOST=FTP-Server
USER=FTP-Benutzer
PASS=FTP-Passwort

#Verzeichnis wechseln
cd /home/pi/PiFTP

#alte Bilder löschen
rm raspistill.jpg
rm pre_webcam.jpg
rm w1.jpg
rm webcam.jpg

cp bg.png /media/ramdisk

cd /media/ramdisk
#Bild aufnehmen
raspistill -v --contrast 10 --quality 80 --nopreview --ev 4 --verbose -o raspistill.jpg -w 960 -h 540

#Bilder zusammenführen
composite -gravity center bg.png raspistill.jpg pre_webcam.jpg

#Bild beschriften
convert -pointsize 14 -fill orange -draw "text 10,526 '$(date +"%d.%m.%Y %T UTC") '" pre_webcam.jpg
convert -pointsize 14 -fill orange -draw "text 900,526 'Leipzig'" w1.jpg webcam.jpg

#FTP Upload
lftp -e 'put /media/ramdisk/webcam.jpg; bye' -u $USER,$PASS $HOST

Temp-Sensor

Nun findet die Erweiterung um einen Temperatursensor statt, Infos dazu gibt es hier, hier, hier, hier und hier. Die nächsten Schritte werden weniger ausführlich, ich denke das meiste erschließt sich aus der gewonnenen Erfahrung und den gute dokumentierten Quellen. Wir editieren /etc/modules und erweitern 2 Zeilen
w1-gpio pullup=1
w1-therm
Das gleiche geschieht mit /boot/config.txt, auch hier wird eine Zeile ergänzt:
dtoverlay=w1-gpio,gpiopin=4
Damit sind alle Voraussetzungen für den Sensor geschaffen, diesen nun anschließen mit lsmod testen, hier sollten jetzt unsere zwei Sensoren auftauchen:
wire                   31280  2 w1_gpio,w1_therm
Im Ordner /sys/bus/w1/devices/ gibt es einen Unterordner (pro Sensor) mit einem ähnlichen Namen xx-xxxxxxxxxxxx. Wir testen unseren Sensor, müssen aber noch den den eigenen Ordnernamen anpassen:
cat /sys/bus/w1/devices/xx-xxxxxxxxxxxx/w1_slave
Ausgabe dann in etwa:
53 01 55 00 7f ff 0c 10 10 : crc=10 YES
53 01 55 00 7f ff 0c 10 10 t=21187
Am Ende sehen wir unsere Temperatur 21187 die wir noch durch 1000 teilen müssen. Dazu erstellen wir ein Script namens temp in /usr/bin mittels:
sudo touch /usr/bin/temp
Und editieren dieses
sudo mcedit /usr/bin/temp
Und fügen folgenden Inhalt ein:

#!/bin/bash

echo $(echo "scale=1; $(grep 't=' /sys/bus/w1/devices/w1_bus_master1/xx-xxxxxxxxxxxx/w1_slave | awk -F 't=' '{print $2}') / 1000" | bc -l) °C
Wobei der Ordnername des Sensors natürlich wieder angepasst werden muss. Datei speichern und nun noch Rechte für das Script vergeben:
sudo chmod 0755 temp
sudo chmod +x temp
Jetzt ist von überall aus das Script aufrufbar:
pi@raspberrypi ~ $ temp
21.1 °C
Unser ftpupload.sh Script mit Temperatur sieht jetzt wie folgt aus:

#!/bin/bash

#FTP Server
HOST=FTP-Server
USER=FTP-Benutzer
PASS=FTP-Passwort

#Verzeichnis wechseln
cd /home/pi/PiFTP

#alte Bilder löchen
rm raspistill.jpg
rm pre_webcam.jpg
rm w1.jpg
rm webcam.jpg

sudo cp bg.png /media/ramdisk

cd /media/ramdisk
#Bild aufnehmen
raspistill -v --contrast 10 --quality 80 --nopreview --ev 4 --verbose -o raspistill.jpg -w 960 -h 54

#Bilder zusammenf?hren
composite -gravity center bg.png raspistill.jpg pre_webcam.jpg

#Bild beschriften
convert -pointsize 14 -fill orange -draw "text 10,526 '$(date +"%d.%m.%Y %T UTC") '" pre_webcam.jpg
convert -pointsize 14 -fill orange -draw "text 900,526 '$(temp) '" w1.jpg webcam.jpg

#FTP Upload
lftp -e 'put /media/ramdisk/webcam.jpg; bye' -u $USER,$PASS $HOST

Eigener Aufbau

Eigener Aufbau am Fensterrahmen, mit 2 Temperatursensoren. Livebild hier.

Quellen