So, Teil eins der Aufgabenstellung findet sich hier :D.
Angelehnt an die andere Diskussion bezüglich „niederschlagsradar aktualisiert sich nicht“, hier die Anpassungen zur Ablage der Datei im user-Ordner und entsprechendes Anlegen einen String Variablen mit HTML Code, die in IPSview als HTMLbox eingebunden werden kann.
Da ich unterschiedliche Auflösungen auf meinen Endgeräten habe, aber meistens die gleiche View nutze, funktioniert das Resizen (Modul IPSView Resize) eines „externen“ Images natürlich nicht.
Deshalb nutze ich die Style Tags und passe das Bilder somit selber an die richtige Größe an.
Zusätzliche bzw. komische Ränder sehe ich bei mir nicht, solange das Resize mit gleichen Skalierungen erfolgt. Sonst rechnet das Modul die HTMLbox um und das Bild passt dann eventuell nicht komplett rein.
<?
$debug = false;
//Auf 5 Minuten Takt Synchronisieren
$offset = (integer)date("s") + ((integer)date("i") % 5) * 60;
// Script Tmer entsprechend setzen bzw. anpassen
if($offset != 0) {
IPS_SetScriptTimer($_IPS['SELF'],300 - $offset);
} else {
IPS_SetScriptTimer($_IPS['SELF'],300);
}
//Zeit berechnen
$minute=Floor(date("i") / 5) * 5 - 10;
$dateline=mktime(date("H"), $minute, 0, date("m"), date("d"), date("y"));
$year=gmdate("Y", $dateline);
$month=gmdate("m", $dateline);
$day=gmdate("d", $dateline);
$time=gmdate("Hi", $dateline);
if ($debug)
echo IPS_GetName($_IPS['SELF']), " Zeit: ".$year." ".$month." ".$day." ".$time."
";
// Animiertes DWD Image zur Anzeige holen
$remoteImage = 'https://www.niederschlagsradar.de/image.ashx?type=blitz&jaar=®io=homepage&tijdid='.$year.$month.$day.$time.'&time=&bliksem=0';
$filepath = 'user/dwd_regenradar_ani.gif';
$localImage = IPS_GetKernelDir().'webfront/'.$filepath;
if (!readURLwriteLOCAL($remoteImage, $localImage))
echo "Fehler beim holen von dwd_regenradar_ani.gif";
// HTML code
// img { width: 100%; height: auto }
$content = '
<html>
<head>
<style type="text/css" media="screen">
body { font-family: Arial; margin:0; padding:0; background-color:black; }
img { width: 100%; height: auto }
</style>
</head>
<body scroll="no">
<img src="'.$filepath.'">
</body>
</html>';
// Anlegen eines neuen Links mit dem Namen, wenn noch nicht vorhanden
$VariablenID = @IPS_GetVariableIDByName("dwd_regenradar_ani", $_IPS['SELF']);
if ($VariablenID === false) {
$VariablenID = IPS_CreateVariable(3);
IPS_SetName($VariablenID, "dwd_regenradar_ani"); // Variable benennen
IPS_SetParent($VariablenID, $_IPS['SELF']); // Variable einsortieren unter dem Script
SetValueString( $VariablenID, $content);
} else {
SetValueString( $VariablenID, $content);
}
function readURLwriteLOCAL($remoteImage, $localImage) {
$error = false;
$ch = curl_init($remoteImage);
if ($ch === false) { // fehlgeschlagen
return false;
} else { // erfolgreich, curl handle
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36");;
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$remoteImage = curl_exec($ch);
if (curl_errno($ch)) { // curl Fehler aufgetreten
echo curl_error($ch);
$error = true;
}
curl_close($ch);
if (!$error) { // curl read erfolgreich, Datei schreiben
$result = file_put_contents($localImage, $remoteImage);
if ($result === false) {
echo "Fehler beim Schreiben: ".$localImage;
return false;
} else {
return true;
}
}
}
}
?>
Der HTML Inhalt lässt sich auch ins WebFront einbinden, zerlegt in dieser Form aber den Inhalt. Dafür müsste der HTML Code etwas reduziert werden und nicht der img Tag genutzt werden sondern ein eigenes div.