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. Skripten / Logik
  4. Blockly
  5. Mail mit mehr als 2 Anhängen?

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    492

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

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

Mail mit mehr als 2 Anhängen?

Geplant Angeheftet Gesperrt Verschoben Blockly
blocklycommunication
37 Beiträge 4 Kommentatoren 2.0k Aufrufe 4 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.
  • thewhoboxT thewhobox

    @lost-in-translation der Parameter Bilder ist jetzt ein array (also eine Liste) in der nur der Pfad drin ist.
    Also: dateiimpfad = /mnt/meintollerpfad/x.jpeg

    Wenn du oben rechts auf Blockly=>JS klickt. Was steht da in Zeile 9?

    lost in translationL Offline
    lost in translationL Offline
    lost in translation
    schrieb am zuletzt editiert von
    #19

    @thewhobox

    73dd3523-480a-4291-bdc3-848d60d3693c-image.png

    Ich vermute, ein Groß/Kleinschreibungs Problem.

    Versuche ich mal zu korrigieren.

    ciao

    frank

    thewhoboxT 1 Antwort Letzte Antwort
    0
    • lost in translationL lost in translation

      @thewhobox

      73dd3523-480a-4291-bdc3-848d60d3693c-image.png

      Ich vermute, ein Groß/Kleinschreibungs Problem.

      Versuche ich mal zu korrigieren.

      ciao

      frank

      thewhoboxT Offline
      thewhoboxT Offline
      thewhobox
      schrieb am zuletzt editiert von
      #20

      @lost-in-translation Ja hast recht. Ist ein Groß/Kleinschreibfehler.

      ändere "for(var bild in Bilder) {"
      das muss ein großes B sein.

      Ich schreibe bei mir deswegen generell alles klein.

      Meine Adapter: emby | discovery
      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      lost in translationL 1 Antwort Letzte Antwort
      0
      • thewhoboxT thewhobox

        @lost-in-translation Ja hast recht. Ist ein Groß/Kleinschreibfehler.

        ändere "for(var bild in Bilder) {"
        das muss ein großes B sein.

        Ich schreibe bei mir deswegen generell alles klein.

        lost in translationL Offline
        lost in translationL Offline
        lost in translation
        schrieb am zuletzt editiert von
        #21

        @thewhobox
        das hat soweit geklappt, nun renne ich in das nächste Rätsel
        f5b3257c-8b5e-471f-96f1-26ad11d23d96-image.png
        Der Plan: ich speichere die vermailten Dateien zusätzlich auf dem NAS und lösche sie dann
        Im ersten Wurf hatte ich einen eigenen exec für den rm, dann war da immer nur der letzte Dateiname drin.
        Dann habe ich es einfach in einen Befehl aneinandergehängt, was grundsätzlich klappte, aber anscheinend zu viele scp Befehle parallel provozierte. Zufällige Dateien kamen nicht auf dem NAS an. Also wollte ich die Schleife mit angezogener Handbremse durchlaufen, und nur alle 100ms einen SCP absetzen. Jetzt haben aber alle scp den letzten Dateinamen aus der Liste zum Inhalt. What the f...?

        Irgendwie ist mir die Logik bei Blockly noch fremd. Und warum habe ich in der Konstellation nicht alle Dateinamen, sondern nur den letzten?

        ciao
        frank

        thewhoboxT 1 Antwort Letzte Antwort
        0
        • lost in translationL lost in translation

          @thewhobox
          das hat soweit geklappt, nun renne ich in das nächste Rätsel
          f5b3257c-8b5e-471f-96f1-26ad11d23d96-image.png
          Der Plan: ich speichere die vermailten Dateien zusätzlich auf dem NAS und lösche sie dann
          Im ersten Wurf hatte ich einen eigenen exec für den rm, dann war da immer nur der letzte Dateiname drin.
          Dann habe ich es einfach in einen Befehl aneinandergehängt, was grundsätzlich klappte, aber anscheinend zu viele scp Befehle parallel provozierte. Zufällige Dateien kamen nicht auf dem NAS an. Also wollte ich die Schleife mit angezogener Handbremse durchlaufen, und nur alle 100ms einen SCP absetzen. Jetzt haben aber alle scp den letzten Dateinamen aus der Liste zum Inhalt. What the f...?

          Irgendwie ist mir die Logik bei Blockly noch fremd. Und warum habe ich in der Konstellation nicht alle Dateinamen, sondern nur den letzten?

          ciao
          frank

          thewhoboxT Offline
          thewhoboxT Offline
          thewhobox
          schrieb am zuletzt editiert von
          #22

          @lost-in-translation das liegt an Javascript. Die Schleife wartet nicht auf das Timeout sondern macht munter weiter und ist schon lange fertig, wenn der erste Timeout abläuft.
          Aber auch die Idee ist nicht zielführend, da mit dem Timeout auch einfach alle Befehle gleichzeitig nach 100ms ausgeführt werden.

          Ich schaue es mir später nochmal in Ruhe an

          Meine Adapter: emby | discovery
          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          lost in translationL 1 Antwort Letzte Antwort
          0
          • thewhoboxT thewhobox

            @lost-in-translation das liegt an Javascript. Die Schleife wartet nicht auf das Timeout sondern macht munter weiter und ist schon lange fertig, wenn der erste Timeout abläuft.
            Aber auch die Idee ist nicht zielführend, da mit dem Timeout auch einfach alle Befehle gleichzeitig nach 100ms ausgeführt werden.

            Ich schaue es mir später nochmal in Ruhe an

            lost in translationL Offline
            lost in translationL Offline
            lost in translation
            schrieb am zuletzt editiert von
            #23

            @thewhobox
            Irgendwie ist der exec untauglich für Schleifen. Weil der ist einfach zu Ende und die Schleife geht in die nächste Runde, egal wie lange der aufgerufene Befehl benötigt.
            Und "Innendrin" ist ja auch Banane, dann hab ich keine Schleife. Wenn man etwas mehrfach durchführen will, aber Bitteschön hintereinander, dann kann man nur eine ineinander geschachtelte copy paste Orgie veranstalten. Oder übersehe ich etwas Entscheidendes?

            ciao

            Frank

            AlCalzoneA 1 Antwort Letzte Antwort
            0
            • lost in translationL lost in translation

              @thewhobox
              Irgendwie ist der exec untauglich für Schleifen. Weil der ist einfach zu Ende und die Schleife geht in die nächste Runde, egal wie lange der aufgerufene Befehl benötigt.
              Und "Innendrin" ist ja auch Banane, dann hab ich keine Schleife. Wenn man etwas mehrfach durchführen will, aber Bitteschön hintereinander, dann kann man nur eine ineinander geschachtelte copy paste Orgie veranstalten. Oder übersehe ich etwas Entscheidendes?

              ciao

              Frank

              AlCalzoneA Offline
              AlCalzoneA Offline
              AlCalzone
              Developer
              schrieb am zuletzt editiert von
              #24

              @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

              Wenn man etwas mehrfach durchführen will, aber Bitteschön hintereinander, dann kann man nur eine ineinander geschachtelte copy paste Orgie veranstalten.

              Fürchte ja. Oder du lernst "richtiges" Javascript, wo du mit Promises und async/await arbeiten kannst. Da würde auch der Ansatz mit der Schleife funktionieren, wie du dir das vorgestellt hast.

              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

              lost in translationL 1 Antwort Letzte Antwort
              0
              • AlCalzoneA AlCalzone

                @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

                Wenn man etwas mehrfach durchführen will, aber Bitteschön hintereinander, dann kann man nur eine ineinander geschachtelte copy paste Orgie veranstalten.

                Fürchte ja. Oder du lernst "richtiges" Javascript, wo du mit Promises und async/await arbeiten kannst. Da würde auch der Ansatz mit der Schleife funktionieren, wie du dir das vorgestellt hast.

                lost in translationL Offline
                lost in translationL Offline
                lost in translation
                schrieb am zuletzt editiert von
                #25

                @AlCalzone said in Mail mit mehr als 2 Anhängen?:

                @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

                Wenn man etwas mehrfach durchführen will, aber Bitteschön hintereinander, dann kann man nur eine ineinander geschachtelte copy paste Orgie veranstalten.

                Fürchte ja. Oder du lernst "richtiges" Javascript, wo du mit Promises und async/await arbeiten kannst. Da würde auch der Ansatz mit der Schleife funktionieren, wie du dir das vorgestellt hast.

                Hast Du evt. ein Beispielscript, dass ein solches Konstrukt nutzt? Ich habe vor ein paar Jahren schonmal javascript genutzt, grundsätzlich habe ich da keine Berührungsängste. Ich hatte halt hier das Tool so wie es vorgesehen ist nutzen wollen. Bei neoload habe ich javascript halt im wesentlichen dazu genutzt, Werte umzurechnen, oder Strings zu verknüpfen. Schleifen waren da nie nötig.
                Diese "alles auf einmal loswerfen" Strategie ist mir fremd. Ich hatte es bisher mit eher sequentiellen Skripten zu tun.

                Das Blockly mit 50 Bildern nacheinander, das ich gestern gebaut habe, ist fast schon uneditierbar, so langsam wird der Editor im Browser.

                ciao

                frank

                AlCalzoneA 1 Antwort Letzte Antwort
                0
                • lost in translationL lost in translation

                  @AlCalzone said in Mail mit mehr als 2 Anhängen?:

                  @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

                  Wenn man etwas mehrfach durchführen will, aber Bitteschön hintereinander, dann kann man nur eine ineinander geschachtelte copy paste Orgie veranstalten.

                  Fürchte ja. Oder du lernst "richtiges" Javascript, wo du mit Promises und async/await arbeiten kannst. Da würde auch der Ansatz mit der Schleife funktionieren, wie du dir das vorgestellt hast.

                  Hast Du evt. ein Beispielscript, dass ein solches Konstrukt nutzt? Ich habe vor ein paar Jahren schonmal javascript genutzt, grundsätzlich habe ich da keine Berührungsängste. Ich hatte halt hier das Tool so wie es vorgesehen ist nutzen wollen. Bei neoload habe ich javascript halt im wesentlichen dazu genutzt, Werte umzurechnen, oder Strings zu verknüpfen. Schleifen waren da nie nötig.
                  Diese "alles auf einmal loswerfen" Strategie ist mir fremd. Ich hatte es bisher mit eher sequentiellen Skripten zu tun.

                  Das Blockly mit 50 Bildern nacheinander, das ich gestern gebaut habe, ist fast schon uneditierbar, so langsam wird der Editor im Browser.

                  ciao

                  frank

                  AlCalzoneA Offline
                  AlCalzoneA Offline
                  AlCalzone
                  Developer
                  schrieb am zuletzt editiert von AlCalzone
                  #26

                  @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

                  Hast Du evt. ein Beispielscript, dass ein solches Konstrukt nutzt?

                  Nein, aber ich kann dir schreiben wie es in etwa aussieht. Benötigt allerdings Node 8+:

                  const util = require('util');
                  // promisify wandelt exec in eine Funktion um, die einen Promise zurückgibt,
                  // anstatt einen Callback aufzurufen.
                  const execAsync = util.promisify(exec); // exec ist schon geladen, soweit ich weiß
                  
                  // Du brauchst eine async-Funktion, die kannst du aber normal aufrufen
                  async function befehleAusfuehren() {
                    // wichtig: let für block-scoped Variablen, sonst hast du den Ärger, 
                    // dass nur das letzte Bild hochgeladen wird
                    for (let i = 0; i < 20; i++) {
                      // await hält die Funktion an, bis execAsync wirklich fertig ist
                      await execAsync("Befehl...");
                    }
                    // Code hier wird nach allen exec-Befehlen ausgeführt.
                  }
                  
                  // Nicht vergessen, die Funktion auch aufzurufen:
                  befehleAusfuehren();
                  // Der Code hiernach wird wieder asynchron ausgeführt und wartet nicht auf die execs
                  

                  Alternativ gäbe es noch execSync, damit kannst du dir bei langen Prozessen aber die Event Loop blockieren und ggf. für Adapter-Neustarts und Geister-Prozesse sorgen.

                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                  lost in translationL 1 Antwort Letzte Antwort
                  0
                  • AlCalzoneA AlCalzone

                    @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

                    Hast Du evt. ein Beispielscript, dass ein solches Konstrukt nutzt?

                    Nein, aber ich kann dir schreiben wie es in etwa aussieht. Benötigt allerdings Node 8+:

                    const util = require('util');
                    // promisify wandelt exec in eine Funktion um, die einen Promise zurückgibt,
                    // anstatt einen Callback aufzurufen.
                    const execAsync = util.promisify(exec); // exec ist schon geladen, soweit ich weiß
                    
                    // Du brauchst eine async-Funktion, die kannst du aber normal aufrufen
                    async function befehleAusfuehren() {
                      // wichtig: let für block-scoped Variablen, sonst hast du den Ärger, 
                      // dass nur das letzte Bild hochgeladen wird
                      for (let i = 0; i < 20; i++) {
                        // await hält die Funktion an, bis execAsync wirklich fertig ist
                        await execAsync("Befehl...");
                      }
                      // Code hier wird nach allen exec-Befehlen ausgeführt.
                    }
                    
                    // Nicht vergessen, die Funktion auch aufzurufen:
                    befehleAusfuehren();
                    // Der Code hiernach wird wieder asynchron ausgeführt und wartet nicht auf die execs
                    

                    Alternativ gäbe es noch execSync, damit kannst du dir bei langen Prozessen aber die Event Loop blockieren und ggf. für Adapter-Neustarts und Geister-Prozesse sorgen.

                    lost in translationL Offline
                    lost in translationL Offline
                    lost in translation
                    schrieb am zuletzt editiert von
                    #27

                    @AlCalzone said in Mail mit mehr als 2 Anhängen?:

                    const execAsync = util.promisify(exec); // exec ist schon geladen, soweit ich weiß

                    scheitere gerade bereits an dieser Zeile:
                    const execAsync = util.promisify(exec); // exec ist schon geladen, soweit ich weiß

                    Ich vermute, es hängt damit zusammen, dass ich keinerlei Ahnung habe was node8+ ist und wie ich checken kann ob ich das habe und was ich tun muss, wenn ich das haben will.

                    naja, mühsam...

                    1 Antwort Letzte Antwort
                    0
                    • lost in translationL Offline
                      lost in translationL Offline
                      lost in translation
                      schrieb am zuletzt editiert von
                      #28
                      var von, an, betreff, text, bilder, Bildzaehler, wgetsleeptime, MailSender, EmailEmpfaenger, Bilderpfad, Name_Kamera1, Name_Kamera2, IP_Kamera1, IP_Kamera2, IP_NAS, UserName_NAS, NAS_Zielpfad, Name_Kamera, IP_Kamera, Bilderliste, datum, zeit, dateiname_1, dateimitpfad1, dateiname_2, dateimitpfad2, i;
                      /**
                       * Beschreibe diese Funktion …
                       */
                      function sendmail(von, an, betreff, text, bilder) {
                          var attaches = [];
                          
                          for(var bild in bilder) {
                              attaches.push({path: bilder[bild], cid: "image" + bild});
                          }
                          
                          console.log(JSON.stringify(attaches));
                          
                          sendTo("email", {
                              from:    von,
                              to:      an,
                              subject: betreff,
                              html: text,
                             attachments: attaches
                          });
                      }
                      
                      function listsRepeat(value, n) {
                        var array = [];
                        for (var i = 0; i < n; i++) {
                          array[i] = value;
                        }
                        return array;
                      }
                      
                      
                      Bildzaehler = 0;
                      wgetsleeptime = 0.3;
                      MailSender = 'iobroker@meinedomain.de';
                      EmailEmpfaenger = 'ich@meinedomain.de';
                      Bilderpfad = '/opt/iobroker/kameras/';
                      Name_Kamera1 = 'xx';
                      Name_Kamera2 = 'yy';
                      IP_Kamera1 = '192.168.xx.nn';
                      IP_Kamera2 = '192.168.yy.nn';
                      IP_NAS = '192.168.yy.nn';
                      UserName_NAS = 'gandalf_der_zarte';
                      NAS_Zielpfad = '/vol1/files/Bilder/Kameras/';
                      Name_Kamera = Name_Kamera1;
                      IP_Kamera = IP_Kamera1;
                      Bilderliste = listsRepeat('/opt/iobroker/kameras/noimage.jpg', 1);
                      datum = formatDate(new Date(), "JJJJ-MM-TT");
                      // Ab hier Bilder holen
                      zeit = formatDate(new Date(), "SS.mm.ss");
                      dateiname_1 = [datum,'_',zeit,'_','Uhr_',Name_Kamera,'_',Bildzaehler,'.jpg'].join('');
                      dateimitpfad1 = [Bilderpfad,Name_Kamera.toLowerCase(),'/',dateiname_1].join('');
                      exec((['wget --output-document ',dateimitpfad1,' \'http://',IP_Kamera,'/media/?user=admin&pwd=&action=snapshot\''].join('')), function (error, result, stderr) {
                          Bilderliste.splice(((Bilderliste.indexOf('/opt/iobroker/kameras/noimage.jpg') + 1) - 1), 0, dateimitpfad1);
                        Name_Kamera = Name_Kamera2;
                        IP_Kamera = IP_Kamera2;
                        Bildzaehler = (typeof Bildzaehler == 'number' ? Bildzaehler : 0) + 1;
                        zeit = formatDate(new Date(), "SS.mm.ss");
                        dateiname_2 = [datum,'_',zeit,'_','Uhr_',Name_Kamera,'_',Bildzaehler,'.jpg'].join('');
                        dateimitpfad2 = [Bilderpfad,Name_Kamera.toLowerCase(),'/',dateiname_2].join('');
                        exec((['wget --output-document ',dateimitpfad2,' \'http://',IP_Kamera,'/media/?user=admin&pwd=&action=snapshot\'','  &&sleep ' + String(wgetsleeptime)].join('')), function (error, result, stderr) {
                            Bilderliste.splice(((Bilderliste.indexOf('/opt/iobroker/kameras/noimage.jpg') + 1) - 1), 0, dateimitpfad2);
                          Name_Kamera = Name_Kamera1;
                          IP_Kamera = IP_Kamera1;
                          Bildzaehler = (typeof Bildzaehler == 'number' ? Bildzaehler : 0) + 1;
                      // hier Bilder geholt    
                      Bilderliste.pop();
                      sendmail(MailSender, EmailEmpfaenger, 'Testbetreff', 'TestBilder', Bilderliste);
                      for (var i_index in Bilderliste) {
                          i = Bilderliste[i_index];
                          exec(([['sleep ',10 + Math.random() * 5,' && scp '].join(''),i,[' ',UserName_NAS,'@',IP_NAS,':',NAS_Zielpfad,'Haustuer/'].join(''),datum,'/ && rm ' + String(i)].join('')));
                          console.log("exec: " + ([['sleep ',10 + Math.random() * 5,' && scp '].join(''),i,[' ',UserName_NAS,'@',IP_NAS,':',NAS_Zielpfad,'Haustuer/'].join(''),datum,'/ && rm ' + String(i)].join('')));
                          };
                        })})
                                                                                                  
                      
                      

                      Hab ich jetzt mal aus der Javascript Ansicht meines Blockly kopiert und es schickt eine Mail mit 2 Attachements. Jetzt müsste ich ja eigentlich "nur noch" diese Abhängigkeit auflösen und stattdessen mit dem await hantieren.

                      Es ist fast zu einfach...

                      Frank

                      1 Antwort Letzte Antwort
                      0
                      • lost in translationL Offline
                        lost in translationL Offline
                        lost in translation
                        schrieb am zuletzt editiert von
                        #29

                        Meinst Du mit Node 8+ das hier:

                        /opt/iobroker$ node --version

                        v8.16.0

                        ?

                        ciao
                        frank

                        AlCalzoneA 1 Antwort Letzte Antwort
                        0
                        • lost in translationL lost in translation

                          Meinst Du mit Node 8+ das hier:

                          /opt/iobroker$ node --version

                          v8.16.0

                          ?

                          ciao
                          frank

                          AlCalzoneA Offline
                          AlCalzoneA Offline
                          AlCalzone
                          Developer
                          schrieb am zuletzt editiert von
                          #30

                          @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

                          Meinst Du mit Node 8+ das hier:

                          ja!

                          Ich bin mir gerade nicht sicher, wo du hängst. Am besten mal ein Minimalbeispiel posten (ohne überflüssigen Schnickschnack).

                          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                          lost in translationL 1 Antwort Letzte Antwort
                          0
                          • AlCalzoneA AlCalzone

                            @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

                            Meinst Du mit Node 8+ das hier:

                            ja!

                            Ich bin mir gerade nicht sicher, wo du hängst. Am besten mal ein Minimalbeispiel posten (ohne überflüssigen Schnickschnack).

                            lost in translationL Offline
                            lost in translationL Offline
                            lost in translation
                            schrieb am zuletzt editiert von
                            #31

                            @AlCalzone

                            // Du brauchst eine async-Funktion, die kannst du aber normal aufrufen
                            async function wgetsfeuern() {
                             // wichtig: let für block-scoped Variablen, sonst hast du den Ärger, 
                             // dass nur das letzte Bild hochgeladen wird
                             for (let i = 0; i < 20; i++) {
                               zeit = formatDate(new Date(), "SS.mm.ss");
                               dateiname_1 = [datum,'_',zeit,'_','Uhr_',Name_Kamera,'__',i,'.jpg'].join('');
                               dateimitpfad1 = [Bilderpfad,Name_Kamera.toLowerCase(),'/',dateiname_1].join('');
                               Bilderliste.splice(((Bilderliste.indexOf('/opt/iobroker/kameras/noimage.jpg') + 1) - 1), 0, dateimitpfad1);
                               // await hält die Funktion an, bis execAsync wirklich fertig ist
                               await execAsync(['wget --output-document ',dateimitpfad1,' \'http://',IP_Kamera,'/media/?user=admin&pwd=&action=snapshot\'', '  &&sleep ' + String(wgetsleeptime)].join(''));
                             }
                             // Code hier wird nach allen exec-Befehlen ausgeführt.
                            }
                            
                            
                            

                            Das läuft soweit, dass alle Dateien auf dem Raspi rumliegen, aber aus mir nicht erkennbaren Gründen wird die List nicht entsprechend erweitert und es wird dadurch weder gemailt, noch kopiert.

                            Das mit dem alles gleichzeitig losfeuern ist total lästig, wenn man sequentiell denkt. Und Schleifen sind für mich sequentiell.

                            ciao

                            frank

                            AlCalzoneA 1 Antwort Letzte Antwort
                            0
                            • lost in translationL lost in translation

                              @AlCalzone

                              // Du brauchst eine async-Funktion, die kannst du aber normal aufrufen
                              async function wgetsfeuern() {
                               // wichtig: let für block-scoped Variablen, sonst hast du den Ärger, 
                               // dass nur das letzte Bild hochgeladen wird
                               for (let i = 0; i < 20; i++) {
                                 zeit = formatDate(new Date(), "SS.mm.ss");
                                 dateiname_1 = [datum,'_',zeit,'_','Uhr_',Name_Kamera,'__',i,'.jpg'].join('');
                                 dateimitpfad1 = [Bilderpfad,Name_Kamera.toLowerCase(),'/',dateiname_1].join('');
                                 Bilderliste.splice(((Bilderliste.indexOf('/opt/iobroker/kameras/noimage.jpg') + 1) - 1), 0, dateimitpfad1);
                                 // await hält die Funktion an, bis execAsync wirklich fertig ist
                                 await execAsync(['wget --output-document ',dateimitpfad1,' \'http://',IP_Kamera,'/media/?user=admin&pwd=&action=snapshot\'', '  &&sleep ' + String(wgetsleeptime)].join(''));
                               }
                               // Code hier wird nach allen exec-Befehlen ausgeführt.
                              }
                              
                              
                              

                              Das läuft soweit, dass alle Dateien auf dem Raspi rumliegen, aber aus mir nicht erkennbaren Gründen wird die List nicht entsprechend erweitert und es wird dadurch weder gemailt, noch kopiert.

                              Das mit dem alles gleichzeitig losfeuern ist total lästig, wenn man sequentiell denkt. Und Schleifen sind für mich sequentiell.

                              ciao

                              frank

                              AlCalzoneA Offline
                              AlCalzoneA Offline
                              AlCalzone
                              Developer
                              schrieb am zuletzt editiert von
                              #32

                              @lost-in-translation
                              Du hast eine komische Art, Strings zu verbinden. Erinnert mich irgendwie an Matlab.
                              Und das +1 - 1 versteh ich auch nicht. Ist es wichtig, wo die Bilder in der Liste eingefügt werden? Am Ende täte es auch ein .push(...)

                              Um ganz sicher zu gehen: Du rufst die Funktion auch auf, oder? Und wo verarbeitest du die Bilderliste? Nach dem Kommentar in Zeile 13 oder komplett außerhalb der Funktion? Letzeres wird auch mehr oder weniger sofort ausgeführt, ohne auf die wgets zu warten.

                              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                              lost in translationL 1 Antwort Letzte Antwort
                              0
                              • AlCalzoneA AlCalzone

                                @lost-in-translation
                                Du hast eine komische Art, Strings zu verbinden. Erinnert mich irgendwie an Matlab.
                                Und das +1 - 1 versteh ich auch nicht. Ist es wichtig, wo die Bilder in der Liste eingefügt werden? Am Ende täte es auch ein .push(...)

                                Um ganz sicher zu gehen: Du rufst die Funktion auch auf, oder? Und wo verarbeitest du die Bilderliste? Nach dem Kommentar in Zeile 13 oder komplett außerhalb der Funktion? Letzeres wird auch mehr oder weniger sofort ausgeführt, ohne auf die wgets zu warten.

                                lost in translationL Offline
                                lost in translationL Offline
                                lost in translation
                                schrieb am zuletzt editiert von
                                #33

                                @AlCalzone

                                genau genommen habe ich die Strings nicht so verbunden. Ich habe in Blockly die Javascript Ansicht eingeschaltet und dann copy-paste gemacht. Daher auch die interessante Art die Liste zu erweitern.

                                ciao
                                frank

                                AlCalzoneA 1 Antwort Letzte Antwort
                                0
                                • lost in translationL lost in translation

                                  @AlCalzone

                                  genau genommen habe ich die Strings nicht so verbunden. Ich habe in Blockly die Javascript Ansicht eingeschaltet und dann copy-paste gemacht. Daher auch die interessante Art die Liste zu erweitern.

                                  ciao
                                  frank

                                  AlCalzoneA Offline
                                  AlCalzoneA Offline
                                  AlCalzone
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #34

                                  @lost-in-translation Ok das erklärts. Wie siehts aus mit den Fragen im zweiten Absatz meines Posts? ;)

                                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                  lost in translationL 1 Antwort Letzte Antwort
                                  0
                                  • AlCalzoneA AlCalzone

                                    @lost-in-translation Ok das erklärts. Wie siehts aus mit den Fragen im zweiten Absatz meines Posts? ;)

                                    lost in translationL Offline
                                    lost in translationL Offline
                                    lost in translation
                                    schrieb am zuletzt editiert von
                                    #35

                                    @AlCalzone said in Mail mit mehr als 2 Anhängen?:

                                    @lost-in-translation Ok das erklärts. Wie siehts aus mit den Fragen im zweiten Absatz meines Posts? ;)

                                    :-) aufgerufen habe ich die Funktion. Die wgets werden offenbar auch ausgeführt, sonst hätte ich die Dateien nicht im Filesystem liegen. Den Rest muss ich nachgucken, wenn ich wieder Zugriff auf den Raspi habe :-)

                                    ciao

                                    frank

                                    1 Antwort Letzte Antwort
                                    0
                                    • lost in translationL Offline
                                      lost in translationL Offline
                                      lost in translation
                                      schrieb am zuletzt editiert von
                                      #36

                                      Hat eigentlich schonmal jemand die persönlichen Daten in ein conf-File ausgelagert? Dann könnte man ein Skript viel einfacher sharen ohne mit dem Zensurstempel drüber zu rasen.

                                      Vielleicht gehe ich aber auch grundsätzlich falsch an die Sache ran.
                                      Was ich will:
                                      von 2 Kameras jeweils 20 Bilder in 30 Sekunden holen.
                                      Am liebsten wäre es mir, wenn ich nach dem holen des Bildes so lange warten könnte bis 1,5 Sekunden vergangen sind. Also Bild Kamera 1 holen dauert 0,2 Sekunden -> 1,3 Sekunden Warten -> nächstes Bild (dauert 0,8 Sekunden -> 0,7 Sekunden warten -> nächstes Bild (dauert 2,7 Sekunden) -> 0Sekunden warten - >nächstes Bild ...
                                      vor jedem Bild will ich einen Dateinamen mit aktuellem Zeitstempel darin erzeugen.
                                      Das die Bilder von Kamera 1 und Kamera 2 parallel geholt werden, wäre für mich Ok. Oder auch jeweils hintereinander (hole Bild Kam1 (0,2s), hole Bild Kam 2 (0,2s), warte 1,1s, hole Bild2 Kam1 ...

                                      Also im Prinzip will ich pacen. Wenn das mit Blockly auch anders erreicht werden kann, dann wäre ich über Hinweise dankbar.
                                      In Blockly ging es bisher so, dass ich den folgenden wget in die Ergebnisbehandlung des vorherigen gepastet habe und an den einzelnen wget noch einen sleep befehl angehängt habe. Der ist allerdings starr und würde sich nicht reduzieren, wenn der Download von der Kamera mal länger braucht.

                                      Vielleicht denke ich auch komplett falsch und sollte jeweils 20 timer setzen, die Bilder zu holen und einen weiteren, sie danach zu verschicken?

                                      so weit mal meine Gedanken dazu, wo ich gerade den iobroker nicht zur Hand habe.

                                      AlCalzoneA 1 Antwort Letzte Antwort
                                      0
                                      • lost in translationL lost in translation

                                        Hat eigentlich schonmal jemand die persönlichen Daten in ein conf-File ausgelagert? Dann könnte man ein Skript viel einfacher sharen ohne mit dem Zensurstempel drüber zu rasen.

                                        Vielleicht gehe ich aber auch grundsätzlich falsch an die Sache ran.
                                        Was ich will:
                                        von 2 Kameras jeweils 20 Bilder in 30 Sekunden holen.
                                        Am liebsten wäre es mir, wenn ich nach dem holen des Bildes so lange warten könnte bis 1,5 Sekunden vergangen sind. Also Bild Kamera 1 holen dauert 0,2 Sekunden -> 1,3 Sekunden Warten -> nächstes Bild (dauert 0,8 Sekunden -> 0,7 Sekunden warten -> nächstes Bild (dauert 2,7 Sekunden) -> 0Sekunden warten - >nächstes Bild ...
                                        vor jedem Bild will ich einen Dateinamen mit aktuellem Zeitstempel darin erzeugen.
                                        Das die Bilder von Kamera 1 und Kamera 2 parallel geholt werden, wäre für mich Ok. Oder auch jeweils hintereinander (hole Bild Kam1 (0,2s), hole Bild Kam 2 (0,2s), warte 1,1s, hole Bild2 Kam1 ...

                                        Also im Prinzip will ich pacen. Wenn das mit Blockly auch anders erreicht werden kann, dann wäre ich über Hinweise dankbar.
                                        In Blockly ging es bisher so, dass ich den folgenden wget in die Ergebnisbehandlung des vorherigen gepastet habe und an den einzelnen wget noch einen sleep befehl angehängt habe. Der ist allerdings starr und würde sich nicht reduzieren, wenn der Download von der Kamera mal länger braucht.

                                        Vielleicht denke ich auch komplett falsch und sollte jeweils 20 timer setzen, die Bilder zu holen und einen weiteren, sie danach zu verschicken?

                                        so weit mal meine Gedanken dazu, wo ich gerade den iobroker nicht zur Hand habe.

                                        AlCalzoneA Offline
                                        AlCalzoneA Offline
                                        AlCalzone
                                        Developer
                                        schrieb am zuletzt editiert von
                                        #37

                                        @lost-in-translation

                                        Am liebsten wäre es mir, wenn ich nach dem holen des Bildes so lange warten könnte bis 1,5 Sekunden vergangen sind

                                        z.B. so:

                                        // ...
                                        const wgetInterval = 1500; // ms
                                        
                                        function wait(ms) {
                                            return new Promise((resolve) => {
                                                setTimeout(resolve, ms);
                                            });
                                        }
                                        
                                        for (let i = 0; i < 20; i++) {
                                            const startTime = Date.now();
                                            await execAsync("Befehl...");
                                            // Dauer des Befehls in ms ermitteln
                                            const duration = Date.now() - startTime;
                                            // Wenn der Befehl zu schnell war, bis zur Mindestzeit warten
                                            if (duration < wgetInterval) await wait(wgetInterval - duration);
                                        }
                                        
                                        // ...
                                        

                                        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                        1 Antwort Letzte Antwort
                                        0
                                        Antworten
                                        • In einem neuen Thema antworten
                                        Anmelden zum Antworten
                                        • Älteste zuerst
                                        • Neuste zuerst
                                        • Meiste Stimmen


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        647

                                        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