Projekt: Video Organisation und Aufbereitung für das Web von einer Webcam V1.0 (ALTE VERSION!) - lediglich als Archiv noch Online.

Wieso "Video Aufbereitung" und "Organisation" ? Was soll das ?

Hintergrund : Man hat eine tolle Netzwerk Kamera, die bei "Alarm" oder Bewegungserkennung alles aufzeichnet und Bilder sichert. Entweder auf einem FTP Server oder auf einer internen Speicher oder MicroSD Card (je nach Modell). Bei Sicherung der Bilder auf einer SD Karte ist meist die Gefahr das jemand die Kamera findet und die Speicherkarte entfernt - so hat man keine Aufnahmen. Oder die Aufnahmen werden auf einem FTP Server gesichert, aber da fallen mitunter ganz schöne Datenmengen an - wo soll man das alles Speichern - und wann soll wer was löschen ?

Die Lösung:

Ein Raspberry Pi mit einer großen Speicherkarte wo ein FTP Server drauf läuft. Die Netzwerk Kamera(s) übermittelt die Bilder und Videos per FTP auf die Speicherkarte des Raspberry Pis, der irgendwo im Netzwerk hängt, nicht unbedingt dort wo auch die Kamera ist. Aber auch hier fallen mitunter ziemliche Datenmengen an, das muss also organisiert werden. Ein Cronjob auf dem Raspberry Pi ruft alle 10 Minuten ein PHP Script auf , welches die Bilder und Videos in passende Datumsordner weg sortiert. Es rechnet die Bilder für die Webvorschau klein, erstellt ein Vorschaubild des Videos und bereitet so den Weg für eine sehr schnelle sortierte Webvorschau. Weiterhin lässt sich die Archivdauer einstellen, so kann man sagen das nach z.b. 14 Tagen die ältesten Aufnahmen automatisch gelöscht werden - so läuft das ganze ziemlich autark und rund ohne das man sich darum kümmern muss.

Das zweite Script kann direkt im Browser aufgerufen werden und zeigt einem "schön" einfach alle Aufnahmen des Tages an, und bietet die möglichkeit das Bilder und Video Archiv zu durchforsten. Weiterhin werden Infos über den vorhandenen Speicherplatz die Auslastung des Raspberry Pis und die Betriebstemperatur ausgelesen und angezeigt

Wie sieht es in etwa aus ?

Am oberen Rand sieht man das komplette Archiv nach Datum sortiert, der Tag an dem rebootet wurde wird extra gekennzeichnet um einen Überblick zu haben. Der Life Button ist Rot und ermöglicht einen direktzugriff auf das Lifebild. Der grüne, rote und blaue Balken zeigen die Systemauslastung, den freien Speicherplatz und die CPU Temperatur an. Darunter sieht man die Anzahl der RaspBilder/Videos, das aktuelle Datum und die jeweilige Datenmenge...

Dann fangen ungefähr nach Uhrzeit sortiert die Filme und Bilder an, die man jeweils direkt anklicken kann und sofort zugriff drauf bekommt.

Was ist nötig ?:

Man braucht "avconv", den Installiert man mittels:

 

sudo apt-get install avconv

 

und dann noch

 

sudo apt-get install libav-tools

 

Weiterhin sollte man eine recht große SD Karte wählen, oder einen passenden USB Stick einbinden. Ich verwende hier eine 128 GB SD Karte die bisher Ausfallfrei läuft. An Datenmengen fallen hier ca 1 GB Video/Foto Daten am Tag an (Full HD).

Die Netzwerk Kamera sollte die Bilder und Videos im folgenden Format in dem FTP-Ordner "RaspberryPI-IP"/ftp/Kamera_1" speichern, und zwar unter folgenden Filenamen:

Bild_2014-08-22xxxxxx.jpg und Film_2014-08-22xxxxxxxx.mov, bei vienen Kameras kann man ja einstellen wie der Filename lauten soll - deswegen habe ich es hier so eingestellt. Wenn meine zweite Netzwerk Kamera geliefert wird werde ich dieses Script wohl erweitern und es Filenamen unabhängig umprogrammieren.

