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

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    320

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.4k

Javascript - Bild / Url lokal speichern

Geplant Angeheftet Gesperrt Verschoben Einsteigerfragen
28 Beiträge 4 Kommentatoren 2.1k Aufrufe 5 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.
  • B Offline
    B Offline
    bitwicht
    schrieb am zuletzt editiert von
    #13

    @Wal

    Danke, jetzt habe ich nur noch einen Fehler.
    Das Script lässt sich starten.

    Wenn ich im Adapter einen Cron bzw. Zeit Assistenten einstellt - einfach , jede Minute fügt er folgende Zeile hinzu:

    '* * * * *'var request = require('request');
    

    dann lässt sich das script nicht mehr starten:
    error javascript.0 (305518) script.js.Skript_1 compile failed: at script.js.Skript_1:1

    Bilder legt er auch keine ab.

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

    CodierknechtC WalW 2 Antworten Letzte Antwort
    0
    • B bitwicht

      @Wal

      Danke, jetzt habe ich nur noch einen Fehler.
      Das Script lässt sich starten.

      Wenn ich im Adapter einen Cron bzw. Zeit Assistenten einstellt - einfach , jede Minute fügt er folgende Zeile hinzu:

      '* * * * *'var request = require('request');
      

      dann lässt sich das script nicht mehr starten:
      error javascript.0 (305518) script.js.Skript_1 compile failed: at script.js.Skript_1:1

      Bilder legt er auch keine ab.

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

      CodierknechtC Offline
      CodierknechtC Offline
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von Codierknecht
      #14

      @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.

      "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

      B 1 Antwort Letzte Antwort
      0
      • B bitwicht

        @Wal

        Danke, jetzt habe ich nur noch einen Fehler.
        Das Script lässt sich starten.

        Wenn ich im Adapter einen Cron bzw. Zeit Assistenten einstellt - einfach , jede Minute fügt er folgende Zeile hinzu:

        '* * * * *'var request = require('request');
        

        dann lässt sich das script nicht mehr starten:
        error javascript.0 (305518) script.js.Skript_1 compile failed: at script.js.Skript_1:1

        Bilder legt er auch keine ab.

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

        WalW Online
        WalW Online
        Wal
        Developer
        schrieb am zuletzt editiert von
        #15

        @bitwicht ,
        habe heute meinen humanen Tag.
        Habe den Schedule 1sten im Monat aus Blockly kopiert, ich denke der stimmt.

        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);
                }
                });
            });
        });
        

        Gruß
        Walter

        DoorIO-Adapter
        wioBrowser-Adapter und wioBrowser

        1 Antwort Letzte Antwort
        0
        • 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
          schrieb am zuletzt editiert von
          #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 Antworten Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • B Offline
                B Offline
                bitwicht
                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                0
                • B Offline
                  B Offline
                  bitwicht
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • B Offline
                      B Offline
                      bitwicht
                      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                      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
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • B Offline
                          B Offline
                          bitwicht
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          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
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            0
                            • B Offline
                              B Offline
                              bitwicht
                              schrieb am zuletzt editiert von
                              #26

                              @Codierknecht

                              OK, mit Cron wären es:

                              '1 0 1,16 * *'
                              

                              Um 00:01 am 1 und 16 im jeden Monat

                              CodierknechtC 1 Antwort Letzte Antwort
                              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
                                schrieb am zuletzt editiert von
                                #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 Antwort Letzte Antwort
                                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
                                  schrieb am zuletzt editiert von
                                  #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 Antwort Letzte Antwort
                                  1
                                  Antworten
                                  • In einem neuen Thema antworten
                                  Anmelden zum Antworten
                                  • Älteste zuerst
                                  • Neuste zuerst
                                  • Meiste Stimmen


                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  750

                                  Online

                                  32.5k

                                  Benutzer

                                  81.7k

                                  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