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. IP Kamera Bilder via Telegram, 2. Daten Punt Auslösung

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    236

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

IP Kamera Bilder via Telegram, 2. Daten Punt Auslösung

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 3 Kommentatoren 418 Aufrufe 3 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.
  • philipplindnerDEP philipplindnerDE

    Hallo,

    ich habe eine Frage, wie kann man Bilder via Telegram schicken die durch 2 Daten punkte aktiviert werden?

    ich habe eine Javascript gefunden was durch 1 Daten Punkt aktiviert wird (den bewegung02 habe ich hinzugefügt):

    // Konfiguration
    // -------------------------------------------------------------------------
          //2. Bewerbungs angabe
    const bewerbung02 ="mqtt.1.Philipp_Lindner_Überwachung.arlamStatus";
          // Objekt-ID des Bewegungsmelders
    const oidLichtBewmelderTuer = "mqtt.1.Philipp_Lindner_Überwachung.cameras.flurcam_01.motion";
          // URL zur Kamera um ein Image (jpg) zu erhalten
    const cam_url = "http://192.168.1.23:8090/grab.jpg?oid=2&size=1280x720";
          // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
    const dest_path = '/opt/iobroker/temp/cam';
          // Anzahl der Bilder, die vorgehalten werden sollen
    const imageCountMax = 4;                
          // Prefix für die Bildnamen
    const imageNamePre = "Flur_"; 
    
    // -------------------------------------------------------------------------
    // Scriptteil
    // -------------------------------------------------------------------------
    var request = require('request');
    var fs      = require('fs');
    
    // Bild an telegram schicken 
    function sendImage (path) { 
        try {
            var stats = fs.statSync(path);
            var msg = formatDate(stats.birthtime,"DD.MM.YYYY hh:mm:ss") + " " + path.substring(path.lastIndexOf('/')+1);
            sendTo('telegram.0', {
                text:                   path,
                caption:                msg, 
                disable_notification:   true
            });
        }
        catch(err) { if (err.code != "ENOENT") log(err); }     
    }
    
    // löscht eine Datei synchron (wartet auf das Ergebnis)
    function fsUnlinkSync(path) {
        try {
            var stats = fs.statSync(path);
            try { fs.unlinkSync(path); }
            catch(err) { if (err.code != "ENOENT") log(err); }     
        }
        catch(err) { if (err.code != "ENOENT") log(err); }
    }
    
    // benennt eine Datei synchron um (wartet auf das Ergebnis)
    function fsRenameSync(oldPath, newPath) {
        try {
            var stats = fs.statSync(oldPath);
            try { fs.renameSync(oldPath, newPath); }
            catch(err) { if (err.code != "ENOENT") log(err); }     
        }
        catch(err) { if (err.code != "ENOENT") log(err); }
    }
    
    // Bild speichern und senden
    function saveImage() {
        // Bild imageCountMax-1 löschen
        fsUnlinkSync( dest_path + imageNamePre + (imageCountMax-1) + ".jpg" );
        // Bilder 0..imageCountMax-2 umbenennen
        for (var i=imageCountMax-2; i >= 0; i-- ) { 
            fsRenameSync(dest_path + imageNamePre + i + ".jpg", dest_path + imageNamePre + (i+1) + ".jpg"); 
        }
        // Bild 0 löschen
        var fname = imageNamePre + "0.jpg";
        fsUnlinkSync( fname );
        // Bild holen und speichern
        request.get({url: cam_url, encoding: 'binary'}, function (err, response, body) {
            fs.writeFile(dest_path + fname, body, 'binary', function(err) {
                if (err) {
                    log('Fehler beim Bild speichern: ' + err, 'warn');
                } else {
                    // dem Filesystem 2 Sek Zeit zum Speichern lassen
                    setTimeout(function() { sendImage(dest_path + fname); }, 2000); 
                }
            }); 
        });
    }
    
    // sofort ein Bild senden und nach 10 Sek erneut
    function onEvent() {
        saveImage();
        setTimeout(function() { saveImage(); }, 10 * 1000); 
    }
    
    // Ereignisroutine
    on({id: oidLichtBewmelderTuer, val: true}, function (obj) {
        onEvent( obj );
    })
    
    // manuelle Ausführung (Test)
    onEvent();
    

    Zu meine Aufbau:

    ich verwende als IP Kamera die TP-Link Tapo C100 wie dies auch über das ONVIF Standard verfügt. Dies und 2 weiter laufen in die IP Kamera Überwachungssoftware iSpy auf. Dies ist mit meine MQTT Broker verbunden so bekomme ich mit wen eine Bewerbung Stad findet. Dies soll aber nur ausgelöst werden wenn die Software in Arlammodus gestezt ist. Dies kann ich dank der mitgelieferten API Schitstelle an und aus Schalten, welches ich über ein PHP script ereiche:

    <?php
    $rfid           =$_REQUEST["rf"];
    $modi           =$_REQUEST["modi"];
    
    $MYSQL_Host     ="192.168.X.X:XXXX";
    $MYSQL_User     ="smarthome";
    $MYSQL_pass     ="XXXXXXXX";
    $MYSQL_DBNa     ="smarthome";
    
    require "/var/www/html/ESP/vendor/autoload.php";
    $MQTT_Server="192.168.X.XX";
    $MQTT_Port      =1883;
    $MQTT_CID       ="SmartHomeSteuetung";
    $MQTT_User      ="XXXXXXX";
    $MQTT_Pass      ="XXXXXXX";
    $MQTT_Pfad      ="Philipp Lindner Überwachung/arlamStatus";
    
    //Ausage;
    echo "RFID: ".$rfid."<br>";
    echo "Modi: ".$modi."<br>";
    
    //programm
    $db=mysqli_connect("192.168.X.X:XXXX","smarthome","XXXXXXX","smarthome");
    
    $sql="SELECT * FROM user WHERE rfid LIKE '".$rfid."'";
    
    $res=mysqli_query($db,$sql);
    $num=mysqli_num_rows($res);
    
    if($num>"2" or $num=="0"){echo"Error no RFID"; mysqli_error($db);  exit;}
    while($d=mysqli_fetch_assoc($res))
    {
            //Berechtigung Prüfen Ob RFID ID Schalten Darf (Mindesten level 5)
            if($d["level"]=="5")
            {
               //Dar nur Aktivirt werden
               if($modi==="Aktiv")
               {
                    shell_exec("curl http://192.168.XXX.XXX:8090/command.cgi?cmd=Arm");
                    echo"Alles OK AKTIV<br><a href='http://192.168.X.XXX:8082/vis/?pi#Überwaung'>Zurück</a>";
                    //MQTT Meldung!
                    $mqtt = new \PhpMqtt\Client\MQTTClient($MQTT_Server, $MQTT_Port, $MQTT_CID);
                    $mqtt->connect($MQTT_User,$MQTT_Pass);
                    $mqtt->publish($MQTT_Pfad, '1', 0);
                    $mqtt->close();
              }
              //Dar nur Aktivirt werden
              if($modi==="DeAktivieren")
              {
                    shell_exec("curl http://192.168.XXX.XXX:8090/command.cgi?cmd=disArm");
                    echo"Alles OK DEAKTVIRT<br><a href='http://192.168.XXX.XXX:8082/vis/?pi#Überwaung'>Zurück</a>";
                    //MQTT Meldung!
                    $mqtt = new \PhpMqtt\Client\MQTTClient($MQTT_Server, $MQTT_Port, $MQTT_CID);
                    $mqtt->connect($MQTT_User,$MQTT_Pass);
                    $mqtt->publish($MQTT_Pfad, '0', 0);
                    $mqtt->close();
             }
             else
            {
             echo"Kein Modi gesetzt Bitte wählem<br><a href='?rf=".$rfid."&modi=Aktiv'>Aktiviren</a> | <a href='?rf=".$rfid."&modi=DeAktivieren'>DeAktivieren</a><br><a href='http://192.168.XXX.XXX:8082/vis/?pi#Überwaung'>Zurück</a>";
            }
           }
    echo"<br><a href='http://192.168.1.23:8082/vis/?pi#Überwaung'>Zurück</a>";
    }
    ?>
    

    das zu Verschickende Kamera Bild kommt auch über die API Schnitstelle.

    Es soll wie Folgt ablaufen: System ist Schaft geschalten (MQTT: Philipp Lindner Überwachung/arlamStatu = 1) und wir über den Daten Punkt (mqtt.1.Philipp_Lindner_Überwachung.cameras.flurcam_01.motion) eine Bewegung festgestellt > Bild über Telegram Ferschicken.

    Vielen Dank in voraus.

    AsgothianA Offline
    AsgothianA Offline
    Asgothian
    Developer
    schrieb am zuletzt editiert von Asgothian
    #2

    @philipplindnerde

    Du musst deinem Skript genau 3 Dinge hinzufügen:

    • eine Variable Alarmanlage_status
    • einen Aufruf bei Skriptstart: Alarmanlage_status = getState(bewerbung02).val
    • einen Trigger on ({id: bewerbung02, change:'ne'}, function(obj) { Alarmanlage_status = obj.state.val; }

    Damit kannst du dann in deinem Trigger mit if bewerbung02==1 prüfen ob die Alarmanlage scharf ist und dein "onEvent" nur aufrufen wenn das der Fall ist.

    A.
    Nachtrag:

    • ich habe die Skriptteile nicht geprüft. Schreibfehler können vorhanden sein
    • Du sprichst oben von einer Variable "Bewegung02", die im Skript aber "bewerbung02" heisst. Die ist in den Skript Stubs gemeint.

    ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
    "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

    philipplindnerDEP 1 Antwort Letzte Antwort
    0
    • AsgothianA Asgothian

      @philipplindnerde

      Du musst deinem Skript genau 3 Dinge hinzufügen:

      • eine Variable Alarmanlage_status
      • einen Aufruf bei Skriptstart: Alarmanlage_status = getState(bewerbung02).val
      • einen Trigger on ({id: bewerbung02, change:'ne'}, function(obj) { Alarmanlage_status = obj.state.val; }

      Damit kannst du dann in deinem Trigger mit if bewerbung02==1 prüfen ob die Alarmanlage scharf ist und dein "onEvent" nur aufrufen wenn das der Fall ist.

      A.
      Nachtrag:

      • ich habe die Skriptteile nicht geprüft. Schreibfehler können vorhanden sein
      • Du sprichst oben von einer Variable "Bewegung02", die im Skript aber "bewerbung02" heisst. Die ist in den Skript Stubs gemeint.
      philipplindnerDEP Offline
      philipplindnerDEP Offline
      philipplindnerDE
      schrieb am zuletzt editiert von
      #3

      @asgothian Danke für ihre Antwort ich probiere es mal aus. Die Variabel "bewerbung02" soll bewergung02 heißen

      MfG
      Philipp Lindner

      1 Antwort Letzte Antwort
      0
      • philipplindnerDEP Offline
        philipplindnerDEP Offline
        philipplindnerDE
        schrieb am zuletzt editiert von
        #4

        Habe Ihre Parameter Eingebaut. Gehet aber nicht. Schuldigen wenn ich so doof bin. JavaScript habe ich nur Grundkenntnisse.

        // Konfiguration
        // -------------------------------------------------------------------------
              //2. Bewwgung angabe
        const bewegung02 ="mqtt.1.Philipp_Lindner_Überwachung.arlamStatus";
              // Objekt-ID des Bewegungsmelders
        const bewegung01 = "mqtt.1.Philipp_Lindner_Überwachung.cameras.flurcam_01.motion";
              // URL zur Kamera um ein Image (jpg) zu erhalten
        const cam_url = "http://192.168.1.23:8090/grab.jpg?oid=2&size=1280x720";
              // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
        const dest_path = '/opt/iobroker/temp/cam';
              // Anzahl der Bilder, die vorgehalten werden sollen
        const imageCountMax = 4;                
              // Prefix für die Bildnamen
        const imageNamePre = "Flur_"; 
        
        // -------------------------------------------------------------------------
        // Scriptteil
        // -------------------------------------------------------------------------
        var request = require('request');
        var fs      = require('fs');
        
        var Alarmanlage_status = getState(bewegung02).val;
        
        ....
        
        on({id:bewegung02, change:'ne'}, function(obj) {Alarmanlage_status = obj.state.val;})
        
        if(Alarmanlage_status=="1"){
        
        on({id: bewegung01, val: true}, function (obj) {
            onEvent( obj );
        })}
        

        MfG
        Philipp Lindner

        philipplindnerDEP 1 Antwort Letzte Antwort
        0
        • philipplindnerDEP philipplindnerDE

          Habe Ihre Parameter Eingebaut. Gehet aber nicht. Schuldigen wenn ich so doof bin. JavaScript habe ich nur Grundkenntnisse.

          // Konfiguration
          // -------------------------------------------------------------------------
                //2. Bewwgung angabe
          const bewegung02 ="mqtt.1.Philipp_Lindner_Überwachung.arlamStatus";
                // Objekt-ID des Bewegungsmelders
          const bewegung01 = "mqtt.1.Philipp_Lindner_Überwachung.cameras.flurcam_01.motion";
                // URL zur Kamera um ein Image (jpg) zu erhalten
          const cam_url = "http://192.168.1.23:8090/grab.jpg?oid=2&size=1280x720";
                // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
          const dest_path = '/opt/iobroker/temp/cam';
                // Anzahl der Bilder, die vorgehalten werden sollen
          const imageCountMax = 4;                
                // Prefix für die Bildnamen
          const imageNamePre = "Flur_"; 
          
          // -------------------------------------------------------------------------
          // Scriptteil
          // -------------------------------------------------------------------------
          var request = require('request');
          var fs      = require('fs');
          
          var Alarmanlage_status = getState(bewegung02).val;
          
          ....
          
          on({id:bewegung02, change:'ne'}, function(obj) {Alarmanlage_status = obj.state.val;})
          
          if(Alarmanlage_status=="1"){
          
          on({id: bewegung01, val: true}, function (obj) {
              onEvent( obj );
          })}
          
          philipplindnerDEP Offline
          philipplindnerDEP Offline
          philipplindnerDE
          schrieb am zuletzt editiert von
          #5

          so Meine Skript mit 2 Auslöse Datenpunkte ist Verding. Danke nochmal an @Asgothian der Denkansatz wahr richtig hier für alle die sich auch für das Thema interessieren:

          // Konfiguration
          // -------------------------------------------------------------------------
                //2. Bewerbungs angabe
          const bewegung02 ="mqtt.1.Philipp_Lindner_Überwachung.arlamStatus";
                // Objekt-ID des Bewegungsmelders
          const bewegung01 = "mqtt.1.Philipp_Lindner_Überwachung.cameras.flurcam_01.motion";
                // URL zur Kamera um ein Image (jpg) zu erhalten
          const cam_url = "http://192.168.xxx.xxx:8090/grab.jpg?oid=2&size=1280x720";
                // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
          const dest_path = '/opt/iobroker/temp/cam';
                // Anzahl der Bilder, die vorgehalten werden sollen
          const imageCountMax = 4;                
                // Prefix für die Bildnamen
          const imageNamePre = "Flur_"; 
          
          // -------------------------------------------------------------------------
          // Scriptteil
          // -------------------------------------------------------------------------
          var request = require('request');
          var fs      = require('fs');
          
          var Alarmanlage_status = getState(bewegung02).val;
          
          // Bild an telegram schicken 
          function sendImage (path) { 
              try {
                  var stats = fs.statSync(path);
                  var msg = formatDate(stats.birthtime,"DD.MM.YYYY hh:mm:ss") + " " + path.substring(path.lastIndexOf('/')+1);
                  sendTo('telegram.0', {
                      text:                   path,
                      caption:                msg, 
                      disable_notification:   true
                  });
              }
              catch(err) { if (err.code != "ENOENT") log(err); }     
          }
          
          // löscht eine Datei synchron (wartet auf das Ergebnis)
          function fsUnlinkSync(path) {
              try {
                  var stats = fs.statSync(path);
                  try { fs.unlinkSync(path); }
                  catch(err) { if (err.code != "ENOENT") log(err); }     
              }
              catch(err) { if (err.code != "ENOENT") log(err); }
          }
          
          // benennt eine Datei synchron um (wartet auf das Ergebnis)
          function fsRenameSync(oldPath, newPath) {
              try {
                  var stats = fs.statSync(oldPath);
                  try { fs.renameSync(oldPath, newPath); }
                  catch(err) { if (err.code != "ENOENT") log(err); }     
              }
              catch(err) { if (err.code != "ENOENT") log(err); }
          }
          
          // Bild speichern und senden
          function saveImage() {
              // Bild imageCountMax-1 löschen
              fsUnlinkSync( dest_path + imageNamePre + (imageCountMax-1) + ".jpg" );
              // Bilder 0..imageCountMax-2 umbenennen
              for (var i=imageCountMax-2; i >= 0; i-- ) { 
                  fsRenameSync(dest_path + imageNamePre + i + ".jpg", dest_path + imageNamePre + (i+1) + ".jpg"); 
              }
              // Bild 0 löschen
              var fname = imageNamePre + "0.jpg";
              fsUnlinkSync( fname );
              // Bild holen und speichern
              request.get({url: cam_url, encoding: 'binary'}, function (err, response, body) {
                  fs.writeFile(dest_path + fname, body, 'binary', function(err) {
                      if (err) {
                          log('Fehler beim Bild speichern: ' + err, 'warn');
                      } else {
                          // dem Filesystem 2 Sek Zeit zum Speichern lassen
                          setTimeout(function() { sendImage(dest_path + fname); }, 2000); 
                      }
                  }); 
              });
          }
          
          // sofort ein Bild senden und nach 10 Sek erneut
          function onEvent(t) {
              saveImage();
              setTimeout(function() { saveImage(); }, 10 * 1000); 
              log('onEVenter go ('+t+')', 'info');
          }
          
          // Ereignisroutine
          
          function auloeser(){
              log('Überwachunbg test start', 'info');
              on({id:bewegung02, change:'ne'}, function(obj) {Alarmanlage_status=obj.state.val;})
              
              if (Alarmanlage_status =="1"){
                  log('Arlame Scharf!','info');
                  on({id:bewegung01, val:true}, function(obj){onEvent(obj); log ('BEWEGUNG!','info');})
                  
              }
              log('test ende', 'info');
          }
          
          schedule("*/5 * * * * *", function(){ auloeser()});
          
          
          // manuelle Ausführung (Test)
          onEvent("test");
          

          der Skript läuft aller 5 sec. durch und prüft die punkte ab.

          MfG
          Philipp Lindner

          F 1 Antwort Letzte Antwort
          0
          • philipplindnerDEP philipplindnerDE

            so Meine Skript mit 2 Auslöse Datenpunkte ist Verding. Danke nochmal an @Asgothian der Denkansatz wahr richtig hier für alle die sich auch für das Thema interessieren:

            // Konfiguration
            // -------------------------------------------------------------------------
                  //2. Bewerbungs angabe
            const bewegung02 ="mqtt.1.Philipp_Lindner_Überwachung.arlamStatus";
                  // Objekt-ID des Bewegungsmelders
            const bewegung01 = "mqtt.1.Philipp_Lindner_Überwachung.cameras.flurcam_01.motion";
                  // URL zur Kamera um ein Image (jpg) zu erhalten
            const cam_url = "http://192.168.xxx.xxx:8090/grab.jpg?oid=2&size=1280x720";
                  // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
            const dest_path = '/opt/iobroker/temp/cam';
                  // Anzahl der Bilder, die vorgehalten werden sollen
            const imageCountMax = 4;                
                  // Prefix für die Bildnamen
            const imageNamePre = "Flur_"; 
            
            // -------------------------------------------------------------------------
            // Scriptteil
            // -------------------------------------------------------------------------
            var request = require('request');
            var fs      = require('fs');
            
            var Alarmanlage_status = getState(bewegung02).val;
            
            // Bild an telegram schicken 
            function sendImage (path) { 
                try {
                    var stats = fs.statSync(path);
                    var msg = formatDate(stats.birthtime,"DD.MM.YYYY hh:mm:ss") + " " + path.substring(path.lastIndexOf('/')+1);
                    sendTo('telegram.0', {
                        text:                   path,
                        caption:                msg, 
                        disable_notification:   true
                    });
                }
                catch(err) { if (err.code != "ENOENT") log(err); }     
            }
            
            // löscht eine Datei synchron (wartet auf das Ergebnis)
            function fsUnlinkSync(path) {
                try {
                    var stats = fs.statSync(path);
                    try { fs.unlinkSync(path); }
                    catch(err) { if (err.code != "ENOENT") log(err); }     
                }
                catch(err) { if (err.code != "ENOENT") log(err); }
            }
            
            // benennt eine Datei synchron um (wartet auf das Ergebnis)
            function fsRenameSync(oldPath, newPath) {
                try {
                    var stats = fs.statSync(oldPath);
                    try { fs.renameSync(oldPath, newPath); }
                    catch(err) { if (err.code != "ENOENT") log(err); }     
                }
                catch(err) { if (err.code != "ENOENT") log(err); }
            }
            
            // Bild speichern und senden
            function saveImage() {
                // Bild imageCountMax-1 löschen
                fsUnlinkSync( dest_path + imageNamePre + (imageCountMax-1) + ".jpg" );
                // Bilder 0..imageCountMax-2 umbenennen
                for (var i=imageCountMax-2; i >= 0; i-- ) { 
                    fsRenameSync(dest_path + imageNamePre + i + ".jpg", dest_path + imageNamePre + (i+1) + ".jpg"); 
                }
                // Bild 0 löschen
                var fname = imageNamePre + "0.jpg";
                fsUnlinkSync( fname );
                // Bild holen und speichern
                request.get({url: cam_url, encoding: 'binary'}, function (err, response, body) {
                    fs.writeFile(dest_path + fname, body, 'binary', function(err) {
                        if (err) {
                            log('Fehler beim Bild speichern: ' + err, 'warn');
                        } else {
                            // dem Filesystem 2 Sek Zeit zum Speichern lassen
                            setTimeout(function() { sendImage(dest_path + fname); }, 2000); 
                        }
                    }); 
                });
            }
            
            // sofort ein Bild senden und nach 10 Sek erneut
            function onEvent(t) {
                saveImage();
                setTimeout(function() { saveImage(); }, 10 * 1000); 
                log('onEVenter go ('+t+')', 'info');
            }
            
            // Ereignisroutine
            
            function auloeser(){
                log('Überwachunbg test start', 'info');
                on({id:bewegung02, change:'ne'}, function(obj) {Alarmanlage_status=obj.state.val;})
                
                if (Alarmanlage_status =="1"){
                    log('Arlame Scharf!','info');
                    on({id:bewegung01, val:true}, function(obj){onEvent(obj); log ('BEWEGUNG!','info');})
                    
                }
                log('test ende', 'info');
            }
            
            schedule("*/5 * * * * *", function(){ auloeser()});
            
            
            // manuelle Ausführung (Test)
            onEvent("test");
            

            der Skript läuft aller 5 sec. durch und prüft die punkte ab.

            F Offline
            F Offline
            Fabian1
            schrieb am zuletzt editiert von
            #6

            @philipplindnerde Mit Blockly und exec wären das 3 klicks gewesen :flushed:

            philipplindnerDEP 1 Antwort Letzte Antwort
            0
            • F Fabian1

              @philipplindnerde Mit Blockly und exec wären das 3 klicks gewesen :flushed:

              philipplindnerDEP Offline
              philipplindnerDEP Offline
              philipplindnerDE
              schrieb am zuletzt editiert von
              #7

              @fabian1 habe ich mir auch so überlegt. Na Ja es Geht und ich habe was Über Java Skript gelernt. :hugging_face: :stuck_out_tongue_winking_eye:

              MfG
              Philipp Lindner

              AsgothianA 1 Antwort Letzte Antwort
              0
              • philipplindnerDEP philipplindnerDE

                @fabian1 habe ich mir auch so überlegt. Na Ja es Geht und ich habe was Über Java Skript gelernt. :hugging_face: :stuck_out_tongue_winking_eye:

                AsgothianA Offline
                AsgothianA Offline
                Asgothian
                Developer
                schrieb am zuletzt editiert von Asgothian
                #8

                @philipplindnerde

                function auloeser(){
                    log('Überwachunbg test start', 'info');
                    on({id:bewegung02, change:'ne'}, function(obj) {Alarmanlage_status=obj.state.val;})
                    
                    if (Alarmanlage_status =="1"){
                        log('Arlame Scharf!','info');
                        on({id:bewegung01, val:true}, function(obj){onEvent(obj); log ('BEWEGUNG!','info');})
                        
                    }
                    log('test ende', 'info');
                }
                 
                schedule("*/5 * * * * *", function(){ auloeser()});
                
                

                das geht schief.

                Du legst solange die Alarmanlage scharf ist (status == 1) alle 5 sekunden einen neuen Trigger an der die Bewegung mitschreibt.

                Wenn dann mal Bewegung kommt dann bekommst du ggf. die eine UND die andere Log Meldung. Geschätzt im Schnitt so etwa 30 -200 - für jeden Event

                Und wenn die Alarmanlage abgeschaltet wird bleibt der trigger aktiv, und du bekommst weiter info Meldungen.

                So wolltest du das sicherlich ncih

                Noch schlimmer ist das umsetzen der Variable Alarmanlage_status. Da bekommst du pro 5 sekunden Skriptlaufzeit einen Trigger. Nach einem Tag also 17280 Trigger.

                Du solltest das so umschreiben:

                let Alarmanlage_status = 0;
                on({id:bewegung02, change:'ne'}, function(obj) {Alarmanlage_status=obj.state.val;});
                
                on({id:bewegung01, val:true}, function(obj){onEvent(obj); if Alarmanlage)status == 1 log ('BEWEGUNG!','info');});
                
                

                Dann brauchst du den Auslöser nicht und das ganze funktioniert automatisch.

                ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                philipplindnerDEP 1 Antwort Letzte Antwort
                0
                • AsgothianA Asgothian

                  @philipplindnerde

                  function auloeser(){
                      log('Überwachunbg test start', 'info');
                      on({id:bewegung02, change:'ne'}, function(obj) {Alarmanlage_status=obj.state.val;})
                      
                      if (Alarmanlage_status =="1"){
                          log('Arlame Scharf!','info');
                          on({id:bewegung01, val:true}, function(obj){onEvent(obj); log ('BEWEGUNG!','info');})
                          
                      }
                      log('test ende', 'info');
                  }
                   
                  schedule("*/5 * * * * *", function(){ auloeser()});
                  
                  

                  das geht schief.

                  Du legst solange die Alarmanlage scharf ist (status == 1) alle 5 sekunden einen neuen Trigger an der die Bewegung mitschreibt.

                  Wenn dann mal Bewegung kommt dann bekommst du ggf. die eine UND die andere Log Meldung. Geschätzt im Schnitt so etwa 30 -200 - für jeden Event

                  Und wenn die Alarmanlage abgeschaltet wird bleibt der trigger aktiv, und du bekommst weiter info Meldungen.

                  So wolltest du das sicherlich ncih

                  Noch schlimmer ist das umsetzen der Variable Alarmanlage_status. Da bekommst du pro 5 sekunden Skriptlaufzeit einen Trigger. Nach einem Tag also 17280 Trigger.

                  Du solltest das so umschreiben:

                  let Alarmanlage_status = 0;
                  on({id:bewegung02, change:'ne'}, function(obj) {Alarmanlage_status=obj.state.val;});
                  
                  on({id:bewegung01, val:true}, function(obj){onEvent(obj); if Alarmanlage)status == 1 log ('BEWEGUNG!','info');});
                  
                  

                  Dann brauchst du den Auslöser nicht und das ganze funktioniert automatisch.

                  philipplindnerDEP Offline
                  philipplindnerDEP Offline
                  philipplindnerDE
                  schrieb am zuletzt editiert von
                  #9

                  @asgothian Danke! aber eigentlich kommt die Schaf Schaltung über meine PHP Skript und da über den MQTT Broker in den IOBroker . Aber so get es auch danke noch mal. :-)

                  MfG
                  Philipp Lindner

                  AsgothianA 1 Antwort Letzte Antwort
                  0
                  • philipplindnerDEP philipplindnerDE

                    @asgothian Danke! aber eigentlich kommt die Schaf Schaltung über meine PHP Skript und da über den MQTT Broker in den IOBroker . Aber so get es auch danke noch mal. :-)

                    AsgothianA Offline
                    AsgothianA Offline
                    Asgothian
                    Developer
                    schrieb am zuletzt editiert von Asgothian
                    #10

                    @philipplindnerde sagte in IP Kamera Bilder via Telegram, 2. Daten Punt Auslösung:

                    @asgothian Danke! aber eigentlich kommt die Schaf Schaltung über meine PHP Skript und da über den MQTT Broker in den IOBroker . Aber so get es auch danke noch mal. :-)

                    Die Methode der Scharfschaltung war nicht Thema meines Änderungsvorschlages. Die Scharfschaltung wird anscheinen über den Datenpunkt der in der Variable "bewegung02" hinterlegt wird realisiert.

                    Mir ging es bei dem Post um folgendes:

                    Den Befehl

                      on(MeinDatenpunkt, Aktion)
                    

                    Kann man umgangssprachlich so übersetzen:
                    Trag in die Liste der zu überwachenden Datenpunkte MeinDatenpunkt ein und führe Aktion jedesmal dann aus wenn die Bedingung erfüllt wird.

                    Dabei ist zu beachten das MeinDatenpunkt in dieser Liste beliebig oft auftauchen kann, mit beliebigen Bedingungen und Aktionen.

                    Ein Konstrukt

                    schedule("*/5 * * * * *", function(){ 
                      on({id:bewegung01, val:true}, function(obj){onEvent(obj); log ('BEWEGUNG!','info');})
                    });
                    

                    führt demnach dazu das alle 5 Sekunden ein zusätzlicher Trigger eingetragen wird. Damit kannst Du dein System wenn es ungünstig läuft komplett lahmlegen.

                    Es gibt die generell Aussage "Trigger im Trigger" ist gefährlich. Genau das hast Du mit dem von Dir geposteten Skript getan.

                    A.

                    ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                    "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                    philipplindnerDEP 1 Antwort Letzte Antwort
                    0
                    • AsgothianA Asgothian

                      @philipplindnerde sagte in IP Kamera Bilder via Telegram, 2. Daten Punt Auslösung:

                      @asgothian Danke! aber eigentlich kommt die Schaf Schaltung über meine PHP Skript und da über den MQTT Broker in den IOBroker . Aber so get es auch danke noch mal. :-)

                      Die Methode der Scharfschaltung war nicht Thema meines Änderungsvorschlages. Die Scharfschaltung wird anscheinen über den Datenpunkt der in der Variable "bewegung02" hinterlegt wird realisiert.

                      Mir ging es bei dem Post um folgendes:

                      Den Befehl

                        on(MeinDatenpunkt, Aktion)
                      

                      Kann man umgangssprachlich so übersetzen:
                      Trag in die Liste der zu überwachenden Datenpunkte MeinDatenpunkt ein und führe Aktion jedesmal dann aus wenn die Bedingung erfüllt wird.

                      Dabei ist zu beachten das MeinDatenpunkt in dieser Liste beliebig oft auftauchen kann, mit beliebigen Bedingungen und Aktionen.

                      Ein Konstrukt

                      schedule("*/5 * * * * *", function(){ 
                        on({id:bewegung01, val:true}, function(obj){onEvent(obj); log ('BEWEGUNG!','info');})
                      });
                      

                      führt demnach dazu das alle 5 Sekunden ein zusätzlicher Trigger eingetragen wird. Damit kannst Du dein System wenn es ungünstig läuft komplett lahmlegen.

                      Es gibt die generell Aussage "Trigger im Trigger" ist gefährlich. Genau das hast Du mit dem von Dir geposteten Skript getan.

                      A.

                      philipplindnerDEP Offline
                      philipplindnerDEP Offline
                      philipplindnerDE
                      schrieb am zuletzt editiert von philipplindnerDE
                      #11

                      @asgothian ok das habe ich Versanden.
                      das Problem was ich jetzt habe ist wenn beide Bedingungen erfüllt sind würd die Aktion ausgeführt. So ball ich eine ändere ist die Aktion aktiv. Was sie eigentlich nich sein dürfte. Muss ich da was zurückstellen?

                      Meine Cod sieht aktuell so aus:

                      // Konfiguration
                      // -------------------------------------------------------------------------
                            //2. Bewerbungs angabe
                      const bewegung02 ="mqtt.1.Philipp_Lindner_Überwachung.arlamStatus";
                            // Objekt-ID des Bewegungsmelders
                      const bewegung01 = "mqtt.1.Philipp_Lindner_Überwachung.cameras.flurcam_01.motion";
                            // URL zur Kamera um ein Image (jpg) zu erhalten
                      const cam_url = "http://192.168.1.23:8090/grab.jpg?oid=2&size=1280x720";
                            // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
                      const dest_path = '/opt/iobroker/temp/cam';
                            // Anzahl der Bilder, die vorgehalten werden sollen
                      const imageCountMax = 4;                
                            // Prefix für die Bildnamen
                      const imageNamePre = "Flur_"; 
                      
                      // -------------------------------------------------------------------------
                      // Scriptteil
                      // -------------------------------------------------------------------------
                      var request = require('request');
                      var fs      = require('fs');
                      
                      var Alarmanlage_status = getState(bewegung02).val;
                      
                      // Bild an telegram schicken 
                      function sendImage (path) { 
                          try {
                              var stats = fs.statSync(path);
                              var msg = formatDate(stats.birthtime,"DD.MM.YYYY hh:mm:ss") + " " + path.substring(path.lastIndexOf('/')+1);
                              sendTo('telegram.0', {
                                  text:                   path,
                                  caption:                msg, 
                                  disable_notification:   true
                              });
                          }
                          catch(err) { if (err.code != "ENOENT") log(err); }     
                      }
                      
                      // löscht eine Datei synchron (wartet auf das Ergebnis)
                      function fsUnlinkSync(path) {
                          try {
                              var stats = fs.statSync(path);
                              try { fs.unlinkSync(path); }
                              catch(err) { if (err.code != "ENOENT") log(err); }     
                          }
                          catch(err) { if (err.code != "ENOENT") log(err); }
                      }
                      
                      // benennt eine Datei synchron um (wartet auf das Ergebnis)
                      function fsRenameSync(oldPath, newPath) {
                          try {
                              var stats = fs.statSync(oldPath);
                              try { fs.renameSync(oldPath, newPath); }
                              catch(err) { if (err.code != "ENOENT") log(err); }     
                          }
                          catch(err) { if (err.code != "ENOENT") log(err); }
                      }
                      
                      // Bild speichern und senden
                      function saveImage() {
                          // Bild imageCountMax-1 löschen
                          fsUnlinkSync( dest_path + imageNamePre + (imageCountMax-1) + ".jpg" );
                          // Bilder 0..imageCountMax-2 umbenennen
                          for (var i=imageCountMax-2; i >= 0; i-- ) { 
                              fsRenameSync(dest_path + imageNamePre + i + ".jpg", dest_path + imageNamePre + (i+1) + ".jpg"); 
                          }
                          // Bild 0 löschen
                          var fname = imageNamePre + "0.jpg";
                          fsUnlinkSync( fname );
                          // Bild holen und speichern
                          request.get({url: cam_url, encoding: 'binary'}, function (err, response, body) {
                              fs.writeFile(dest_path + fname, body, 'binary', function(err) {
                                  if (err) {
                                      log('Fehler beim Bild speichern: ' + err, 'warn');
                                  } else {
                                      // dem Filesystem 2 Sek Zeit zum Speichern lassen
                                      setTimeout(function() { sendImage(dest_path + fname); }, 2000); 
                                  }
                              }); 
                          });
                      }
                      
                      // sofort ein Bild senden und nach 10 Sek erneut
                      function onEvent(t) {
                          saveImage();
                          setTimeout(function() { saveImage(t); }, 10 * 1000); 
                          log('onEVenter go ('+t+')', 'info');
                      }
                      
                      // Ereignisroutine
                      
                      /*function auloeser(){
                          log('Überwachunbg test start', 'info');
                          on({id:bewegung02, change:'ne'}, function(obj) {Alarmanlage_status=obj.state.val;})
                          
                          if (Alarmanlage_status =="1"){
                              log('Arlame Scharf!','info');
                              on({id:bewegung01, val:true}, function(obj){onEvent(obj); log ('BEWEGUNG!','info');})
                              
                          }
                          log('test ende', 'info');
                      }*/
                      
                      let Alarmanlage_status2 = 0;
                      on({id:bewegung02, change:'ne'}, function(obj) {Alarmanlage_status=obj.state.val;});
                       
                      on({id:bewegung01, val:true}, function(obj){onEvent(obj); if (Alarmanlage_status == 1){log('BEWEGUNG!','info');}});
                       
                      
                      //schedule("*/5 * * * * *", function(){ auloeser()});
                      
                      
                      // manuelle Ausführung (Test)
                      onEvent("test");
                      

                      Nachtrag: so das Problem habe ich jetzt gelöst, bin selber bescheuert umd habe den fehler nicht gesehen:

                      let Alarmanlage_status2 = 0;
                      on({id:bewegung02, change:'ne'}, function(obj) {Alarmanlage_status=obj.state.val;});
                       
                      on({id:bewegung01, val:true}, function(obj){if (Alarmanlage_status == 1){onEvent(obj); log('BEWEGUNG!','info');}});
                      

                      Danke an @Asgothian für die auf klährung.

                      MfG
                      Philipp Lindner

                      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

                      541

                      Online

                      32.7k

                      Benutzer

                      82.5k

                      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