Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. JPG anzeigen, Dateiname als Quelle dynamisch aus Adpater/ Objekte

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    JPG anzeigen, Dateiname als Quelle dynamisch aus Adpater/ Objekte

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

      Hallo zusammen,

      ich habe hier schon gesucht, bin aber nicht fündig geworden. Ich benutze den Motion Adapter, um aus dem Stream einer IP Kamera bei Bewegung JPGs zu speichern. Der Name des zuletzt gespeicherten Bildes steht im Adapter unter Objekte:

      motion.0.thread0.events.lastpicture "dateiname.jpg"

      Um das jeweils letzte Bild per Telegram zu verschicken benutze ich folgendes Skript:

      on("motion.0.thread0.events.lastpicture", function(obj) {
          sendTo('telegram.0', "/mnt/hgfs/nuc_HDD/ipcam/" + getState("motion.0.thread0.events.lastpicture").val);
      });
      

      Jetzt würde ich gerne dieses Bild, das verschickt wird, auch parallel als letztes gemachtes Bild in vis anzeigen, mir fehlt jedoch die Fantasie, welches Widget da gehen würde, in dem man die Bildquelle dynamisch eintragen kann.

      Kann mir jemand einen Tip geben?

      Danke vorab!

      1 Reply Last reply Reply Quote 0
      • M
        mikiline last edited by

        speicher das Bild doch immer gleich ab, dann brauchst du nichts dynamisches

        var request = require('request');
        var fs      = require('fs');
        
        function sendImage() {
            request.get({url: 'http://192.168.xx.xx/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=admin&password=Passwort,', encoding: 'binary'}, function (err, response, body) {
                fs.writeFile("/tmp/snap.jpg", body, 'binary', function(err) {
        
                if (err) {
                    console.error(err);
                } else {
                    console.log('Snapshot sent');
                    //sendTo('telegram.0', '/tmp/snap.jpg');
                    sendTo('telegram.0', {text: '/tmp/snap.jpg', caption: 'Detection'});
                }
              });
            });
        }
        
        1 Reply Last reply Reply Quote 0
        • fu_zhou
          fu_zhou last edited by

          Das Bild ist schon lokal abgespeichert, das macht der Motion-Adapter ja, in meinem Fall unter

          /mnt/hgfs/nuc_HDD/ipcam/

          der Bild-Name wird von Motion zeitabhängig erzeugt, so dass kein Bild überschrieben wird, z.B.

          220-07_2018-01-26_08-13-06.jpg

          also ist der Pfad zu diesem Bild /mnt/hgfs/nuc_HDD/ipcam/220-07_2018-01-26_08-13-06.jpg

          In den Objekten vom Motion Adapter steht der Name des letzten erzeugten Bildes:

          motion.0.thread0.events.lastpicture 220-07_2018-01-26_08-13-06.jpg

          Jetzt geht es im Prinzip darum, dieses Bild in vis anzuzeigen, wobei die Quelle zwar einen festen Pfad, aber einen dynamischen Dateiname hat. Quelle ist also wie bei Telegram "/mnt/hgfs/nuc_HDD/ipcam/" + getState("motion.0.thread0.events.lastpicture").val

          Das Anzeigen des jeweils letzten gespeicherten Bildes in vis ist also mein Problem, weil sich hier der Dateiname von Bild zu Bild ändert. Workaround könnte sein, das jeweils letzte Bild in ein Bild mit festem Dateiname umzukopieren, das ja überschrieben werden darf. Kannst du da vielleicht helfen?

          1 Reply Last reply Reply Quote 0
          • M
            mikiline last edited by

            ich glaube ungefähr so:

            var fs = require('fs');
            
            var FileIn = fs.createReadStream('/pfad/zum/file');
            var FileOut = fs.createWriteStream('/pfad/zum/ziel');
            
            FileIn.pipe(FileOut);
            
            

            Oder

            var fs = require('fs');
            
            fs.copyFile('FileIn.jpg', 'FileOut.jpg', (err) => {
               if (err) throw err;
               console.log('FileIn.jpg kopiert nach FileOut.jpg');
             });
            
            

            Aber wie im obigen Post beschrieben, du kannst doch auch aktuell zum Alarm ein Bild von der Kamera (wie ich siehe oben) abrufen. Es mus ja nicht das sein, das die Motion Detection auswirft?

            Bei Motion Detection –---> Bild holen

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

            Support us

            ioBroker
            Community Adapters
            Donate

            953
            Online

            31.9k
            Users

            80.3k
            Topics

            1.3m
            Posts

            2
            4
            701
            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