Niederschlagsradar automatisch aktuell halten

Hallo,

Ich hoffe in diesem Unterforum bin ich richtig.

Ich habe folgendes Problem:
Ich habe das Niederschlagsradar als Steam (MJPEG) eingebunden. Quelle ist diese URL:
http://www.niederschlagsradar.de/image.ashx?type=blitz&jaar=&regio=homepage&tijdid=201611280839&time=&bliksem=0

Das Ganze wird im Web-Front auf einen Raspi mit Firefox im Kioskmode angezeigt.
Nur leider aktuallisiert sich der Stream nicht automatisch. Das heisst es wird immer die gleiche Zeitschleife gezeigt.

Es wird nur aktualisiert, wenn ich durch einen Neustart des Rasp die Seite neu lade. Natürlich geht es auch, wenn ich den Symcon-Server neu starte oder ich auf einen anderen View und wieder zurück schalte (damit triggere ich ja einen Reload der Seite). Leider ist das keine Lösung, da auf diesem Display praktisch ständig nur ein View angezeigtw werden soll.

Wie kann ich erreichen, dass trotz ständig geöffnetem View im Webfront die Darstellung des Niederschlagsradars regelmässig aktualisiert wird?

Du hast das Häkchen und die Einstellung bei Intervall vergessen?!

Bin nicht sicher wo ich das setzten soll.
Im WebFront Konfigurator steht bei Intervall jedenfalls 300s

Einfach alle x Minuten per Script die URL neu in das Medienobjekt schreiben:
IPS_SetMediaFile — IP-Symcon :: Automatisierungssoftware

IPS ‚macht‘ mit dem Medienobjekt nichts automatisch.
Es bindet lediglich im WebFront den externen Stream ein.
Das Laden des Stream, sowie die Darstellung machen die Browser.
Somit wird beim Seitenwechsel im WebFront immer ein aktueller Stream angezeigt, da der Browser die Verbindung neu aufbaut.
Durch das setzen der URL kannst du dies erzwingen.
Michael

Das funktioniert leider auch nicht.

<?
$RadarURL = "http://www.niederschlagsradar.de/image.ashx?type=blitz&jaar=&regio=homepage&tijdid=201611280839&time=&bliksem=0";
IPS_SetMediaFile ( 48633 /*[Niederschlagsradar]*/, $RadarURL, true );
?>

Was seltsam ist:
Im Objektbaum wird unter der Spalte „Aktualisiert“ immer „01:00:00“ angezeigt.

Hmm, geht wohl erst ab Version 5.
Der Stream wird übrigens im Inhaltswechsler angezeigt.

Das müsste daran liegen, da du immer den gleichen String reinschreibst, wird nichts aktualisiert. Versuche mal IPS_SendMediaEvent(12345);
Gruß
Tom

Gesendet von iPhone mit Tapatalk

Nein, tut es nicht.
Selbst wenn ich direkt in der Konsole den String ändere und bestätige wird die Zeit nicht geändert.

Ich bin mir bewusst, dass die URL ein (altes) Datum enthält. Das tut aber nichts zur Sache, wenn man die URL aufruft, bekommt man immer das aktuelle Bild.

Ich denke das ist das Grindprblem. Wenn hier der „Aktualisiert“-Wert nicht geändert wird, wie soll das Web-Interface dann merken, dass etwas aktualiserit wurde. Daher wird auch eine Reload getriggert.

Ich triggere jetzt als Workaround 1x die Stunden einen komplettet Reload des WebInterfaces mit WFC_Reload. Das ist allerdings blöd, weil das auf dem Raspi echt 30-60 Sekunden lang dauert.

Und wenn Du den Teil der URL, der das Datum enthält, bei jedem Aufruf änderst? Stichwort „Date“…

Grüße
galleto

Das macht keinen Unterschied. Es liegt nicht an der URL sondern daran, dass bei einer Änderung jeglicher Art kein Reload getriggert wird.

Ich meinte schon hier:
niederschlagsradar.png

Funktioniert bei mir seit Jahren über diesen Link:
http://www.niederschlagsradar.de/image.ashx?type=regioloop&regio=erf&j=&m=&d=&mi=&uhr=&bliksem=0&voor=&srt=loop1stunde

Wird aber wenn die URL sich aufgrund des Timestamp ändert. :wink:
Michael

Ich benutze den Inhaltswechsler und damit kannst du nur „Medien“ einfügen.

WebFront:

Konsole:
konsole.jpg

Auch eine Änderung der URL triggert keinen Reload der Grafik.

