NEWS
ESP32CAM Bilder mit Intervall auf FTP speichern
-
Hallo zusammen,
ich habe eine ESP32CAM, auf die ich zugreifen kann und ein Stand-Bild erstellen kann über http://192.168.X.X/capture.
Nun würde ich gerne dieses Bild per setInterval alle x Minuten auf meine Diskstation per FTP schreiben.
Leider habe ich bisher nichts passendes gefunden und bin über jede Hilfe sehr dankbar.
Danke & viele Grüße -
@bärle Kannst Du denn lokal auf dem Iobroker die Bilddatei anlegen?
Eine zweischrittige Vorgehensweise wäre da vielleicht einfacher.
Erst eine lokale Datei erzeugen.
In das lokale Verzeichnis schaut dann regelmäßig ein Cron-Job und kopiert die Datei per FTP auf die Diskstation, und löscht die lokale Datei.Ich hatte Probleme, die iobroker Backups auf mein NAS zu bekommen, und habe für den Transfer über einen Cronjob rsync statt FTP bemüht - hier der um das Password erleichterte crontab - Eintrag
3 5 * * * sshpass -p "sag_ich_nicht" rsync -a /opt/iobroker/backups/* martin@debian:/mnt/backup/Martin/iobroker/
-
@bärle
Nur so als Anregung.
Ich hole mir regelmäßig die Snapshots vom Watermeter (ESP32-CAM).const objectID = 'mqtt.0.watermeter.main.timestamp'; const filename = '/opt/iobroker/iobroker-data/files/vis.0/watermeter.jpg'; async function updateSnapshot() { const command = 'wget --no-check-certificate "http://192.168.178.151/img_tmp/alg_roi.jpg?timestamp=' + new Date().getTime() + '" --output-document ' + filename; console.log('Speichere neuen Snapshot "' + filename + '"'); exec(command); } on({id: objectID, change: "ne"}, async function (obj) { updateSnapshot(); });
Da müsste man ja jetzt "nur noch" das Kopieren auf das NAS hinterherschieben.
Oder man mountet gleich ein Verzeichnis auf dem NAS und speichert dort.Übrigens: Deine eigenen lokalen IP-Adressen musst Du nicht aus-X-en. Die sind eh bei fast allen gleich.
-
Nachtrag - Die einfachste Lösung würde den ioBroker wahrscheinlich komplett außen vor lassen (Was diesen Thread zum Fall für die "offtopic" Schublade machen würde )
Die Datei in das lokale Verzeichnis über einen Cronjob mit einem wget - Aufruf zu packen, ist eine leichte Fingerübung
https://wiki.ubuntuusers.de/wget/
Ein Cronjob, der ein bash skript aufruft, was Schritt für Schritt wget, und dann ftp oder rsync aufruft wäre da sicherlich das Mittel der Wahl
-
@codierknecht Deine Lösung ist besser für den Thread - weniger Gefahr, in die offtopic - Wüste geschickt zu werden
Mein ioBroker läuft in einem LXC-Container, was das Mounten von Netzwerk-Shares erschwert ...
Deshalb schiebe ich Dateien aus dem Container per Rsync auf ein Netzlaufwerk ...
-
@martinp und @Codierknecht
Vielen Dank für die Tipps und den Code.Das Capture bekomme ich nun in ein lokales Verzeichnis geschrieben (z.B. /opt/iobroker/iobroker-data/files/vis.0/cam1/2023-11-09-13-19-05.jpg) - jetzt müsste ich es nur noch schaffen, diese Dateien auf meine DS oder meinen PC zu bekommen.
Leider habe ich keinerlei Erfahrung mit Cronjobs und bin daher etwas aufgeschmissen und habe bisher nichts brauchbares gefunden.
Viele Grüße
-
@bärle Ist das FTP anonym oder mit Username/Password?
man könnte ja in das Javascript von @Codierknecht unter z.B. dem Variablennamen command2 einen String generieren, mit dem Kommandozeilenaufruf des FTP zum Transferieren des lokalen Files auf die Station. dann noch exec(command2); und der Drops ist gelutscht.
Ich weiß aber nicht inwieweit sich ftp inzwischen ziert, wenn man der Kommandozeile Username und Password im Klartext mitgibt...
Bei rsync brauchte man obenstehenden Schnörkel aus meine früheren Post ...
Wenn man die Aufnahmen aufbewahren will, muss man ggfs. auch noch bei der Erzeugung des Dateinamens etwas mehr Mühe aufwenden, und ggfs. das Erstelldatum o. Ä. in den Dateinamen einkodieren...
-
@martinp Ich habe ein FTP-Account auf meiner DS angelegt mit User und Passwort mit der Berechtigung in einen Ordner schreiben/lesen.
-
@bärle man kann eine Textdatei verwenden, um ftp zu automatisieren.
Siehe
https://stackoverflow.com/questions/16158138/how-to-ftp-with-a-batch-file
(Zielserver scheint Windows zu sein)Textdatei (abgewandelt) example.txt
open 10.155.8.215 user password lcd /D "G:\Subfolder\" cd folder/ binary mput watermeter.jpg disconnect quit
Aufruf mit
ftp -s:example.txt
Dadurch wird example.txt zeilenweise durch FTP abgearbeitet...
die Datei "watermeter.jpg" würde natürlich alle 5 Minuten überschrieben, wenn ein neues Foto hereinkommt. Muss man schauen, wenn man das archivieren will ...
Jedes Mal eine neue Text Datei mit einem anderen Ziel-Dateinamen erzeugen ist auch nicht gerade toll.