Also Bild_ oder Film_ gefolgt vom Jahr-Monat-Tag. Zumindest sind die Scripte darauf abgestimmt und funktionieren so perfekt. Wer es anders hat muss es eben selber anpassen - ein bischen mitdenken kann man ja auch erwarten.

Hier die Scripte:

PHP Script1: /var/www/AufnahmenOrganisieren.php

 

<?php
//Wie Lange die Aufnahmen aufheben ?
$Aufhebedauer=40; // Anzahl der Tage eintragen, die dann aufgehoben werden.

$ordner="ftp/Kamera_1";
$tmpordner="ftp/temp";
// Ab hier nichts ändern:

//Überprüfen ob Aufnahmen älter als 1 Tag, dann lösche die Aufnahmen
date_default_timezone_set('Europe/Berlin');setlocale(LC_TIME, "de_DE");ini_set('max_execution_time', 500);
if ($Aufhebedauer>=1) {$Aufhebedauer=$Aufhebedauer-1;} if ($Aufhebedauer<0) {$Aufhebedauer=0;}

//Aktuelles Datum
$datum_heute=date("Y-m-d"); $datum_aktsec=strtotime(date($datum_heute));

//Datum Entsprechend der Aufhebedauer zuvor berechnen
list($jahr,$monat,$tag)=explode('-',$datum_heute);
$timestamp = mktime(0,0,0,$monat,$tag-$Aufhebedauer,$jahr);
$datum_Loeschen=date('Y-m-d',$timestamp); $datum_presec=strtotime(date($datum_Loeschen));

//Dateien aus dem Kamera Ordner einlesen

$alledateien = scandir($ordner); //Ordner "files" auslesen
foreach ($alledateien as $datei) {

if (is_dir($datei)==false) {

//Datum des jeweiligen Files feststellen
$filedatum=date("Y-m-d", filemtime($ordner."/".$datei));

//Ordner erzeugen
if (!file_exists($ordner."/".$filedatum)) { shell_exec("mkdir ".$ordner."/".$filedatum); } //Ordner erstellen

//File in Ordner bewegen
if (file_exists($ordner."/".$filedatum)) {
if (is_dir($ordner."/".$datei)==false) { //Ist die Datei ein Ordner ? dann nicht verschieben
shell_exec("mv ".$ordner."/".$datei." ".$ordner."/".$filedatum."/".$datei);

//Bilder kleinrechnen JPG
if($datei!=str_replace("jpg","",$datei)) {

$bild=$ordner."/".$filedatum."/".$datei;
$bildklein=$tmpordner."/".$filedatum."/".$datei;
$fileuhrzeit=date("H:i:s", filemtime($bild))." Uhr";

if (!file_exists($tmpordner."/".$filedatum)) { shell_exec("mkdir /var/www/".$tmpordner."/".$filedatum); }

if (!file_exists($bildklein)) {

$size = getimagesize($bild);
$src_img = imagecreatefromjpeg($bild);
$dst_img = imagecreatetruecolor(100,75);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, 100, 75, $size[0], $size[1]);
imagejpeg($dst_img, $bildklein);
imagedestroy($src_img);
imagedestroy($dst_img);
}

} // Nur JPG


//MoV Vorschau erzeugen
if($datei!=str_replace("mov","",$datei)) {

$bild=$ordner."/".$filedatum."/".$datei;
$bildklein=$tmpordner."/".$filedatum."/".$datei.".jpg";
$bildtemp=$tmpordner."/".$filedatum."/temp.jpg";
$fileuhrzeit=date("H:i:s", filemtime($bild))." Uhr";

if (!file_exists($tmpordner."/".$filedatum)) { shell_exec("mkdir /var/www/".$tmpordner."/".$filedatum); }

if (!file_exists($bildklein)) {
shell_exec("avconv -i /var/www/".$bild." -frames 1 /var/www/".$bildtemp);


$size = getimagesize($bildtemp);
$src_img = imagecreatefromjpeg($bildtemp);
$dst_img = imagecreatetruecolor(100,75);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, 100, 75, $size[0], $size[1]);
imagejpeg($dst_img, $bildklein);
imagedestroy($src_img);
imagedestroy($dst_img);
}

} // Nur JPG


} } }

