Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. (gelöst) Umbau von request auf httpGet für mehrere Snapshot

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

(gelöst) Umbau von request auf httpGet für mehrere Snapshot

Scheduled Pinned Locked Moved JavaScript
6 Posts 3 Posters 620 Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    kukoratsch
    wrote on last edited by kukoratsch
    #1

    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.

    T 1 Reply Last reply
    0
    • K kukoratsch

      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.

      T Offline
      T Offline
      TT-Tom
      wrote on last edited by
      #2

      @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.

      Gruß Tom
      https://github.com/tt-tom17
      Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

      NSPanel Script Wiki
      https://github.com/joBr99/nspanel-lovelace-ui/wiki

      NSPanel Adapter Wiki
      https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

      K 1 Reply Last reply
      0
      • T TT-Tom

        @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.

        K Offline
        K Offline
        kukoratsch
        wrote on last edited by
        #3

        @tt-tom

        // -------------------------------------------------------------------------
        // 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)
        
        M T 2 Replies Last reply
        0
        • K kukoratsch

          @tt-tom

          // -------------------------------------------------------------------------
          // 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)
          
          M Online
          M Online
          MCU
          wrote on last edited by
          #4

          @kukoratsch Und so?
          Zeile 73

          httpGet('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) {
          

          NUC i7 64GB mit Proxmox ---- https://mcuiobroker.gitbook.io/jarvis-infos/ Aktualisierungen der Doku auf Instagram verfolgen -> https://www.instagram.com/mcuiobroker
          Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

          1 Reply Last reply
          0
          • K kukoratsch

            @tt-tom

            // -------------------------------------------------------------------------
            // 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)
            
            T Offline
            T Offline
            TT-Tom
            wrote on last edited by TT-Tom
            #5

            @kukoratsch

            der Anfang war doch schon mal richtig, nur das es den Parameter body nicht mehr gibt, dass ist jetzt alles in response enthalten.
            du musst also body in response.dataändern
            hier mal der Link zur Doku.

            Edit: okay, kannste von MCU kopieren

            Gruß Tom
            https://github.com/tt-tom17
            Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

            NSPanel Script Wiki
            https://github.com/joBr99/nspanel-lovelace-ui/wiki

            NSPanel Adapter Wiki
            https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

            K 1 Reply Last reply
            0
            • T TT-Tom

              @kukoratsch

              der Anfang war doch schon mal richtig, nur das es den Parameter body nicht mehr gibt, dass ist jetzt alles in response enthalten.
              du musst also body in response.dataändern
              hier mal der Link zur Doku.

              Edit: okay, kannste von MCU kopieren

              K Offline
              K Offline
              kukoratsch
              wrote on last edited by
              #6

              @TT-Tom @MCU
              Dankeschön Funktioniert !!!

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              257

              Online

              32.4k

              Users

              81.4k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe