NEWS
wget lädt nur eine 0kb Datei aus Stream
-
Ja,
jetzt speichert er auch die Bilder. Sogar ohne sudo und aus Blockly heraus.Jedoch hat mir der Telegramadapter beim Senden einen Fehler ausgegeben.
Darauf hin habe ich mir das Bild mal angeschaut.Man kann es nicht öffnen. Zumindest nicht unter Windows und Android.
Im Browser hat man unter dem Link ein normales JPG was man speichern kann.
-
sendImage(); function sendImage() { let bild = "/opt/iobroker/iobroker-data/bild.jpg"; axios({ method: 'get', url: 'http://192.168.xxxxx/snapshot.jpg?user=xxxx&pwd=xxxxx&strm=1', responseType: 'stream' }) .then(function (response) { response.data.pipe(fs.createWriteStream(bild)); setTimeout(function() { sendTo('telegram.0', { text : bild, disable_notification: true }); }, 300); }); }
das ist was du suchst
-
Kann ich das Script so wie es ist nehmen und nur die URL anpassen?
Welche Einheit hat der Timeout von 300 (Ist das einer?) ?
Benutze leider nur mit Blockly.Kann ich das so in Blockly integrieren mit einem Trigger?
Wobei ich es trotzdem interessant finde, warum er das Bild nicht richtig speichert.
-
@arteck Wieso nicht warten bis der Stream fertig ist statt ein fixes (möglicherweise unnötig langes oder zu kurzes) Timeout?
-
@David-G sagte in wget lädt nur eine 0kb Datei aus Stream:
wget -v /opt/iobroker/snapshot/snapshoot.jpg 'http://192.168.xxxxx/snapshot.jpg?user=xxxx&pwd=xxxxx&strm=1'
Müsste der Befehl nicht
wget -v -O /opt/iobroker/snapshot/snapshoot.jpg 'http://192.168.xxxxx/snapshot.jpg?user=xxxx&pwd=xxxxx&strm=1'
sein (also Ausgabe-Dateiname per -O angeben)?
==> https://wiki.ubuntuusers.de/wget/Obiger Befehl würde versuchen,
/opt/iobroker/snapshot/snapshoot.jpg
herunter zu laden, was keinen Sinn macht. -
Ja, das srimmt.
Ist auch der letzte Stand. Nur eben mit einem Bild was man nicht öffnen kann.
sudo wget -o /opt/iobroker/snapshot/bild1.jpg 'http://192.168.xxxxx/snapshot.jpg?user=xxxx&pwd=xxxxx&strm=1'
-
Unter Windows konnte ich die Bilddateien jetzt öffnen.
WinSCP öffnet sie im Editor.Ihr Inhalt ist:
--2020-11-12 11:18:57-- http://192.168.xx.xx/snapshot.jpg?user=xx&pwd=xxx&strm=1 Verbindungsaufbau zu 192.168.xx.xx:80 … verbunden. HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK Länge: 26564 (26K) [image/jpeg] snapshot.jpg?user=xxx&pwd=xxxx&strm=1: Keine Berechtigung Schreiben nach »snapshot.jpg?user=xxxx&pwd=xxxxx&strm=1« nicht möglich (Keine Berechtigung).
-
@David-G großes O, nicht kleines o. Und bitte lass das
sudo
weg, das verhaut dir nur die Berechtigungen. -
Danke, das war es.
Das sudo hatte ich schon weg.
Das kleine -o war das Problem.Hab grad erfolgreich das Bild per Telegram bekommen.
-
Bei mir geht es auch um wget, allerdings bekomme ich die Datei einfach nicht auf meinen USB Stick von der FritzBox gespeichert. Im User "pi" ist der Stick unter /media/fritzbox-usb eingebunden. Ich kann auch von der Konsole zugreifen. Führe ich jetzt z.B. den Befehl
wget --output-document /media/fritzbox-usb/snapshot.png 'http://192.168.178.225/capture'
aus, wird die Datei nicht gespeichert. Wenn ich das Bild in den /tmp Ordner via
wget --output-document /tmp/snapshot.png 'http://192.168.178.225/capture'
speichere, geht es ohne Probleme. Was mache ich falsch?
Von der Konsole kann ich auf den Mountpunkt zugreifen.
-
@AlCalzone gute frage.....
let axios = require('axios'); var fs = require('fs'); let bild1 = "/opt/iobroker/iobroker-data/bild.jpg"; sendImage1(); async function sendImage1() { const writer = fs.createWriteStream(bild); const response = await axios({ url: 'http://192.168.xxxxx/snapshot.jpg?user=xxxx&pwd=xxxxx&strm=1', method: 'get', responseType: 'stream' }) response.data.pipe(writer); return new Promise((resolve, reject) => { writer.on('finish', resolve => { sendTo('telegram.0', { text : bild, disable_notification: true }); }) }) }
-
@david-g
Nachdem mich das Thema mit der leeren Datei nach einem wget nun ebenfalls 2 Tage beschäftigt hat, habe ich in meinem Fall die folgende Ursache festgestellt:
Die http-Quelle, von der ich das Bild hole (bei mir Motioneye), hat die gleiche IP-Adresse wie der ioBroker, der das Bild abholt. Beide laufen in einem Docker-Container des Host-Rechners (bei mir ein QNAP-NAS) - und in dieser Konfiguration kann es passieren, dass keine Kommunikation zwischen den beiden Docker-Instanzen möglich ist. Dies ist z. B. in den 'Docker Docs' (siehe hier) beschrieben.
Ich habe dementsprechend Motioneye neu installiert mit der Netzwerkeinstellung "Bridge". Damit erhält Motioneye eine eigene IP-Adresse, und der Zugriff vom ioBroker klappt dann reibungslos