NEWS
[gelöst]Fehler seit Javascript Update beim speichern vom Webcam Bild
-
Seit dem Update bekomme ich Fehler im Log beim abspeichern meines Webcam Bildes
Hier das Log und das Script dazu. Hat vorher ohne weiteres funktioniert.
// Foto an Telegram senden, wenn geklingelt wird oder wenn von Telegram angefragt wird. var source_url = "http://XXXXXXXXXX/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=admin&pwd=XXXXXXX", dest_path = '/opt/iobroker/foto/'; // der Pfad var Download = require('download'); var fs = require('fs'); function speichereFoto () { new Download({mode: '755'}).get(source_url).dest(dest_path).run(function(err, files){ fs.rename('/opt/iobroker/foto/CGIProxy.fcgi!cmd=snapPicture2&usr=admin&pwd=XXXXXXX', '/opt/iobroker/foto/kamerabild.jpeg'); //Datei umbenennen if (err) log('Fehler beim Bild speichern: ' + err, 'warn'); else log('Webcam Bild gespeichert'); }); } // Bild an telegram schicken function sendeFoto (pfad) { sendTo('telegram', pfad); log('Bild per telegram verschickt'); } function aktion () { speichereFoto(); setTimeout(function() { sendeFoto(dest_path + 'kamerabild.jpeg'); // hier Dateinamen des abgespeicherten Bildes angeben }, 5 * 1000); // 5s Verzögerung } // ab hier den Trigger einfügen var idKlingel = "hm-rpc.0.MEQ00XXXXX.1.PRESS_SHORT"; //Klingelsensor on({id: idKlingel, val: true}, function() { sendTo('telegram', "Es hat geklingelt"); aktion(); }); on("telegram.0.communicate.request", function (obj) { if (obj.newState.val == "[Coyote]kamera" || obj.newState.val == "[Coyote]/kamera") { //Telegram anfrage aktion(); setState("telegram.0.communicate.request","leer"); } });
-
Seit dem Update bekomme ich Fehler im Log beim abspeichern meines Webcam Bildes
Hier das Log und das Script dazu. Hat vorher ohne weiteres funktioniert.
// Foto an Telegram senden, wenn geklingelt wird oder wenn von Telegram angefragt wird. var source_url = "http://XXXXXXXXXX/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=admin&pwd=XXXXXXX", dest_path = '/opt/iobroker/foto/'; // der Pfad var Download = require('download'); var fs = require('fs'); function speichereFoto () { new Download({mode: '755'}).get(source_url).dest(dest_path).run(function(err, files){ fs.rename('/opt/iobroker/foto/CGIProxy.fcgi!cmd=snapPicture2&usr=admin&pwd=XXXXXXX', '/opt/iobroker/foto/kamerabild.jpeg'); //Datei umbenennen if (err) log('Fehler beim Bild speichern: ' + err, 'warn'); else log('Webcam Bild gespeichert'); }); } // Bild an telegram schicken function sendeFoto (pfad) { sendTo('telegram', pfad); log('Bild per telegram verschickt'); } function aktion () { speichereFoto(); setTimeout(function() { sendeFoto(dest_path + 'kamerabild.jpeg'); // hier Dateinamen des abgespeicherten Bildes angeben }, 5 * 1000); // 5s Verzögerung } // ab hier den Trigger einfügen var idKlingel = "hm-rpc.0.MEQ00XXXXX.1.PRESS_SHORT"; //Klingelsensor on({id: idKlingel, val: true}, function() { sendTo('telegram', "Es hat geklingelt"); aktion(); }); on("telegram.0.communicate.request", function (obj) { if (obj.newState.val == "[Coyote]kamera" || obj.newState.val == "[Coyote]/kamera") { //Telegram anfrage aktion(); setState("telegram.0.communicate.request","leer"); } });
filename="Fehler.PNG" index="0">~~
Ich verdächtige "Download". Kann sein, dass das Packet nicht mehr da ist?
Ich empfehle dieses verfahren zu benutzen:
https://github.com/ioBroker/ioBroker.telegram#usage
mit "request"
-
Hallo,
das habe ich auch gemerkt. So wie es Bluefox oben verlinkt hat, habe ich es jetzt umgesetzt. Funktioniert einwandfrei.
!
/* Testskript BILDSPEICHERUNG ! todo: zum Umbenennen der Datei gilp-rename nutzen ! soll bei Aktion Webcam Bild speichern und per telegram senden Skript ist normalerweise inaktiv und wird zur per ScriptEnabled ausgelöst erstellt 30.03.2016 16.04.2016 nahc Update des telegram Adapters durch Bluefox ist es jetzt einfacher, Dateien zu senden 25.05.2016 download Funktion entfernt und durch request ersetzt */ ! var source_url = 'http://IPundFOTOderKAMERA', // Kamerabild zB http://kameraserver:9090/image1.jpg dest_path = '/Users/pix/Documents/iobroker/iobroker-data/webcam/'; ! var request = require('request'); var fs = require('fs'); ! // Bild an telegram schicken (immer Dienst 3) function sendImage (pfad) { setTimeout(function() { sendTo('telegram.1', pfad); log('Webcam Bild per telegram verschickt'); }, 2 * 1000); } ! // Bild speichern 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'); } }); }); } ! // bei Skriptstart ausführen saveImage(); ! // selbständig Skript wieder anhalten (nach 12s) setStateDelayed('javascript.' + instance + '.scriptEnabled.' + name.slice(10), false, 12*1000); !
Bitte den Pfad zum Kamerabild anpassen. Der Dateiname des Fotos (hier image1.jpg), kommt weiter unten noch zweimal vor. Bitte auch anpassen.
! Und schließlich muss der dest_path auch noch angepasst werden, das ist nämlich oben im Skript ein Ordner auf einem OS X ioBroker Server.Dieses Skript ist normalerweise deaktiviert. Es wird per telegram-Befehl oder per VIS oder aus anderen Skripten über den Datenpunkt Javascript.2.scriptEnabled.SKRIPTNAME aktiviert (true/false). Im Skript ist eine Zeile (die man auch für alle anderen Skripte nutzen kann), die das Skript nach Ablauf einer Zeit wieder deaktiviert.````
// selbständig Skript wieder anhalten (nach 12s)
setStateDelayed('javascript.' + instance + '.scriptEnabled.' + name.slice(10), false, 12*1000);So werden alle Aktionen im Skript nur ausgeführt, wenn es aktiv ist. Dieses Vorgehen umgeht die on-Funktion. Das ist vielleicht für manche zu Beginn einfacher. Gruß Pix
-
Danke euch beiden.
Nutze jetzt das Script von pix, funktioniert tadelos, danke Dir
-
Wie bekomme ich den Script denn über einen Script gestartet ?Hab was getestet aber so wie ich es gemacht habe geht es nicht.
var idKlingel = "hm-rpc.0.Mxxxxx.1.PRESS_SHORT"/Klingelsensor.PRESS_SHORT/; // Homematic Klingelsensor
on({id: idKlingel, val: true}, function() // on lauscht auf Klingelsignal
on Javascript.0.scriptEnabled.Skript3 true) ;
-
Hi Leute,
Brauch mal ne schnell Script Hilfe für:
var idKlingel = "hm-rpc.0.NEQ1111072.1.STATE"; // Homematic Klingelsensor on({id: idKlingel, val: true}, function() on javascript.0.scriptEnabled.Test.Telegram_Bild_2 true );
Geht leider nicht bei mir:
Fehler ist:````
error script.js.Test.Telegram_Bild2_starten compile failed: SyntaxError: Unexpected identifierWo ist der Syntax Fehler? Er scheint die Klammer zu vermissen, aber die steht ja hinter dem Datenpunkt des Scripts?
-
Lösung:
var idKlingel = "hm-rpc.0.NEQ11xxxx.1.STATE"; // Homematic Klingelsensor var idSkript = 'javascript.0.scriptEnabled.Test.TelegramBild2'; // Skript, dass aktiviert werden soll on({id: idKlingel, val: true}, function(obj) { // on lauscht auf Klingelsignal, also ist der TRIGGER / AUSLÖSER setState(idSkript, true); });
-
Ich verstehe es nicht und ich habe schon ziemlich viel ausprobiert. Aber das Script von pix scheint bei mir keine Bilder abzuspeichern. Es wird zwar immer eine Datei angelegt, aber sie ist immer nur 351B groß.
Als Verzeichnis habe ich /tmp und /cam versucht.
Als Links habe ich dies versucht (Aufgerufen im Browser sehe ich ein Bild!):
var source_url = 'http://admin:pwd@192.168.2.118:8080/mjp … .cgi?chn=0',
var source_url = 'http://192.168.2.118:8080/mjpeg/snap.cgi?chn=0',
var source_url = 'http://192.168.2.118:8080/mjpeg/snap.cgi', (auch mit user und pwd)
Hat jemand eine Idee? Ich denke, es bestimmt ein typischer Anfängerfehler...
Danke!!