Surveillance Station Upload Snapshots auf Webspace

Status
Für weitere Antworten geschlossen.

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich wüsste gerne, wonach ich suchen muss, wenn ich gerne von der Surveillancestation einer DS414 Bilder auf einen Webspace hochladen würde.
Die DS soll alle 5 Minuten ein Foto aufnehmen und auf meinen Webspace laden (quasi wie altbekannte Webcams von irgendwelchen Kirchtürmen etc.).

Ich habe inzwischen herausgefunden, wie ich alle 5 Minuten einen Snapshot erstellen kann (Actionrule).

Nun möchte ich gerne den neuen Shapshot auf meinen Webspace hochladen und den vorherigen überschreiben.

Ich vermute, dass ich nach dem Upload den alten Snapshot von der DS löschen sollte, um hier nicht unnötig Datenmüll zu hinterlassen.

Ich habe Grundkenntnisse in C, JS, PHP und SSH. Ich hoffe, dass das irgendwie genügt, um mein Vorhaben umzusetzen ;)

Danke schonmal für euere Hilfe!
 
Zuletzt bearbeitet von einem Moderator:

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Über die File Station habe ich nun den entsprechenden FTP-Server eingebunden und kann auch problemlos auf diesen zugreifen.
Letztendlich muss ich nun noch ein Script erstellen, womit der aktuellste Snapshot einer Kamera genommen wird und die vorherige Datei auf dem FTP überschreibt.

Wenn ich den Snapshot-Speicher auf der NAS begrenze, habe ich da auch nicht zu viel al Daten rumfliegen, die sich immer wieder durch aktuellere Dateien überschreiben.
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Mein momentaner Ansatz sieht so aus, dass ich alle 5 Minuten ein Shellscript ausführen möchte, was so ähnlich aussehen sollte:
Code:
#!/bin/sh
 
FTP_HOST="myftpserver"
FTP_USER="username"
FTP_PASS="password"
SOURCE_DIR="/volume1/surveillance/@Snapshot/"
 
source_image=$(ls -t $SOURCE_DIR| head -1)
curl -T $source_image $FTP_HOST —user $FTP_USER:$FTP_PASS

Allerdings scheint die die DS das nicht so auszufähren, wie ich mir das vorstelle.
 
Mitglied seit
10. Jan 2014
Beiträge
393
Punkte für Reaktionen
0
Punkte
0
Das ist eine ziemlich vage Fehlerbeschreibung....
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Zu dem Zeitpunkt konnte ich leider noch keine genauere Fehlerbeschreibung liefern, da ich bisher auf der DS414 versucht habe, den Upload zu initiieren.

Inzwischen weiß ich, dass die Konstellation in der letzten Zeile Probleme verursacht hatte.
Ich hab eben mal ein Linux Mint in ner VirtualBox installiert, damit ich ne schöne Linuxkonsole habe. Auf Grund der Fehlermeldungen von meinem curl-Aufruf weiß ich nun, dass mit
Code:
curl user:pw@host -T file
der Dateiupload funktioniert.

Jetzt werd ich mich erstmal wieder remote auf der DS einloggen und das fehlerhafte Script deaktivieren, wenn irgendwas hat grade den FTP-Part meines Webspace in die Knie gezwungen ;)
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Wenn ich als Quelldatei den spezifischen Namen einer Datei angebe, funktioniert der Upload problemlos.

Hänge ich dem Server /zielname.jpg an, so kann ich den Namen der hochzuladenden Datei bestimmen.

Was ich nun noch nicht geschafft habe, ist das Auswählen der neusten Datei aus dem Snapshot-Verzeichnis der Nas.

Code:
#!/bin/sh
 
FTP_HOST="www.myserver.com/targetfilename.jpg"
FTP_USER=username
FTP_PASS=password

#SOURCE_DIR="/volume1/surveillance/@Snapshot"
#source_image=$(ls -t $SOURCE_DIR| head -1)
source_image=/volume1/surveillance/@Snapshot/myfile.jpg

curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $source_image


Die beiden auskommentierten Zeilen funktionieren leider noch nicht so ganz.
Die Zeile darunter funktioniert, somit weiß ich nun, dass der Zugriff auf die Bilder und der Upload funktionieren.

Die Idee hinter den auskommentierten Zeilen ist:
-Verzeichnis auswählen
-Dateien nach Datum sortieren
-erste/neuste Datei auswählen


Wenn ich das Shellscript per SSH ausführe, bekomme ich leider nur:
Code:
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
Und keine Fehlerausgabe.
 
Zuletzt bearbeitet:

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Ah, okay, wieder ein Schritt weiter.

Code:
mynas> ls -t | head -3
@eaDir
picture-20151109-1303499409.jpg
picture-20151109-1258474553.jpg

Das Problem ist, dass bei dieser Sortierung zuerst ein Verzeichnis ausgegeben wird, statt des gewünschten Dateinamens. Klar, dass der Upload so nicht richtig initiiert werden kann ;)


