Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Netatmo Presence Objekt ID für Bewegung

    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

    Netatmo Presence Objekt ID für Bewegung

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

      Moin,
      Löschen könnte so gehen, unlink nach einer Wartezeit:

      function sendImage (fname) { 
          try {
              sendTo('telegram.0', {
                  text:                   fname,
                  caption:                message, 
                  disable_notification:   true
              });
          }
          catch(err) { if (err.code != "ENOENT") log(err); }  
          setTimeout(function() { deleteImage(fname); }, 3000); 
      }
       
      
      function deleteImage(fname) {
          try {
              try { fs.unlinkSync(fname); }
              catch(err) { if (err.code != "ENOENT") log(err); }     
          }
      }
      

      Frank

      1 Reply Last reply Reply Quote 0
      • F
        frajop @dulles last edited by

        @dulles
        Hi,
        schau mal hier:
        https://github.com/iobroker-community-adapters/ioBroker.telegram
        Dort steht eigentlich alles
        Frank

        D 2 Replies Last reply Reply Quote 0
        • D
          dulles @frajop last edited by dulles

          @frajop

          Da ich nicht so der Profi für JS bin,
          würde das so passen ?

          var timer;
          var request;  
          var user = 'Name des Empfänger';
          var message = 'CAM Bewegung erkannt'        
          
          function sendImage (fname) { 
              try {
                  sendTo('telegram.0', {
                      user:                   user,
                      text:                   fname,
                      caption:                message, 
                      disable_notification:   true
                  });
              }
          

          Danke

          dulles

          1 Reply Last reply Reply Quote 0
          • D
            dulles @frajop last edited by

            @frajop

            Habe es einfach mal getestet -> OK -> funktioniert, so wie ich es angeben habe.

            dulles

            1 Reply Last reply Reply Quote 0
            • D
              dulles @frajop last edited by

              @frajop

              Hey,
              ich bins wieder.

              Jetzt hat es die ganze Zeit so gut ausgesehen und jetzt ...?
              seit gestern bekomme ich, trotz abfrage der einzelnen Kameras, alle Bilder geschickt.

              Im Detail:
              Ich Kamera 1 erkennt eine Bewegung, Bilder von allen drei Kameras lokal abgespeichert und anschliessend per Telegram verschickt. Es solte aber nur ein Bild von der Kamera 1 verschickt werden.

              Hat jemand einen Vorschlag

              dulles

              F 1 Reply Last reply Reply Quote 0
              • F
                frajop @dulles last edited by

                @dulles
                zeig doch mal dein script

                Frank

                D 1 Reply Last reply Reply Quote 0
                • D
                  dulles @frajop last edited by

                  @frajop
                  Diesen Script habe ich dreimal angelegt. Für jede Kamera.

                  1. netatmo.0.xxxxxx.Netatmo-Garten.live.picture
                  2. netatmo.0.xxxxxx.Netatmo-Hof.live.picture
                  3. netatmo.0.xxxxxx.Netatmo-Carport.live.picture
                  var timer;
                  var request;
                  var user = 'dulles';  
                  var message = 'CAM-GARTEN Bewegung erkannt'        
                  
                  on('netatmo.0.xxxxxx.LastEventData.LastEventId', function (obj) {
                          sendImage(); });
                  
                  function sendImage() 
                  {
                      var fs = require('fs');
                      var source_url;
                  
                      // Datum und Zeit
                      var today = new Date();
                      var day = today.toLocaleDateString();
                      var timestamp = today.toLocaleTimeString().replace(/:/g,"-"); 
                  
                      // Zielpfad lokal + Dateiname
                      var dest_path   = '/opt/iobroker/kamera/' + 'garten-' + day + '-' + timestamp + '.jpg' ;
                      //log(dest_path);
                  
                     // aktuelle URL 
                      source_url = getState("netatmo.0.xxxxxx.Netatmo-Garten.live.picture").val;
                      log(source_url);
                  
                      request.get({url: source_url, encoding: 'binary'}, function (err, response, body) 
                      {
                  	   fs.writeFile(dest_path, body, 'binary', function(err) 
                         {
                              if (err) 
                              {
                                  log('Fehler beim Bild speichern: ' + err, 'warn');
                                  setTimeout(function() { sendTelegram('Fehler beim Bild speichern!'); }, 2000); 
                              }
                              else
                              {
                                  setTimeout(function() { sendTelegram(dest_path); }, 2000); 
                              }
                  	});
                  
                      });
                  }
                  
                  function sendTelegram (fname) { 
                      try {
                          sendTo('telegram.0', {
                              user:                   user,
                              text:                   fname,
                              caption:                message, 
                              disable_notification:   true
                          });
                      }
                      catch(err) { if (err.code != "ENOENT") log(err); }  
                      setTimeout(function() {  }, 3000); 
                  }
                  
                  D 1 Reply Last reply Reply Quote 0
                  • D
                    dulles @dulles last edited by

                    @dulles sagte in Netatmo Presence Objekt ID für Bewegung:

                    @frajop
                    Diesen Script habe ich dreimal angelegt. Für jede Kamera.

                    1. netatmo.0.xxxxxx.Netatmo-Garten.live.picture
                    2. netatmo.0.xxxxxx.Netatmo-Hof.live.picture
                    3. netatmo.0.xxxxxx.Netatmo-Carport.live.picture
                    var timer;
                    var request;
                    var user = 'dulles';  
                    var message = 'CAM-GARTEN Bewegung erkannt'        
                    
                    on('netatmo.0.xxxxxx.LastEventData.LastEventId', function (obj) {
                            sendImage(); });
                    
                    function sendImage() 
                    {
                        var fs = require('fs');
                        var source_url;
                    
                        // Datum und Zeit
                        var today = new Date();
                        var day = today.toLocaleDateString();
                        var timestamp = today.toLocaleTimeString().replace(/:/g,"-"); 
                    
                        // Zielpfad lokal + Dateiname
                        var dest_path   = '/opt/iobroker/kamera/' + 'garten-' + day + '-' + timestamp + '.jpg' ;
                        //log(dest_path);
                    
                       // aktuelle URL 
                        source_url = getState("netatmo.0.xxxxxx.Netatmo-Garten.live.picture").val;
                        log(source_url);
                    
                        request.get({url: source_url, encoding: 'binary'}, function (err, response, body) 
                        {
                    	   fs.writeFile(dest_path, body, 'binary', function(err) 
                           {
                                if (err) 
                                {
                                    log('Fehler beim Bild speichern: ' + err, 'warn');
                                    setTimeout(function() { sendTelegram('Fehler beim Bild speichern!'); }, 2000); 
                                }
                                else
                                {
                                    setTimeout(function() { sendTelegram(dest_path); }, 2000); 
                                }
                    	});
                    
                        });
                    }
                    
                    function sendTelegram (fname) { 
                        try {
                            sendTo('telegram.0', {
                                user:                   user,
                                text:                   fname,
                                caption:                message, 
                                disable_notification:   true
                            });
                        }
                        catch(err) { if (err.code != "ENOENT") log(err); }  
                        setTimeout(function() {  }, 3000); 
                    }
                    

                    Hat keiner eine Idee, woran es liegen kann.

                    dulles

                    1 Reply Last reply Reply Quote 0
                    • F
                      frajop last edited by

                      Hi,
                      da ich mittlerweile auch eine zweite Kamera habe, hatte ich das gleiche Problem. Man kann es wie folgt lösen:

                      Man benötigt das script nur einmal. Mit der EventId muss die Cam ID ermittelt werden, also welche Cam den Event ausgelöst hat. Dann kann man für diese CamId die Bild URL selektieren. Etwas umständlich, aber es funktioniert 🙂

                      // LastEventId selektieren
                       var LastEventId = getState("netatmo.0.xxx.LastEventData.LastEventId").val;         
                          // Fuer Event CamId fuer LastEvendId selektieren 
                          var id_path   =   'netatmo.0.xxx.Events.' + LastEventId + '.camera_id';        
                          var CamId = getState(id_path).val;
                      
                          // vorhandene CAM IDs selektieren
                          var CAM1 = getState("netatmo.0.xxx.cam1.info.id").val;
                      
                          var CAM2 = getState("netatmo.0.xxx.cam2.info.id").val;
                      
                          // Welche CAM hat angeschlagen?  
                          if (CamId === CAM1)
                          {
                              source_url = getState("netatmo.0.xxx.cam1.live.picture").val;
                          }
                          else if (CamId === CAM2)
                          {
                              source_url = getState("netatmo.0.xxx.cam2.live.picture").val;
                          }
                          else
                          {
                              log('keine CAM erkannt');
                          }
                      
                          if (source_url)    { // Bild schicken  
                          }
                      
                      D 1 Reply Last reply Reply Quote 0
                      • D
                        dulles @frajop last edited by

                        @frajop
                        Hey,
                        Da ich nicht der beste in JS bin, kannst Du einmal den kompletten Script einstellen.
                        Ich würde es gerne einmal testen. Bis jetzt sind meine Tests alle in die Hose gegangen.

                        dulles

                        1 Reply Last reply Reply Quote 0
                        • F
                          frajop last edited by

                          Ich habe es wie folgt gelöst:

                          var timer;
                          var request;  
                          var message = 'CAM Aktion erkannt'             
                          
                          
                          // Netatmo Datenpunkt auf Änderung prüfen
                          on('netatmo.0.XXXX.LastEventData.LastEventId', function (obj) {
                              
                              // max. alle 30 sec
                              if (!timer) {
                                  timer = setTimeout(function () {
                                      timer = null;
                                  }, 30000);
                              }
                              
                          	saveImage();
                          });
                          
                          
                          function saveImage() 
                          {
                              var fs = require('fs');
                              var source_url; 
                          
                              // Datum und Zeit
                              var today = new Date();
                              var day = today.toLocaleDateString();
                              // Doppelpunkte im string druch - ersetzen
                              var timestamp = today.toLocaleTimeString().replace(/:/g,"-"); 
                          
                              // Zielpfad + Dateiname
                              var dest_path   = '/iobroker/iobroker-data/files/webcam/' + 'image-' + day + '-' + timestamp + '.jpg' ;
                              log(dest_path);
                             
                             //---- aktuelle URL für Bild holen.  --------------------------------------
                          
                              // LastEventId selektieren
                              var LastEventId = getState("netatmo.0.XXXX.LastEventData.LastEventId").val;         
                          
                              // Fuer Event CamId fuer LastEvendId selektieren 
                              var id_path   =   'netatmo.0.XXXX.Events.' + LastEventId + '.camera_id';        
                              var CamId = getState(id_path).val;
                          
                              // CAM IDs selektieren
                              var CAM1 = getState("netatmo.0.XXXX.Name1.info.id").val;
                              var CAM2 = getState("netatmo.0.XXXX.Name2.info.id").val;
                          
                              // Welche CAM hat angeschlagen 
                              if (CamId === CAM1)
                              {
                                  source_url = getState("netatmo.0.Home.Gelting Einfahrt.live.picture").val;
                              }
                              else if (CamId === CAM2)
                              {
                                  source_url = getState("netatmo.0.Home.Gelting Garten .live.picture").val;
                              }
                              else
                              {
                                  log('keine CAM erkannt');
                          		source_url = 0;
                              }
                          
                              if (source_url)
                              {
                                  request.get({url: source_url, encoding: 'binary'}, function (err, response, body) 
                                  {
                          			fs.writeFile(dest_path, body, 'binary', function(err)  {
                                          if (err) 
                                          {
                                              setTimeout(function() { sendTelegram('Fehler beim Bild speichern!'); }, 2000); 
                                          }
                                          else
                                          {
                                              setTimeout(function() { sendTelegram(dest_path); }, 2000); 
                                          }
                                      });
                                  });
                              }
                          }
                          
                          
                          // Bild oder Text über Telegram senden 
                          function sendTelegram (fname) { 
                              try {
                                  sendTo('telegram.0', {
                                      text:                   fname,
                                      caption:                message, 
                                      disable_notification:   true
                                  });
                              }
                              catch(err) { if (err.code != "ENOENT") log(err); }  
                              setTimeout(function() {  }, 3000); 
                          }
                          
                          D 1 Reply Last reply Reply Quote 0
                          • D
                            dulles @frajop last edited by dulles

                            @frajop
                            Danke schon einmal für den Script.
                            Bekomme aber noch einen Fehler
                            " Fehler beim Bild speichern"
                            habe schon versucht in verschiedene Verzeichnisse zu speichern,
                            hat aber nichts geholfen. Kannst Du mir einen Tipp geben.

                            dulles

                            1 Reply Last reply Reply Quote 0
                            • F
                              frajop last edited by

                              Stimmt evtl. der Pfad/Dateinamen nicht? Mein Beispiel ist für Windows.

                              Frank

                              D 1 Reply Last reply Reply Quote 0
                              • D
                                dulles @frajop last edited by

                                @frajop
                                Also an der Pfadangabe ist nichts falsch, da ich es schon mit mehreren Verzeichnisse versucht habe.
                                Bei mir ist es ein PI4 mit der aktuellen Linux Version.

                                dulles

                                1 Reply Last reply Reply Quote 0
                                • F
                                  frajop last edited by

                                  Gib doch mal ein paar logs aus (source, dest), vielleicht kannst du erkennen wo es klemmt.
                                  Du hast doch mit deinen scrpts schon Bilder geschickt, das hat doch funktioniert, oder!?

                                  D 2 Replies Last reply Reply Quote 0
                                  • D
                                    dulles @frajop last edited by

                                    @frajop
                                    mit den alten Scripts habe ich Bilder verschicken können. Sie wurden auch im entsprechenden Verzeichnis vorher abgelegt. Aber zu diesem Zeitpunkt lief alles noch auf einem anderen Client (Rock64).
                                    Auf dem PI4 hatte ich die alten Script nie am laufen. Ich vermute einal, dass es mit dem Betriebssystem (raspbian-buster-lite) zusammen hängt.
                                    Mit der Datensicherung habe ich auch so einen Effekt, wenn ich den erstellten Backupfile in ein anderes Verzeichnis kopieren möchte.

                                    dulles

                                    1 Reply Last reply Reply Quote 0
                                    • D
                                      dulles @frajop last edited by dulles

                                      @frajop
                                      Zur Info....
                                      Das Problem hat eine Ende. Es lag an dem Namen der gespeicherten Bilddatei. Genauer gesagt an der Variable "LokaleDate" . Hier wird ein Ergebnis "xx/xx/xx" ausgespuckt und mit den Slash "/" kommt Linux als Namen nicht zurecht. Gelöst habe ich folgendermaßen.

                                      1. diesen Eintrag löschen
                                      var day = today.toLocaleDateString();
                                      
                                      1. dafür diese Einträge einsetzen
                                      var d = new Date();
                                      var mm = d.getMonth() + 1;
                                      var dd = d.getDate();
                                      var yy = d.getFullYear();
                                      
                                      1. dann noch folgende Zeile (speichern des Dateinamen) anpassen
                                      var dest_path   = '/opt/iobroker/data/webcam/' + 'image-' + dd + '-' + mm + '-' + yy + '-' + timestamp + '.jpg' ;
                                      

                                      Nochmal danke für die Vorlage des Scriptes. Jetzt bekomme ich auch noch eine Benachrichtigung und nur ein Bild (Bild von der auslöstenden Kamera.

                                      dulles

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      736
                                      Online

                                      31.9k
                                      Users

                                      80.3k
                                      Topics

                                      1.3m
                                      Posts

                                      2
                                      24
                                      1060
                                      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