Automatische Aktualisierung einer Web-Seite

Hallo Miteinander,

mal eine Frage an die HTML-Spezialisten hier:
Die Istwerte meiner FHTs würde ich gerne auf einer Web-Seite darstellen. Wie kann ich in HTML/PHP und dem Simple-Webinterface von IPS eine automatische Aktualisierung der Werte entweder bei Wertänderung oder alle z.B. alle 30s erreichen?

Gruß
Dieter

Dieter,

Ein web-browser ist kein ‚push‘ objekt. Also kann der web-server nicht neue werte zum browser schicken. Deshalb brauchts du die seite jede 30s selbst aktualiseren zu lassen.

in die <HEAD> section von die seite soll

<meta http-equiv="refresh" content="30">

stehen. So lad sich der browser jede 30e sekunde die seite neu.

Andere lösung: AJAX sollte es können aber da hab ich mich noch nicht reingearbeitet. Tue mal die suche nach AJAX im forum. Es gibt 2-3 threads die das erklären.

Meine seite: http://brua.gallon.tzo.com:8080/living.php
und hier die source:


<html>

	<head>
		<title>Living</title>
		<!-- IPSwitch PPC/PALM WebInterface -->
		<link href="style.css" type="text/css" rel="stylesheet">
		<meta http-equiv="refresh" content="600">
	</head>

	<body leftmargin="0" topmargin="0" rightmargin="0">
		<table width="100%" cellspacing="0" cellpadding="0">
			<tr>
				<td class="bbig" width="18"><a href="index.php"><img src="ips.gif" alt="IPSwitch Logo" border="0"></a></td>
				<td class="bbig"><? echo date("d.m.y @ H:i"); ?></td>
				<td class="bbig" width="18"><img src="config.gif" alt="Configration"></td>
				<td class="bbig" width="18"><img src="help.gif" alt="Help"></td>
				<td class="bbig" width="18"><img src="logout.gif" alt="Logout"></td>
			</tr>
		</table>
		<table width="100%">
			<tr>
				<td bgcolor="#C8C8C8"><!-- SPACER --></td>
			</tr>
			<tr>
				<td><a href="index.php"> Home </a> · <a href="temp.php"> Heating </a> · Living</td>
			</tr>
			<tr>
				<td bgcolor="#C8C8C8"><!-- SPACER --></td>
			</tr>
		</table>
		<br>
		<?	$sl1 = GetValueFloat("vliv_temp_perc");
			if ($sl1>0) $sl1= "1a";
		?>
		<table width="90%" border="0" cellspacing="2" cellpadding="0">
<tr><td align="middle">Now</td><td align="middle"> basement </td><td align="middle">outside</td></tr>			
<tr class="label">
				<td align="middle">
					<table class="label" width="200" border="0" cellspacing="0" cellpadding="0">
						<tr>
							<td rowspan="4"><img src="images/trliv_perc.png" alt="" height="60" width="10" border="0"></td>
							<td><?echo number_format(GetValueFloat("vliv_temp_perc"),0)."%";?></td>
							<td>ist</td>
							<td align="right"><?echo number_format(GetValueFloat("vliv_temp_ist"),1);?>°C</td>
						</tr>
						<tr>
							<td rowspan="2"><?echo "<img src=\"images/rad_$sl1.gif\""?> alt="" height="34" width="74" border="0"></td>
							<td>soll</td>
							<td align="right"><?echo number_format(GetValueFloat("vliv_temp_soll"),1);?>°C</td>
						</tr>
						<tr>
							<td>state</td>
							<td align="right"><?echo number_format(GetValueFloat("vliv_temp_state"),1);?>°C</td>
						</tr>
                        <tr>
                            <td colspan="3" align="right">last RX : <?echo date("j/n/y G:i:s",IPS_GetUpdateTime("vliv_temp_perc"));?></td>
                        </tr>
					</table>
				</td>
<td align="middle"><? 				$di = sprintf("%08b",VELLEUSB_ReadDigital(55413));
				$pomp1 = "";
				$pomp2 = "";
				$brander = "";
				$net = "";
				if(substr($di,4,1)==0) $pomp2 = "1";
				if(substr($di,5,1)==0) $pomp1 = "1";
				if(substr($di,6,1)==0 && substr($di,7,1) == 0) $brander = "1";
				if(substr($di,7,1)==0) $net = "1";
				?>
					<table class="gfx" width="400" border="0" cellspacing="0" cellpadding="0">
						<tr>
							<td><?echo "out : ".number_format(GetValueFloat("vkel_ketel_tout"),1);?>°C</td>
							<td align="right"><?echo "<img src=\"images/pomp1_$pomp1.gif\"";?> alt="" height="22" width="33" border="0"></td>
							<td align="left"><?echo "<img src=\"images/pomp2_$pomp2.gif\"";?> alt="" height="22" width="33" border="0"></td>
							<td><?echo "out : ".number_format(GetValueFloat("vkel_ketel_tout"),1);?>°C</td>
						</tr>
						<tr>
							<td><?echo "in : " . number_format(GetValueFloat("vkel_ketel_tin"),1);?>°C</td>
							<td colspan="2" align="center"><?echo "<img src=\"images/brandernet_$net.gif\"";?> alt="" height="11" width="66" border="0"></td>
							<td><?echo "in : n/a";?>°C</td>
						</tr>
						<tr>
							<td></td>
							<td colspan="2" align="center"><?echo "<img src=\"images/brander_$brander.gif\"";?> alt="" height="31" width="66" border="0"></td>
							<td></td>
						</tr>
					</table>
				</td>
				<td align="middle">
