Basics – Kameras


Der Blaustich einiger Fotos auf dieser Seite rührt von den blauen LEDs her, die zusätzlich zu weißen LEDs für ein kräftiges Wachstum der Keimlinge sorgen sollen.

Raspi-KameraAnfang 2015 habe ich wegen des geplanten Raspberry gesteuerten Chiligewächshaus eine Raspi-Kamera gekauft, die einfach am dafür vorgesehenen Anschluss am Raspberry per Flachbandkabel angeschlossen wird. Um sie in Betrieb zu nehmen, muss man einfach über den Befehl “sudo raspi-config” und den entsprechenden Menüpunkt im Raspbian die Kamera aktivieren. Nach einem Reboot ist sie betriebsbereit. Kleine Tests können mit den Befehlen “raspistill” oder “raspivid” durchgeführt werden. Da diese Raspberry Kamera ein Fixfokus-Objektiv hat, ist sie allerdings nicht für Nahaufnahmen geeignet. Das ist der Grund, weshalb ich eine weitere Raspi-Kamera bestellt habe. Sobald sie aus Hongkong eintrifft (April 2015) wird auf dieser Seite darüber berichtet.

Raspi-Kamera: Eine eventuell vorhandene LED wird in “/boot/config.txt” mit “disable_camera_led=1” deaktiviert.


USB-Kamera

USB-Kamera USB-KameraIn der Zwischenzeit habe ich eine USB-Kamera auseinandergebaut und getestet. Hier der wichtige Hinweis, dass diese Webcam instabil läuft. Mal geht WLAN nicht, dann wird das Gerät nicht als /dev/video0 erkannt. Schade auch, weil die Fokussierung für meine Zwecke passt!

Merkwürdigerweise konnte ich die einzige USB-Kamera, die ich hatte halbwegs problemlos am Raspberry nutzen. Es ist eine “Hercules Dualpix HD Webcam”. Im Internet habe ich die nötigen Infos gefunden, um sie am Raspberry in Betrieb zu nehmen. Vorher hatte ich sie allerdings am PC angeschlossen und die nötige Software installiert, um ein Bild zu erhalten. Bei der Gelegenheit habe ich den Fokus auf ca. 10 cm eingestellt.
$lsusb

Mit diesem Befehl sollte eine Zeile mit “Guillemot” angezeigt werden, wenn die Hercules-Kamera erkannt wurde. Dann wird die nötige Software mit Treibern installiert. Wie so oft habe ich hier die Befehle einfach abgeschrieben, ohne sie zu hinterfragen. Aber wenn es funktioniert!?

$sudo apt-get install subversion libv4l-dev libjpeg8-dev imagemagick fswebcam

Sicherheitshalber habe ich danach einen Shutdown gemacht, die Kamera angeschlossen und neu gestartet. Danach ging es mit dem ersten kleinen Test weiter.

Hercules-Web-Cam$fswebcam -r 1280×1024 hercules.jpg

Danach habe ich mir per Filezilla die Datei auf den PC kopiert. Sie ist rechts als weiteres Foto zu sehen. Datum und Uhrzeit war bereits eingeblendet, woher auch immer. Möglicherweise macht das “fswebcam”.

Ich bin damit schon ziemlich zufrieden. Jetzt arbeite ich an einer Funktion, die mir regelmäßig geschossene Fotos zu meinem Webserver schickt und dort als Diashow bereitstellt. Das ist noch nicht komplett, aber hier schon mal die nächsten Schritte.

Für alles, was mit der Webcam zu tun hat, wird ein neuer Ordner erstellt und eine Konfig-Datei dort abgelegt, wie später auch die Fotos:

$sudo bash
$cd /var
$mkdir webcam
$chmod 777 webcam
$cd webcam
$nano webcam.cfg

device /dev/video0
jpeg 95
resolution 1280×720
timestamp “%d.%m.%Y %H:%M”
title “Chilianzuchtbox 1 – SpassAmHobby.de”
rotate 90
skip 3
frames 3
font “:16”
save “/var/webcam/live.jpg”

Chili-Webcam $fswebcam -c webcam.cfg

Mit dieser Konfiguration ergab sich das nebenstehende Bild. Bis man ein Foto so hinbekommt, wie man es gerne hätte, kann ein etwas mühseliges Unterfangen sein, bei dem viele Test nötig sind! Mögliche weitere Befehle bekommt man durch:

$fswebcam -?
und
$fswebcam -d /dev/video0 –list-controls

