NEWS
[erledigt, nicht gelöst] Bild von Webcam lokal speichern
-
[Vorbemerkung: Ich habe von JavaScript wenig bis keine Ahnung
]
Ich versuche, einen Snapshot einer Webcam lokal zu speichern. Bei der Suche bin ich auf diesen Thread hier gestoßen [https://forum.iobroker.net/topic/51173/gelöst-bild-von-webcam-speichern] der mich letztendlich aber auch ratlos zurücklässt...
Mein Script sieht aktuell so aus:
url_snapshot = 'http://a.b.c.d/snapshot.cgi?user=xxxx&pwd=yyyy'; request.get({url: url_snapshot, encoding: 'binary'}, function (err, response, body) { fs.writeFile('/vis.0/snap.jpg', body, 'binary', function(err) { if (err) { console.error(err); } else { console.log('Snapshot sent'); } });
Was es machen soll, dürfte ersichtlich sein (Es soll ein Snapshot der Webcam im "vis.0"-Verzeichnis gespeichert werden) - was es macht ist:
19:04:35.983 info javascript.0 (9852) Start javascript script.js.common.Kamera-Snapshot 19:04:35.986 error javascript.0 (9852) script.js.common.Kamera-Snapshot compile failed: at script.js.common.Kamera-Snapshot:15 19:04:42.886 info javascript.0 (9852) Stop script script.js.common.Kamera-Snapshot```
Was mache ich alles falsch? Und vor allem: wo?
-
@oliver-w-leibenguth sagte: Was mache ich alles falsch?
Es fehlt ganz oben die Deklaration
const fs = require('fs'); const url_snapshot = 'http://a.b.c.d/snapshot.cgi?user=xxxx&pwd=yyyy';
Schreiben sollte man nur, wenn kein
err
vorliegt.
ioBroker hat Schreibrechte in das Verzeichnis "/vis.0" ?
Es wird nur einmal beim Skriptstart ausgeführt, da ein Trigger fehlt. -
@paul53 sagte in Bild von Webcam lokal speichern:
const fs = require('fs');
const url_snapshot = '..............OK, hab' ich eingefügt, das Resultat (und die Fehlermeldung in der Konsole) bleiben gleich.
ioBroker hat Schreibrechte in das Verzeichnis "/vis.0" ?
Kann ich nicht sicher bestätigen. Schreibversuche in andere Verzeichnisse schlagen aber auch mit der gleichen Fehlermeldung fehl.
Es wird nur einmal beim Skriptstart ausgeführt, da ein Trigger fehlt.
Das macht erstmal nix, den Trigger kann ich später einbauen (zumindest das kriege ich mit meinen mehr als lausigen Kenntnissen hin).
-
@oliver-w-leibenguth sagte: Resultat (und die Fehlermeldung in der Konsole) bleiben gleich.
Es fehlt der Abschluss von request (letzte Zeile unter der jetzigen letzten Zeile)
}); // Ende fs.writeFile }); // Ende request
-
Danke, jetzt sind immerhin schonmal die JS-Fehler weg.
...dafür sind jetzt die hier im Log:
javascript.0 2023-08-10 20:09:43.770 error Request error: Error: Parse Error: Invalid header token javascript.0 2023-08-10 20:09:43.770 error Error in request callback: TypeError [ERR_INVALID_ARG_TYPE]: The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received undefined
-
Hat sich erledigt, ich habe eine (externe) Lösung gefunden
-
Da ein Forum vom Wissensaustausch lebt, lass uns an der Lösung teilhaben.
-
Da JS weder meine Stärke ist, noch eines der exemplarischen Scripte aus anderen Threads funktioniert (wobei ersteres stark zu letzterem beiträgt), erledigt das jetzt ein Windows-Programm, das regelmäßig das Standbild der Kamera abholt und per FTP auf einen Webserver hochlädt.
Jetzt kann ich die Bilder meiner Kameras per VIS auch von Unterwegs sehen, ohne die Kameras selbst von außen zugänglich zu machen -
@oliver-w-leibenguth
Schau mal hier hab ich ein Skript drin mit dem ich PNG von meinem Server für Vis verfügbar machen konnte.
Bei dir evtl. anstatt dem leeren Body "" den Part "user=xxxx&pwd=yyyy" übergeben (wenn es mit dem "Auth"-Header nicht geht) -
@boronsbruder Danke, ich schau' mir das mal an - soweit ich es verstehe