Webcam Capture 2 Disk & Pir

Hallo allerseits, nach viel Lesen hab ich nun auch ein Problem das einen Post wert ist.

Ich nutze IPS 2.1 schon eine Weile zusammen mit FS20 und Freebus(Eib) Komponenten.

Nun habe ich vor mir eine PIR gesteuerte Kamera Aufzeichnung zu realisieren.

Der PIR ist als FS20 Sender Instanz erstellt und so konfiguriert das er bei Bewegung seine Status Variable auf „AN“ und nach 1 Minute ohne Bewegung wieder auf „AUS“ setzt. Funktioniert soweit gut.

Neben dem PIR hängt eine AXIS 205 IP Kamera.

Nun habe ich folgendes Script geschrieben:

<?

     $path="//makinas/surv/cam1/";

     date_default_timezone_set('Europe/Berlin');

        $datuma = date('Y-m-d');

        $pathneu = $path.$datuma;
        if (file_exists($pathneu)){
        } else {
                mkdir("$pathneu");
        }

        $status = GetValue(18154 /*[FS20\FS20 Pir Vorgarten\Status]*/  );

        if ( $status ) {
                while ( $status ) {
             $daten =  
file_get_contents('http://vuser:password@192.168.1.250/jpg/image.jpg');

                $datum = date('Y-m-d-His');
             $verbindung = fopen("$pathneu/$datum.jpg", "w");
                fwrite($verbindung, $daten);
             fclose($verbindung);
                usleep(500);
        }
        }


?>

Ziel ist es für jeden Tag ein Verzeichniss auf dem NAS zu erstellen und bei Bewegung Bilder dort abzulegen. Die Bildspeicherung soll erst stoppen wenn 1 Minute keine Bewegung mehr festgestellt wurde.

Das Problem ist aber der Script Timeout daher wird das Script derzeit nach ca. 30sec abgebrochen und als fehlerhaft markiert.

Frage an euch:

Wie mache ich das besser? Oder gibt es eine Möglichkeit dem Script einen höheren Timeout zu geben?

Vielen Dank

Gruß Martin

while ( $status ) {
...
        } 


eventuell solltest du $status irgendwo in der Schleife auch mal auf False setzen :wink: Nur so eine Idee.

Ähh, ja! Danke


<?

     $path="//makinas/surv/cam1/";

     date_default_timezone_set('Europe/Berlin');

        $datuma = date('Y-m-d');

        $pathneu = $path.$datuma;
        if (file_exists($pathneu)){
        } else {
                mkdir("$pathneu");
        }

        $status = GetValue(18154 /*[FS20\FS20 Pir Vorgarten\Status]*/  );

        if ( $status ) {
            while ( $status ) {
             $daten =  
file_get_contents('http://user:password@192.168.1.250/jpg/image.jpg');

             $datum = date('Y-m-d-His');
             $verbindung = fopen("$pathneu/$datum.jpg", "w");
             fwrite($verbindung, $daten);
             fclose($verbindung);
            usleep(500);
            $status = GetValue(18154 /*[FS20\FS20 Pir Vorgarten\Status]*/  );
        }
        }


?>

So sollte das dann besser sein :wink: denke die Minute Laufzeit bekommen wir dennoch nicht hin

Hallo,

schau Dir mal im IP-Symcon-Verzeichnis die Datei php.ini an

Dort sollte der Eintrag

max_execution_time = 30

vorhanden sein.

Andere diesen nach dem runterfahren von IPS auf z.B. 180. Der Wert steht für die Sekunden wie lange ein Skript laufen darf.

evtl so:


        $status = GetValue(18154 /*[FS20\FS20 Pir Vorgarten\Status]*/  );

        if ( $status ) {
$run=true;
            while ( $run) {
             $daten =  
file_get_contents('http://user:password@192.168.1.250/jpg/image.jpg');

             $datum = date('Y-m-d-His');
             $verbindung = fopen("$pathneu/$datum.jpg", "w");
             fwrite($verbindung, $daten);
             fclose($verbindung);
            usleep(500);
            $status = GetValue(18154 /*[FS20\FS20 Pir Vorgarten\Status]*/  );
$run=false;
if($status){
$run=true;
}else{
  $vdata=IPS_GetVariable(18154 /*[FS20\FS20 Pir Vorgarten\Status]*/ );
  if($vdata['VariableChanged']>(time()-60))
   $run=true;
}
        } 

Du kannst auch direkt im Script die Laufzeit hochsetzen

ini_set( 'max_execution_time', 300);

Da du eh’ „nur“ jpeg’s holst kannst du auch das gesamte Script immer wieder aufrufen und ein Bild holen, solange der PIR aktiv ist. Bei Tests hat mein Rechner damit ca. 3 Bilder pro Sekunde geschafft. Du solltest aber mit IPS_Semapore den Mehrfachstart verhindern. Sonst hast du schnell 10 laufende Kamerascripte und ein nahezu stehendes IPS.

Daraus lassen sich dann auch Videos erstellen.

Aber der Nutzen und die Rechnerbelastung stehen in keinem Verhältnis.

Mehrere Stunden spielenden Kinder zusehen fand ich nicht so interessant :eek:.

Danke für alle Tips, ich hab mich für die Variante PHP.INI entschieden.

Läuft jetzt super.

Gruß Martin

Habe es bei mir so gelöst, dass durch den Bewegungsmelder ein Script aufgerufen wird, welches sich dann per Scripttimer einmal pro Sekunde selbst aufruft, jedesmal ein Bild von der Kamera holt und abspeichert und jedesmal eine Variable als Zähler um eins hochzählt. nach 15 mal aufrufen wird der Scripttimer wieder auf 0 gesetzt. Durch jedes auslösen des bewegungsmelders werden also 15 Bilder gemacht. Kann beliebeig geändert werden, denn das Script wird ja nur kurz einmal pro Sekunde aufgerufen und ist dann wieder beendet.

Gruß Rolf