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
body
nicht mehr gibt, dass ist jetzt alles inresponse
enthalten.
du musst alsobody
inresponse.data
ändern
hier mal der Link zur Doku.Edit: okay, kannste von MCU kopieren
-