Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Frage zu Script Bewegungsmelder und Schnappschuss Kamera

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    918

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[gelöst] Frage zu Script Bewegungsmelder und Schnappschuss Kamera

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
8 Beiträge 3 Kommentatoren 2.0k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • dslraserD Offline
    dslraserD Offline
    dslraser
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ich benutze folgendes Script, was auch soweit funktioniert. Wie stelle ich es an, das bei Bewegung 3 (oder eben mehr) Bilder im 3 Sekunden Abstand (oder auch anderer Zeitabstand) gemacht und gesendet werden ?

    Der untere Teil war der Versuch das zu realisieren, funktioniert aber nur manchmal. Oft kommt nur ein Bild.

    on({id: "hm-rpc.0.000xxxx.1.MOTION"/*Bewegungsmelder Gartentür.MOTION*/, val: true}, function (obj) 
    { // Beginn on
    var request = require('request');
    var fs = require('fs');
    
    request.get({url: 'http://192.168.180.50:80/cgi-bin/snapshot.cgi?loginuse=[XXX]&loginpas=[XXX]', 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');
    }
    }); 
    });
    });
    on("hm-rpc.0.000xxx.1.MOTION", function (obj) {
        if (obj.state.val) {
            // send 2 images: immediately, in 15, and 30 seconds
            //sendImage();
            setTimeout(sendImage, 15000);
            setTimeout(sendImage, 30000);
        }
    });
    
    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      ple
      schrieb am zuletzt editiert von
      #2

      Genau das habe ich bereits umgesetzt. Ich stell dir mal alles zur Verfügung, eben die Trigger und Daten der kam tauschen sowie den Pfad zum Bild und es müsste laufen.

      Gruß

      // Telegram Bild senden durch Klingel oder Text to command
      var source_url = 'http://xxx.xxx.xxx.xxx/tmpfs/snap.jpg?usr=xxxxxxx&pwd=xxxxxxxxxx', //Adresse der IpKamera
          dest_path = '/opt/iobroker/ipcam/';
      
      var Nachricht = "Es hat an der Haustüre geklingelt"; // Nachricht, welche mit dem Bild gesendet wird
      
      var request = require('request');
      var fs      = require('fs');
      
      //var timer = null;
      var count = 0;
      
      // Bild an telegram schicken
      function sendImage (pfad) {
              sendTo('telegram.0', pfad);
              //log('Webcam Bild per telegram verschickt');
              //sendTo("telegram.0", Nachricht);    // <-- nach der Timeout funktion ausführen
      }
      
      // Bild speichern
      function saveImage() {
          request.get({url: source_url, encoding: 'binary'}, function (err, response, body) {
              fs.writeFile(dest_path + 'image2.jpg', body, 'binary', function(err) {
      
              if (err) {
                  //log('Fehler beim Bild speichern: ' + err, 'warn');
              } else {
                  //log('Webcam Bild gespeichert');
                  sendImage(dest_path + 'image2.jpg');
              }
            }); 
          });
      }
      
      //Trigger
      // 3 Bilder senden wenn Bewegung erkannt und keiner zu Hause ist
      on({id: "hm-rpc.0.xxxxxx.MOTION"/*Garten_BW_Haustuer:1.MOTION*/, val: true}, function () {
          if (getState("javascript.0.MyStates.anwesenheit"/*anwesenheit*/).val === false) {
          count = 3;
          counter();
          timer = setInterval(counter, 3000);
          }
      });
      
      function counter() {
          saveImage();
          count--;
          if(count === 0 && timer) clearInterval(timer);
      }   
      
      

      Intel Nuc + Proxmox

      1 Antwort Letzte Antwort
      0
      • dslraserD Offline
        dslraserD Offline
        dslraser
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #3

        @ple:

        Genau das habe ich bereits umgesetzt. Ich stell dir mal alles zur Verfügung, eben die Trigger und Daten der kam tauschen sowie den Pfad zum Bild und es müsste laufen.

        Gruß

        // Telegram Bild senden durch Klingel oder Text to command
        var source_url = 'http://xxx.xxx.xxx.xxx/tmpfs/snap.jpg?usr=xxxxxxx&pwd=xxxxxxxxxx', //Adresse der IpKamera
            dest_path = '/opt/iobroker/ipcam/';
        
        var Nachricht = "Es hat an der Haustüre geklingelt"; // Nachricht, welche mit dem Bild gesendet wird
        
        var request = require('request');
        var fs      = require('fs');
        
        //var timer = null;
        var count = 0;
        
        // Bild an telegram schicken
        function sendImage (pfad) {
                sendTo('telegram.0', pfad);
                //log('Webcam Bild per telegram verschickt');
                //sendTo("telegram.0", Nachricht);    // <-- nach der Timeout funktion ausführen
        }
        
        // Bild speichern
        function saveImage() {
            request.get({url: source_url, encoding: 'binary'}, function (err, response, body) {
                fs.writeFile(dest_path + 'image2.jpg', body, 'binary', function(err) {
        
                if (err) {
                    //log('Fehler beim Bild speichern: ' + err, 'warn');
                } else {
                    //log('Webcam Bild gespeichert');
                    sendImage(dest_path + 'image2.jpg');
                }
              }); 
            });
        }
        
        //Trigger
        // 3 Bilder senden wenn Bewegung erkannt und keiner zu Hause ist
        on({id: "hm-rpc.0.xxxxxx.MOTION"/*Garten_BW_Haustuer:1.MOTION*/, val: true}, function () {
            if (getState("javascript.0.MyStates.anwesenheit"/*anwesenheit*/).val === false) {
            count = 3;
            counter();
            timer = setInterval(counter, 3000);
            }
        });
        
        function counter() {
            saveImage();
            count--;
            if(count === 0 && timer) clearInterval(timer);
        }   
        
        ```` `  Danke, schaue ich mir nach den Feiertagen mal an um es dann zu testen.(dann bin ich wieder zu Hause)
        1 Antwort Letzte Antwort
        0
        • T Offline
          T Offline
          tempestas
          schrieb am zuletzt editiert von
          #4

          Hi,

          was muss ich tun, damit die Bilder auch gespeichert werden? Denke mal, meine Kamera braucht irgendwie eine Berechtigung, auf den NUC zu schreiben - nur wie?

          Frohes Fest allen

          <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

          1 Antwort Letzte Antwort
          0
          • dslraserD Offline
            dslraserD Offline
            dslraser
            Forum Testing Most Active
            schrieb am zuletzt editiert von
            #5

            Hallo,

            ich bekomme mit Deinem Script zwar Bilder gesendet, aber es ist eine Endlosschleife. Es kommen dann ohne Ende Bilder.

            Speichern brauche ich die Bilder eigentlich nicht, es würde mir reichen einfach , sagen wir drei Bilder im Abstand mit 3 Sekunden nach Bewegung zu senden.

            Wie bekomme ich das hin ?

            (Bilder speichern klappt auch nicht, bei mir läuft iobroker auf einer Synology, da habe ich schon verschiedene Pfade probiert, aber es wurde kein Bild in dem freigegebenen/angegebenen Ordner gespeichert)

            LG Heiko

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              ple
              schrieb am zuletzt editiert von
              #6

              Das müsste so eigentlich laufen, 3 Bilder mit 3 Sekunden Pause dazwischen.

              Ist dein Trigger anders, dass er immer auslöst? Wie sieht dein Trigger aus?

              Intel Nuc + Proxmox

              1 Antwort Letzte Antwort
              0
              • dslraserD Offline
                dslraserD Offline
                dslraser
                Forum Testing Most Active
                schrieb am zuletzt editiert von
                #7

                Ich benutze im Moment das Script, da bekomme ich dann zwei Bilder. Aber mit Deinem Script werde ich auch noch weiter probieren.

                // -------------------------------------------------------------------------
                // 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 = "hm-rpc.0.xxx.1.MOTION"/*Bewegungsmelder Gartentür.MOTION*/;
                      // URL zur Kamera umn ein Image (jpg) zu erhalten
                const cam_url = "http://192.168.180.50:80/cgi-bin/snapshot.cgi?loginuse=[xxx]&loginpas=[xxx]";
                      // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
                const dest_path = '';
                      // Anzahl der Bilder, die vorgehalten werden sollen
                const imageCountMax = 8;                
                      // Prefix für die Bildnamen
                const imageNamePre = "Gartentür"; 
                
                // -------------------------------------------------------------------------
                // 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) + "" );
                    // Bilder 0..imageCountMax-2 umbenennen
                    for (var i=imageCountMax-2; i >= 0; i-- ) { 
                        fsRenameSync(dest_path + imageNamePre + i + "", dest_path + imageNamePre + (i+1) + ".jpg"); 
                    }
                    // Bild 0 löschen
                    var fname = imageNamePre + ".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 3 Sek erneut
                function onEvent() {
                    saveImage();
                    setTimeout(function() { saveImage(); }, 10 * 300); 
                }
                
                // Ereignisroutine
                on({id: oidLichtBewmelderTuer, val: true}, function (obj) {
                    onEvent( obj );
                });
                
                // manuelle Ausführung (Test)
                onEvent();
                
                1 Antwort Letzte Antwort
                0
                • dslraserD Offline
                  dslraserD Offline
                  dslraser
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von Negalein
                  #8

                  @ple:

                  Das müsste so eigentlich laufen, 3 Bilder mit 3 Sekunden Pause dazwischen.

                  Ist dein Trigger anders, dass er immer auslöst? Wie sieht dein Trigger aus? `
                  Ich habe bei mir jetzt den Pfad rausgenommen (iobroker läuft auf einer Synology) Als Trigger hatte ich eine Steckdose benutzt, damit ich nicht immer raus laufen muss zum probieren. :D

                  Jedenfalls funktioniert es jetzt so wie gewünscht. Prima, Danke !

                  Sieht jetzt so aus bei mir.

                  // Telegram Bild senden durch Klingel oder Text to command
                  var source_url = 'http://192.168.180.50:80/cgi-bin/snapshot.cgi?loginuse=[xxx]&loginpas=[xxx]', //Adresse der IpKamera
                      dest_path = '';
                  var Nachricht = "Es hat an der Haustüre geklingelt"; // Nachricht, welche mit dem Bild gesendet wird
                  var request = require('request');
                  var fs      = require('fs');
                  //var timer = null;
                  var count = 0;
                  // Bild an telegram schicken
                  function sendImage (pfad) {
                          sendTo('telegram.0', pfad);
                          //log('Webcam Bild per telegram verschickt');
                          //sendTo("telegram.0", Nachricht);    // <-- nach der Timeout funktion ausführen
                  }
                  // Bild speichern
                  function saveImage() {
                      request.get({url: source_url, encoding: 'binary'}, function (err, response, body) {
                          fs.writeFile(dest_path + 'image2.jpg', body, 'binary', function(err) {
                          if (err) {
                              //log('Fehler beim Bild speichern: ' + err, 'warn');
                          } else {
                              //log('Webcam Bild gespeichert');
                              sendImage(dest_path + 'image2.jpg');
                          }
                        }); 
                      });
                  }
                  //Trigger
                  // 3 Bilder senden wenn Bewegung erkannt und keiner zu Hause ist
                  on({id: "hm-rpc.0.xxx.1.MOTION"/*Bewegungsmelder Gartentür.MOTION*/, val: true}, function () {
                  //    if (getState("javascript.0.MyStates.anwesenheit"/*anwesenheit*/).val === false) {
                      count = 3;
                      counter();
                      timer = setInterval(counter, 3000);
                      }
                  );
                  function counter() {
                      saveImage();
                      count--;
                      if(count === 0 && timer) clearInterval(timer);
                  }   
                  
                  1 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  747

                  Online

                  32.6k

                  Benutzer

                  82.2k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe