NEWS
(gelöst) Umbau von request auf httpGet für mehrere Snapshot
-
Hallo zusammen,
Ich nutze seit längerer Zeit Script von @Uhula// ------------------------------------------------------------------------- // Dieses Script überwaht den Zustand eines Bewegungsmelders und speichert bei // Aktivierung ein Bild einer Überwachnungskamera in einem Vereichnis und sendet // dieses via Telegram.0-Adapter. Nach 10 Sek wird ein weiteres Bild erstellt und // gesendet. // Die Speicherung der Bilder erfolgt als "Stack", d.h. das aktuellste Bild bekommt // immer den Suffix "0" und es werden n Bilder mit den Suffixen 1..n-1 vorgehalten // Uhula 2017.11 // ------------------------------------------------------------------------- // ------------------------------------------------------------------------- // Konfiguration // ------------------------------------------------------------------------- // Objekt-ID des Bewegungsmelders const oidKlinkelShelly = "shelly.0.xxx.Relay0.Switch"; // URL zur Kamera umn ein Image (jpg) zu erhalten const cam_url = "http://192.168.xx.xxx/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=admin&password=password"; // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren const dest_path = '/opt/iobroker/iobroker-data/files/temp/'; // Anzahl der Bilder, die vorgehalten werden sollen const imageCountMax = 8; // Prefix für die Bildnamen const imageNamePre = "Eingang"; // ------------------------------------------------------------------------- // Scriptteil // ------------------------------------------------------------------------- var request = require('request'); var fs = require('fs'); // Bild an telegram schicken function sendImage (path) { try { var stats = fs.statSync(path); //var msg = formatDate(stats.birthtime,"DD.MM hh:mm:ss") + " Es hat geklingelt" // + path.substring(path.lastIndexOf('/')+1); var msg = formatDate(Date.now(),"DD.MM hh:mm:ss") + " Es hat geklingelt" // + path.substring(path.lastIndexOf('/')+1); sendTo('telegram.0', { text: path, caption: msg, disable_notification: true }); } catch(err) { if (err.code != "ENOENT") log(err); } } // löscht eine Datei synchron (wartet auf das Ergebnis) function fsUnlinkSync(path) { try { var stats = fs.statSync(path); try { fs.unlinkSync(path); } catch(err) { if (err.code != "ENOENT") log(err); } } catch(err) { if (err.code != "ENOENT") log(err); } } // benennt eine Datei synchron um (wartet auf das Ergebnis) function fsRenameSync(oldPath, newPath) { try { var stats = fs.statSync(oldPath); try { fs.renameSync(oldPath, newPath); } catch(err) { if (err.code != "ENOENT") log(err); } } catch(err) { if (err.code != "ENOENT") log(err); } } // Bild speichern und senden function saveImage() { // Bild imageCountMax-1 löschen fsUnlinkSync( dest_path + imageNamePre + (imageCountMax-1) + ".jpg" ); // Bilder 0..imageCountMax-2 umbenennen //for (var i=imageCountMax-2; i >= 0; i-- ) { //fsRenameSync(dest_path + imageNamePre + i + ".jpg", dest_path + imageNamePre + (i+1) + ".jpg"); //} // Bild 0 löschen var fname = imageNamePre + "0.jpg"; fsUnlinkSync( fname ); // Bild holen und speichern request.get({url: cam_url, encoding: 'binary'}, function (err, response, body) { fs.writeFile(dest_path + fname, body, 'binary', function(err) { if (err) { log('Fehler beim Bild speichern: ' + err, 'warn'); } else { // dem Filesystem 2 Sek Zeit zum Speichern lassen setTimeout(function() { sendImage(dest_path + fname); }, 2000); } }); }); } // sofort ein Bild senden und nach 10 Sek erneut function onEvent() { saveImage(); //setTimeout(function() { saveImage(); }, 10 * 1000); } // Ereignisroutine //on({id: oidKlinkelShelly, val: true}, function (obj) { on({id: "shelly.0.SHSW-1#25A7FE#1.Relay0.Switch"/*Switch*/, change: "ne"}, function (obj){ if (getState("shelly.0.SHSW-1#25A7FE#1.Relay0.Switch").val == true) { onEvent( obj ); } else { console.log('Schreibt nicht'); } }); // manuelle Ausführung (Test)Habe heute auch auf JS v8.3.1 upgedated.
Jetzt bekomme ich diese Fehlermeldung
script.js.common.Bild_per_Telegramm_bei_Alarm: request package is deprecated - please use httpGet (or a stable lib like axios) instead!
Die beiden Methoden hab ich ausprobiert, klappt aber nicht
https://forum.iobroker.net/topic/75072/gelöst-request-auf-httpget-umstellen-für-snapshot/4
Für Hilfe wäre ich dankbar. -
@kukoratsch
was hast du probiert? zeige doch mal. dann kannst du es besser verstehen, als nur zu kopieren. Im Prinzip, ist es die selbe Konstellation wie bei dir. -
// ------------------------------------------------------------------------- // Dieses Script überwaht den Zustand eines Bewegungsmelders und speichert bei // Aktivierung ein Bild einer Überwachnungskamera in einem Vereichnis und sendet // dieses via Telegram.0-Adapter. Nach 10 Sek wird ein weiteres Bild erstellt und // gesendet. // Die Speicherung der Bilder erfolgt als "Stack", d.h. das aktuellste Bild bekommt // immer den Suffix "0" und es werden n Bilder mit den Suffixen 1..n-1 vorgehalten // Uhula 2017.11 // ------------------------------------------------------------------------- // ------------------------------------------------------------------------- // Konfiguration // ------------------------------------------------------------------------- // Objekt-ID des Bewegungsmelders const oidLichtBewmelderTuer = "0_userdata.0.Alarm_Anlage.Kamera_Eingang"; // URL zur Kamera umn ein Image (jpg) zu erhalten //const cam_url = "http://192.168.178.96:8085/tmpfs/auto.jpg?usr=xxx&pwd=xxx"; // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren // const dest_path = '/opt/iobroker/iobroker-data/files/temp/alarm/'; const dest_path = '/opt/iobroker/iobroker-data/tmp/'; // Anzahl der Bilder, die vorgehalten werden sollen const imageCountMax = 50; // Prefix für die Bildnamen const imageNamePre = "Enbruch_Kamera_Eingang_"; // ------------------------------------------------------------------------- // Scriptteil // ------------------------------------------------------------------------- //var request = require('request'); var fs = require('fs'); // Bild an telegram schicken function sendImage (path) { try { var stats = fs.statSync(path); var msg = formatDate(stats.birthtime,"DD.MM.YYYY hh:mm:ss") + " " + path.substring(path.lastIndexOf('/')+1); sendTo('telegram.0', { text: path, caption: msg, disable_notification: true }); } catch(err) { if (err.code != "ENOENT") log(err); } } // löscht eine Datei synchron (wartet auf das Ergebnis) function fsUnlinkSync(path) { try { var stats = fs.statSync(path); try { fs.unlinkSync(path); } catch(err) { if (err.code != "ENOENT") log(err); } } catch(err) { if (err.code != "ENOENT") log(err); } } // benennt eine Datei synchron um (wartet auf das Ergebnis) function fsRenameSync(oldPath, newPath) { try { var stats = fs.statSync(oldPath); try { fs.renameSync(oldPath, newPath); } catch(err) { if (err.code != "ENOENT") log(err); } } catch(err) { if (err.code != "ENOENT") log(err); } } // Bild speichern und senden function saveImage() { // Bild imageCountMax-1 löschen fsUnlinkSync( dest_path + imageNamePre + (imageCountMax-1) + ".jpg" ); // Bilder 0..imageCountMax-2 umbenennen for (var i=imageCountMax-2; i >= 0; i-- ) { fsRenameSync(dest_path + imageNamePre + i + ".jpg", dest_path + imageNamePre + (i+1) + ".jpg"); } // Bild 0 löschen var fname = imageNamePre + "0.jpg"; fsUnlinkSync( fname ); // Bild holen und speichern httpGet('http://192.168.178.96:8085/tmpfs/auto.jpg?usr=xxx&pwd=xxx',{ responseType: 'arraybuffer' }, (err, response, body) => { fs.writeFile(dest_path + fname, body, 'binary', function(err) { if (err) { log('Fehler beim Bild speichern: ' + err, 'warn'); } else { // dem Filesystem 2 Sek Zeit zum Speichern lassen setTimeout(function() { sendImage(dest_path + fname); }, 1500); } }); }); } // sofort ein Bild senden und nach 10 Sek erneut function onEvent() { saveImage(); setTimeout(function() { saveImage(); }, 2 * 1000); setTimeout(function() { saveImage(); }, 4 * 1000); setTimeout(function() { saveImage(); }, 6 * 1000); } // Ereignisroutine on({id: oidLichtBewmelderTuer, val: true}, function (obj) { onEvent( obj ); }); // manuelle Ausführung (Test) onEvent();Felermeldungen
javascript.0 16:08:25.752 error at Object.<anonymous> (script.js.common.Alarm.Kamera.Test_Kamera_Eingang_Bild_per_Telegramm_bei_Alarm:75:12) javascript.0 16:08:27.755 error at Object.<anonymous> (script.js.common.Alarm.Kamera.Test_Kamera_Eingang_Bild_per_Telegramm_bei_Alarm:75:12) javascript.0 16:08:29.755 error at Object.<anonymous> (script.js.common.Alarm.Kamera.Test_Kamera_Eingang_Bild_per_Telegramm_bei_Alarm:75:12) javascript.0 16:08:31.755 error at Object.<anonymous> (script.js.common.Alarm.Kamera.Test_Kamera_Eingang_Bild_per_Telegramm_bei_Alarm:75:12) -
@kukoratsch Und so?
Zeile 73httpGet('http://192.168.178.96:8085/tmpfs/auto.jpg?usr=xxx&pwd=xxx',{ responseType: 'arraybuffer' }, (err, response) => { fs.writeFile(dest_path + fname, response.data, 'binary', function(err) { -
der Anfang war doch schon mal richtig, nur das es den Parameter
bodynicht mehr gibt, dass ist jetzt alles inresponseenthalten.
du musst alsobodyinresponse.dataändern
hier mal der Link zur Doku.Edit: okay, kannste von MCU kopieren
-