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. JavaScript
  5. Serienbildaufnahme, alle 2 Sekunden ein Bild

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
    899

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Serienbildaufnahme, alle 2 Sekunden ein Bild

Geplant Angeheftet Gesperrt Verschoben JavaScript
9 Beiträge 3 Kommentatoren 548 Aufrufe 2 Watching
  • Ä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.
  • S Offline
    S Offline
    sveni_lee
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • L Offline
      L Offline
      lutzer
      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        sveni_lee
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          sveni_lee
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • R Offline
            R Offline
            ReverZ
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • L Offline
                L Offline
                lutzer
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  sveni_lee
                  schrieb am zuletzt editiert von
                  #8

                  funktioniert leider nicht, ich bekomme keine Bilder...

                  1 Antwort Letzte Antwort
                  0
                  • S Offline
                    S Offline
                    sveni_lee
                    schrieb am zuletzt editiert von
                    #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 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

                    773

                    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