Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Umbau von request auf httpGet schickt nur den Pfad

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Umbau von request auf httpGet schickt nur den Pfad

    This topic has been deleted. Only users with topic management privileges can see it.
    • Thomas Huber
      Thomas Huber last edited by

      Hallo zusammen,

      ich weiß das Thema wurde schon mehrfach behandelt, aber ich komme mit den hier angebotenen Lösungen nicht ans Ziel.
      Mein Problem ist, nach dem Umbau von "request" auf "httpGet", wird mir nur der Pfad geschickt und die Bilder werden auch erst gar nicht gespeichert.
      Vielleicht kann sich das einer mal anschauen 😕

      // JavaScript zur Verwendung in ioBroker
      //
      // Das Script speichert bei Auslösung (z.B. durch einen Bewegungsmelder) drei Bilder einer Überwachungskamera in frei definierbaren Zeitabständen und versendet das erste Bild per telegram.
      // Über telegram können dann bei Bedarf auch die weiteren zwei Bilder abgefragt werden. Natürlich ist auch eine manuelle Auslösung (ohne Bewegungsmelder) per telegram möglich.
      // Der Automatische Versand der Bilder kann über telegram auch aktiviert/ deaktiviert werden. 
      //
      // Mehr Infos zum Script und dessen Einrichtung hier:  
        
      // Hier können Einstellungen vorgenommen werden:
       
      // Variablen
      var cam_img = 'http://x.x.10.99:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xxx&pwd=xxx';   // Pfad zum Kamerabild (Im Beispiel eine Foscam)
      var trigger_auto = 'Datenpunkte.0.QigaQuad.Klingel'/*Klingel*/; // Datenpunkt zur autmatischen Auslösung (Status des Bewegungsmelders, Fenster-/ Türkontakt oder der Türklingel)
      var trigger_manu = 'javascript.0.notify.telegram.cam.trigger_manu'; // Datenpunkt zur manuellen Auslösung (wird bei Bedarf automatisch angelegt)
      var trigger_more_img = 'javascript.0.notify.telegram.cam.trigger_more_img'; // Datenpunkt zur Abfrage weiterer Bilder (wird bei Bedarf automatisch angelegt)
      var disable = 'javascript.0.notify.telegram.cam.disable';   // Aktivierung/Deaktivierung des Versands per telegram (wird bei Bedarf automatisch angelegt)
      var interval = '3000';  // Verzögerung der weiteren Aufnahmen in Millisekunden
      var img_path = '0_userdata.0';   // Pfad zum lokalen Speicherort der aufgenommenen Bilder. Bilder werden bei jeder Auslösung überschrieben. Pfad muss schon vorhanden sein!
       
       
      // -------------------------------------------
      // Ab hier braucht in der Regel nichts mehr geändert zu werden. Also Finger weg wenn du nicht weißt was du tust. :) 
      // -------------------------------------------
       
      // Datenpunkte anlegen (Kann unter Umständen auskommentiert werden, wenn die Datenpunkte manuell angelegt wurden.)
      //createState( trigger_auto, false, {name: 'Datenpunkt zur autmatischen Auslösung'});
      //createState( trigger_manu, false, {name: 'Datenpunkt zur manuellen Auslösung'});
      //createState( trigger_more_img, false, {name: 'Datenpunkt zur Abfrage weiterer Bilder'});
      //createState( disable, false, {name: 'Aktivierung/Deaktivierung des Versands per telegram'});
       
      // Variablendeklaration und Initialisierung bei Scriptstart
      var stateTrigger_auto = getState(trigger_auto).val;
      var stateTrigger_manu = getState(trigger_manu).val;
      var stateTrigger_more_img = getState(trigger_more_img).val;
      var stateDisable = getState(disable).val;
      var fs      = require('fs');
      var timer; 
       
      // Funktionen
      // -------------------------------------------
       
      // Funktion Bilder versenden
      function sendImage (pfad) {
          setTimeout(function() {
              sendTo('telegram.0', {
          text:   pfad,
          reply_markup: {
              keyboard: [
                  ['Mehr Bilder', 'Danke']
              ],
              resize_keyboard:   true,
              one_time_keyboard: true
          }
      });
              log('Webcam Bild per telegram verschickt.');
          }, 2000);
      }
      
      // Funktion Bilder speichern
      function saveImage() {
          httpGet(cam_img, { responseType: 'arraybuffer' }, async (error, response) => {
              fs.writeFile(img_path + 'cam1_1.jpg', response.data, function(err) {
              if (error) {
                  log('Fehler beim Speichern von Bild 1: ' + err, 'warn');
              } else {
                  log('Bild 1 gespeichert.');
                  sendImage(img_path + 'cam1_1.jpg');
              }
            }); 
          });
           
          if (timer) {
              clearTimeout(timer);
              timer = null;
          } 
          timer = setTimeout(function () {
          httpGet(cam_img, { responseType: 'arraybuffer' }, async (error, response) => {
              fs.writeFile(img_path + 'cam1_1.jpg', response.data, function(err) {
                  if (error) {
                      log('Fehler beim Speichern von Bild 2: ' + err, 'warn');
                  } else {
                      log('Bild 2 gespeichert.');
              }
            }); 
          });
              }, interval);
          timer = setTimeout(function () {
          httpGet(cam_img, { responseType: 'arraybuffer' }, async (error, response) => {
              fs.writeFile(img_path + 'cam1_1.jpg', response.data, function(err) {
                  if (error) {
                      log('Fehler beim Speichern von Bild 3: ' + err, 'warn');
                  } else {
                      log('Bild 3 gespeichert.');        }
            }); 
          });
              }, 2 * interval);
      }
       
       
      // Trigger für die verschiedenen Aktionen
      // -------------------------------------------
       
      // trigger_auto
      on(trigger_auto, function(dp) {
          stateTrigger_auto = dp.newState.val;
          stateDisable = getState(disable).val;
          if (stateTrigger_auto === true && stateDisable === false) {
              saveImage();
              // setState(trigger_auto, false);     // Option zum Zurücksetzen des Triggers. Standardmäßig auskommentiert, da sich der Bewegungsmelder automatisch zurück setzt. Bei Bedarf "//" am Zeilenafang entfernen.
          }
      });
       
      // trigger_more_img
      on(trigger_more_img, function(dp) {
          stateTrigger_more_img = dp.newState.val;
          if (stateTrigger_more_img === true) {
              sendImage(img_path + 'cam1_2.jpg');
              sendImage(img_path + 'cam1_3.jpg');
              setState(trigger_more_img, false);
          }
      });
       
      // trigger_manu
      on(trigger_manu, function(dp) {
          stateTrigger_manu = dp.newState.val;
          if (stateTrigger_manu === true) {
              saveImage();
              setState(trigger_manu, false);
          }
      });
      

      Gruß lcd4linux

      crunchip 1 Reply Last reply Reply Quote 0
      • crunchip
        crunchip Forum Testing Most Active @Thomas Huber last edited by

        @thomas-huber https://forum.iobroker.net/post/1167873

        Thomas Huber 1 Reply Last reply Reply Quote 0
        • Thomas Huber
          Thomas Huber @crunchip last edited by

          @crunchip
          das funktioniert auch nicht, folgende Fehler werden ausgegeben:

          
          javascript.0
          2024-06-15 10:06:57.492	error	Error: Not exists at ObjectsInRedisClient._rm (file:///opt/iobroker/node_modules/@iobroker/db-objects-redis/src/lib/objects/objectsInRedisClient.ts:1891:23) at processTicksAndRejections (node:internal/process/task_queues:95:5) at Immediate.<anonymous> (file:///opt/iobroker/node_modules/@iobroker/db-objects-redis/src/lib/objects/objectsInRedisClient.ts:1378:39)
          
          javascript.0
          2024-06-15 10:06:57.492	error	Error: Not exists
          
          javascript.0
          2024-06-15 10:06:57.492	error	An error happened which is most likely from one of your scripts, but the originating script could not be detected.
          

          Gruß Thomas

          crunchip 1 Reply Last reply Reply Quote 0
          • crunchip
            crunchip Forum Testing Most Active @Thomas Huber last edited by

            @thomas-huber sagte in Umbau von request auf httpGet schickt nur den Pfad:

            das

            was genau?

            Thomas Huber 1 Reply Last reply Reply Quote 0
            • Thomas Huber
              Thomas Huber @crunchip last edited by

              @crunchip said in Umbau von request auf httpGet schickt nur den Pfad:

              @thomas-huber sagte in Umbau von request auf httpGet schickt nur den Pfad:

              das

              was genau?

              Das Script aus dem verlinkten Thread

              Hier nochmal angepasst an meine Umgebung:

              // -------------------------------------------------------------------------
              // Dieses Script überwacht den Zustand eines Bewegungsmelders und speichert bei
              // Aktivierung ein Bild einer Überwachnungskamera in einem Vereichnis und sendet
              // dieses via Telegram.0-Adapter.
              // Die Speicherung der Bilder erfolgt als "Stack", d.h. das aktuellste Bild bekommt
              // immer den Suffix "0" und es werden n Bilder mit den Suffixen 1..n-1 vorgehalten
               
              // -------------------------------------------------------------------------
               
              // -------------------------------------------------------------------------
              // Konfiguration
              // -------------------------------------------------------------------------
              const adapterId = '0_userdata.0';
               
              // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
              const imageDir = '/IPCams/FDT';
               
              // Prefix für die Bildnamen
              const imageNamePrefix = 'FDT';
               
              // Objekt-ID des Bewegungsmelders
              const oidLichtBewmelderTuer = 'Datenpunkte.0.QigaQuad.Klingel';
               
              // Anzahl der Bilder, die vorgehalten werden sollen
              const imageCountMax = 8;
               
              const camUrl = 'http://xxx.xxx.10.99:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xxxr&pwd=xxx'; 
              // const cameraUsername = 'ixxr';
              // const cameraPassword = 'Txx!';
               
              // -------------------------------------------------------------------------
              // Scriptteil
              // -------------------------------------------------------------------------
               
              // Bild an telegram schicken
              function sendImage(path) { 
                  try {
                      const caption = `${formatDate(new Date(), 'DD.MM.YYYY hh:mm:ss')} ${path.substring(path.lastIndexOf('/') + 1)}`;
               
                      sendTo('telegram.0', {
                          text: path,
                          caption, 
                          disable_notification: true,
                      });
                  } catch (err) {
                      log(err);
                  }
              }
               
              // Bild holen, speichern und senden
              async function saveImage() {
                  const prefix = `${imageDir}/${imageNamePrefix}`;
               
                  await delFileAsync(adapterId, `${prefix}${imageCountMax - 1}.jpg`);
               
                  // Bilder 0..imageCountMax - 2 umbenennen
                  for (let i = imageCountMax - 2; i >= 0; i-- ) {
                      await renameFileAsync(adapterId, `${prefix}${i}.jpg`, `${prefix}${i + 1}.jpg`);
                  }
               
                  const latestFilePath = `${prefix}0.jpg`;
               
                  httpGet(camUrl, {
                      timeout: 2000,
                      responseType: 'arraybuffer',
                      },
                  (error, response) => {
                      if (!error) {
                          writeFile(adapterId, latestFilePath, response.data, (err) => {
                              if (err) {
                                  log('Fehler beim Bild speichern: ' + err, 'warn');
                              } else {
                                  const tempFilePath = createTempFile(latestFilePath, response.data);
                                  sendImage(tempFilePath);
                              }
                          });
                      } else {
                          console.error(error);
                      }
                  }
              )};
               
              on({ id: oidLichtBewmelderTuer, change: 'ne' }, async (obj) => {
                  if (obj.state.val) {
                      // sofort ein Bild senden und nach 3, 6 und 9 Sek erneut
                      saveImage();
               
                      setTimeout(saveImage, 3 * 1000);
                      setTimeout(saveImage, 6 * 1000);
                      setTimeout(saveImage, 9 * 1000);
                  }
              });
              
              

              Gruß Thomas

              crunchip 1 Reply Last reply Reply Quote 0
              • crunchip
                crunchip Forum Testing Most Active @Thomas Huber last edited by crunchip

                @thomas-huber deine Klammer falsch gesetzt soweit ich sehe

                Thomas Huber 1 Reply Last reply Reply Quote 0
                • Thomas Huber
                  Thomas Huber @crunchip last edited by

                  @andre
                  hat hier vielleicht eine Lösung, da das Script ursprünglich von seinem Blog ist 🤔

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  844
                  Online

                  31.9k
                  Users

                  80.1k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  412
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo