Skip to content
  • Home
  • 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
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Serienbildaufnahme, alle 2 Sekunden ein Bild

NEWS

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    5
    1
    78

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    843

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

Serienbildaufnahme, alle 2 Sekunden ein Bild

Scheduled Pinned Locked Moved JavaScript
9 Posts 3 Posters 632 Views 2 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.
  • S Offline
    S Offline
    sveni_lee
    wrote on last edited by
    #1

    ich versuche grad eine Serienbildaufnahme zu erstellen, Dabei soll alle 2 Sekunden ein Bild erstellt werden.

    var screenon = "fullybrowser.0.192_xxx_x_xxx.Info.isScreenOn"/*isScreenOn*/;
    var heute;
    var jahr;
    var monat;
    var tag;
    var stunde;
    var minute;
    var sekunde;
    var i;
    
    on(screenon, function(dp) {
    
        if(dp.state.val) {     
        var request = require('request');
        var fs    = require('fs'),
            heute = new Date(),
            jahr  = heute.getYear(),
            monat = heute.getMonth()+1,
            tag   = heute.getDate(),
            stunde = heute.getHours(),
            minute = heute.getMinutes(),
            sekunde = heute.getSeconds();
                
            for(i = 1; i < 11; i++) {
                
                timeout = setTimeout(function () {
               
    
                    request.get({url: 'http://192.xxx.x.xxx:2323/?cmd=getCamshot&password=xxx', encoding: 'binary'}, function (err, response, body) {
    
                    fs.writeFile("/home/iobroker/" + jahr + monat + tag + stunde + minute + "_" + i + ".jpg", body, 'binary', function(err) {
    
                    if (err) {
    
                        console.error(err);
    
                    }
                    
                    });
                    
                    });
                    
                 }, 2000);    
    
            }
    
                var info_text = 'neue Bilder im Archive';
    
                console.log('Snapshot sent');
    
                sendTo('telegram.0', {text: info_text });
    
            
        }        
    });
    

    es wird aber immer nur das letzte Bild gespeichert

    1 Reply Last reply
    0
    • L Offline
      L Offline
      lutzer
      wrote on last edited by lutzer
      #2

      Ich hatte letztens etwas ähnliches. Schau mal wie ich das mit dem Zeitstempel gemacht habe und auch an welcher Stelle das ist ganz wichtig. Damit das Datum nicht global berechnet wird, sondern nur in der Funktion beim speichern.

      function saveImage(){
          request.get({url: cam_img, encoding: 'binary'}, 
              function (err, response, body) {
                  var dateTime = formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss")
              fs.writeFile(img_path + img_name + dateTime + img_typ, body, 'binary',); 
              sendImage(img_path + img_name + dateTime + img_typ);
              });
      }
      

      Also ungetestet (Achtung ich habe keine Ahnung von Javascript - bitte testen):

      var screenon = "fullybrowser.0.192_xxx_x_xxx.Info.isScreenOn"/*isScreenOn*/;
      var i;
      
      on(screenon, function(dp) {
      
          if(dp.state.val) {     
          var request = require('request');
          var fs    = require('fs'),
      
              for(i = 1; i < 11; i++) {
                  timeout = setTimeout(function () {
                      request.get({url: 'http://192.xxx.x.xxx:2323/?cmd=getCamshot&password=xxx', encoding: 'binary'}, function (err, response, body) {
      				var dateTime = formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss")
                      fs.writeFile("/home/iobroker/" + dateTime + "_" + i + ".jpg", body, 'binary', function(err) {
                      if (err) {
                          console.error(err);
                      }
                      });
                      });
                   }, 2000);
              }
                  var info_text = 'neue Bilder im Archive';
                  console.log('Snapshot sent');
                  sendTo('telegram.0', {text: info_text });
          }
      });
      
      1 Reply Last reply
      0
      • S Offline
        S Offline
        sveni_lee
        wrote on last edited by
        #3

        @lutzer

        moin,

        danke für die Antwort.
        das Datum sollte eigendlich for der Schleife berechnet werden, damit alle Bilder aus einer Serie den gleichen Zeitstempel haben. Ich denke das Problem lieg an der Schleife in Verbindung mit dem Timeout. Ich bin mir nicht sicher ob das so funktionieren kann.

        1 Reply Last reply
        0
        • S Offline
          S Offline
          sveni_lee
          wrote on last edited by
          #4

          Ich habe jetzt noch mal ein wenig gelesen und ich denke , es hängt damit zusammen. dass es Probleme mit Funktionen innerhalb von Schleifen gibt. Ich hoffe ich habe den Workaround dafüt richtig verstanden.

          var screenon = "fullybrowser.0.192_xxx_xxx_xxx.Info.isScreenOn"/*isScreenOn*/;
          var i, timeout, timestamp;
          var funcs = [];
          
          on(screenon, function(dp) {
          
              if(dp.state.val) {     
                  var request = require('request');
                  var fs    = require('fs');
                      
                  for(i = 1; i <= 10; i++) {
          
                      timstamp = formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss");           
                      funcs[i] = snapshot(timestamp, i);
                  }
          
                  var info_text = 'neue Bilder im Archive';
          
                  console.log('Snapshot sent');
          
                  sendTo('telegram.0', {text: info_text });
          
              }        
          });
          
          function snapsot (timestamp, num){
              
              return function() {
              
                  timeout = setTimeout(function () {
                      
                      request.get({url: 'http://192.xxx.xxx.xxx:2323/?cmd=getCamshot&password=xxx', encoding: 'binary'}, function (err, response, body) {
                          
                          fs.writeFile("/home/iobroker/" + timestamp + "_" + num + ".jpg", body, 'binary', function(err) {
                              
                              if (err) {
                                  
                                  console.error(err);
                              }
                          });
                      });
                  }, 2000); 
              };
          }
          
          1 Reply Last reply
          0
          • R Offline
            R Offline
            ReverZ
            wrote on last edited by
            #5

            Hast du bereits zum Testen das Intervall von 2 Sek. auf 5 Sek. erhöht?
            Je nach Kamera-Auflösung und WLAN-Verbindung kann es schon mal länger als 2 Sek. dauern, bis das Bild abgefragt und weggeschrieben wird.

            S 1 Reply Last reply
            0
            • R ReverZ

              Hast du bereits zum Testen das Intervall von 2 Sek. auf 5 Sek. erhöht?
              Je nach Kamera-Auflösung und WLAN-Verbindung kann es schon mal länger als 2 Sek. dauern, bis das Bild abgefragt und weggeschrieben wird.

              S Offline
              S Offline
              sveni_lee
              wrote on last edited by
              #6

              @ReverZ

              Ich denke, das mit den zwei Sekunden sollte schon klappen.
              Wie ich geschrieben habe, funktioniert das wohl mit der Funktion innerhalb der Schleibe nicht.
              Das script hat die Bilder wohl immer wieder überschrieben. Ich werde nachher mal testen ob es jetzt so klappt...

              Im Moment scheint Fully bei mir abgestürzt zu sein. Ich habe jedenfalls keinen zugriff mehr darauf.

              1 Reply Last reply
              0
              • L Offline
                L Offline
                lutzer
                wrote on last edited by
                #7

                Wenn du das Datum Global ermittelst bleibt es für immer das selbe bis das Script neu gestartet wird.
                Und deswegen wird das Bild überschrieben, weil der Dateiname immer gleich ist.
                Nimm doch mal den Zähler raus, die Funktion läuft eh immer...

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  sveni_lee
                  wrote on last edited by
                  #8

                  funktioniert leider nicht, ich bekomme keine Bilder...

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    sveni_lee
                    wrote on last edited by
                    #9

                    so, ich habe es gelöst bekommen... mein Fehler war die Annahme das die Schleife erst nach dem timeout weiter abgearbeitet wird. Die Schleife wird weiter abgearbeitet und die Funktion inner halb des Timeout nach ablauf des Timeout.
                    Also muß sich der Timeout bei jedem Durchlauf der Schleife erhöhen.

                    var screenon = "fullybrowser.0.xxx_xxx_xxx_xxx.Info.isScreenOn"/*isScreenOn*/;
                    var timestamp;
                    
                    
                    on(screenon, function(dp) {
                    
                    
                        if(dp.state.val) {     
                            timestamp = formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss");  
                            
                            for(let i=1;i <= 10; ++i) {
                                
                                setTimeout(function() {          
                                    snapshot(timestamp, i);
                                },i*2000); 
                            }
                    
                    
                            var info_text = 'neue Bilder im Archive';
                    
                            console.log('Snapshot sent');
                    
                            sendTo('telegram.0', {text: info_text });
                    
                        }        
                    });
                    
                    function snapshot(timestamp, prefix){
                    
                            
                    //        log(timestamp + "_" + prefix);
                            var request = require('request');
                            var fs    = require('fs');    
                                
                                request.get({url: 'http://192.xxx.xxx.xxx:2323/?cmd=getCamshot&password=xxx, encoding: 'binary'}, function (err, response, body) {
                                    
                                    fs.writeFile("/home/iobroker/" + timestamp + "_" + prefix + ".jpg", body, 'binary', function(err) {
                                        
                                        if (err) {                        
                                            console.error(err);
                                        }
                                    });
                                });
                    }
                    
                    1 Reply Last reply
                    0

                    Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                    Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                    With your input, this post could be even better 💗

                    Register Login
                    Reply
                    • Reply as topic
                    Log in to reply
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    210

                    Online

                    32.8k

                    Users

                    82.7k

                    Topics

                    1.3m

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

                    • Don't have an account? Register

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