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
    509

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

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

Javascript - Bild / Url lokal speichern

Geplant Angeheftet Gesperrt Verschoben Einsteigerfragen
28 Beiträge 4 Kommentatoren 2.2k 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.
  • 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 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 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 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

                            603

                            Online

                            32.5k

                            Benutzer

                            81.8k

                            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