Zum FTP-Upload wird bei mir ncftp genutzt, wobei mir klar ist, dass die unverschlüsselte FTP-Verbindung nicht mehr dem heutigen Sicherheitsstandard entspricht. Möglicherweise finde ich noch einen sftp-Client für dieses Thema.

$apt-get install ncftp
$exit
$cd ~
$nano ftp.cfg

host spassamhobby.de
user mein_user
pass mein_passwort

$ncftpput -f ftp.cfg /mein_webserver-verzeichnis /var/webcam/live.jpg

Wenn es mit dem letzten Befehl funktioniert hat, die Datei auf den Server hochzuladen geht es an die Automatisierung des Ganzen.

$sudo bash
$cd /etc
$nano autostart.sh

#!/bin/bash
sudo fswebcam -c /var/webcam/webcam.cfg
sleep 1
sudo ncftpput -f /home/pi/ftp.cfg /mein_webserver-verzeichnis /var/webcam/live.jpg

$chmod 755 autostart.sh
$exit
$/etc/autostart.sh

Wenn mit “/etc/autostart.sh” ein Foto fehlerfrei hochgeladen wurde, geht es mit dem Cronjob weiter.

$crontab -e

Dann gibt man die folgende Zeile am untersten Ende ein:

* 4-21 * * * /etc/autostart.sh

Damit läuft der Job von 05:00 bis 22:00 Uhr MEZ.

Ich habe noch nicht alles ausgetestet, aber ich meine, dass es nur unter dem User funktioniert, mit dem man den Cronjob erstellt hat. Hier ist es also der User Pi. Damit der Job gestartet wird muss nach meinem jetzigen Verständnis der User Pi angemeldet sein. Das hatten wir schon einmal und ich wiederhole hier den Punkt meiner Seite mit dem Player-Autostart.

$sudo nano /etc/inittab

In dieser Datei muss die Zeile mit “1:2345:respawn…” mittels eines Doppelkreuzes “#” auskommentiert werden. Darunter schreibt man folgende Zeile:

1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1

Dadurch wird der User Pi automatisch angemeldet und somit startet der Cronjob. Ich hoffe, ich habe nichts vergessen. Zumindest funktioniert es bei mir!

Wie man WLAN nutzen kann, hatte ich bereits beim Streamingclient beschrieben.

Das nächste Thema ist eine Fotosammlung zu erzeugen, die in relativ schnellem Tempo chronologisch angesehen werden kann – also eine schnelle Diashow.


Raspberry-Kamera aus HongkongSchon 10 Tage nach meiner Bestellung kam die Raspberry-Kamera mit dem manuell einstellbaren Fokus aus Hongkong! Sie war genauso einfach in Betrieb zu nehmen, wie die Raspi-Cam ganz oben. Somit war auch sehr schnell zu erkennen, dass sie für meine Makroaufnahmen nicht richtig ist. Vermutlich hat sie ein Teleobjektiv. Qualitativ habe ich aber nichts zu bemängeln. Vielleicht kann ich sie bei der Aufzuchtstation gebrauchen.


Nutzung der Software “Motion”

Ich wollte diese Software nutzen, habe es aber nicht mit der Pi-Cam zusammen zum Laufen bekommen. Laut Jan Karres soll es aber gehen. Da muss ich wohl noch üben!

Und ich habe noch folgende Infos auf einer Seite “Raspberry Pi as low cost HD surveillance camera” gefunden. Das kann auch noch bei “Motion” helfen.

Da meine Ansprüche in diesem Fall sehr gering waren, versuche ich mit den typischen Raspistill und einem Hochladen per ftp klarzukommen. Das folgt im nächsten Abschnitt auf dieser Seite.


Raspi-Cam mit RaspiStill und FTP nutzen (Variante 1)

Man nehme ein aktuelles Raspbian, aktiviere beim “raspi-config” die Kamera und starte den Raspi neu. Mittels “raspistill” und einem Autostart-Skript, wie oben beschrieben, wird einmal pro Minute ein Foto mit Datum und Uhrzeit abgespeichert. Dann wird dieses per FTP zur Website hochgeladen, wie es auch schon weiter oben beschrieben ist. Hier noch einmal die Schritte, nachdem man über “raspi-config” die Kamera aktiviert und anschließend den Raspi neu gestartet hat:

$sudo bash

$apt-get install imagemagick ncftp
$exit
$cd ~
$nano ftp.cfg