<table class="label" width="200" border="0" cellspacing="0" cellpadding="0">
						<tr>
							<td rowspan="3"><img src="images/trout_perc.png" alt="outside temp" height="60" width="10" border="0"></td>
							<td></td>
							<td>temp</td>
							<td align="right"><?echo number_format(GetValueFloat("vout_temp"),1);?>°C</td>
						</tr>
						<tr>
							<td rowspan="2"></td>
							<td>press</td>
							<td align="right"><?echo number_format(GetValueFloat("vout_press"),0);?>mB</td>
						</tr>
						<tr>
							<td>humm</td>
							<td align="right"><?echo number_format(GetValueFloat("vout_humm"),0);?>%</td>
						</tr>
					</table>
				</td>
			</tr>
			<tr>
				<td align="middle" colspan="3"><BR>Last 2 hrs graph<BR>	<img src="images/trliv_temp2h.png" alt="" height="168" width="481" border="0"></td>
			<tr>
				<td align="middle" colspan="3"><BR>Last days graph<BR> <img src="images/trliv_tempday.png" alt="" height="168" width="481" border="0"></td>
			</tr>
			<tr>
				<td align="middle" colspan="3"><BR>Last months graph<BR> <img src="images/trliv_tempmonth.png" alt="" height="168" width="481" border="0"></td>
			</tr>
		</table>
	</body>

</html>

Besten Dank,

für deinen Tipp. Mit Firefox klappt es auch schon, aber der IE will noch nicht so recht :frowning:

Gruß
Dieter

Hi Dieter,

das mit dem Meta Tag „refresh“ funktioniert solange du keine Grafiken mit drin hast oder extrem viel Werte anzeigst.
Wenn dem so ist bleibt dir nur Ajax. Bei mir funzt Ajax bis auf das, dass bei jedem Refresh eines Wertes eine Fehlermeldung im IPS Kernel erzeugt wird. Torro ist hier gerade dabei eine Lösung zu finden (ist wohl auch schon gelöst :slight_smile: ), da ich damit an meine Grenzen gestossen bin. Wir werden evtl. morgen das Ganze bei mir auf dem Rechner nochmal angehen da es bei mir mit der neuen Variante noch nicht funzt (User-Error :frowning: ). Wenn wir Erfolg haben, schreibe ich den Code hier rein :wink: (Wenn du möchtest kannst du auch meine jetzige Lösung haben).

Gruß
Thomas

Hallo Thomas,
da sag ich doch nicht nein :slight_smile:
Ich will eigentlich nur die Werte von ca. 10FHTs anzeigen.

Danke!

Gruß
Dieter

Hallo,

bei mir funktioniert es perfekt (also natuerlich in WIIPS). Wo der Fehler nun bei msr_junky ist, muessen wir noch erkunden. Wir verwenden dafuer selbstredend Ajax.

Gruss Torro

