NEWS
Dateien auf FTP / NAS kopieren und anschließend umbenennen
-
Hallo,
ich habe es mit eurer Hilfe hin bekommen, einen Screenshot (Snapshot) von meiner IPCamera zu machen. Mein ioBroker läuft auf einem RasPi 4 mit 4GB in der aktuellen version mit NODE 14.
Jetzt muss der Screenshot (Snapshot) noch auf meinen FTP/Datei Server (QNAP NAS). Hierfür habe ich wput über putty nachinstalliert. Es gelingt mir nun, die Snapshotdatei auf meinen NAS zu kopieren. Nachfolgend das TEST-Blockly (nicht wundern, damit teste ich etwas rum und schicke auch per Telegram):
var timeout3, timeout, timeout2; exec('wget -O /opt/iobroker/snapshot/bild.jpg \'http://192.168.XXX.XXX:X/picture.jpg\''); timeout3 = setTimeout(async function () { exec('wput /opt/iobroker/snapshot/bild.jpg ftp://ADMIN:PASSWORD@192.168.XXX.XXX:x); }, 2000); timeout = setTimeout(async function () { sendTo("telegram", "send", { text: '/opt/iobroker/snapshot/bild.jpg' }); }, 1000); timeout2 = setTimeout(async function () { sendTo("telegram", "send", { text: 'Türklingel!' }); }, 1000);
Es gibt jetzt noch 2 Dinge:
-
Ich möchte die Datei umbenennen. Im Idealfall würde die aktuelle Datei "bild.jpg" in "2022.01.22 07.15.55.jpg" umbenannt, also "YYYY.MM.DD - HH.MM.SS". Die Umbenennung sollte möglichst auf dem NAS erfolgen, da ja sonst die SD des RasPi voll wird.
-
Es gibt ein kleines Problem mit wput. Es wird immer der gesamte Dateipfad, also /opt/iobroker/snapshot auf dem freigegebenen Netzwerkpfad erstellt. Es soll natürlich nicht so erfolgen. Kann man das einstellen?
"-nd" und "--no-directories" bewirkt nur, dass kein Bild und kein Ordner im Netzlaufwerk erscheinen...
EDIT:
Problem 2 ist gelöst. Nach etwas Suchen habe ich folgende Lösung gefunden: Es muss der Pfad als Basename zuvor angelegt werden. Damit kommt der ganze Pfad nicht mehr mit. Das sieht dann bei mir so aus:wput --basename=/opt/iobroker/snapshot /opt/iobroker/snapshot/bild.jpg ftp://ADMIN:PASSWORD@192.168.XXX.XXX:X
Bleibt nur noch das Umbenennen mit Datum und Uhrzeit auf dem Server. Alternativ, falls das geht, könnte man die Dateien ja auch auf dem Raspi umbenennen und dann alle im Pfad Ordner "snapshot" löschen?
MfG Flixer
-
-
Cool, das kann ich bestimmt auch mal gebrauchen mit dem wput.
Mit dem Pfad hab ich auch keine Idee. Habe im. Syntax vom wput keine Option für gefunden.
Zum Dateinamen. Die kannst du doch am iobroker umbenennen. Am Ende vom Script lässt du die Datei dann löschen. Oder wird das Bild noch weiter benötigt?
EDIT:
Evtl hilft das bei dem Problem mit dem ganzen Pfad. Ka....Verzeichnis-Optionen -nd --no-directories Falls Dateien rekursiv hochgeladen werden, so wird auf dem Server kein Ordner erstellt wenn keiner Vorhanden ist. --basename=PFAD Spezifiziert einen Basispfad.
EDIT 2:
Man kann mittels curl scheinbar Daten am Server umbenennen. (auch hochladen).http://www.mukeshkumar.net/articles/curl/how-to-use-curl-command-line-tool-with-ftp-and-sftp
EDIT 3:
Dass ganze editieren vom Ausgangspost finde ich ziemlich unpraktisch. Besser weiter unten als Antwort einfügen.
Erst recht, wenn alle Änderungen auf Antworten anderer User basieren. Wenn jemand den Thread liest findet er kaum den Zusammenhang.Das umbenennen und löschen ist ja relativ einfach.
Das curl vom ersten lesen her auch. Noch nie gemacht. -
@david-g
Hallo david,ich hatte den Ausgangspost editier, da war noch keine Antwort vorhanden.
Hier der aktuelle Stand:
Langsam komme ich voran. Aktuell speichern das Skript die Datei aber nicht, wenn ich das Datum und/oder die Uhrzeit (einfach nur ohne Sonderzeichen hintereinander weg z.B. als JJJJMMDD) rein schreibe. Nehme ich z.B. nur "Minuten" klappt es wunderbar.
Mal eine Frage zwischendurch: Wie lösche ich aus Putty heraus eine Datei?
Ich habe folgenden Pfad: /opt/iobroker/snapshot/
In diesem Pfad wird eine Datei abgelegt, die ich mit einer Variablen hinterlegt habe (Bildpfad). Mit welchem Befehlt kann ich die Datei löschen? Hintergrund: Nach erfolgreichem Durchlauf soll der Ordner natürlich nicht "zumüllen" und die auf den NAS kopierte Datei soll auf dem raspi entfernt werden.
-
Okay, haben wir uns überschritten ^^.
Warum er nicht speichert weiß ich nicht. Hast du ein vordefiniertes Format genommen oder ein eigenes bei der Zeit?
Löschen müsste mit
rm /opt/iobroker/snapshot/xxx.jpg
funktionieren.
Kannst du ja auch mit den Variablen zusammensetzen. -
@flixer sagte in Dateien auf FTP / NAS kopieren und anschließend umbenennen:
Mit welchem Befehlt kann ich die Datei löschen?
Per Script mache ich dies so.
function Datei_loeschen(Datei) { // Pfad immer mit / darstellen // gesamter Befehl somit: Datei_loeschen("/opt/iobroker/iobroker-data/files/vis.0/Daten/test.txt"); var fs = require('fs'); fs.unlink(Datei, function (err) { if (err) throw err; log('Datei: ' + Datei + ' wurde gelöscht.'); }); }
-
Hallöchen,
also es läuft.
Zum Verständnis: Ich habe eine Türsprechanlage (Akuvox R25C), die beim Drücken des Klingeln-Knopfes u.a. einen Web-Befehl an den ioBroker schickt welcher einen Objektwert ändert. Wenn dieser auf "true" gesetzt wird startet das Skript.
Als Erläuterung für den Ablauf von oben nach unten (laienhaft beschreiben!):
- der Bildpfad auf meinem RasPi wird festgelegt, inkl. Datum und Uhrzeit im Dateinamen (hier Tür_Datum_Uhrzeit) => Hinweis: der Ordner Snapshot ist nicht vorhanden und muss z.B. mit Putty erstellt werden)
- der Befehl für das Holen vom Bild der Camera wird definiert
- der Befehl für das Kopieren auf den Server wird festgelegt
- der Befehl für das Löschen der Datei auf meinem Raspi wird definiert
- Ausführen des Befehlts Speichern
-- Timeout mit anshcließendem Senden des Bildes und einer Nahcricht (es hat geklingelt) - nach einem Timeout wird die aufgenommene Datei mit dem Befehl Kopieren auf den NAS kopiert und nach anschließender Pause vom RasPi gelöscht
- abschließend wird das Objekt auf den Werte false gesetzt, sodass beim erneuten Klingeln das Skript wieder startet.
MfG Flixer