if (is_dir($ordner."/".$datei)==true && $datei!=="." && $datei!==".." ) {

//Datum des jeweiligen Files feststellen
$filedatum=$datei;
//Datum in Sekunden umrechnen
$filedatum_sec=strtotime(date($filedatum));
//Vergleichen ob es zu den zu löschenden Dateien gehört

if ($filedatum_sec<$datum_presec) {

$delete=delTree($ordner."/".$filedatum);
$delete=delTree($tmpordner."/".$filedatum);

} } };

function delTree($dir) {
$files = array_diff(scandir($dir), array('.','..'));
foreach ($files as $file) {
(is_dir("$dir/$file")) ? delTree("$dir/$file") : unlink("$dir/$file");
}
return rmdir($dir);
}
?>

 

Zur schnellen Webanzeige kommt jetzt noch das zweite Script dazu. Es wird auch ein LIFE Button für ein Life Bild angeboten, da müsst ihr dann den Link zu eurer Netzwerk Kamera entsprechend anpassen.

Script 2: /var/www/index.php

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Video-Server</title>
<?php $datum= $_GET['Datum'];$x=0;
$aufhebedauer="? Unbekannt";
if (file_exists('AufnahmenOrganisieren.php')) {
$inhalt=file_get_contents('AufnahmenOrganisieren.php');
$pos=strpos($inhalt,"Aufhebedauer="); if ($pos==true) {
$pos2=strpos($inhalt,";",$pos);
$aufhebedauer=substr($inhalt,$pos+13,$pos2-($pos+13));

}}

$bg="236"; // Farbe 1 Dunkel

$bg2="35a"; // Farbe 2 Hell

$bg3="47c"; // Farbe 3 Hell
$bg4="F00"; // Farbe 3 Hell
?>
<style type="text/css">
body,td,th {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size: 10px;
color: #FFF;
}
a:link {
color: #<?php echo $bg; ?>;
text-decoration: none;
color: #000;
}
a:visited {
text-decoration: none;
color: #<?php echo $bg; ?>;
color: #000;
}
a:hover {
text-decoration: none;
color: #fff;
}
a:active {
text-decoration: none;
}

