Das mit der Anzahl Bilder habe ich gesehen und in der obigen Version korrigiert.
Das mit der Reihenfolge konnte ich nicht feststellen, aber wenn Symcon aus irgendeinem Grund abstürzt kann nicht mehr auf die Bilder zugegriffen werden. Darum habe ich nun auch die Cache-Funktion deaktiviert, sonst sind die Bilder futsch beim abrupten Beenden des Dienstes.
IPS_SetMediaCached($MediaID, false);
Das ist das Script, welches die Reihenfolge korrekt sortiert.
<?php
$Anzahl_Snapshots = GetValueInteger(24200)+1;
$name = "Kamera Einfahrt";
$ident = "InstarEinfahrt";
//Für Instar 9008 FHD
//$Content = file_get_contents("http://Hans:Wurscht@192.168.17.1/tmpfs/snap.jpg");
//Für Instar 9408 FHD WQHD
$Content = file_get_contents("http://192.168.1.1/snap.cgi?chn=11&user=Hans&pwd=Wurscht");
$filename = time(); //Jede Bild mithilfe von Unix Timestamp unterschiedlich bennennen, damit die Bilder krorrekt in IPS WF. bei Neustart zurückgeladen werden
$picturename ="$filename";
//$picturename ="Snapshot Kamera Einfahrt";
$catid = 50614;
$MediaID = IPS_CreateMedia(1); // Image im MedienPool anlegen
IPS_SetParent($MediaID, $catid); // Medienobjekt einsortieren unter Kategorie $catid
IPS_SetIdent ($MediaID, $ident.time()); // Unix Timestamp als Ident setzen
IPS_SetPosition($MediaID, -time()); // Unix Timestamp invertieren, somit wird der letze Snapshot im Webfront als erster angezeigt
IPS_SetMediaCached($MediaID, true);
// Das Cachen für das Mediaobjekt wird aktiviert.
// Beim ersten Zugriff wird dieses von der Festplatte ausgelesen
// und zukünftig nur noch im Arbeitsspeicher verarbeitet.
$ImageFile = IPS_GetKernelDir()."media".DIRECTORY_SEPARATOR."instar".DIRECTORY_SEPARATOR.$picturename.".jpg"; // Image-Datei
IPS_SetMediaFile($MediaID, $ImageFile, False); // Image im MedienPool mit Image-Datei verbinden
$savetime = date('d.m.Y H:i:s');
IPS_SetName($MediaID, $name." ".$savetime); // Medienobjekt benennen
//IPS_SetName($MediaID, $name." ".$i); // Medienobjekt benennen
//IPS_SetInfo ($MediaID, $savetime);
IPS_SetMediaContent($MediaID, base64_encode($Content)); //Bild Base64 codieren und ablegen
IPS_SendMediaEvent($MediaID); //aktualisieren
//Handling Anzahl und Reihenfolge der Snapshots
foreach(IPS_GetChildrenIDs($catid) as $objectID) //Ids ermitteln
{
$object = IPS_GetObject($objectID);
$objectList[$object["ObjectID"]] = $object["ObjectPosition"]; //Id der Snapshots mit den Positionen verbinden, das sollte analog zum Objektbaum sein
}
asort($objectList); // in aufsteigender Reihenfolge sortieren
print_r($objectList); //array ausgeben
$Anzahl = count($objectList);
print_r($Anzahl);
if ($Anzahl >= $Anzahl_Snapshots) {
//Anzahl Bilder welche gelöscht werden müssen
$objectList_del = $objectList; //Array der ID,s und Positionen umkopieren
arsort($objectList_del); //Array absteigend, gegenläufig zu $objectList sortieren
print_r($objectList_del);
$objectList_del2 = array_keys($objectList_del); //Nur keys also die ID, ausgeben weil danach die Medienobjekte identifiziert werden...
print_r($objectList_del2);
$delCount = count($objectList) - ($Anzahl_Snapshots); //Überhang an zu vielen Snapshots errechnen
for ($i = 0; $i <= $delCount; $i++) {
IPS_DeleteMedia($objectList_del2[$i], true); //Überhang an Medienabjekten anhand der ID und des Index rauslöschen.
}
}