Code:
mynas> find . -maxdepth 1 -type f -print0 | xargs -0r ls -t | head -1
./picture-20151109-1308525885.jpg
xargs: ls: terminated by signal 13
mynas>

Okay, den richtigen Dateinamen hab ich jetzt. Allerdings muss der jetzt noch so umgeformt werden, dass ich ihn als Bestandteil meines Pfades nutzen kann...
 
Zuletzt bearbeitet:

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Und wieder ein kleiner Schritt weiter:

Code:
mynas> ls -t | head -n2  | tail -n 1
picture-20151109-1318575710.jpg



//Edit: Oder minimal kürzer:
Code:
mynas> ls -t | head -2  | tail -1
picture-20151109-1318575710.jpg
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Und wieder ein Schritt weiter:

Code:
#!/bin/sh

FTP_HOST="url/file.name"
FTP_USER=usr
FTP_PASS=pw

SOURCE_DIR='/volume1/surveillance/@Snapshot/'
SOURCE_IMAGE=$(ls -p -t $SOURCE_DIR | head -2 | tail -1)

curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $SOURCE_IMAGE

Code:
mynas> sh test.sh
curl: Can't open 'picture-20151109-1329014993.jpg'!
curl: try 'curl --help' for more information

Der Dateiname stimmt schonmal. Scheinbar habe ich noch Probleme beim Pfad.
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Okay, ein erster Upload ist jetzt erfolgreich geglückt:

Code:
#!/bin/sh
FTP_HOST="www.my.url/file.name"
FTP_USER=usr
FTP_PASS=pw
SOURCE_DIR='/volume1/surveillance/@Snapshot/'
SOURCE_IMAGE=$(ls -p -t $SOURCE_DIR | head -2 | tail -1)
curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T /volume1/surveillance/@Snapshot/$SOURCE_IMAGE
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Und das nächste Problem ist, dass das Script per Task Sheduler irgendwie nicht richtig ausgeführt wird.
Auch wenn ich es von dort manuell anstubse, kommt keine Datei auf meinem Webspace an.

Wenn ich das Script hingegen per SSH starte, funktioniert es problemlos.
Ich finds scade, dass es im GUI keien Ausgaben hierfür gibt. Denn jetzt bin ich bei der Fehlersuche aufgeschmissen...
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.911
Punkte für Reaktionen
2.361
Punkte
829
Setz vor die Binaries den kompletten Pfad - also z.B. bei curl.
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Ich muss zugeben, dass ich von Shellscripten wenig Ahnung habe...

Was meinst du genau?

statt:
curl ...
also:
/volume1/script/ curl ...

???
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.911
Punkte für Reaktionen
2.361
Punkte
829
Nein, den Pfad, in dem sich das Programm (z.B. curl) befindet. Ich kanns gerade nicht checken, aber sowas wie /usr/bin/curl.
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Ah, okay. Jupp /usr/bin/curl existiert. Ich versuch mal mein Glück. Danke schonmel ;)
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Code:
/usr/bin/curl ftp://$FTP_USER:$FTP_PASS@$FTP_HOST -T $SOURCE_DIR$SOURCE_IMAGE

Funktioniert leider auch nicht. Triggern per SSH: klappt, triggern per GUI: klappt nicht.
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.911
Punkte für Reaktionen
2.361
Punkte
829
Die verwendeten Environmentvariablen setzt Du aber nach wie vor, hast hier also nur eine Zeile aus Deinem Skript 'rausgenommen und den Rest weggelassen, richtig?
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Ach du meinst, dass kein Pfad durch Veriablen gesetzt werden darf?
Verwunderlich, dass es beim Aufruf per SSH keine Probleme macht.
Ich versuchs mal :)
 

dil88

Benutzer
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.911
Punkte für Reaktionen
2.361
Punkte
829
Nein, ist schon alles richtig. Du musst sie ja gesetzt haben, sonst würde es nicht von der Shell aus gehen. Du solltest die Ausgabe des Skripts in eine Datei umleiten. Dann solltest Du sehen, was da schief läuft. Also nicht skript.sh sondern skript.sh 2>&1 /volume1/log/skript.log. Wenn das nicht reicht, dann schreib auch noch die Inhalte der Environmentvariablen per echo-Kommando in das Logfile.
 

Bluehorn

Benutzer
Mitglied seit
04. Nov 2015
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Ich hab den Aufruf in der WebGUI des DS nun folgendermaßen geändert:
/volume1/script/blubb.sh 2>&1 /volume1/log/skript.log

Allerdings wird kein skript.log angelegt.

Der Ordner selbst halt folgende Berechtigung:
drwxr-xr-x 2 root root 4096 Nov 9 15:57 log

Laut WebGui wird das Script als root ausgeführt.


Mit blubb.sh > /volume1/log/skript.log wird eine leere Logdatei sowohl beim Aufruf per SSH als auch beim Aufruf per WebGUI erstellt.


Meine letzte Idee wäre das Script per cronjob aufzurufen.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat