IPCAM-Bilder von Raspberry Pi auf externen FTP hochladen, Datenhygiene lokal

Begonnen von hoover123, 19 Mai 2015, 10:36:21

Vorheriges Thema - Nächstes Thema

hoover123

Hallo Leute,

ich habe erfolgreich das IPCAM-Modul mit meinen Kameras eingerichtet. Beim IPCAM-Modul habe ich das Attribut Timestamp auf 1 gesetzt, damit im Dateinamen Datum und Uhrzeit enthalten sind und so die Dateien nicht ständig bei einem neuen Ereignis überschrieben werden.

Die Site http://www.ispyconnect.com/sources.aspx
fand ich übrigens eine prima Sammlung, um die Path-Angaben für das IPCAM-Modul herauszufinden. In den den PDF-Handbüchern der IP-Kameras sucht man solche wertvolle Infos jedenfalls vergebens.

Im Modul IPCAM kann man leider nur ein lokales Verzeichnis zur Speicherung der Aufnahmen angeben, jedoch keinen FTP-Server.
Jetzt habe ich Angst, dass ich bei längerer Abwesenheit das lokale Verzeichnis zum Überlaufen bringe, indem der Speicherchip voll ist.

Deshalb möchte ich gerne auf einem Raspberry Pi ein kleines Script einrichten, dass sich die Aufnahme-Dateien in regelmäßigen Abständen auf einen FTP-Server hochlädt, möglichst mit automatischer Erstellung von Ordnern und Unterordnern nach dem Schema /Jahr/Monat/Tag.

Das erhöht auch die Sicherheit, wenn die Daten zusätzlich extern liegen.

Zugleich sollen lokal auf dem Raspberry PI nur wenige Dateien verbleiben. Nach dem erfolgreichen FTP-Upload sollen also lokale Dateien mit einem alten Zeitstempel zur Datenhygiene automatisch gelöscht werden. Meine Vorstellung liegt beispielsweise bei Dateien, die älter als einen Tag sind.

Gibt es dafür schon Codesnipsel, die man sich entsprechend anpassen könnte?

VG

hoover123

Hier ein Beispiel für die Einbindung einer IP Webcam mit ein paar Erläuterungen:

define Kamera1.Terrasse IPCAM 192.168.178.21:88
attr Kamera1.Terrasse userattr Foscam-FI9805W
attr Kamera1.Terrasse delay 1
attr Kamera1.Terrasse group Sicherheit
attr Kamera1.Terrasse icon it_camera
attr Kamera1.Terrasse path cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=deinkameralogin&pwd=deinkamerapasswort
attr Kamera1.Terrasse room Außen,Wohnzimmer
attr Kamera1.Terrasse snapshots 5
attr Kamera1.Terrasse storage /opt/fhem/FHEM/ipcam_records
attr Kamera1.Terrasse timestamp 1


Die Einstellungen müsst Ihr natürlich für Eure Bedürfnisse anpassen.

Kamera1.Terrasse --> mein gewählter Name für die IP-Kamera
192.168.178.21 --> IP-Adresse der Kamera im lokalen Netzwerk, bitte bei Router bzw. Kamera fest einstellen (möglichst kein DHCP verwenden)
88 --> Port der Kamera, sollte nicht Standardport wie "80" Web oder 8083 FHEM sein
userattr Foscam-FI9805W --> Hersteller und Modellangaben sind nicht Pflicht, nur als Gedankenstütze gedacht, falls man später einmal etwas umkonfigurieren möchte
delay 1 --> Zeitabstand 1 Sekunde zwischen Serienbildern
snapshots 5 --> es sollen 5 Serienbilder (Zeitabstand 1 Sekunde) bei einem Ereignis ausgelöst werden
timestamp 1 --> die Dateinamen enthalten zusätzlich einen Zeitstempel, z.B. Kamera1.Terrasse_20150523_085407.jpg. Ansonsten werden die Dateien bei jedem neuen Ereignis überschrieben.
path cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=deinkameralogin&pwd=deinkamerapasswort --> hier den Pfad eingeben, um Aufnahmen von der IP-Kamera zu erhalten. Nur wenige Hersteller schreiben so etwas ins Handbuch. Ansonsten für sein persönliches Modell entsprechend googeln. Eine gute Quelle ist http://www.ispyconnect.com/sources.aspx
storage /opt/fhem/FHEM/ipcam_records --> lokaler Speicherpfad auf dem Rasperry Pi. Freie Wahl ist zwar möglich, doch ein Unterordner unter den .pm-Dateien von FHEM erleichtert das Handling durch Scripte.

Auf oben genannten Beispielen basieren auch die folgenden Tutorials.

hoover123

Anbei zeige ich Euch an Beispielen, wie es bei mir funktioniert. Grundlagen-Kenntnisse von Linux sind erforderlich. Auf Youtube gibt es gute Bash Scripting Tutorials.

Als erstes muss man sich per Terminal auf dem Raspberry Pi einloggen. Beim Apple Mac ist ein Terminal-Programm automatisch dabei, unter Windows kann man beispielsweise das Programm Putty benutzen.

