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. Einsteigerfragen
  4. Javascript - Bild / Url lokal speichern

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Javascript - Bild / Url lokal speichern

Scheduled Pinned Locked Moved Einsteigerfragen
28 Posts 4 Posters 2.2k Views 5 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.
  • CodierknechtC Codierknecht

    @bitwicht

    Ich wollte das der Cron bzw. Zeit Assistenten das Script starten und as Bild gespeichert wird.

    Dann wäre Dein Trigger nicht

    on({id: "mqtt.0.piface.input.DoorBell_1", val: true}, function (obj) {
    

    sondern stattdessen

    schedule("* * * * *", function () {
    

    Dann muss aber noch der Dateiname anders generiert werden ...

    Statt

            snap = '/opt/iobroker/snapshots/snap_' + formatDate(obj.state.lc, 'TT.MM.JJJJ_hh:mm:ss') + '.jpg';
    
    

    dann

            snap = '/opt/iobroker/snapshots/snapshot.jpg';
    
    

    denn Du willst vermutlich nicht hunderte oder gar tausende Bilder ablegen, sondern die Datei immer wieder überschreiben.

    B Offline
    B Offline
    bitwicht
    wrote on last edited by
    #16

    @codierknecht

    var fs      = require('fs');
    var snap = '';
     
    schedule("* * * * *", function () {
            snap = '/var/www/html/wasseruhr-haus/' + formatDate(obj.state.lc, 'TT.MM.JJJJ_hh:mm:ss') + '.jpg';
     request.get({url: 'http://192.168.0.18/img_tmp/raw.jpg', encoding: 'binary'}, function (err, response, body) {
            fs.writeFile(snap, body, 'binary', function(err) {
            if (err) {
                console.error(err);
            }
          });
        });
    });
    

    kommt der fehler:
    error javascript.0 (305518) at Object.<anonymous> (script.js.Skript_1:5:61)

    Das er an den Dateinamen das Datum hängt ist OK.
    Ich habe es aktuell auf Minute, dass ich sehen ob er Bilder macht.
    das würde ich dann auf monatlich umstellen.

    CodierknechtC OliverIOO 2 Replies Last reply
    0
    • B bitwicht

      @codierknecht

      var fs      = require('fs');
      var snap = '';
       
      schedule("* * * * *", function () {
              snap = '/var/www/html/wasseruhr-haus/' + formatDate(obj.state.lc, 'TT.MM.JJJJ_hh:mm:ss') + '.jpg';
       request.get({url: 'http://192.168.0.18/img_tmp/raw.jpg', encoding: 'binary'}, function (err, response, body) {
              fs.writeFile(snap, body, 'binary', function(err) {
              if (err) {
                  console.error(err);
              }
            });
          });
      });
      

      kommt der fehler:
      error javascript.0 (305518) at Object.<anonymous> (script.js.Skript_1:5:61)

      Das er an den Dateinamen das Datum hängt ist OK.
      Ich habe es aktuell auf Minute, dass ich sehen ob er Bilder macht.
      das würde ich dann auf monatlich umstellen.

      CodierknechtC Offline
      CodierknechtC Offline
      Codierknecht
      Developer Most Active
      wrote on last edited by
      #17

      @bitwicht
      Du hast das Ändern des Dateinamens nicht übernommen.
      Das Objekt obj ist nur im Trigger vorhanden und nicht im Schedule.

      Nimm den Code von @Wal und ändere sein Schedule auf "* * * * *". Dann erhältst Du testweise jede Minute ein Bild.
      Wenn das passt, kannst Du das Schedule auf "5 0 1 * *" ändern. Das wird dann um 00:05 Uhr an jedem 1. eines Monats ausgeführt.

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi
      Zabbix Certified Specialist
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      1 Reply Last reply
      1
      • B bitwicht

        @codierknecht

        var fs      = require('fs');
        var snap = '';
         
        schedule("* * * * *", function () {
                snap = '/var/www/html/wasseruhr-haus/' + formatDate(obj.state.lc, 'TT.MM.JJJJ_hh:mm:ss') + '.jpg';
         request.get({url: 'http://192.168.0.18/img_tmp/raw.jpg', encoding: 'binary'}, function (err, response, body) {
                fs.writeFile(snap, body, 'binary', function(err) {
                if (err) {
                    console.error(err);
                }
              });
            });
        });
        

        kommt der fehler:
        error javascript.0 (305518) at Object.<anonymous> (script.js.Skript_1:5:61)

        Das er an den Dateinamen das Datum hängt ist OK.
        Ich habe es aktuell auf Minute, dass ich sehen ob er Bilder macht.
        das würde ich dann auf monatlich umstellen.

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        wrote on last edited by
        #18

        @bitwicht said in Javascript - Bild / Url lokal speichern:

        formatDate(obj.state.lc, 'TT.MM.JJJJ_hh:mm:ss')

        und in Zeile 5 kannst du diesen Teil

        formatDate(obj.state.lc, 'TT.MM.JJJJ_hh:mm:ss')
        

        gegen

        formatDate(new Date(), 'TT.MM.JJJJ_hh:mm:ss')
        

        tauschen

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        1 Reply Last reply
        0
        • B Offline
          B Offline
          bitwicht
          wrote on last edited by bitwicht
          #19

          Super, für Eure Mühe!
          Es gehen jetzt beide Scripte ! (nur schade das ich es nicht verstehe).

          Lösung1:

          var fs      = require('fs');
          var snap = '';
           
          schedule("* * * * *", function () {
                  snap = '/var/www/html/wasseruhr-haus/' + formatDate(new Date(), 'TT.MM.JJJJ_hh:mm:ss') + '.jpg';
           request.get({url: 'http://192.168.0.18/img_tmp/raw.jpg', encoding: 'binary'}, function (err, response, body) {
                  fs.writeFile(snap, body, 'binary', function(err) {
                  if (err) {
                      console.error(err);
                  }
                });
              });
          });
          

          oder

          Lösung2:

          var request = require('request');
          var fs      = require('fs');
          var snap = '';
          var Monat;
           
          schedule('{"time":{"start":"00:00","exactTime":true},"period":{"months":1,"dates":"[1]"}}', async function () {
              Monat = formatDate(new Date(), "DD.MM.YYYY");
              snap = '/opt/iobroker/snapshot/snap_' + Monat + '.jpg';
              request.get({url: 'http://192.168.0.18/img_tmp/raw.jpg', encoding: 'binary'}, function (err, response, body) {
                  fs.writeFile(snap, body, 'binary', function(err) {
                  if (err) {
                      console.error(err);
                  }
                  });
              });
          });
          
          1 Reply Last reply
          0
          • B Offline
            B Offline
            bitwicht
            wrote on last edited by
            #20

            Ich will Eure Nerven ja nicht überstrapazieren, aber dieser E-Mail Versand ist auch ganz schick.

            müsste ich das dann einfach als "else" anhängen:

                   if (err) {
                        console.error(err);
                    } else {
                        sendTo("email", {
                            to:      "x.xxx@gmx.de",
                            subject: "TEXT",
                            text:    "TEXT",
                            attachments: [{path: snap}]
                        });
                    }
            

            Ich glaube aber das attachments ist falsch

            WalW 1 Reply Last reply
            0
            • B bitwicht

              Ich will Eure Nerven ja nicht überstrapazieren, aber dieser E-Mail Versand ist auch ganz schick.

              müsste ich das dann einfach als "else" anhängen:

                     if (err) {
                          console.error(err);
                      } else {
                          sendTo("email", {
                              to:      "x.xxx@gmx.de",
                              subject: "TEXT",
                              text:    "TEXT",
                              attachments: [{path: snap}]
                          });
                      }
              

              Ich glaube aber das attachments ist falsch

              WalW Online
              WalW Online
              Wal
              Developer
              wrote on last edited by
              #21

              @bitwicht sagte in Javascript - Bild / Url lokal speichern:

              Ich will Eure Nerven ja nicht überstrapazieren, aber dieser E-Mail Versand ist auch ganz schick.

              müsste ich das dann einfach als "else" anhängen:

              Versuch macht kluch ! ;-)

              Gruß
              Walter

              DoorIO-Adapter
              wioBrowser-Adapter und wioBrowser

              1 Reply Last reply
              0
              • B Offline
                B Offline
                bitwicht
                wrote on last edited by bitwicht
                #22

                Hier noch das Script zusätzlich mit E-Mail versand (E-Mail Adapter muss installiert sein):

                var fs      = require('fs');
                var snap = '';
                 
                schedule("* * * * *", function () {
                        snap = '/var/www/html/wasseruhr-haus/' + formatDate(new Date(), 'TT.MM.JJJJ_hh:mm:ss') + '.jpg';
                 request.get({url: 'http://192.168.0.18/img_tmp/raw.jpg', encoding: 'binary'}, function (err, response, body) {
                        fs.writeFile(snap, body, 'binary', function(err) {
                       if (err) {
                            console.error(err);
                        } else {
                            sendTo("email", {
                                to:      "hier-an-Emailadresse-eintragen",
                                subject: "Betreff-Eintragen",
                                text:    "Tect-Eintargen",
                                attachments: [{path: snap}]
                            });
                        }
                        
                      });
                    });
                });
                
                OliverIOO 1 Reply Last reply
                0
                • B bitwicht

                  Hier noch das Script zusätzlich mit E-Mail versand (E-Mail Adapter muss installiert sein):

                  var fs      = require('fs');
                  var snap = '';
                   
                  schedule("* * * * *", function () {
                          snap = '/var/www/html/wasseruhr-haus/' + formatDate(new Date(), 'TT.MM.JJJJ_hh:mm:ss') + '.jpg';
                   request.get({url: 'http://192.168.0.18/img_tmp/raw.jpg', encoding: 'binary'}, function (err, response, body) {
                          fs.writeFile(snap, body, 'binary', function(err) {
                         if (err) {
                              console.error(err);
                          } else {
                              sendTo("email", {
                                  to:      "hier-an-Emailadresse-eintragen",
                                  subject: "Betreff-Eintragen",
                                  text:    "Tect-Eintargen",
                                  attachments: [{path: snap}]
                              });
                          }
                          
                        });
                      });
                  });
                  
                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  wrote on last edited by
                  #23

                  @bitwicht

                  das skript lädt aktuell das komplette bild erst in den Hauptspeicher und speichert es dann. solange genug Speicher da ist, kann man das lassen.

                  Behalt dir mal im Hinterkopf, das man hier optimieren könnte, falls es mit dem Speicher mal eng wird. Dann könnten die Daten gestreamt werden, da wird dann nur ein kleiner Teil im Hauptspeicher zwischengespeichert.
                  https://github.com/request/request#streaming

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    bitwicht
                    wrote on last edited by
                    #24

                    @Wal

                    zu deiner Zeitangabe noch eine Frage. Du schreibst:

                    {"time":{"start":"00:00","exactTime":true},"period":{"months":1,"dates":"[1]"}}',
                    

                    Wenn ich das im IOBroker eingebe kommt:

                    {"time":{"start":"00:00","end":"23:59","mode":"hours","interval":1},"period":{"months":"[1,2,3,4,5,6,7,8,9,10,11,12]","dates":"[1]"}}',
                    

                    Du schreibst months":1," wäre das dann nicht nur JAN ?

                    Muss ich bei months nicht alle Monate und dates nicht alle Tage spezifizieren?

                    CodierknechtC 1 Reply Last reply
                    0
                    • B bitwicht

                      @Wal

                      zu deiner Zeitangabe noch eine Frage. Du schreibst:

                      {"time":{"start":"00:00","exactTime":true},"period":{"months":1,"dates":"[1]"}}',
                      

                      Wenn ich das im IOBroker eingebe kommt:

                      {"time":{"start":"00:00","end":"23:59","mode":"hours","interval":1},"period":{"months":"[1,2,3,4,5,6,7,8,9,10,11,12]","dates":"[1]"}}',
                      

                      Du schreibst months":1," wäre das dann nicht nur JAN ?

                      Muss ich bei months nicht alle Monate und dates nicht alle Tage spezifizieren?

                      CodierknechtC Offline
                      CodierknechtC Offline
                      Codierknecht
                      Developer Most Active
                      wrote on last edited by
                      #25

                      @bitwicht @Wal
                      Ich verwende nur noch CRON und nix mehr was der Wizard da so produziert.
                      CRON ist zum Einen wesentlich kürzer und zum Anderen weniger fehleranfällig.
                      Hier hatten immer mal wieder Anwender Probleme mit den Schedules aus dem Wizard, die durch CRON ganz einfach gelöst werden konnten.

                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                      HmIP|ZigBee|Tasmota|Unifi
                      Zabbix Certified Specialist
                      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                      WalW 1 Reply Last reply
                      0
                      • B Offline
                        B Offline
                        bitwicht
                        wrote on last edited by
                        #26

                        @Codierknecht

                        OK, mit Cron wären es:

                        '1 0 1,16 * *'
                        

                        Um 00:01 am 1 und 16 im jeden Monat

                        CodierknechtC 1 Reply Last reply
                        0
                        • B bitwicht

                          @Codierknecht

                          OK, mit Cron wären es:

                          '1 0 1,16 * *'
                          

                          Um 00:01 am 1 und 16 im jeden Monat

                          CodierknechtC Offline
                          CodierknechtC Offline
                          Codierknecht
                          Developer Most Active
                          wrote on last edited by
                          #27

                          @bitwicht
                          Exakt - kurz und knackig :grin:

                          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                          HmIP|ZigBee|Tasmota|Unifi
                          Zabbix Certified Specialist
                          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                          1 Reply Last reply
                          0
                          • CodierknechtC Codierknecht

                            @bitwicht @Wal
                            Ich verwende nur noch CRON und nix mehr was der Wizard da so produziert.
                            CRON ist zum Einen wesentlich kürzer und zum Anderen weniger fehleranfällig.
                            Hier hatten immer mal wieder Anwender Probleme mit den Schedules aus dem Wizard, die durch CRON ganz einfach gelöst werden konnten.

                            WalW Online
                            WalW Online
                            Wal
                            Developer
                            wrote on last edited by
                            #28

                            @codierknecht ,
                            ich verwende auch nur Cron, aber ich wollte das der Themenstarter auch noch etwas selbst herausfinden muss, sonst hat das alles keinen Lerneffekt und beim nächsten Skript steht er wieder auf der Matte. ;-)

                            Gruß
                            Walter

                            DoorIO-Adapter
                            wioBrowser-Adapter und wioBrowser

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


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            819

                            Online

                            32.6k

                            Users

                            82.1k

                            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