Kamera Bild Historie

Hallo zusammen,

ich habe ein kleines Programmierproblem, bei dem ich nicht weiterkomme.

Ich lade mir beim Klingeln stets ein Bild von der IP-Kamera in den Medionpool runter. Jetzt möchte ich eine Historie im Webfront anzeigen lassen, d.h. zuerst das aktuellste Bild (mit Datum) und dann 2 ältere chronologisch…

Das sollte eigentlich ganz einfach zu programmieren sein - ich kriegs aber einfach nicht hin.
Wenn ich dateimässig lösche und umbenenne gibt es im Medienpool ein Chaos. Mit den IPS Medienbefehlen komme ich auch nicht weiter.

Hat jemand ein Idee oder das gleiche schonmal realisiert?

Vielen Dank im Vorraus!

Andreas

Selber habe ich das nicht gemacht, aber als Idee:

  • Bild mit Timestamp benennen
  • Beim speichern die IPS-ID von IPS geben lassen
  • und die letzten 2 ID in Variablen speichern…

Ob das funzt weiss ich nicht…

ich schreibe mir die Klingelbilder per ftp in einen geschützten Bereich meiner Domain
Vorteil: kann von unterwegs draufzugreifen ohne Port zu öffnen.

Hallo,

ich speichere die Bilder im cams Verzeichnis und kopiere die eins nachdem anderen ins media Verzeichnis, unter den gleichen Namen.
Das File im media Verzeichnis lasse ich mir im WF anzeigen.
Das funktioniert eigentlich ganz gut.
Hier das Script:

<?
$srcdir = IPS_GetKernelDir()."cams\\";
$destdir = IPS_GetKernelDir()."media\\";
$files = (scandir(IPS_GetKernelDir()."cams"));
//print_r($files);
$cnt = count($files)-3; //Punkt, Doppelpunkt und cgi file abziehen
//echo $cnt;
//$output = array_slice($files, 3, $cnt+1);
$output = array_slice($files, 3);
//print_r($output);
foreach ($output as $file)
{
copy($srcdir.$file, $destdir."cambild.jpg");
sleep(2);
}
?>

Hallo Michael,

deine Idee gefällt mir sehr gut!
Wie stellst du fest, welches Bild das neuste ist?

Hallo Isi,

die werden vom Dateinamen entsprechend Datum/Uhrzeit schon sortiert gespeichert, sodaß ich sie nur noch der Reihe nach kopieren muß.
Hier das Script zum ablegen. Ich bastel auch noch den Timestamp in jedes Bild.

<?

if ($_IPS['SENDER'] == "Variable")
{
	SetValueString(24309 /*[System\LAST_MESSAGE]*/,"Klingel");
   SetValueString(25921 /*[System\LastAlarm]*/,Date("d.m.Y")." ".Date("H:i:s")."h  >".chr(9)."Klingel");
	HM_WriteValueBoolean(52605/*[SIGNAL_CHIME]*/,"STATE",true);		//Gong im Wintergarten starten

WFC_SwitchPage(22159 /*[Touch]*/, "item9399");

	// Dateiname und Einblendtext festlegen
	$text = date("d-m-Y H:i:s");
	$datei = IPS_GetKernelDir()."cams\\cam".date("ymd_His").".jpg";

	// Bild von Kamera holen
	$file = "http://192.168.1.239/snapshot.cgi?user=yyy&pwd=xxx";
	$handle = fopen ($file, "r b");
	$img = stream_get_contents($handle);
	fclose($handle);

	// Bild von String in Image einlesen
	$img = imagecreatefromstring($img);

	// Grösse des Bildes bestimmen
	$width = imagesx($img);
	$height = imagesy($img);

	// Farben definieren
	$black = imagecolorallocate($img, 0x00, 0x00, 0x00);
	$white = imagecolorallocate($img, 0xff, 0xff, 0xff);

	// Schwarze Fläche als Texthintergrund
	imagefilledrectangle($img, 0, $height, 155, $height-30, $black);

	// Path to our ttf font file
	$font_file = 'c:\\windows\\fonts\\arial.ttf';

	// Text ins Bild schreiben
	imagefttext($img, 10, 0, 10, $height-10, $white, $font_file, $text);
	// Bild als jpg speichern
	imagejpeg($img, $datei);
	// Bild fürs Dashboard in ./media speichern
	imagejpeg($img, IPS_GetKernelDir()."media\\cambild.jpg");
	// Speicher freigeben
	imagedestroy($img);
}