meta refresh (erlauben) ist eine Sichereinstellung beim IE (Extras->Internetoptionen->Sicherheit->Stufe anpassen.
Das Problem mit den Grafiken kann sein, das sie den gleichen Dateinamen verwenden und der Browser deshalb die neue Version nicht anfordert. Auch das kann man anpassen (pragma nocache)
Tommi

Hallo,

hier die Lösung für einen Ajax Refresh ohne Fehlermeldung im IPS-Kernel :slight_smile:

Dank Torro wurde der Fehler sehr schnell lokalisiert und behoben.

Hier das Script welches den Wert anzeigt:


<?	
	$error = error_reporting(0);
	require_once("Sajax.php");
	$sajax_debug_mode = 0;
	sajax_init(); // Intialize Sajax

	
	//aktuellen Wert anzeigen
	function show_now() {
          $var = GetValueInteger("BHKW_Drehzahl");  //hier Variable die angezeigt werden soll eintragen
	  $value = sprintf("%2.0f",$var)." U/min";
	   //return Wert
	    return $value;
 	    //return $xml;
 	}
 	
 	sajax_export("show_now");         // aktuellen Wert anzeigen
 	 	
 	    if(sajax_handle_client_request()) { 
	        $exit=true;
 	        return;
 	    } // Serve client in   
 	 	  
 	$ajaxinclude = sajax_show_javascript();
 	
 	error_reporting($error);
?>

<html lang="de">
	<head>
	<title>Testajax</title>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	</head>
	<body  onload="get_value();" >  
	
<script type="text/javascript">
	
	<? echo $ajaxinclude; ?>

	
	    function show_me(Wert) {
	        document.getElementById("Wert_div").innerHTML = Wert;
	        }
	
	        function get_value() {
	        //put the return of php's show_now func
	        //to the javascript show_me func as a parameter
	        x_show_now(show_me);
	        //do it every 5 second
	        setTimeout("get_value()", 5000);
	        }
</script>

	
	<table width="20%"  border="1" cellpadding="0" cellspacing="0">
	        <tr>     
	             <td width="10%"><DIV id="Wert_div" align="center">(loading...)</DIV></td>
	        </tr>
	      </table>
	 </table>
</body>	
</html>

Die im Anhang befindliche Sajax.php in das entsprechend Verzeichnis kopieren. Es braucht daran nichts geändert werden.

Viel Spass damit :wink:

Grüße
Thomas

P.S. Allen ein frohes Weihnachtsfest und einen guten Rutsch ins Jahr 2008 :slight_smile:

Das Meta-Prinzip zur Weiterschaltung funktioniert auch im MS-IE mit dem Meta-Tag bestens und stabil, egal ob oder wieviele Grafiken da enthalten sind auf der Seite. Allerdings muß man sich beim IE strenger an die Syntax des META-Befehls halten, die die Angabe einer URL im Tag nunmal zwingend vorschreibt (egal ob relativ oder absolut)


<META HTTP-EQUIV=REFRESH CONTENT="60; URL=meineseite.html">

Nachfolgend ein echtes Beispiel, dass alle 60 Sek die hinter URL= angegebene Seite neu aufruft (in diesem Fall sogar eine dynamische ASP-Seite inklusive Parameter). WICHTIG: 1. Die Doppel-Hochkommata nicht vergessen! 2. Sich streng an die Leerzeichen halten.

Redirectoren (=zwischengeschaltete Seiten, die ein „zurückgehen und doppelabsenden“ verhindern) werden genauso angelegt, nur dass bei den Sekunden dann 0 steht (…CONTENT=„0; URL=irgendwas.htm“). Dann wird sofort ohne Verzögerung weitergeschaltet. (würde m.E. auch dem WIIPS an vielen Stellen gut tun und massig Clicks sparen)


<META HTTP-EQUIV=REFRESH CONTENT="60; URL=aa.asp?sid=12345">

Die beiden nachfolgenden Meta-Tags sollte man auch immer gleich mit aufnehmen, um sowohl Browser- als auch Server-Caches auszuschalten. Bei dynamischen Inhalten bekommen die das sonst manchmal nicht mit, dass sich der Inhalt geändert hat.


<META HTTP-EQUIV=REFRESH CONTENT="60; URL=aa.asp?sid=12345">
<meta http-equiv="expires" content="Mon, 01 Jan 1990 00:00:01 GMT">
<meta http-equiv="pragma" content="no-cache">

Ich habe das Prinzip seit vielen Jahren in großen Projekten im Einsatz (so 500-700 dynamische Webscripte mit einigen 10GB SQL-Datenhaltung dahinter), wobei einige Auftraggeber fast reinrassig MSIE einsetzen, einige aber auch Mozilla/ex NS. Geht für beide Welten ohne Probleme.

Beim IE muß man natürlich drauf achten, die Meta-Tags bei den Einstellungen nicht auszuschalten. Aber das ist voreingestellt ein und solange es dem Normalanwender nicht gesagt wird und er auf den Spieltrieb kommt, unkritisch.

Das Ganze wird bei mir übrigens im Head-Bereich der Seite angeordnet, immer gleich am Anfang nach <html><head>. Nicht das das jemand in den Body schreibt

AJAX geht alternativ dazu natürlich auch, nur ist das erheblich aufwendiger, wegen der von AJAX verwendeten Basistechniken schneller userseitig deaktivierbar, und durch potenziell mehr Fehlerquellen fehlerstatistisch nunmal anfälliger, als das seit Jahren stabile Meta-Prinzip, das nur eine einzige Code-Zeile erfordert.

Wenn man natürlich sowieso schon AJAX in der Seite anwendet, ok, dann wär es berechtigt. Aber nur dann. Aber selbst dann frag ich mich, wozu eigentlich die auf JavaScript basierende Technik namens AJAX benutzt werden sollte, so doch Javascript selber schon Timer- und Reloadfunktionen besitzt (Stichwort: document.reload(true) ). Klar, ich kann auch statt eines Steines einen Porsche nehmen, um damit die Kerze auszuwerfen…

Eine permanente Aktualisierung der Werte auf einer Seite, ok, das verlangt nach AJAX. Dsa hat dann aber nichts mehr mit dem erneuten automatisierten Laden kompletter HTML-Seiten zu tun

Gruß Gerd

Edit:

Und: Da es sich bei der Meta-Tag-Zeile quasi um „statischen Quellcode“ handelt, der unverändert zum Browser durchgereicht und nur von dem verarbeitet wird, ist der Webserver dahinter völlig Apfelsiene …ähhh… Banane. Auch ob da IPS zwischenfunkt oder nicht.