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
    11
    1
    324

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

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

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 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 Offline
    WalW Offline
    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 Online
        CodierknechtC Online
        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 Offline
                WalW Offline
                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 Online
                        CodierknechtC Online
                        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 Online
                            CodierknechtC Online
                            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 Offline
                              WalW Offline
                              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

                              541

                              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