Medienverwaltung, ich drehe durch! Einfach ein Bild speichern und anzeigen?

Moin…

… ich versteh den ganzen IPS_GetMedia, SetMedia, SetMediaCached etc. nicht mehr und komme nicht weiter.
Ich hatte ein Skript unter der 3.4 welches mir ein Bild von einer Webcam abholt, in den Media-Ordner speichert und dieses konnte ich mir ins Webfront verlinken. Diese funktioniert nicht mehr.

Ich komme einfach nicht weiter, mir dieses Bild wieder als Media Objekt zu speichern und zyklisch zu aktualisieren.
Warum ist das so kompliziert? Ich habe mir jetzt eine Stunde die Doku zu Medienverwaltung angeschaut und ich
verstehe es einfach nicht.
Ich bekomme nur leere Mediaobjekte angezeigt.
Das Problem ist, das ich den ImageGrabber nicht nutzen kann und somit das Medien-Objekt selbst anlegen muss.

Das war mein Skript bis 3.4 und mein kläglicher Versuch diese Bild zu speichern:

<?php
 $ip = "192.168.1.28";
 $ping = Sys_Ping($ip,500);
 if ($ping == true)
 {
   IPS_Sleep(500);
   #$string = Sys_GetURLContent("http://".$ip."/bin/cgi-bin/hi3510/param.cgi?cmd=snap&-chn=1&-continue=0&-getpic");
 	$string = Sys_GetURLContent("http://".$ip."/web/cgi-bin/hi3510/param.cgi?cmd=snap");
 	$newstring = str_replace(' ','',$string);
 	$newstring = str_replace('varpath="','',$newstring);
 	$newstring = str_replace('"','',$newstring);
 	$newstring = trim($newstring);
 	#echo $newstring;
 	#$contents= file_get_contents("http://".$ip."/bin/cgi-bin/hi3510/param.cgi?cmd=snap&-chn=1&-continue=0&-getpic");

	$content= file_get_contents("http://".$ip.$newstring);
 	$savefile = fopen("IPS_GetKernelDir\media\Carport.jpg", "w");
 	fwrite($savefile, $content);
 	fclose($savefile);

   #$ImageFile = "http://".$ip.$newstring;  // Image-Datei
   #$MediaID = IPS_CreateMedia(1);
   #IPS_SetMediaCached($MediaID, true);           // Image im MedienPool anlegen
   #IPS_SetMediaFile($MediaID, $ImageFile, true);

 	IPS_LogMessage('WEBCAM SKRIPT:','Webcam Bild abgeholt.');
 }
 else
 {
	IPS_LogMessage('WEBCAM SKRIPT:','FEHLER: Webcam nicht erreichbar');
	return;
 }
?>

HIIIIIIIIIIIILLLLLFFFE,
Peter :confused:

Vielleicht fehlt dir diese Funktion.
IPS_SetMediaContent — IP-Symcon :: Automatisierungssoftware
Du nimmst den content und schiebst ihn base64 codiert direkt in die MediaID.
Voraussetzung ist, dass dein Medienobjekt existiert und auf eine Datei zeigt.
Und nach dem setzen des Content musst du noch IPS_SendMediaEvent — IP-Symcon :: Automatisierungssoftware aufrufen.
Michael

Wie gesagt, ich versteh es nicht. Die Doku habe ich mir rauf und runter abgeschaut.
Auch die Beispiele dort helfen mir nicht.
Was soll zum Beispiel bei SetMediaContent das „R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs“?

Ich habe den String wo ich das Bild bekomme und möchte das in ein Media-File haben.
Warum ist das so kompliziert?

Gesendet von iPhone mit Tapatalk

Ist jetzt etwas aus dem Zusammenhang gerissen, Aber so funktioniert es.
Ich hoffe mein Telefon kopiert das hier jetzt sinnvoll :wink:
Den erste Teil kannst du vergessen, wenn du schon ein MedienObjekt hast.
Eigentlich sind nur die letzten zwei Zeilen wichtig.
SetMediaEvent braucht man wohl doch nicht (außer im Dashboard).


$CoverID = @IPS_GetObjectIDByIdent('CoverIMG', 12345);

if ($CoverID == false) { 
$CoverID = IPS_CreateMedia(1);
 IPS_SetParent($CoverID, 12345);
 IPS_SetIdent($CoverID, 'CoverIMG');
 IPS_SetName($CoverID, 'Cover');
 IPS_SetPosition($CoverID, 27);
 IPS_SetMediaCached($CoverID, true);
 $filename = "media" . DIRECTORY_SEPARATOR . "Cover_12345.png";
 IPS_SetMediaFile($CoverID, $filename, False); 
}
$CoverRAW = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . "nocover.png");
 IPS_SetMediaContent($CoverID, base64_encode($CoverRAW)); 

Michael

Danke Michael,
hab es mit deiner Hilfe und bissel Anpassung hinbekommen.

Gruß,
Peter

Das wäre auch mal ein schönes Modul… Ist wirklich immer sehr kompliziert, ein einfaches Bild irgendwo hin zu speichern und anzeigen zu lassen…

Gesendet von meinem JY-S3 mit Tapatalk

Äh… Kürzer geht es auch mit einem Modul nicht.
Außerdem wäre der ImageGrabber immer die erste Wahl.
Überhaupt sollte man auf Dateizugriffe verzichten, gerade in Zeiten von Symbox, Ubuntu, MacOS baut man eher Fehler ein oder es läuft nicht unter jedem IPS 4.
Michael