?>

Danke Michael!

Werd ich am Wochenende mal testen.

Jens

@Ransi

Super umgesetzt!:rolleyes:

Das 2. Skript zum Erstellen der Bild im cam Verzeichnis funktioniert bei mir und es liegen schon mehrere Dateien dort.

Das 1. Skript zum kopieren in den Mediepool läuft bei mir ohne Fehler durch, im Medienpool ist aber weiterhin nur das eine cambild.jpg sichtbar…
Hast du eine Idee was ich falsch gemacht haben könnte?

copy($srcdir.$file, $destdir.„cambild.jpg“);

Das kopiert doch immer auf die selbe Datei, oder? Wie kann man denn dann eine Historie anzeigen???

Danke und Gruß,

Hi,

ich weis nicht was du unter Historie erwartest.

Durch das kopieren auf immer die gleiche Datei wird im WF das Klingelbild alle 2sec. durch das nächste überschrieben.
Die Bilder werden sozusagen durchgeblättert.

Mit einem anderen Script lösche ich dann bei Bedarf alle älteren Bilder.

Durch das kopieren auf immer die gleiche Datei wird im WF das Klingelbild alle 2sec. durch das nächste überschrieben.
Die Bilder werden sozusagen durchgeblättert.

Achsooooo, du hast dann also einen Event (z.B. jede Sekunde) auf dem 1. Skript???

Könntest du mal bitte das Löschskript auch mit reinlegen? Danke!

nein, kein Event, siehe WF Bild.
Ich habe die zwei Scripte, zum ansehen und zum löschen mit auf der Seite mit dem Bild. Da drücke ich dann bei Bedarf drauf.
Wenn es klingelt wird das WF aber schonmal auf die Seite geschaltet

Das Script gibts heute abend.

<?
$dir = IPS_GetKernelDir()."cams/"; // Bilderverzeichnis
$files = (scandir($dir));
//print_r($files);

$yesterday = strtotime("-1 day");   //files die älter als zwei Tage sind sollen gelöscht werden
//echo $yesterday."\r";
$yesterday = date("ymd",$yesterday);
$today = date("ymd");
//echo $yesterday."\r";
//echo $today."\r";
foreach ($files as $file)
 {
	if (strpos($file, $yesterday)===false and strpos($file, $today)===false)  //wenn Namensübereinstimmung
	{
//		echo $file."\r";
		@unlink($dir.$file);  //Datei löschen
	}
 }
?>

Also ich kann das so nicht einfach übernehmen, weil ich nicht direkt von meiner Cam die Bilder beziehen kann.
Wenn die Bewegungserkennung anschlägt, werden automatisch 2-7 Bilder per FTP auf meinen Server geladen.

Wenn ich jetzt erkennen könnte, dass neue Bilder in den Ordner geladen werden, so könnte ich automatisch bei Bewegung das aktuellste Bild in den Medienpool Laden und Anzeigen.
Dazu fehlt mir aber noch etwas das Wissen.
Aber ich bin hier ja bestens aufgehoben, und freu mich schon auf eure Vorschläge :wink:

Grüße Jens

Danke schonmal für deine tollen Skripte!:wink:

Könntest du mir noch verraten, wie du das realisiert hast?:

Wenn es klingelt wird das WF aber schonmal auf die Seite geschaltet

Geht mit „WFC_SwitchPage“. :wink: