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. [Gelöst] Speicherort eigene Dateien/Files ?

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    559

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

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

[Gelöst] Speicherort eigene Dateien/Files ?

Scheduled Pinned Locked Moved JavaScript
37 Posts 7 Posters 4.8k Views 7 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.
  • haus-automatisierungH haus-automatisierung

    @wendy2702 sagte in [Gelöst] Speicherort eigene Dateien/Files ?:

    Ja, das mag sein aber wenn ein Script so seit 2017 lief und es jetzt erst die restriktionen gibt ist das für nicht Javascript affine wie mich ein Problem.

    Verstehe ich, aber die Restriktionen auf das .../files/ Verzeichnis gab es schon immer - nur waren diese nicht vollständig umgesetzt. Und es war auch noch nie richtig da manuell mit node:fs zu schreiben.

    @wendy2702 sagte in [Gelöst] Speicherort eigene Dateien/Files ?:

    Allerdings erschließt sich mir hier noch nicht die logik warum die nur solange sichtbar sind wie da eine Datei drin liegt.

    Du meinst im Dateien-Tab?

    wendy2702W Online
    wendy2702W Online
    wendy2702
    wrote on last edited by
    #23

    @haus-automatisierung ja, im Dateien tab.

    Warum ist das so bzw. Wofür soll das gut sein?

    Einmal versehentlich tab geschlossen oder refresh und der/die Ordner sind wieder weg.

    Bitte keine Fragen per PN, die gehören ins Forum!

    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    haus-automatisierungH 1 Reply Last reply
    0
    • wendy2702W wendy2702

      @haus-automatisierung ja, im Dateien tab.

      Warum ist das so bzw. Wofür soll das gut sein?

      Einmal versehentlich tab geschlossen oder refresh und der/die Ordner sind wieder weg.

      haus-automatisierungH Online
      haus-automatisierungH Online
      haus-automatisierung
      Developer Most Active
      wrote on last edited by
      #24

      @wendy2702 sagte in [Gelöst] Speicherort eigene Dateien/Files ?:

      @haus-automatisierung ja, im Dateien tab.

      Du kannst hier umschalten, ob leere Ordner ausgeblendet werden sollen:

      Screenshot 2024-05-09 at 09.09.51.png

      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
      📚 Meine inoffizielle ioBroker Dokumentation

      wendy2702W 2 Replies Last reply
      0
      • haus-automatisierungH haus-automatisierung

        @wendy2702 sagte in [Gelöst] Speicherort eigene Dateien/Files ?:

        @haus-automatisierung ja, im Dateien tab.

        Du kannst hier umschalten, ob leere Ordner ausgeblendet werden sollen:

        Screenshot 2024-05-09 at 09.09.51.png

        wendy2702W Online
        wendy2702W Online
        wendy2702
        wrote on last edited by
        #25

        @haus-automatisierung das meine ich nicht.

        Bin aber jetzt unterwegs.

        Zeige ich morgen.

        Bitte keine Fragen per PN, die gehören ins Forum!

        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

        1 Reply Last reply
        0
        • haus-automatisierungH haus-automatisierung

          @wendy2702 sagte in [Gelöst] Speicherort eigene Dateien/Files ?:

          @haus-automatisierung ja, im Dateien tab.

          Du kannst hier umschalten, ob leere Ordner ausgeblendet werden sollen:

          Screenshot 2024-05-09 at 09.09.51.png

          wendy2702W Online
          wendy2702W Online
          wendy2702
          wrote on last edited by
          #26

          @haus-automatisierung Ich meine das hier:

          747263aa-a67c-4bb3-8674-2e19f0c2af28-grafik.png

          Bitte keine Fragen per PN, die gehören ins Forum!

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          1 Reply Last reply
          0
          • wendy2702W wendy2702

            Hier mal das Script, ist noch nicht komplett "aufgeräumt" aber da es morgen Früh auf Tour geht ist dafür jetzt keine Zeit mehr.

            
            
            // -------------------------------------------------------------------------
            // 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.
            // 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
            
            // -------------------------------------------------------------------------
             
            // -------------------------------------------------------------------------
            // Konfiguration
            // -------------------------------------------------------------------------
            const adapterId = "0_userdata.0";
            const adapterDir = `/opt/iobroker/iobroker-data/files/${adapterId}`;
            
            // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
            const imageDir = '/cameras/garage_klein_einfahrt'
            // Prefix für die Bildnamen
            const imageNamePrefix = "Garage_Klein_Einfahrt"; 
            
            
                  // Objekt-ID des Bewegungsmelders
            const oidLichtBewmelderTuer = "alias.0.Bewegungsmelder.Bewegungsmelder_Garage_Klein";
                  // URL zur Kamera umn ein Image (jpg) zu erhalten
            const cam_url = "http://192.168.178.212/Streaming/channels/1/picture";
                  // Anzahl der Bilder, die vorgehalten werden sollen
            const imageCountMax = 8;
            
            const cameraUsername = "mxxxxe";
            const cameraPassword = "ixxxx8";
            
             
            // -------------------------------------------------------------------------
            // Scriptteil
            // -------------------------------------------------------------------------
            const axios = require("axios");
            const 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,
                        user: 'Mirko',
                    });
                }
                catch(err) { if (err.code != "ENOENT") log(err); }     
            }
             
            
             
            // Bild speichern und senden
            function saveImage() {
                // Bild imageCountMax-1 löschen
                delFile(adapterId, `${imageDir}/${imageNamePrefix}${imageCountMax - 1}.jpg`, function(err) {
                    if (err) {
                        log("Fehler beim löschen des alten Bildes: " + err);
                    }
                });
            
                // Bilder 0..imageCountMax-2 umbenennen
                for (var i = imageCountMax - 2; i >= 0; i-- ) {
                    renameFile(adapterId, `${imageDir}/${imageNamePrefix}${i}.jpg`, `${imageDir}/${imageNamePrefix}${i + 1}.jpg`, function (err) {
                        if (err) {
                            log("Fehler beim umbennen: " + err, "error")
                        }
                    })
                }
            
                const latestFilePath = `${imageDir}/${imageNamePrefix}0.jpg`
                axios(
                    cam_url,
                    {
                        responseType: "arraybuffer",
                        auth: {
                            username: cameraUsername,
                            password: cameraPassword
                        }
                    }
                )
                    .then(response => {
                        writeFile(adapterId,  latestFilePath, response.data, function(err) {
                            if (err) {
                                log('Fehler beim Bild speichern: ' + err, 'warn');
                            } else {
                                sendImage(`${adapterDir}${latestFilePath}`);
                            }
                        }); 
                    });
            }
             
            // sofort ein Bild senden und nach 3 Sek erneut
            //function onEvent() {
            //    saveImage();
            //    setTimeout(function() { saveImage(); }, 10 * 300); 
            //}
             
            // sofort ein Bild senden und nach 3 Sek erneut
            function onEvent() {
                saveImage();
                setTimeout(function() { saveImage(); }, 3 * 1000);
                setTimeout(function() { saveImage(); }, 6 * 1000);
                setTimeout(function() { saveImage(); }, 9 * 1000);
            }
             
            on({ id: 'alias.0.Bewegungsmelder.Bewegungsmelder_Garage_Klein', change: "ne" }, function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                if (getState("alias.0.Bewegungsmelder.Bewegungsmelder_Garage_Klein").val === true)
                    onEvent();
            });
             
            // manuelle Ausführung (Test)
            //onEvent();
            
            
            
            lobomauL Offline
            lobomauL Offline
            lobomau
            wrote on last edited by
            #27

            @wendy2702 ich hatte auch die alte Version im Einsatz, die nicht mehr funktioniert und versuche nun deine Version zu übernehmen.

            wo liegt bei dir der Pfad

            /cameras/garage_klein_einfahrt
            

            ?
            hier hinter?

            /opt/iobroker/iobroker-data/files/
            

            Und was muss ich in 0-userdata.0 machen... einen Datenpunkt anlegen?

            Host: NUC8i3 mit Proxmox:

            • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
            • Slave: Pi4
            haus-automatisierungH wendy2702W 2 Replies Last reply
            0
            • lobomauL lobomau

              @wendy2702 ich hatte auch die alte Version im Einsatz, die nicht mehr funktioniert und versuche nun deine Version zu übernehmen.

              wo liegt bei dir der Pfad

              /cameras/garage_klein_einfahrt
              

              ?
              hier hinter?

              /opt/iobroker/iobroker-data/files/
              

              Und was muss ich in 0-userdata.0 machen... einen Datenpunkt anlegen?

              haus-automatisierungH Online
              haus-automatisierungH Online
              haus-automatisierung
              Developer Most Active
              wrote on last edited by
              #28

              @lobomau sagte in [Gelöst] Speicherort eigene Dateien/Files ?:

              Und was muss ich in 0-userdata.0 machen... einen Datenpunkt anlegen?

              Entweder direkt in das Dateisystem speichern (außerhalb von /opt/iobroker/iobroker-data/files/), ODER mit den ioBroker-Dateien arbeiten. Entweder oder. Anlegen musst Du nichts - das Meta-Objekt existiert in jeder Installation bereits.

              🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
              🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
              📚 Meine inoffizielle ioBroker Dokumentation

              lobomauL 1 Reply Last reply
              0
              • haus-automatisierungH haus-automatisierung

                @lobomau sagte in [Gelöst] Speicherort eigene Dateien/Files ?:

                Und was muss ich in 0-userdata.0 machen... einen Datenpunkt anlegen?

                Entweder direkt in das Dateisystem speichern (außerhalb von /opt/iobroker/iobroker-data/files/), ODER mit den ioBroker-Dateien arbeiten. Entweder oder. Anlegen musst Du nichts - das Meta-Objekt existiert in jeder Installation bereits.

                lobomauL Offline
                lobomauL Offline
                lobomau
                wrote on last edited by lobomau
                #29

                LÄUFT korrekt! Fehler kommt natürlich beim ersten Mal wenn es die Datei noch nicht gibt. Beim zweiten Durchgang keine Fehlermeldung mehr ;-)

                @haus-automatisierung Danke. Ich habe es in dieser Sekunde auch hinbekommen. Das Ergebnis ist perfekt, also Bilder an telegram und Ablegen der Dateien. Aber es gibt eine Fehlermeldung

                javascript.1	19:44:38.010	error	script.js.common.Cam.FDT_neu2: Fehler beim umbennen: Error: Not exists
                

                Idee woran es liegt? Script:

                // -------------------------------------------------------------------------
                // Dieses Script überwacht den Zustand eines Bewegungsmelders und speichert bei
                // Aktivierung ein Bild einer Überwachnungskamera in einem Vereichnis und sendet
                // dieses via Telegram.0-Adapter.
                // 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
                
                // -------------------------------------------------------------------------
                 
                // -------------------------------------------------------------------------
                // Konfiguration
                // -------------------------------------------------------------------------
                const adapterId = "0_userdata.0";
                const adapterDir = `/opt/iobroker/iobroker-data/files/${adapterId}`;
                
                // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
                //const imageDir = '/cameras/garage_klein_einfahrt'
                const imageDir = '/cameras/fdt'
                // Prefix für die Bildnamen
                const imageNamePrefix = "FDT"; 
                
                
                      // Objekt-ID des Bewegungsmelders
                const oidLichtBewmelderTuer = "javascript.0.Variablen.FDT-detection";
                      // URL zur Kamera umn ein Image (jpg) zu erhalten
                const cam_url = "http://192.168.1.89/tmpfs/snap.jpg";
                      // Anzahl der Bilder, die vorgehalten werden sollen
                const imageCountMax = 8;
                
                const cameraUsername = "xxx";
                const cameraPassword = "yyy";
                
                 
                // -------------------------------------------------------------------------
                // Scriptteil
                // -------------------------------------------------------------------------
                const axios = require("axios");
                const 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,
                            user: 'lobomau',
                        });
                    }
                    catch(err) { if (err.code != "ENOENT") log(err); }     
                }
                 
                
                 
                // Bild speichern und senden
                function saveImage() {
                    // Bild imageCountMax-1 löschen
                    delFile(adapterId, `${imageDir}/${imageNamePrefix}${imageCountMax - 1}.jpg`, function(err) {
                        if (err) {
                            log("Fehler beim löschen des alten Bildes: " + err);
                        }
                    });
                
                    // Bilder 0..imageCountMax-2 umbenennen
                    for (var i = imageCountMax - 2; i >= 0; i-- ) {
                        renameFile(adapterId, `${imageDir}/${imageNamePrefix}${i}.jpg`, `${imageDir}/${imageNamePrefix}${i + 1}.jpg`, function (err) {
                            if (err) {
                                log("Fehler beim umbennen: " + err, "error")
                            }
                        })
                    }
                
                    const latestFilePath = `${imageDir}/${imageNamePrefix}0.jpg`
                    axios(
                        cam_url,
                        {
                            responseType: "arraybuffer",
                            auth: {
                                username: cameraUsername,
                                password: cameraPassword
                            }
                        }
                    )
                        .then(response => {
                            writeFile(adapterId,  latestFilePath, response.data, function(err) {
                                if (err) {
                                    log('Fehler beim Bild speichern: ' + err, 'warn');
                                } else {
                                    sendImage(`${adapterDir}${latestFilePath}`);
                                }
                            }); 
                        });
                }
                 
                // sofort ein Bild senden und nach 3 Sek erneut
                //function onEvent() {
                //    saveImage();
                //    setTimeout(function() { saveImage(); }, 10 * 300); 
                //}
                 
                // sofort ein Bild senden und nach 3 Sek erneut
                function onEvent() {
                    saveImage();
                    setTimeout(function() { saveImage(); }, 3 * 1000);
                    setTimeout(function() { saveImage(); }, 6 * 1000);
                    setTimeout(function() { saveImage(); }, 9 * 1000);
                }
                 
                on({ id: 'javascript.0.Variablen.FDT-detection', change: "ne" }, function (obj) {
                    var value = obj.state.val;
                    var oldValue = obj.oldState.val;
                    if (getState("javascript.0.Variablen.FDT-detection").val === true)
                        onEvent();
                });
                 
                // manuelle Ausführung (Test)
                //onEvent();
                
                
                

                Host: NUC8i3 mit Proxmox:

                • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                • Slave: Pi4
                haus-automatisierungH 1 Reply Last reply
                0
                • lobomauL lobomau

                  LÄUFT korrekt! Fehler kommt natürlich beim ersten Mal wenn es die Datei noch nicht gibt. Beim zweiten Durchgang keine Fehlermeldung mehr ;-)

                  @haus-automatisierung Danke. Ich habe es in dieser Sekunde auch hinbekommen. Das Ergebnis ist perfekt, also Bilder an telegram und Ablegen der Dateien. Aber es gibt eine Fehlermeldung

                  javascript.1	19:44:38.010	error	script.js.common.Cam.FDT_neu2: Fehler beim umbennen: Error: Not exists
                  

                  Idee woran es liegt? Script:

                  // -------------------------------------------------------------------------
                  // Dieses Script überwacht den Zustand eines Bewegungsmelders und speichert bei
                  // Aktivierung ein Bild einer Überwachnungskamera in einem Vereichnis und sendet
                  // dieses via Telegram.0-Adapter.
                  // 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
                  
                  // -------------------------------------------------------------------------
                   
                  // -------------------------------------------------------------------------
                  // Konfiguration
                  // -------------------------------------------------------------------------
                  const adapterId = "0_userdata.0";
                  const adapterDir = `/opt/iobroker/iobroker-data/files/${adapterId}`;
                  
                  // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
                  //const imageDir = '/cameras/garage_klein_einfahrt'
                  const imageDir = '/cameras/fdt'
                  // Prefix für die Bildnamen
                  const imageNamePrefix = "FDT"; 
                  
                  
                        // Objekt-ID des Bewegungsmelders
                  const oidLichtBewmelderTuer = "javascript.0.Variablen.FDT-detection";
                        // URL zur Kamera umn ein Image (jpg) zu erhalten
                  const cam_url = "http://192.168.1.89/tmpfs/snap.jpg";
                        // Anzahl der Bilder, die vorgehalten werden sollen
                  const imageCountMax = 8;
                  
                  const cameraUsername = "xxx";
                  const cameraPassword = "yyy";
                  
                   
                  // -------------------------------------------------------------------------
                  // Scriptteil
                  // -------------------------------------------------------------------------
                  const axios = require("axios");
                  const 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,
                              user: 'lobomau',
                          });
                      }
                      catch(err) { if (err.code != "ENOENT") log(err); }     
                  }
                   
                  
                   
                  // Bild speichern und senden
                  function saveImage() {
                      // Bild imageCountMax-1 löschen
                      delFile(adapterId, `${imageDir}/${imageNamePrefix}${imageCountMax - 1}.jpg`, function(err) {
                          if (err) {
                              log("Fehler beim löschen des alten Bildes: " + err);
                          }
                      });
                  
                      // Bilder 0..imageCountMax-2 umbenennen
                      for (var i = imageCountMax - 2; i >= 0; i-- ) {
                          renameFile(adapterId, `${imageDir}/${imageNamePrefix}${i}.jpg`, `${imageDir}/${imageNamePrefix}${i + 1}.jpg`, function (err) {
                              if (err) {
                                  log("Fehler beim umbennen: " + err, "error")
                              }
                          })
                      }
                  
                      const latestFilePath = `${imageDir}/${imageNamePrefix}0.jpg`
                      axios(
                          cam_url,
                          {
                              responseType: "arraybuffer",
                              auth: {
                                  username: cameraUsername,
                                  password: cameraPassword
                              }
                          }
                      )
                          .then(response => {
                              writeFile(adapterId,  latestFilePath, response.data, function(err) {
                                  if (err) {
                                      log('Fehler beim Bild speichern: ' + err, 'warn');
                                  } else {
                                      sendImage(`${adapterDir}${latestFilePath}`);
                                  }
                              }); 
                          });
                  }
                   
                  // sofort ein Bild senden und nach 3 Sek erneut
                  //function onEvent() {
                  //    saveImage();
                  //    setTimeout(function() { saveImage(); }, 10 * 300); 
                  //}
                   
                  // sofort ein Bild senden und nach 3 Sek erneut
                  function onEvent() {
                      saveImage();
                      setTimeout(function() { saveImage(); }, 3 * 1000);
                      setTimeout(function() { saveImage(); }, 6 * 1000);
                      setTimeout(function() { saveImage(); }, 9 * 1000);
                  }
                   
                  on({ id: 'javascript.0.Variablen.FDT-detection', change: "ne" }, function (obj) {
                      var value = obj.state.val;
                      var oldValue = obj.oldState.val;
                      if (getState("javascript.0.Variablen.FDT-detection").val === true)
                          onEvent();
                  });
                   
                  // manuelle Ausführung (Test)
                  //onEvent();
                  
                  
                  
                  haus-automatisierungH Online
                  haus-automatisierungH Online
                  haus-automatisierung
                  Developer Most Active
                  wrote on last edited by haus-automatisierung
                  #30

                  @lobomau Ja, das ganze Script ist viel zu kompliziert. Man baut keine Pfade zu 0_userdata.0 ins Dateisystem zusammen (bei Redis liegt da z.B. gar nichts an der Stelle). Alles mit node:fs muss da raus.

                  Schau das mal an:

                  https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#createtempfile

                  🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                  🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                  📚 Meine inoffizielle ioBroker Dokumentation

                  lobomauL 1 Reply Last reply
                  0
                  • haus-automatisierungH haus-automatisierung

                    @lobomau Ja, das ganze Script ist viel zu kompliziert. Man baut keine Pfade zu 0_userdata.0 ins Dateisystem zusammen (bei Redis liegt da z.B. gar nichts an der Stelle). Alles mit node:fs muss da raus.

                    Schau das mal an:

                    https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#createtempfile

                    lobomauL Offline
                    lobomauL Offline
                    lobomau
                    wrote on last edited by
                    #31

                    @haus-automatisierung ich werde mir das mal anschauen und versuchen es "noch richtiger" zu machen.
                    Was ich aber jetzt schon sagen kann.... es scheint jetzt viel besser zu laufen... viel performanter... total verzögerungsfrei! :-)
                    Es hat sich geändert: request (deprecated) -> http Get, node 18 -> 20.

                    Host: NUC8i3 mit Proxmox:

                    • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                    • Slave: Pi4
                    haus-automatisierungH 1 Reply Last reply
                    0
                    • lobomauL lobomau

                      @haus-automatisierung ich werde mir das mal anschauen und versuchen es "noch richtiger" zu machen.
                      Was ich aber jetzt schon sagen kann.... es scheint jetzt viel besser zu laufen... viel performanter... total verzögerungsfrei! :-)
                      Es hat sich geändert: request (deprecated) -> http Get, node 18 -> 20.

                      haus-automatisierungH Online
                      haus-automatisierungH Online
                      haus-automatisierung
                      Developer Most Active
                      wrote on last edited by haus-automatisierung
                      #32

                      @lobomau Ungetestet (nur im Forum programmiert), aber so in die Richtung:

                      // -------------------------------------------------------------------------
                      // Dieses Script überwacht den Zustand eines Bewegungsmelders und speichert bei
                      // Aktivierung ein Bild einer Überwachnungskamera in einem Vereichnis und sendet
                      // dieses via Telegram.0-Adapter.
                      // 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
                      
                      // v2.0 - 07.06.2024 - Umgebaut auf neue Funktionen von haus-automatisierung.com / Matthias Kleine
                      
                      // -------------------------------------------------------------------------
                       
                      // -------------------------------------------------------------------------
                      // Konfiguration
                      // -------------------------------------------------------------------------
                      const adapterId = '0_userdata.0';
                       
                      // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
                      const imageDir = '/cameras/fdt';
                       
                      // Prefix für die Bildnamen
                      const imageNamePrefix = 'FDT';
                       
                      // Objekt-ID des Bewegungsmelders
                      const oidLichtBewmelderTuer = 'javascript.0.Variablen.FDT-detection';
                       
                      // Anzahl der Bilder, die vorgehalten werden sollen
                      const imageCountMax = 8;
                       
                      const camUrl = 'http://192.168.1.89/tmpfs/snap.jpg'; 
                      const cameraUsername = 'xxx';
                      const cameraPassword = 'yyy';
                       
                      // -------------------------------------------------------------------------
                      // Scriptteil
                      // -------------------------------------------------------------------------
                       
                      // Bild an telegram schicken
                      function sendImage(path) { 
                          try {
                              const caption = `${formatDate(new Date(), 'DD.MM.YYYY hh:mm:ss')} ${path.substring(path.lastIndexOf('/') + 1)}`;
                       
                              sendTo('telegram.0', {
                                  text: path,
                                  caption, 
                                  disable_notification: true,
                                  user: 'lobomau',
                              });
                          } catch (err) {
                              log(err);
                          }
                      }
                       
                      // Bild holen, speichern und senden
                      async function saveImage() {
                          const prefix = `${imageDir}/${imageNamePrefix}`;
                       
                          await delFileAsync(adapterId, `${prefix}${imageCountMax - 1}.jpg`);
                       
                          // Bilder 0..imageCountMax - 2 umbenennen
                          for (let i = imageCountMax - 2; i >= 0; i-- ) {
                              await renameFileAsync(adapterId, `${prefix}${i}.jpg`, `${prefix}${i + 1}.jpg`);
                          }
                       
                          const latestFilePath = `${prefix}0.jpg`;
                       
                          httpGet(camUrl, {
                              timeout: 2000,
                              responseType: 'arraybuffer',
                              basicAuth: {
                                  user: cameraUsername,
                                  password: cameraPassword,
                              },
                          },
                          (error, response) => {
                              if (!error) {
                                  writeFile(adapterId, latestFilePath, response.data, (err) => {
                                      if (err) {
                                          log('Fehler beim Bild speichern: ' + err, 'warn');
                                      } else {
                                          const tempFilePath = createTempFile(latestFilePath, response.data);
                                          sendImage(tempFilePath);
                                      }
                                  });
                              } else {
                                  console.error(error);
                              }
                          });
                      }
                       
                      on({ id: oidLichtBewmelderTuer, change: 'ne' }, async (obj) => {
                          if (obj.state.val) {
                              // sofort ein Bild senden und nach 3, 6 und 9 Sek erneut
                              saveImage();
                       
                              setTimeout(saveImage, 3 * 1000);
                              setTimeout(saveImage, 6 * 1000);
                              setTimeout(saveImage, 9 * 1000);
                          }
                      });
                      

                      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                      📚 Meine inoffizielle ioBroker Dokumentation

                      lobomauL 1 Reply Last reply
                      1
                      • lobomauL lobomau

                        @wendy2702 ich hatte auch die alte Version im Einsatz, die nicht mehr funktioniert und versuche nun deine Version zu übernehmen.

                        wo liegt bei dir der Pfad

                        /cameras/garage_klein_einfahrt
                        

                        ?
                        hier hinter?

                        /opt/iobroker/iobroker-data/files/
                        

                        Und was muss ich in 0-userdata.0 machen... einen Datenpunkt anlegen?

                        wendy2702W Online
                        wendy2702W Online
                        wendy2702
                        wrote on last edited by
                        #33

                        @lobomau sorry baue gerade unser Gartenzimmer auf und schaue jetzt erst auf Handy.

                        Hast es ja hinbekommen und sogar noch die Profi Version geliefert bekommen.

                        Bitte keine Fragen per PN, die gehören ins Forum!

                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                        1 Reply Last reply
                        1
                        • haus-automatisierungH haus-automatisierung

                          @lobomau Ungetestet (nur im Forum programmiert), aber so in die Richtung:

                          // -------------------------------------------------------------------------
                          // Dieses Script überwacht den Zustand eines Bewegungsmelders und speichert bei
                          // Aktivierung ein Bild einer Überwachnungskamera in einem Vereichnis und sendet
                          // dieses via Telegram.0-Adapter.
                          // 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
                          
                          // v2.0 - 07.06.2024 - Umgebaut auf neue Funktionen von haus-automatisierung.com / Matthias Kleine
                          
                          // -------------------------------------------------------------------------
                           
                          // -------------------------------------------------------------------------
                          // Konfiguration
                          // -------------------------------------------------------------------------
                          const adapterId = '0_userdata.0';
                           
                          // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
                          const imageDir = '/cameras/fdt';
                           
                          // Prefix für die Bildnamen
                          const imageNamePrefix = 'FDT';
                           
                          // Objekt-ID des Bewegungsmelders
                          const oidLichtBewmelderTuer = 'javascript.0.Variablen.FDT-detection';
                           
                          // Anzahl der Bilder, die vorgehalten werden sollen
                          const imageCountMax = 8;
                           
                          const camUrl = 'http://192.168.1.89/tmpfs/snap.jpg'; 
                          const cameraUsername = 'xxx';
                          const cameraPassword = 'yyy';
                           
                          // -------------------------------------------------------------------------
                          // Scriptteil
                          // -------------------------------------------------------------------------
                           
                          // Bild an telegram schicken
                          function sendImage(path) { 
                              try {
                                  const caption = `${formatDate(new Date(), 'DD.MM.YYYY hh:mm:ss')} ${path.substring(path.lastIndexOf('/') + 1)}`;
                           
                                  sendTo('telegram.0', {
                                      text: path,
                                      caption, 
                                      disable_notification: true,
                                      user: 'lobomau',
                                  });
                              } catch (err) {
                                  log(err);
                              }
                          }
                           
                          // Bild holen, speichern und senden
                          async function saveImage() {
                              const prefix = `${imageDir}/${imageNamePrefix}`;
                           
                              await delFileAsync(adapterId, `${prefix}${imageCountMax - 1}.jpg`);
                           
                              // Bilder 0..imageCountMax - 2 umbenennen
                              for (let i = imageCountMax - 2; i >= 0; i-- ) {
                                  await renameFileAsync(adapterId, `${prefix}${i}.jpg`, `${prefix}${i + 1}.jpg`);
                              }
                           
                              const latestFilePath = `${prefix}0.jpg`;
                           
                              httpGet(camUrl, {
                                  timeout: 2000,
                                  responseType: 'arraybuffer',
                                  basicAuth: {
                                      user: cameraUsername,
                                      password: cameraPassword,
                                  },
                              },
                              (error, response) => {
                                  if (!error) {
                                      writeFile(adapterId, latestFilePath, response.data, (err) => {
                                          if (err) {
                                              log('Fehler beim Bild speichern: ' + err, 'warn');
                                          } else {
                                              const tempFilePath = createTempFile(latestFilePath, response.data);
                                              sendImage(tempFilePath);
                                          }
                                      });
                                  } else {
                                      console.error(error);
                                  }
                              });
                          }
                           
                          on({ id: oidLichtBewmelderTuer, change: 'ne' }, async (obj) => {
                              if (obj.state.val) {
                                  // sofort ein Bild senden und nach 3, 6 und 9 Sek erneut
                                  saveImage();
                           
                                  setTimeout(saveImage, 3 * 1000);
                                  setTimeout(saveImage, 6 * 1000);
                                  setTimeout(saveImage, 9 * 1000);
                              }
                          });
                          
                          lobomauL Offline
                          lobomauL Offline
                          lobomau
                          wrote on last edited by
                          #34

                          @haus-automatisierung nochmals Danke für dein angepasstes Script. Leider kann ich nicht Programmieren und weiß nicht an welcher Stelle ich es für mich anpassen muss. Ich habe erstmal nur user und Passwort angepasst. Das führt dann zu folgendem Fehler, der mir auch nichts sagt:

                          javascript.0	12:03:31.258	info	Stopping script script.js.common.Cam.FDT2
                          javascript.1	12:03:31.365	error	script.js.common.Cam.FDT2 compile failed: at script.js.common.Cam.FDT2:104
                          

                          Host: NUC8i3 mit Proxmox:

                          • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                          • Slave: Pi4
                          M 1 Reply Last reply
                          0
                          • lobomauL lobomau

                            @haus-automatisierung nochmals Danke für dein angepasstes Script. Leider kann ich nicht Programmieren und weiß nicht an welcher Stelle ich es für mich anpassen muss. Ich habe erstmal nur user und Passwort angepasst. Das führt dann zu folgendem Fehler, der mir auch nichts sagt:

                            javascript.0	12:03:31.258	info	Stopping script script.js.common.Cam.FDT2
                            javascript.1	12:03:31.365	error	script.js.common.Cam.FDT2 compile failed: at script.js.common.Cam.FDT2:104
                            
                            M Online
                            M Online
                            mrjeschke
                            wrote on last edited by
                            #35

                            @lobomau
                            Ich vermute mal das in Zeile 86 eine Klammer fehlt.
                            Meiner Meinung müsste dort stehen

                            )};
                            
                            lobomauL 1 Reply Last reply
                            2
                            • M mrjeschke

                              @lobomau
                              Ich vermute mal das in Zeile 86 eine Klammer fehlt.
                              Meiner Meinung müsste dort stehen

                              )};
                              
                              lobomauL Offline
                              lobomauL Offline
                              lobomau
                              wrote on last edited by
                              #36

                              @mrjeschke Bingo! Läuft jetzt. :-)

                              Host: NUC8i3 mit Proxmox:

                              • ioBroker CT Debian 13, npm 10.9.4, nodejs 22.21.0
                              • Slave: Pi4
                              bergjetB 1 Reply Last reply
                              0
                              • lobomauL lobomau

                                @mrjeschke Bingo! Läuft jetzt. :-)

                                bergjetB Offline
                                bergjetB Offline
                                bergjet
                                wrote on last edited by
                                #37

                                @lobomau Kannst du bitte einmal das ganze Script posten, wie es nun läuft?

                                homee, ioBroker, iMac, iPhone, Sonos, Alaxa

                                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

                                606

                                Online

                                32.7k

                                Users

                                82.5k

                                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