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?
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:
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);
}
?>
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???
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