NEWS
[Frage BLOCKLY ] Klingel Bild per Telegram versenden / Snapshot von Cam per Telegram versenden
-
Danke Dir.
Arbeite mich da erst vor kurzem rein, in Blockly und sehe erst jetzt dass der "Aufbau" des Textes passen muss. Gerade eben erfolgreich deinen Fensterzählscript mit Telegramm eingebunden und auf meine Installation abgeändert
Ist echt einfacher als Javascripts :-)) -
Nabend!
Also ein GIF von der Kamera ist echt bisher das geilste was im Bereich Smarthome gesehen habe. (besser als Push-Nachrichten und emails von Fotos auf's Handy)
Aber ich bekomme es nicht stabil hin.
ffmpeg hab ich installiert, ich kann auch einwandfrei ein Bild erzeugen. Aber nur EIN mal. Wenn ich danach den gleichen Befehl wieder abrufe - dann kommt kein Bild. (nur ein Gif ohne Bild, aber mit richtiger Uhrzeit drin)Ich komme einfach nicht drauf was das Problem ist. Jemand eine Idee?
(Telegram-Nachricht habe ich 1000mS verzögert damit ffmpeg Zeit hat das GIF zu erzeugen)Danke!
-
@Uhula Ich habe dein Script gerade ausprobiert. Die Bilder lasse ich mir unter Vis.0 in Unterordnern abspeichern (welche ich mit dem Vis Editor erzeugt habe - wegen Rechte).
Diese Snapshots werden auch erzeugt. Nur leider kann ich mit dem Widget basicImage keine der Snapshots auswählen (Ordner wird leer angezeigt)
Eine Idee wie ich die Snapshots in meine Vis bekomme? -
@Knallochse das geht nicht mehr siehe https://forum.iobroker.net/post/309472
siehe auch hier https://forum.iobroker.net/topic/25541/gelöst-wie-writefile-in-js-script-nutzen
vllt kannst du dieses gebrauchen https://forum.iobroker.net/post/349575 -
@crunchip Dankeschön
-
Ich habe mich jetzt mal in die Problematik mit dem Speichern von Bildern reingelesen.
Eigentlich sollte das speichern in den Vis.0 Ordner ja noch funktionieren.
Ich habe aber keine Programmierkenntnisse, deshalb die Bitte ob mir bitte jemand bei dem Umschreiben des Scriptes von @Uhula helfen könnte.// ------------------------------------------------------------------------- // 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 = "shelly.0.SHSW-1#2C6E3A#1.Relay0.Switch"; // URL zur Kamera umn ein Image (jpg) zu erhalten const cam_url = "http://admin:XXXXXXXX@192.168.178.51:80/tmpfs/auto.jpg"; // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren const dest_path = '/opt/iobroker/iobroker-data/files/vis.0/Kameras/ParkplatzStrasse/'; // Anzahl der Bilder, die vorgehalten werden sollen const imageCountMax = 8; // Prefix für die Bildnamen const imageNamePre = "ParkplatzStrasse_"; // ------------------------------------------------------------------------- // 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 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 8 Sek erneut function onEvent() { saveImage(); setTimeout(function() { saveImage(); }, 8 * 1000); } // Ereignisroutine on({id: oidLichtBewmelderTuer, val: true}, function (obj) { onEvent( obj ); }); // manuelle Ausführung (Test) onEvent();
-
@Knallochse kann dir zwar nicht direkt behilflich sein. Jedoch kannst du auf die schnelle einfach ausserhalb von "/opt/iobroker/iobroker-data/files/vis.0/" deine Bilder ablegen. Also z.b. "/opt/iobroker/Kameras/"
Dann würde es normal funktionieren. Nachteil, ... BackitUp, da die Daten ausserhalb von ...data/files liegen, würden diese verloren gehn
Da ich, wenn mal nötig ein Backup mittels Proxmox zurück spiele, spielt es in meinem Fall keine Rolle. -
Ich habe das hier so bei mir angepasst (Vorlage von Chaot) :
Es werde 4 Screenshot´s erstellt , per Telegramm versendet und in vis.0/klingelbild zur weiteren Verwendung hinterlegt .
Datenpunkt in const idklingel und die vier URL anpassen .
-
@Glasfaser Erstmal danke für dein Script.
Wenn ich dieses in Javascript importiere (ohne jegliche Änderung) wird ein Fehler bei den 4 Zeilen angezeigtwriteFile('vis.0','/klingelbild/haustuer1.jpg', bild1);
Expected 4 arguments, but got 3.
-
-
@Glasfaser Nochmals vielen Dank. Ich werde es nächste Woche mal probieren.
Den Rest des Wochenendes wurde Familienaktivitäten eingefordert -
Hallo
Ich habe das Script hier aus dem Thread angepasst.
Es wird kein Bild unter dem angegebenen Pfad gespeichert.
Könnte bitte jemand drüberschaun?
// ------------------------------------------------------------------------- // 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 = "doorbird.0.Motion.trigger"; // URL zur Kamera umn ein Image (jpg) zu erhalten const cam_url = "http://user:password@10.0.1.84/bha-api/image.cgi"; // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren const dest_path = '/opt/iobroker/iobroker-data/files/vis.0/Camsnapshot'; // Anzahl der Bilder, die vorgehalten werden sollen const imageCountMax = 8; // Prefix für die Bildnamen const imageNamePre = "sprechanlage_"; // ------------------------------------------------------------------------- // 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 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 8 Sek erneut function onEvent() { saveImage(); setTimeout(function() { saveImage(); }, 8 * 1000); } // Ereignisroutine on({id: oidLichtBewmelderTuer, val: true}, function (obj) { onEvent( obj ); }); // manuelle Ausführung (Test) onEvent();
-
Hallo zusammen,
ich benutze dieses Script schon sehr lange , es funktioniert super.
was muss ich ändern um mehr Bilder zu bekommen ? zb 3// ------------------------------------------------------------------------- // 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 = "deconz.0.Sensors.54.open"; // URL zur Kamera umn ein Image (jpg) zu erhalten const cam_url = "http://192.168.178.88/tmpfs/auto.jpg?usr="; // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren const dest_path = '/home/test/'; // Anzahl der Bilder, die vorgehalten werden sollen const imageCountMax = 4; // Prefix für die Bildnamen const imageNamePre = "test_"; // ------------------------------------------------------------------------- // 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 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); }, 1000); } }); }); } // sofort ein Bild senden und nach 10 Sek erneut function onEvent() { saveImage(); setTimeout(function() { saveImage(); }, 2 * 1000); } // Ereignisroutine on({id: oidLichtBewmelderTuer, val: true}, function (obj) { onEvent( obj ); }); // manuelle Ausführung (Test) onEvent();
-
@chucky666 Kann Dir leider keine Antwort auf Deine Frage geben, aber vielleicht kannst Du mir helfen. Wollte Dein Script auch mal testen, aber ich glaube, es fehlt mir an Berechtigungen.
Folgende Fehlermeldung kommt:
javascript.0 2020-02-01 15:54:22.135 warn (793) script.js.common.Telegram_Bilder: Fehler beim Bild speichern: Error: EACCES: permission denied, open '/home/test_0.jpg
Ich konnte unter /Home/ auch keinen neuen Ordner erstellen, wo die Bilder temporär gespeichert werden sollen. Irgendwie muss ich die Berechtigung erlangen über root oder ähnliches. Wie geht das?
Viele Grüße
-
Den Ordner habe ich mit Root erstellt und eine 775 Berechtigung .
-
@chucky666 sagte in [Frage BLOCKLY ] Klingel Bild per Telegram versenden / Snapshot von Cam per Telegram versenden:
Den Ordner habe ich mit Root erstellt und eine 775 Berechtigung .
Wie hast du das gemacht?
-
@chucky666 : Du musst im Abschnitt:
// sofort ein Bild senden und nach 10 Sek erneut function onEvent() { saveImage(); setTimeout(function() { saveImage(); }, 2 * 1000); }
neue Zeiten eintragen !
ich habe z.B. folgendes eingetragen:function onEvent() { saveImage(); setTimeout(function() { saveImage(); }, 10 * 1000); setTimeout(function() { saveImage(); }, 15 * 1000); setTimeout(function() { saveImage(); }, 20 * 1000); setTimeout(function() { saveImage(); }, 40 * 1000); }
damit bekomme ich sofort und in 10, 15, 20 und 40 sek ein Bild.
Hoffentlich gelingt es
lg
Klaus -
@Negalein : Hallo!
Hast du das Problem noch?
Falls ja: Hast du Meldungen im iobroker Log zu diesem Script?Was du auf die schnelle noch probieren kannst: Ändere den Pfad wo es hingespeichert wird. ich habe oft Probleme mit dem VIS.0 Pfad - nehme daher immer den /home/pi/ Pfad!
Schau mal unter: Link Textlg
Klaus -
@Alex1808 sagte in [Frage BLOCKLY ] Klingel Bild per Telegram versenden / Snapshot von Cam per Telegram versenden:
Ich versende stamt Bild eine kleine mp4 Datei die als Gif bei Telegram ankommt.
einfach ffmpeg installieren und Befehl mit Blockly schicken.
Befehl URL:
ffmpeg -y -i rtsp://kamera_ip:554/12 -t 5 -f mp4 -vcodec libx264 -pix_fmt yuv420p -an -vf scale=w=640:h=360:force_original_aspect_ratio=decrease -r 15 /opt/iobroker/out2.mp4
(Muss zu eigene Kameras angepasst werden)
Hallo
Ich muss das hier mal etwas aufwärmen .
Muss das Passwort von der Kamera auch mit darein ? Wenn ja wohin ? -
Hallo,
bin schon seit einer Woche am Testen von diesem Skript.
Leider speichert das Skript kein Foto von der Klingelkamera (Dahua VTO2000A), mit einer anderen Kamera funktioniert alles.
Ich habe schon mehrere Möglichkeiten für den Login versucht:- Möglichkeit: http://IP/cgi-bin/snapshot.cgi?1&loginuse=Benutzer&loginpas=Passwort
- Möglichkeit: http://Benutzer:Passwort@IP/cgi-bin/snapshot.cgi?1
- Möglichkeit: http://Benutzer:Passwort@IP/cgi-bin/snapshot.cgi?1&loginuse=Benutzer&loginpas=Passwort
Mit Chrome bekomme ich direkt das Bild angezeigt, wenn ich die 3. Möglichkeit verwende.
Bei Möglichkeit 1 und 2 muss ich nochmal den Benutzernamen und das Passwort eingeben.Mit dem alten Internet Explorer Bekomme ich bei der 2. und 3. Methode einen Fehler "Die Datei wurde nicht gefunden. Überprüfen Sie die Schreibweise.
Die erste Möglichkeit funktioniert, ich muss allerdings nochmal das Passwort und den Benutzernamen eingeben.Hat vielleicht irgendjemand eine Lösung für das Problem?