Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Existierende einzelne Kamera Bilder per Telegram verschicken

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Existierende einzelne Kamera Bilder per Telegram verschicken

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      digitalnaive last edited by

      Hallo zusammen,

      ich hab folgenden Knoten im Kopf. Meine Türklingel zeichnet auf Anfrage einen Snapshot der integrierten Kamera auf und schreibt jeden einzelnen Screenshot mit eigener Zeichenfolge weg.

      Wie kann ich jetzt sicherstellen, dass ich mir per Blockly Script in dem Moment wo jemand klingelt per Telegram einen ausgelösten Snapshot zuschicken lassen kann?

      Wie schaffe ich es, dass ich das individuell abgelegte Bild abgreifen kann? Gibt es da evtl eine Mechanik wie ich mit einem weiteren Trigger dieses Bild zu einem einheitlichen Namen umbenennen kann, damit ich dieses File dann immer wieder per Skript verwenden könnte?

      Also aus zb. /opt/iobroker/node_modules/iobroker.ring/snapshot/snapshot11600062_1597046484979.jpg
      ein
      /opt/iobroker/node_modules/iobroker.ring/snapshot/snapshot_aktuell.jpg machen.

      M M 2 Replies Last reply Reply Quote 0
      • bahnuhr
        bahnuhr Forum Testing Most Active last edited by

        per Script die neueste Datei in einem Verzeichnis ermitteln
        (ist nicht von mir)

        // letzte Datei (lt. Datum/Uhrzeit) in einem Verzeichnis ermitteln
        var path = require('path');
        var fs = require('fs');
        
        var getMostRecent = function (dir, cb) {
           var dir = path.resolve(dir);
           var files = fs.readdir(dir, function (err, files) {
           	var sorted = files.map(function(v) {
           		var filepath = path.resolve(dir, v);
           		return {
           			name:v,
           			time:fs.statSync(filepath).mtime.getTime()
           		}; 
           	})
           	.sort(function(a, b) { return b.time - a.time; })
           	.map(function(v) { return v.name; });
        
           	if (sorted.length > 0) {
           		cb(null, sorted[0]);
           	} else {
           		cb('Y U NO have files in this dir?');
           	}
           })
        }
        getMostRecent('c:/iobroker/cache', function (err, recent) {
           if (err) console.error(err);
           console.log(recent);
        });
        

        Und dann per telegram versenden.

        P.S.:
        bei blockly bin ich raus.

        1 Reply Last reply Reply Quote 0
        • M
          mrzee @digitalnaive last edited by

          @digitalnaive

          Auf was für einer Basis läuft denn dein iobroker? Ich habe es bei mir mittels wget und der Snapshot-Funktion des Kamerastreams gelöst. Ich schreibe immer nur eine Datei weg und schicke sie dann per Telegram

          D 1 Reply Last reply Reply Quote 0
          • D
            digitalnaive @mrzee last edited by

            @mrzee Du meinst mit Basis vermutlich das OS? Ist Linux Server.

            Ich muss ein Bild via Button erst explizit triggern um es dann verwenden zu können.

            75de9a95-fba3-404b-8ebe-05ced338f079-image.png

            bahnuhr M 2 Replies Last reply Reply Quote 0
            • bahnuhr
              bahnuhr Forum Testing Most Active last edited by

              @digitalnaive

              Hast du meine Lösung ausprobiert ?

              1 Reply Last reply Reply Quote 0
              • bahnuhr
                bahnuhr Forum Testing Most Active @digitalnaive last edited by

                @digitalnaive sagte in Existierende einzelne Kamera Bilder per Telegram verschicken:

                Ich muss ein Bild via Button erst explizit triggern

                versteh ich nicht.
                oben steht doch, dass es gespeichert wird!

                D 1 Reply Last reply Reply Quote 0
                • M
                  mrzee @digitalnaive last edited by

                  @digitalnaive
                  So ganz komm ich auch gerade nicht mit, aber ich ahne, dass du eine RING Kamera verwendest? Über den Adapter hast du doch den Trigger? Das ist doch alles da?
                  Also musst du doch nur herausfinden, wie du die letzte Datei im verzeichnis findest und kannst die dann weiterverwenden.
                  Dazu kannst du entweder das script oben nehmen oder du schaust mal hier: https://forum.iobroker.net/topic/25422/dateinamen-in-ordner-herausfinden-und-anzeigen/5

                  Und dann mittels Linux Bordmittel innerhalb des Scripts wegschreiben und anschließend per telegram versenden.

                  PS: Ich verstehe nicht, warum man einen iobroker verwendet, wenn man dann auf cloudbasierte lösungen wie RING zurückgreift. Mit lokal betriebenen Kameras und Klingel hättest du es erheblich einfacher.

                  1 Reply Last reply Reply Quote 0
                  • M
                    MCU @digitalnaive last edited by

                    @digitalnaive
                    Letzte Datei in einem Verzeichnis ermitteln mit exec-Befehl.

                    iobroker-telegram-letzte-Datei-ermitteln.PNG

                    Bild verschicken mit Telegram

                    iobroker-telegram-Bild verschicken.PNG

                    1 Reply Last reply Reply Quote 0
                    • D
                      digitalnaive @bahnuhr last edited by

                      @bahnuhr Ja aber um eine Speicherung zu erzwingen, muss ich mit dem State bzw diesem Button eine Speicherung auslösen. Erst dann wird es im Ordner abgelegt.

                      Ich bin jetzt zwischenzeitlich noch über eine andere Lösung gestolpert.

                      Ich verwende einfach im Blockly Wert vom Object ID (Snapshot_file). Das pusht ebenfalls die zuvor erzeugte Datei.

                      Und @mrzee, ich habe wie sicherlich die meisten hier, mit sehr wenig Grundwissen angefangen, hatte schon einige Produkte und bin dann erst auf ioBroker gestoßen. Da schmeißt man nicht mal eben jegliche vorherige Hardware weg.

                      1 Reply Last reply Reply Quote 0
                      • M
                        Mr.Oz last edited by

                        Habe vor langer Zeit ein Script gefunden. Läuft wie ein Uhrwerk 🙂
                        Das Script ist von @Uhula

                        Beim Klingeln wird ein Bild erstellt und per Telegram versendet.

                        
                        // -------------------------------------------------------------------------
                        // 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)
                        

                        1 Reply Last reply Reply Quote 0
                        • K
                          kukoratsch last edited by kukoratsch

                          Gelöscht

                          Homoran 1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @kukoratsch last edited by Homoran

                            @kukoratsch sagte in Existierende einzelne Kamera Bilder per Telegram verschicken:

                            Für Hilfe wäre ich dankbar.

                            zu dem Thema

                            @kukoratsch sagte in Existierende einzelne Kamera Bilder per Telegram verschicken:

                            please use httpGet

                            gibt es inzwischen gefühlt hundert Threads mit Beispielen.
                            häng dich da an einen ran, hat mit diesem Thread nichts zu tun

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            577
                            Online

                            31.7k
                            Users

                            79.7k
                            Topics

                            1.3m
                            Posts

                            blockly
                            7
                            12
                            1941
                            Loading More Posts
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes
                            Reply
                            • Reply as topic
                            Log in to reply
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            The ioBroker Community 2014-2023
                            logo