host spassamhobby.de
user mein_user
pass mein_passwort

$sudo bash
$cd /var
$mkdir webcam
$chmod 777 webcam
$cd webcam

Als Test gibt man ein:

$raspistill -o image.jpg -n -w 800 -h 600

$ncftpput -f ftp.cfg /mein_webserver-verzeichnis /var/webcam/image.jpg

Wenn es mit dem letzten Befehl funktioniert hat, die Datei auf den Server hochzuladen geht es an die Automatisierung des Ganzen.

$cd /etc
$nano autostart.sh

#!/bin/bash
cd /var/webcam
sudo raspistill -o temp.jpg -n -w 800 -h 600
sleep 1
sudo convert -pointsize 30 -fill orange -draw “text 20,40 ‘Wasserstand $(date +”%d.%m.%Y %T”) ‘” temp.jpg image.jpg
sleep 1
sudo ncftpput -f /home/pi/ftp.cfg /fotos/webcam image.jpg

$chmod 755 autostart.sh
$exit
$/etc/autostart.sh

Wenn mit “/etc/autostart.sh” ein Foto fehlerfrei hochgeladen wurde, geht es mit dem Cronjob weiter.

$crontab -e

Dann gibt man die folgende Zeile am untersten Ende ein:

* * * * * /etc/autostart.sh

Damit läuft der Job rund um die Uhr.

$sudo nano /etc/inittab

In dieser Datei muss die Zeile mit “1:2345:respawn…” mittels eines Doppelkreuzes “#” auskommentiert werden. Darunter schreibt man folgende Zeile:

1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1

Jetzt wird es mittels reboot getestet. Der minütliche Upload von Fotos auf den Server funktioniert!

Bei gleichzeitig laufendem FHEM gibt es einen kleinen Wermutstropfen:
Solange bei FHEM der Befehl “raspivid” läuft, hat der “raspistill” von meiner Web-Cam keine Chance! Aber sobald man im FHEM auf eine Ansicht ohne Kamera wechselt, geht auch meine Web-Cam wieder!


Raspi-Cam mit RaspiStill und FTP nutzen (Variante 2 – ab Januar 2016)

Ich habe Anfang 2016 noch eine zweite Variante gefunden, die funktioniert und die stellenweise sehr ähnlich zur obigen ist. Hier wird für FTP das Programm FTP genutzt, was aber relativ unerheblich ist. Auch in diesem Beispiel ist es ein unverschlüsseltes FTP!

Die Kamera wird hier unter FHEM nicht genutzt. FHEM ist auch keine Voraussetzung für die Nutzung mittels RaspiStill.

Der Benutzer unter dem das alles läuft, ist “Pi”. Wer etwas Anderes möchte, muss sich überlegen, an welchen Stellen Änderungen nötig werden. Linuxwissen wäre gut!

Ich habe diese Installation noch nicht mit “Jessie” statt mit “Wheezy” getestet, aber es könnte funktionieren, im Gegensatz zu uv4l als WebCam-Tool.

Bei diesem Beispiel wird einmal täglich um 12:00 Uhr ein Foto geschossen und einmal als “image.jpg” und ein zweites Mal als <Datum+Uhrzeit+”.jpg”> (Beispiel 20160130_1200.jpg) zum Server hochgeladen. Aus dem zweiten Foto kann man später eine Historie oder einen Film bilden oder man nutzt sporadisch eines zum Vergleich mit dem aktuellen Foto. Wer täglich mehrere Fotos hochlädt, sollte auf den Serverspeicherplatz achten!

Der untenstehende Inhalt der Datei “foto.sh” ist teilweise nicht auf meinem Mist gewachsen, sondern ich habe es unter “Amateurfunk Klippeneck Picam” im Internet gefunden und für mich angepasst.

$sudo bash

$apt-get update
$apt-get upgrade
$apt-get install ftp imagemagick
$exit
$cd ~
$nano foto.sh

Der Inhalt der folgenden Datei folgt als Beispiel, wobei die FTP-Zugangsdaten natürlich richtig eingetragen werden müssen.

In dieser Datei “foto.sh” steht eine Abfolge von Befehlen, die den Dateinamen der dauerhaft zu speichernden Datei definieren, alte temporäre Fotos löschen, mittels raspistill ein Foto erstellen, Datum + Uhrzeit + Websitenamen in das Foto schreiben, die FTP-Zugangsdaten definieren, die FTP-Verbindung aufbauen und die zwei Dateien hochladen.

