Problem bei neuer Bildzuordnung

Ich habe irgendwie ein Problem mit der Medienverwaltung. Ich habe ein png was ich unter media ablege.


$image = IPS_GetKernelDir()."media".DIRECTORY_SEPARATOR.$picturename.$currentsnapshotid.".png";  // Raspberry
$MediaID = IPS_CreateMedia(1);                  // Image im MedienPool anlegen
IPS_SetMediaCached($MediaID, true);
IPS_SetMediaFile($MediaID, $image, false);   // Image im MedienPool mit Image-Datei verbinden

nutze ich um ein Media Objekt anzulegen und das Image zuzuordnen. Soweit ist auch alles ok.

Jetzt aktualisiert sich aber das Bild $image im Ordner und ich möchte das sich das Mediaobjekt auch aktualisiert und das aktuelle Image im Webfront angezeigt wird.

Ich probiere das mit:


IPS_SetMediaFile($MediaID, $image, false);   // Image im MedienPool mit Image-Datei verbinden
IPS_SendMediaEvent($MediaID);

aber ohne Erfolg. Irgendwie scheine ich da in der Doku noch etwas übersehen zu haben. Kann mir einer einen Hinweis geben wie ich das Bild in dem Mediaobjekt und Webfront aktualisiert bekomme wenn sich das png ändert?

Eventuell liegt das am Cache? Denn das Bild wird ja nicht neu in den Arbeitsspeicher geladen. Eventuell vor dem Ändern mal den Cache ausschalten und nach dem Aktualisieren wieder einschalten? Nur geraten. :slight_smile:

Wenn du eh immer auf das Dateisystem schreibst, muss der Cache aus.
Oder gleich sinnvoll und mit aktiven Cache IPS_SetMediaContent nutzen.
Schont die SSDs und SD-Karten :slight_smile:
Außerdem entfällt dann das MediaEvent.
Michael

Ich möchte auf alle Fälle die SD schonen. Kannst Du mir da eventuell noch mal auf die Sprünge helfen wie ich das dann am besten mache?

Bisher hole ich mit Curl von einer URL ein Bild, zu dem Zeitpunkt steckt es ja noch im Arbeitsspeicher.
Jetzt schreibe ich mit


// Bild in Datei speichern
file_put_contents($image, $Content);

in das Mediaverzeichnis.
Dann lege ich ein Medienelement an und weise das Image zu


IPS_SetMediaFile($MediaID, $image, false);   // Image im MedienPool mit Image-Datei verbinden

Wie muss ich denn jetzt am besten vorgehen um das Bild nicht erst zwischenzuspeichern und vor allem den Cache von IPS sauber zu nutzten und bei einer Aktualisierung des Bilds dann auch dies im Medienelement aktualisiert zu bekommen? Stehe irgendwie gerade auf dem Schlauch.

Ah und noch eine ergänzende Frage. Ich möchte eine bestimmte Anzahl von Bildern in Medienelementen abspeichern, wenn diese erreicht ist soll wieder von neuem überschrieben werden. Am besten wäre es wenn der neuste Inhalt immer im Medienelement 1 abgelegt wird und die älteren Inhalte dann um eins verschoben werden. Also der Inhalt von Media 1 kommt dann in Media 2 usw. der älteste Inhalt fällt dann weg.

Ich hatte das ja jetzt versucht indem ich die Files die im Verzeichnis legen dann jedes mal neu zuzuordnen. Wie würdet ihr das lösen ohne direkt auf die SD zu schreiben und dabei nur über die Inhalte der Medienelemente zu arbeiten?

Ah ich hab es kapiert :banghead:. Jetzt geht es auch mit der Aktualisierung und ohne auf die Festplatte abzulegen.


IPS_SetMediaContent($MediaID, base64_encode($Content));  //Bild Base64 codieren und ablegen
IPS_SendMediaEvent($MediaID); //aktualisieren

Das Event kannst du jetzt glaube ich auch weglassen das ist nur wichtig wenn sich die Datei ändert.
Michael