NEWS
Fehler: Bild via Telegram verschicken
-
Grüße,
ich musse leider mein System komplett neu aufsetzen. Seit dem funktioniert mein Script nicht mehr.
Hat jemand eine Idee, woran dies liegt?var source_url = 'http://10.0.20.10:81/image/Haustuer', dest_path = '/opt/iobroker/iobroker-data/files/_temp'; var request = require('request'); var fs = require('fs'); on({id: "doorbird.0.Doorbell.1.trigger"/*HM-Sen-DB-PCB PEQ0653647:1.PRESS_SHORT*/, val: true}, function (obj) { if (getState("vars.0.klingelfreigabe").val == true) { //doppelklingel verhindern setState("vars.0.klingelfreigabe"/*klingelfreigabe*/, false); setStateDelayed("vars.0.klingelfreigabe"/*klingelfreigabe*/, true, 40000, true); //fuer 10 sekunden sperren setTimeout(function(){ saveImage(); }, 2500); } //senden nach MILISEKDUNGEN }); function sendImage (pfad) { setTimeout(function() { setState("mqtt.0.BlueIris.admin"/*BlueIris/admin/*/, ''); setStateDelayed("mqtt.0.BlueIris.admin"/*BlueIris/admin/*/, 'camera=Haustuer&snapshot', 100, false); setStateDelayed("mqtt.0.BlueIris.admin"/*BlueIris/admin/*/, '', 150, false); //Bild wird auf dem Server gespeichert und danach leeren damit der es abspielt sendTo('telegram.0', "Türklingel:"); sendTo('telegram.0', pfad); sendTo('telegram', '/opt/iobroker/iobroker-data/files/doorbird.0/Doorbell1_1.jpg'); log('Webcam Bild per telegram verschickt'); }, 2 * 1000); } function saveImage() { request.get({url: source_url, encoding: 'binary'}, function (err, response, body) { fs.writeFile(dest_path + 'image1.jpg', body, 'binary', function(err) { if (err) { log('Fehler beim Bild speichern: ' + err, 'warn'); } else { log('Webcam Bild gespeichert'); sendImage(dest_path + 'image1.jpg'); } }); }); }
-
@t1m0 Nicht manuell nach files schreiben… Nimm irgendein anderes Verzeichnis. Und request am besten auch direkt loswerden
-
@t1m0 ,
hier mit "axios" und das Verzeichnis "/opt/iobroker/snapshots" habe ich mit "mkdir" manuell erzeugt.const fs = require('fs'); const axios = require('axios'); const camUrl = 'http://192.168.1.116:5000/api/doorbell/latest.jpg?h=600'; var snap = ''; var bell = true; async function sendImage() { const writer = fs.createWriteStream(snap); try { const response = await axios({ url: camUrl, method: 'get', responseType: 'stream' }) response.data.pipe(writer); return new Promise((resolve, reject) => { writer.on('finish', resolve => { sendTo('telegram.0', {text: snap, caption: 'Jemand klingelt an der Haustür !!!'}); sendTo("email", { to: "tuerklingel@gmx.net", subject: "Message from ioBroker", text: "Jemand klingelt an der Haustür !!!", attachments: [{path: snap}] }); }); }); } catch (err) { console.log('Kamera hat ein problem'); } } on({id: "mqtt.0.piface.input.DoorBell_1", val: true}, function (obj) { if (bell) { snap = '/opt/iobroker/snapshots/snap_' + formatDate(obj.state.lc, 'TT.MM.JJJJ_hh:mm:ss') + '.jpg'; sendImage(); } bell = false; setTimeout(function() { bell = true; }, 120000); });
-
Vielen Dank euch beiden!
Script läuft wieder. Jedoch bekomme ich noch ein paar Fehlermeldungenjavascript.0 2024-07-07 22:49:38.285 warn script.js.test2: setForeignState(id=mqtt.0.BlueIris.admin, state={"val":"","ack":false,"ts":1720385378285,"q":0,"from":"system.adapter.javascript.0","lc":1720385378285,"c":"script.js.test2"}) - wurde nicht ausgeführt, während der Debug-Modus aktiv ist javascript.0 2024-07-07 22:49:38.235 warn script.js.test2: setForeignState(id=mqtt.0.BlueIris.admin, state={"val":"camera=Haustuer&snapshot","ack":false,"ts":1720385378235,"q":0,"from":"system.adapter.javascript.0","lc":1720385378235,"c":"script.js.test2"}) - wurde nicht ausgeführt, während der Debug-Modus aktiv ist javascript.0 2024-07-07 22:49:38.135 warn script.js.test2: setForeignState(id=mqtt.0.BlueIris.admin, state={"val":"","ack":false,"ts":1720385378135,"q":0,"from":"system.adapter.javascript.0","lc":1720385378135,"c":"script.js.test2"}) - wurde nicht ausgeführt, während der Debug-Modus aktiv ist javascript.0 2024-07-07 22:49:35.440 warn script.js.test2: setForeignState(id=vars.0.klingelfreigabe, state={"val":false,"ack":false,"ts":1720385375440,"q":0,"from":"system.adapter.javascript.0","lc":1720385375440,"c":"script.js.test2"}) - wurde nicht ausgeführt, während der Debug-Modus aktiv ist
So sieht das Script bei mir nun aus:
const fs = require('fs'); const axios = require('axios'); const camUrl = 'http://10.0.20.10:81/image/Haustuer'; var snap = '/opt/iobroker/snapshots/snap.jpg'; async function sendImage() { const writer = fs.createWriteStream(snap); try { const response = await axios({ url: camUrl, method: 'get', responseType: 'stream' }) response.data.pipe(writer); return new Promise((resolve, reject) => { writer.on('finish', resolve => { setState("mqtt.0.BlueIris.admin"/*BlueIris/admin/*/, ''); setStateDelayed("mqtt.0.BlueIris.admin"/*BlueIris/admin/*/, 'camera=Haustuer&snapshot', 100, false); setStateDelayed("mqtt.0.BlueIris.admin"/*BlueIris/admin/*/, '', 150, false); //Bild wird auf dem Server gespeichert und danach leeren damit der es abspielt sendTo('telegram.0', "Türklingel:"); sendTo('telegram.0', {text: snap, caption: ''}); sendTo('telegram', '/opt/iobroker/iobroker-data/files/doorbird.0/Doorbell1_1.jpg'); }); }); } catch (err) { console.log('Kamera hat ein problem'); } } on({id: "doorbird.0.Doorbell.1.trigger"/*HM-Sen-DB-PCB PEQ0653647:1.PRESS_SHORT*/, val: true}, function (obj) { if (getState("vars.0.klingelfreigabe").val == true) { //doppelklingel verhindern setState("vars.0.klingelfreigabe"/*klingelfreigabe*/, false); setStateDelayed("vars.0.klingelfreigabe"/*klingelfreigabe*/, true, 40000, true); //fuer 10 sekunden sperren setTimeout(function(){ sendImage(); }, 2500); } //senden nach MILISEKDUNGEN });
-
@t1m0 Mach den Debug-Modus im Script aus… (oben rechts)
-
@haus-automatisierung danke!