#!/bin/bash
FileName=$(date +”%Y%m%d_%H%M”).jpg
cd /home/pi
rm raspistill.jpg
rm tmp.jpg
rm image.jpg
raspistill -v -o raspistill.jpg -w 1280 -h 960 -vf -hf
convert -pointsize 36 -fill orange -draw “text 20,940 ‘$(date +”%d.%m.%Y %T UTC”) ‘” raspistill.jpg tmp.jpg
convert -pointsize 36 -fill orange -draw “text 960,940 ‘SpassAmHobby.de'” tmp.jpg image.jpg
cp image.jpg /home/pi/$FileName
HOST=mein_server
USER=mein_user
PASS=mein_passwort
ftp -inv $HOST << EOF
user $USER $PASS
cd /webcam
put image.jpg
put $FileName
bye
EOF

$sudo chmod 755 foto.sh
$./foto.sh

Daraufhin wird das Skript ausgeführt und wenn man nichts falsch gemacht hat, sind auf dem Server im angegebenen Verzeichnis “/webcam” die Datei image.jpg und eine Datei mit Namen des aktuellen Datums und Uhrzeit. Dann geht es mit dem Cronjob weiter, der die Uhrzeit des Foto-Shooting steuert.

$crontab -e

Dann gibt man die folgende Zeile am untersten Ende ein:

00 12 * * * /home/pi/foto.sh

Damit läuft der Job täglich um 12:00 Uhr. (Wegen des blaustichigen Fotos mache ich nur nachts das Foto. Ich müsste mich ansonsten mehr um die Kameraeinstellungen kümmern.)

$sudo nano /etc/inittab

In dieser Datei muss die Zeile mit “1:2345:respawn…” mittels eines Doppelkreuzes “#” auskommentiert werden. Darunter schreibt man folgende Zeile:

1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1

Jetzt wird es mittels reboot getestet. Der tägliche Upload von Fotos auf den Server sollte nun funktionieren!


Nachtrag 06.01.2017: FTP ist out – SFTP ist in!

Mein Provider hatte anscheinend noch in 2016 ftp zu Gunsten sftp abgeschaltet, so dass meine Chili-Webcam vom Vorjahr Probleme gemacht hatte. Zumindest der Upload hatte nicht mehr funktioniert. Mittels der Skript-Software “expect” konnte ich das bereits vorhandene sftp im Raspbian nutzen.

$sudo apt-get install expect
$sudo nano foto.sh

Ich hatte die ganz einfache RaspiCam um 180 Grad gedreht, wodurch zwei Parameter beim “Raspistill” überflüssig waren. Dann hatte ich noch die Uhrzeit korrigiert. (Die Kameraversion mit “adjustable Focus” müsste auch funktionieren. Wichtig ist es den Kameraanschluss des Raspberrys zu nutzen und kein USB, sonst muss man sich selber Gedanken zur Ansteuerung machen und meinen obersten Artikel lesen.)
Somit ist es jetzt einfacher, den vorhandenen Inhalt zu löschen und durch den folgenden zu ersetzen:

#!/bin/bash
FileName=$(date +”%Y%m%d_%H%M”).jpg
cd /home/pi
rm raspistill.jpg
rm tmp.jpg
rm image.jpg
raspistill -v -o raspistill.jpg -w 1280 -h 960
convert -pointsize 36 -fill orange -draw “text 20,940 ‘$(date +”%d.%m.%Y %T MEZ”) ‘” raspistill.jpg tmp.jpg
convert -pointsize 36 -fill orange -draw “text 960,940 ‘SpassAmHobby.de'” tmp.jpg image.jpg
cp image.jpg /home/pi/$FileName
HOST=mein_server
USER=mein_user
PASS=mein_passwort
expect -c ”
set timeout 600
spawn sftp $USER@$HOST
expect \”assword\”
send \”$PASS\r\”
expect \”sftp>\”
send \”cd /pfad\r\”
expect \”sftp>\”
send \”mput image.jpg\r\”
expect \”sftp>\”
send \”mput $FileName\r\”
Erstes Fotoexpect \”sftp>\”
send \”exit\r\”
interact “

Die roten Einträge müssen durch den jeweils gewünschten Eintrag ersetzt werden.

Damit hatte die Webcam wieder funktioniert! Hätte ich den direkten Lichteinfall ins Objektiv verhindert, wäre das Bild trotz Nachbearbeitung nicht so milchig! smiley