Vorher müsst Ihr die IP-Adresse des Raspberry Pi im lokalen Netzwerk herausfinden. Bitte schaut dafür im Webinterface Eures Routers (z.B. Fritzbox o.ä.) nach.

Nun mit dem Terminal die Verbindung aufbauen.

ssh pi@192.168.178.16

IP entsprechend anpassen und natürlich Eure Raspi-Adresse dafür eintragen. Bei der Password-Nachfrage

raspberry

eingeben.
Hinweis: Falls Ihr den Standard-User "pi" und das Standard-Passwort "raspberry" geändert habt, müsst Ihr das beim Terminalzugriff entsprechend berücksichtigen.

In FHEM-Installation habe ich einen Unterordner ipcam_records angelegt. Das Modul IPCAM legt den Ordner aber auch automatisch an, falls noch nicht vorhanden. Bitte schaut jedoch vorher nach, wo sich die FHEM-Installation befindet. Standardmäßig sollte es beim Raspberry Pi /opt/fhem/FHEM/ sein.

Achtung: Das Verzeichnis für die Aufnahmen der IP-Camera sollte niemals das gleiche sein, in der die .PM-Dateien der FHEM-Distribution liegen!!! Die Bilder oder Videos immer in einem separaten (Unter-)Ordner ablegen lassen (storage-Attribut von IPCAM)!!! Ansonsten könnte nachfolgendes Script wegen dem automatischem Löschen viel Unheil anrichten, wenn Kameraaufnahmen und .PM-Dateien sich im gleichen Ordner befänden.

Da das beim Raspberry Pi mitgelieferte Paket rsync bei mir nicht richtig mit meinen FTP-Server-Provider (1&1) zusammenarbeiten wollte, habe ich mich für LFTP entschieden.

sudo apt-get install lftp

Danach legt Ihr Euch eine Script-Datei an und macht diese für einen späteren Cron-Job ausführbar, z.B.:

cd /opt/fhem/FHEM
touch lftp.sh
chmod +x lftp.sh


Nun öffnet Ihr die Script-Datei zum Editieren

sudo nano lftp.sh

Innerhalb der Scriptdatei lftp.sh folgendes hineinschreiben und abspeichern.


#!/bin/bash

## sudo apt-get install lftp
## lftp-based IP Cam snapshot-style backup procedure
##
## change permissions of your subdir so that IPCAM will be able to save the record
## chmod 755 ipcam_records from its parent directory

# vars for destination directory structure
DAY=$(date +%d)
MONTH=$(date +%m)
YEAR=$(date +%Y)

# config vars

# login credentials on remote SFTP host

USER=yourusername
PASSWORD=yourpassword
REMOTEHOST=address_of_your_SFTP_host

# source directory on Raspberry Pi
SRC="/opt/fhem/FHEM/ipcam_records"

# destination directory on remote SFTP server
DEST="/raspi/ipcam_records/$YEAR/$MONTH/$DAY"

# options - see lftp documentation
OPTIONS="mirror -c -e -R"

# the syncing itself

lftp -c "open -u $USER,$PASSWORD $REMOTEHOST; $OPTIONS $SRC $DEST"

# caution: the following delete command is adjusted to the timestamp format of the IPCAM module.
# it deletes all files except those that were saved today!
# dont point the storage path attribute of IPCAM to directories that keep other files than the recordings

find $SRC ! -wholename '*_'$YEAR$MONTH$DAY'_*' -exec rm {} \;


Sofern sich ein paar Aufnahmen des IPCAM-Moduls im entsprechenden Unterordner befinden, könnt Ihr das Script einmal manuell anstubsen.

./lftp.sh

Danach müssten auf Eurem SFTP-Server die Aufnahmen landen.

hoover123

Jetzt basteln wir uns noch einen Cron-Job auf dem Raspberry Pi, der das Script in regelmäßigen Abständen automatisch ausführt.

Im Terminal:
sudo crontab -e
aufrufen und folgende Zeile eintragen

*/15 * * * * /opt/fhem/FHEM/lftp.sh

Erläuterung: In meinen Fall habe ich mich für ein automatisches Ausführen des Scripts aller 15 Minuten entschieden. Cron-Job-Anweisungen sind recht kryptisch. Anfänger sollten sich die Zeile für den Cronjob  über einen Generator zusammenbauen lassen, z.B.

http://crontab-generator.org

uprinz

Wollte nur mal Danke! sagen. Dieser Beitrag hat mir sehr geholfen, meine webcam ins Internet zu bringen! Der ftp-upload über die Kamera hat nämlich nicht funktioniert und die Diagnosemöglichkeiten sind sehr beschränkt (Allnet ALL2296V2). Zum Glück benutze ich ansonsten nur Mobotix-Kameras, da funktioniert alles wie es soll!

uprinz

Weil mein sript beim Aufräumen der alten uploads immer das Verzeichnis mitlöschen wollte, habe ich den Befehl zum Bereinigen wie folgt geändert:

# delete all files from source older than n*24hours, n=1
find $SRC -ctime 1 -exec rm {} \;

fstefan1960

Nur so als Ergänzung:
Eine Alternative ist es, ein Netzlaufwerk auf den Pi zu mounten und dann auf diesen "lokalen" Pfad zu speichern ....
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.