Bei keinem meiner Steams (siehe Zeitstempel unter aktualisiert):

Das kann ja wohl nicht so gewollt sein…?!?

Der Browser lädt den Stream nicht IPS.
Somit ist das mit dem Zeitstempel schon richtig.
Michael

Darüber kann man sicher streiten. Mein Verständnis ist, dass Symcon den Stream lädt und dann dem Browser zur Verfügung stellt, so wie bei allen Items unter „Medien“.

Selbst wenn das nicht so wäre, könnte da zumindest die Uhrzeit stehen wan die URL zuletzt geändert wurde.

Aber das sind ja alles nur Nebenkriegsschauplätze. Fakt ist, es funktioniert nicht. Die vorgeschlagen Tipps helfen auch nicht, bis auf das forced reload the kompletten Web-Interfaces.

Kann man sich nicht drüber streiten.
Ein Blick in die Doku reicht. Man muss verstehen was da im blauen Rahmen steht.
Streams — IP-Symcon :: Automatisierungssoftware
IPS macht kein Routing.
IPS dekodiert auch keinen Stream oder encodiert ihn neu.
Entwicklerkonsole vom Browser öffnen und du sieht wann dein Browser den Stream lädt.
Michael

Im blauen Rahmen steht:

Sofern der Stream auch von Extern erreichbar sein soll, müssen die entsprechenden Freigaben/Portweiterleitungen eingerichtet sein!

Was hat das denn mit dem Problem zu tun? Ich bin ja intern.
Auf der ganzen Seite die du verlinkt hast steht bei mir gar nichts was deine Aussagen untermauert.

Aber ist ja auch egal, ich bin ja nicht hier um zu streiten, sondern um Hilfe bei meinen Problem zu bekommen.
Ich stelle fest: Es gibt keine.

So negativ würde ich das jetzt nicht sehen :p.

Es wird ein Scripttimer gesetzt und das Media Objekt angelegt. Das kannst du dann ins WebFront verlinken.

Mein kurzer Test gerade hat es ohne Reload aktualisiert.


<?

$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 Image zur Anzeige holen
$remoteImage = 'https://www.niederschlagsradar.de/image.ashx?type=blitz&jaar=&regio=homepage&tijdid='.$year.$month.$day.$time.'&time=&bliksem=0';
$filepath = 'media/dwd_regenradar_ani.gif';   
$localImage = IPS_GetKernelDir().$filepath;

if (!readURLwriteLOCAL($remoteImage, $localImage))
	echo "Fehler beim holen von dwd_regenradar_ani.gif";

// Anlegen eines neuen Links mit dem Namen, wenn noch nicht vorhanden
$MediaID = @IPS_GetMediaIDByFile($filepath);
if ($MediaID == 0) {
	$MediaID = IPS_CreateMedia(1);                  // Image im MedienPool anlegen
	IPS_SetMediaFile($MediaID, $localImage, true);   // Image im MedienPool mit Image-Datei verbinden
	IPS_SetName($MediaID, "dwd_regenradar_ani.gif"); // Medienobjekt benennen
	IPS_SetParent($MediaID, $_IPS['SELF'] ); // Medienobjekt einsortieren unter aktuellem Script 
} else {
	IPS_SendMediaEvent($MediaID);
}

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;
			}
		}
	}
}

?>

Deine URL ist alt, DWD hat auf https umgestellt. Dorthin wird zwar weitergeleitet, aber eventuell hakt das irgendwo.

Hallo Ralf,

Zunächst mal Danke für Deine Hilfe und den Code. Ich werden den am Wochenende mal testen.

Was mich bei Symcon aber etwas in den Wahnsinn treibt ist, dass man für so eine einfache Sache 2 Seiten Code braucht.
Anstatt direkt im WebInterface zu sagen: „Hier ist eine URL zu einem GIF, lade die bitte alle 5 Minuten neu und stelle sie dar“

OK, du fängst hier alle Fehler ab und legts auch das Medienobjekt an, aber trotzdem: Es sollte nicht so kompliziert sein, wie es ist. Das finde ich absolut Userfeindlich.

Zu deinem Skipt: Sehe ich das richtig, dass du einfach nur das Datum der URL anpasst? Warum geht das nicht, wenn ich das manuell in meinen 2-Zeilen Skript mache und es dann ausführe?

Hallo Ralf,

Potzblitz!!! Dein Skrip scheint bei mir tatsächlich zu funktionieren und das Problem zu lösen :slight_smile:
Vielen Dank.

Ich hoffe, dass sich das Symcon Team der Vereinfachung trotzdem mal annimmt.