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.
    • D
      dulles @frajop last edited by

      @frajop
      Danke für die Info.
      Wie kann ich feststellen, welche Kamera nun ausgelöst hat.
      Oder wie kann ich gezielt mir ein Bild von der ausgelösten Kamera ein Bild zuschicken lassen. Ich habe 3 Netatmo Presence installiert.

      dulles

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

        Hi,
        du musst jede deiner CAMs separat abfragen. Den o.g. Datenpunkt gibt es für jede Kamera. Einfach mal unter Objekte die Struktur unter netatmo.0 anschauen.

        Mein script sieht so aus:

        var timer;
        var request;  
        var message = 'CAM Bewegung erkannt'        
        
        on('netatmo.0.xxxx.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   = '/iobroker/iobroker-data/files/webcam/' + 'image-' + day + '-' + timestamp + '.jpg' ;
            //log(dest_path);
           
           // aktuelle URL 
            source_url = getState("netatmo.0.xxxxx.yyyyy.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', {
                    text:                   fname,
                    caption:                message, 
                    disable_notification:   true
                });
            }
            catch(err) { if (err.code != "ENOENT") log(err); }  
            setTimeout(function() {  }, 3000); 
        }
        

        xxxx und yyyy musst du ändern, das sind die Namen deiner CAM.

        Bei Änderung von LastEventId wird die Bild-URL ermittelt, das Bild geladen und lokal mit Zeitstempel abgespeichert und an Telegram gesendet. (Achtung, Bild wird lokal nicht gelöscht!)

        Frank

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

          @frajop
          entweder stehe ich auf dem Schlauch, oder ich verstehe es noch nicht.
          Der Datenpunkt "netatmo.0.xxxx.yyyy.live.picture" ist für jede Kamera vorhanden. Aber den Datenpunkt "netatmo.0.xxxx.yyyy.live.picture" gibt es nur einmal.

          Bildschirmfoto 2019-05-13 um 21.09.51.png

          Deshalb stelle ich mir immer noch die Frage, wie dann die Abfrage für jede Kamera ausführen soll.

          dulles

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

            @frajop

            Hey,
            ich noch einmal. Ich habe auf dem Schlauch gestanden.
            Habe den JS von Dir entsprechend angepasst und den für jede Kamera.
            Super Sache, läuft wunderbar.

            Jetzt muss ich nur zusehen, dass die Daten regelmässig oder gleich nach dem Versenden lokal gelöscht werden. Muss sie nicht gespeichert aufheben.

            Danke

            dulles

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

              @frajop

              Kannst Du mir noch helfen, wie ich die Nachricht bzw. das Bild nur an einen Benutzer/User schicken kann ?

              dulles

              F 1 Reply Last reply Reply Quote 0
              • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            774
                                            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