Ich habe nun versucht dieses in ein Mediaobjekt zu bekommen. Dem Beispiel aus der Dokumentation folgenden wäre das so:
$ImageFile = xxx("http://192.168.178.20/grab?format=jpg&r=860"); // Image-Datei
$MediaID = IPS_CreateMedia(1); // Image im MedienPool anlegen
IPS_SetMediaFile($MediaID, $ImageFile, true); // Image im MedienPool mit Image-Datei verbinden
IPS_SetName($MediaID, "Alarm"); // Medienobjekt benennen
IPS_SetParent($MediaID, 12345); // Medienobjekt einsortieren unter dem Objekt mit der ID "12345"
Für „xxx“ habe ich diverse PHP-Funktionen getestet (file_get_Contents, fopen, usw.), doch leider funktioniert das so nicht…
Was wäre die richtige PHP-Funktion, um dieses jpg in das Mediaobjekt zu bekommen?
Es wird dabei auch ein Medienobjekt angelegt, es hat a er das rote Ausrufezeichen im Objektbaum, wahrscheinlich weil noch keine Datei hinterlegt ist?
Im zweiten Teil die Funktion, die erst nach Aufruf einen Bild hinterlegen soll:
public function GetScreenshot()
{
$Content = file_get_contents("http://".$this->ReadPropertyString("IPAddress")."/grab?format=jpg&r=860");
$ImageFile = IPS_GetKernelDir()."media".DIRECTORY_SEPARATOR."Screenshot.jpg"; // Image-Datei
IPS_SetMediaFile($this->GetIDForIdent("Screenshot"), $ImageFile, true); // Image im MedienPool mit Image-Datei verbinden
IPS_SetMediaContent($this->GetIDForIdent("Screenshot"), base64_encode($Content)); //Bild Base64 codieren und ablegen
return;
}
Aber: Funktioniert so leider nicht…
Ich vermute mal: zunächst sind die Bilddaten in $content, das File „Screenshoot.jpg“ gibt es noch nicht - kommt eine Warnung. Aber wenn ich versuche das Bild zu öffnen kommt die Fehlermeldung „Bitmap ist ungültig“…
Prima das es geklappt hat, hast den Fehler ja selbst gefunden du hattest true statt false gesetzt und das Bild gibt es ja aber nicht zum Zeitpunkt des Zuweisens. Wenn Du das als Funktion in Deinem Modul nutzen willst würde ich außerdem darauf achten das Du entweder die ident noch seperat übergibst oder aber die ident innerhalb der Funktion aus dem Name errechnest, also mögliche Umlaute und Leerzeichen aus dem Name entfernst. Wenn Du Ident sonst gleich Name setzt läufst Du Gefahr das Du einen schönen Namen vergibst der dann aber nicht für eine Ident gültig ist.
Da gibt es sicherlich noch Verbesserungspotential, war aber dann gestern erst einmal zufrieden weil es lief und zumindest einen Anteil von Übertragbarkeit hat.