.Grossss {
font-size: 16px;
color: #fff;
}
.zwoelf {
font-size: 12px;
color: #fff;
}
.sw {
font-size: 10px;
color: #000;
}
.eight {
font-size: 8px;
color: #ff0;
}
body {
background-color: #000;
}
.thumb:visited img{border: 1px solid;border-color: #000000;}
.thumb:active img{border: 1px solid;border-color: #000000;}
.thumb img{border: 1px solid;border-color: #000000;}
.thumb:Hover img {border: 1px solid;border-color: #00ff00;}
.thumb2:visited img{border: 1px solid;border-color: #000000;}
.thumb2:active img{border: 1px solid;border-color: #ff0000;}
.thumb2 img{border: 1px solid;border-color: #000000;}
.thumb2:Hover img {border: 1px solid;border-color: #00ff00;}

</style>
</head>
<?php

//CPU Temperatur abfragen
if (file_exists('DATA_CPU_temp.txt')) {
$inhalt=file_get_contents("DATA_CPU_temp.txt");
$inhalt=preg_replace("/[^0-9.]/","",$inhalt);
$CPU=$inhalt." C";}

//CPU Last abfragen
if (file_exists('DATA_CPU_last.txt')) {
$inhalt=file_get_contents("DATA_CPU_last.txt");
$inhalt=preg_replace("/[^0-9.]/","",$inhalt);
$CPUlast=$inhalt." %";}

//Reboot abfragen
if (file_exists('DATA_reboot.txt')) {
$inhalt=file_get_contents("DATA_reboot.txt");
$reboot=$inhalt;}

if ($datum==false) {$datum=date("Y-m-d");}

 

$wochentage = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
$zeit = strtotime($datum);
$Tag= $wochentage[date("w", $zeit)];
if (date("Y-m-d")==$datum) {$Tag=$Tag." (Heute)";}

date_default_timezone_set('Europe/Berlin');setlocale(LC_TIME, "de_DE");ini_set('max_execution_time', 500);
//Dateien aus dem Kamera Ordner einlesen

$ordner="ftp/Kamera_1" ;$Anzahl=count(scandir($ordner."/".$datum));
$tage=count(scandir($ordner));$Anzahl=$Anzahl-2; if ($Anzahl<0) {$Anzahl=0;}

//Freien Speicherplazz
$bytes = disk_free_space("ftp/.");
$si_prefix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' ); $base = 1024;
$class = min((int)log($bytes , $base) , count($si_prefix) - 1); $frei= sprintf('%1.2f' , $bytes / pow($base,$class)) . ' ' . $si_prefix[$class];

//Anzahl gespeicherte Tage:
$alleordner = scan_dir($ordner."/"); $zahl=0;
foreach ($alleordner as $Einzelordner) {
if (is_dir($ordner."/".$Einzelordner)==true) {$zahl=$zahl+1; }
}

?>

<table width="900" border="0" align="center" cellpadding="0" cellspacing="0" background="index_bilder/RahmenOben.png" style="background-color:#<?php echo $bg; ?>;">
<tr>
<td width="10">&nbsp;</td>
<td align="center"></td>
<td width="10"><img src="index_bilder/1x1.png" width="10" height="43" border="0" /></td>
</tr>
</table>
<table width="900" border="0" align="center" cellpadding="0" cellspacing="0" style="background-color:#<?php echo $bg; ?>;" >
<tr>
<td>

 

<center><table width="861" border="0" cellspacing="0" cellpadding="5" align="center"><tr>
<td width="795" align="left">B I L D E R - A R C H I V - ( <?php echo $zahl; ?> von max.<?php echo $aufhebedauer; ?> Tage im Archiv )</td>

</tr></table></center>

 

<?php
if (file_exists($ordner."/")) {

//Alle gespeicherten Tage als Link anzeigen
echo '<center><table width="861" border="0" cellspacing="0" cellpadding="5" align="center" style="background-color:#'.$bg2.';"><tr>'; $r=0; $rr=0;
$alleordner = scan_dir($ordner."/");
foreach ($alleordner as $Einzelordner) {
if (is_dir($ordner."/".$Einzelordner)==true) {

if($pos=strpos($reboot,$Einzelordner)==true) { $vari='<span class="eight"><br>Rebooted</span>';} else {$vari="";}

$r=$r+1; if($r>9) {$r=0; echo '</tr></table></center><center><table width="861" border="0" cellspacing="0" cellpadding="5" align="center" style="background-color:#'.$bg2.';"><tr>';}

if ($datum!==$Einzelordner) {echo '<td style="border:1px solid #'.$bg3.';" style="background-color:#'.$bg2.';"><center><a href="index.php?Datum='.$Einzelordner.'"> '.$Einzelordner.''.$vari.' </a></center></td>';} else { echo '<td style="background-color:#'.$bg3.';"><center><span class="zwoelf">'.$Einzelordner.''.$vari.'</span></center></td>';}

}

}
$r=$r+1; if($r>9) {$r=0; echo '</tr></table></center><center><table width="100%" border="0" cellspacing="0" cellpadding="5" align="center" style="background-color:#'.$bg2.';"><tr>'; }
if ($r==0) {
echo '</tr></table></center>';
echo '<center><table width="861" border="0" cellspacing="0" cellpadding="5" align="center" style="background-color:#'.$bg2.';"><tr>';
echo '<td width="75px" style="background-color:#'.$bg4.';"><center><a href="http://192.168.0.94/en/player/qt_hd.asp?stream=1" target="_blank"><span class="zwoelf">LIFE</span></a></center></td>';}

else {

echo '<td width="75px" style="background-color:#'.$bg4.';"><center><a href="http://192.168.0.94/en/player/qt_hd.asp?stream=1" target="_blank"><span class="zwoelf">LIFE</span></a></center></td>';}

echo '</tr></table></center>';

//Speicheranzeige Optisch
$hundert=128;
$Anteilig=100/$hundert;
$prozent=round($Anteilig*(round(preg_replace("/[^0-9.]/","",$frei))));
echo '<center><table width="861" border="0" cellpadding="0" cellspacing="0" bgcolor="#000000"><tr> <td><table width="'.$prozent.'%" border="0" align="left" cellpadding="0" cellspacing="0" bgcolor="#00ff00"><tr><td>'; if ($prozent>20) {echo '<span class="sw">Freier Speicherplatz: '.$frei;} else {echo '<span class="sw">|'.$prozent.' %</span>';} echo '</span></td></tr></table>';
if ($prozent<=20) {echo 'Freier Speicherplatz: '.$frei;} else {echo '|'.$prozent.' %';} ;
echo'</td></tr></table></center>';

//Temperaturanzeige Optisch
$hundert=100;
$Anteilig=100/$hundert;
$prozent=round($Anteilig*(round(preg_replace("/[^0-9.]/","",$CPU))));
echo '<center><table width="861" border="0" cellpadding="0" cellspacing="0" bgcolor="#000000"><tr> <td><table width="'.$prozent.'%" border="0" align="left" cellpadding="0" cellspacing="0" bgcolor="#ff0000"><tr><td>'; if ($prozent>20) {echo '<span class="sw">CPU-Temperatur: '.$CPU;} else {echo '<span class="sw">|'.$prozent.' °C</span>';} echo '</span></td></tr></table>';
if ($prozent<=20) {echo 'CPU-Temperatur: '.$CPU;} else {echo '|'.$prozent.' °C';} ;
echo'</td></tr></table></center>';

//CPU Last Optisch
$hundert=100;
$Anteilig=100/$hundert;
$prozent=round($Anteilig*(round(preg_replace("/[^0-9.]/","",$CPUlast))));
echo '<center><table width="861" border="0" cellpadding="0" cellspacing="0" bgcolor="#000000"><tr> <td><table width="'.$prozent.'%" border="0" align="left" cellpadding="0" cellspacing="0" bgcolor="#0000ff"><tr><td>'; if ($prozent>13) {echo 'CPU-Last: '.$CPUlast;} else {echo '|'.$prozent.' %';} echo '</td></tr></table>';
if ($prozent<=13) {echo 'CPU-Last: '.$CPUlast;} else {echo '|'.$prozent.' %';} ;
echo'</td></tr></table></center>';

 

 

$dir = $ordner."/".$datum;

function get_size($path,$size)
{
if(!is_dir($path))
{
$size+=filesize($path);
}
else
{
$dir = opendir($path);
while($file = readdir($dir))
{
if(is_file($path."/".$file))
$size+=filesize($path."/".$file);
if(is_dir($path."/".$file) && $file!="." && $file!="..")
$size=get_size($path."/".$file,$size);
}
}
return($size);
}

$size = get_size($dir,0);
$measure = "Byte";
if ($size >= 1024)
{
$measure = "KB";
$size = $size / 1024;
}
if ($size >= 1024)
{
$measure = "MB";
$size = $size / 1024;
}
if ($size >= 1024)
{
$measure = "GB";
$size = $size / 1024;
}
$size = sprintf("%01.2f", $size);

?>
<br><center><span class="Grossss"><?php echo $Anzahl; ?> Aufnahmen vom <?php echo $datum.' - '.$Tag." / ".$size . " " . $measure; ?></span></center>
<br><center><table width="861" border="0" cellspacing="0" cellpadding="5" align="center"><tr>
<td align="left"><span class="Grossss">...bis <?php echo date("H:i"); ?> Uhr</span></td>
</tr></table></center>

<center><table width="861" border="0" cellspacing="0" cellpadding="0" align="center" background="index_bilder/Bluefade.png" ><tr>
<td><img src="index_bilder/1x1.png" width="1" height="10" border="0" /></td>
</tr></table>

<?php





$alledateien = scan_dir($ordner."/".$datum); $abzug=0;$fileuhrzeitm=23;$xx=0;

 

foreach ($alledateien as $datei) {


if (is_dir($datei)==false) { // Wenn es kein Ordner ist weiter...
if ($x==0) { echo '<table width="861" border="0" align="center" cellpadding="0" cellspacing="5"><tr>'; }

if($datei!=str_replace("jpg","",$datei)) { //Ist es ein JPG Bild ?

$bild=$ordner."/".$datum."/".$datei;
$bildklein="ftp/temp/".$datum."/".$datei;
$fileuhrzeit=date("H:i:s", filemtime($bild))." Uhr";

if (!file_exists("ftp/temp/".$datum)) { shell_exec("mkdir /var/www/ftp/temp/".$datum); }

if (!file_exists($bildklein)) { //Bild für die Schnelle Webvorschau umrechnen und in TMP Ordner schieben.

$size = getimagesize($bild);
$src_img = imagecreatefromjpeg($bild);
$dst_img = imagecreatetruecolor(100,75);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, 100, 75, $size[0], $size[1]);
imagejpeg($dst_img, $bildklein);
imagedestroy($src_img);
imagedestroy($dst_img);
}

//Simple Webvorschau
$link= '<a href="'.$bild.'" target="_blank" class="thumb"><img src="'.$bildklein.'" width="100" height="75" border="1"/></a>';
$tabbild= '<table width="102" border="0" cellspacing="0" cellpadding="0" style="background-color:#'.$bg2.';" align="center"><tr><td align="center" valign="middle" style="background-color:#'.$bg2.';">'.$link.'</td></tr><tr><td align="center" valign="middle">'.$fileuhrzeit.'</td></tr></table>';

echo '<td width="102">'.$tabbild.'</td>';
} // Ende Nur JPG Bilder




if($datei!=str_replace("mov","",$datei)) { // Ist es ein Video File ?
if (!file_exists("ftp/temp/".$datum)) { shell_exec("mkdir /var/www/ftp/temp/".$datum); }
//Simple Webvorschau
//avconv -i /var/www/ftp/Kamera_1/2014-07-21/Film_2014-07-21_21-51-55.mov -frames 1 /var/www/test.jpg
//Vorschaubild des Videos vorhanden ?
$bild=$ordner."/".$datum."/".$datei;
$bildklein="ftp/temp/".$datum."/".$datei.".jpg";
$fileuhrzeit=date("H:i:s", filemtime($bild))." Uhr";
if (file_exists($bildklein)) {
//existiert ein Bild, zeige es an...
$link= '<a href="'.$ordner."/".$datum."/".$datei.'" target="_blank" class="thumb2"><img src="index_bilder/Video_Titel.png" width="100" height="75" border="1"/></a>';
$tabbild= '<table width="102" border="0" cellspacing="0" cellpadding="0" background="'.$bildklein.'" align="center"><tr><td align="center" valign="middle">'.$link.'</td></tr><tr><td align="center" valign="middle" style="background-color:#'.$bg2.';">'.$fileuhrzeit.'</td></tr></table>';
} else {
//Alternativ Zeige Standard Bild
$link= '<a href="'.$ordner."/".$datum."/".$datei.'" target="_blank" class="thumb2"><img src="index_bilder/Video.png" width="100" height="75" border="1" /></a>';
$tabbild= '<table width="102" border="0" cellspacing="0" cellpadding="0" align="center"><tr><td align="center" valign="middle">'.$link.'</td></tr><tr><td align="center" valign="middle" style="background-color:#'.$bg2.';">'.$fileuhrzeit.'</td></tr></table>';}

$fileuhrzeit="VIDEO ".date("H:i:s", filemtime($ordner."/".$datum."/".$datei))." Uhr";

echo '<td width="102">'.$tabbild.'</td>';
} // Nur Filme Ende

$x=$x+1;
if ($x>=8) {echo '</tr></table>';$x=0;$xx=$xx+1;

$fileuhrzeit=date("H:i:s", filemtime($bild));
$fileuhrzeit2=date("H", filemtime($bild));
//Datum Entsprechend der Aufhebedauer zuvor berechnen
list($h,$m,$s)=explode(':',$fileuhrzeit);
$timestamp = mktime($h-$abzug,$m,$s,0,0,0);
$Zeit_minus=date('H',$timestamp);



if ($fileuhrzeit2!==$fileuhrzeitm) {$abzug=$abzug+1;
if (($xx*8)<$Anzahl) {

echo '<br><br><center><table width="861" border="0" cellspacing="0" cellpadding="5" align="center"><tr>';
echo '<td align="left"><span class="Grossss">ca.'.$fileuhrzeit2.':00 Uhr </span></td>';
echo '</tr></table></center>';

echo '<center><table width="861" border="0" cellspacing="0" cellpadding="0" align="center" background="index_bilder/Bluefade.png"><tr>';
echo '<td><img src="index_bilder/1x1.png" width="1" height="10" border="0" /></td>';
echo '</tr></table>';

}
}
$fileuhrzeitm=$fileuhrzeit2;



}
}

};echo '</tr></table>';
}
?>

<?php //echo $reboot; ?>

</td>
</tr>
</table>
<table width="900" border="0" align="center" cellpadding="0" cellspacing="0" style="background-color:#<?php echo $bg; ?>;">
<tr>
<td><img src="index_bilder/RahmenUnten.png" border="0" /></td>
</tr>
</table>
<?php
function scan_dir($dir) {
$ignored = array('.', '..', '.svn', '.htaccess');

$files = array();
foreach (scandir($dir) as $file) {
if (in_array($file, $ignored)) continue;
$files[$file] = filemtime($dir . '/' . $file);
}

arsort($files);
$files = array_keys($files);

return ($files) ? $files : false;
}
?>

 

Die folgende Bash Datei "/var/www/Reboot.sh" sorgt dafür das das System rebootet wird und schreibt das als eine Art Logfile in die Datei DATA_reboot.txt. Vor dem Reboot werden die Trashes geleert.

 

#!/bin/bash

rm -rf ~/.local/share/Trash/files/*

y=$(date +%Y)
M=$(date +%m)
d=$(date +%d)
h=$(date +%H)
m=$(date +%M)
s=$(date +%S)
datum0=Reboot:$y"-"$M"-"$d" um "$h":"$m":"$s" Uhr"
echo $datum0 > /var/www/DATA_reboot.txt

sudo reboot

 

Die Datei "/var/www/CPU_WerteAuslesen.sh" liest die Systemtemperatur und die CPU Auslastung aus und schreibt das in die Datei DATA_CPU_last.txt, auch diese Werte werden im PHP Script weiter verarbeitet.

 

#!/bin/bash
#Liest Systemwerte aus

CPUTEMP=$(vcgencmd measure_temp)
echo $CPUTEMP > /var/www/DATA_CPU_temp.txt

CPU=$( top -b -n2 -d1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}' | tail -n1 )
echo $CPU > /var/www/DATA_CPU_last.txt

 

Wenn man diese Dateien alle hat und es auch genug Rohmaterial (Fotos und Videos) gibt, kann man sich nun an die Einrichtung des Cronjobs machen, um das ganze zu automatisieren.

 

sudo crontab -e

 

In diesen Cronjob legen wir jetzt 3 Zeilen folgendermaßen fest:

 
#Aufnahmen Reorganisieren, z.b. alle 10 Minuten das PHP Script aufrufen.
*/10 * * * * /usr/bin/curl "ip"/AufnahmenOrganisieren.php
 
#Einmal pro Woche rebooten...
5 0 * * 6 /bin/bash /var/www/Reboot.sh >/dev/null 2>&1
 
#CPU Werte auslesen (alle Viertelstunde)
*/15 * * * * /bin/bash /var/www/CPU_WerteAuslesen.sh >/dev/null 2>&1
 

Das liesst sich alles komplizierter als es ist. Hier gibt es die kompletten Dateien im Download, einfach nur entpacken, komplett in das Verzeichnis /var/www/ verschieben, evtl anpassen und den Crontab einrichten.

Es kann auch nicht schaden, wenn alles fertig angepasst ist einen

 

sudo chmod 0777 -R /var/www/

 

zu machen um auch passende Schreibrechte für die Scripte zu haben.

Durch aufruf der "index.php" werden die aktuellen Aufnahmen des Tages angezeigt (sofern vorhanden).

Sicherheit:

Für die Sicherheit ist jeder selbst verantwortlich (.htaccess), Bash Dateien gehören z.b. nicht in den www ordner 8-), etc..., aber das kann jeder selbst entscheiden. Bei mir ist der Raspberry nicht vom Internet aus erreichbar, lediglich über ein VPN kann man auf die Daten zugreifen.