AJAX is Asynchronous JavaScript and XML. What can it do for us? Near real time data updates without page refreshes.
<?php
/*
Title = wxupdate.php
Usage = Script to input data supplied by OWW to xml file.
Author = David Dean
Last modified = 05/04/2008
Free to use or modify however you need.
No warranty express or implied. If you use this script, I would appreciate a link back to deanostoybox.com.
*/
$myFile = "last.xml";
$fh = fopen($myFile, 'w') or die("can't open file");
// Parse query string from URL and put into an array
// This part fetches the part after the "?" from the URL.
$data = "$_SERVER[QUERY_STRING]";
// echo "$data <br />"; //test returns query string
//Break query string into parts delimited by the "&" (key=val)
$query_string = explode( '&', $data );
// echo "$query_string <br />"; //test returns "Array"
$args = array( ); // return array
// echo "$args <br />" //test returns "Array"
//Loop through the array, break at "=",
foreach( $query_string as $chunk )
{
$chunk = explode( '=', $chunk );
list( $key, $val ) = $chunk;
// echo "$key $val <br />"; //test returns keys and their assosiated values
/*
****************************************************
For each itteration of the loop test for key, create a variable and set
its value to the one associated with it.
These values will be used later on to create the xml file.
If you have any different sensor values than the ones here,
you need to create your own test. Format is-
"case ($key == "your_parameter"): //If the key matches returns true
global $your_parameter; //declare parameter as global variable
$your_parameter = $val; //set the value
break;" //Back to the loop
***************************************************
*/
switch ($key):
case ($key == "tm"):
global $tm;
$tm = $val;
break;
case ($key == "t1"):
global $t1;
$t1 = number_format($val, 2,'.','');
break;
case ($key == "t2"):
global $tm;
$t2 = number_format($val, 2,'.','');
break;
case ($key == "dp"):
global $dp;
$dp = number_format($val, 2,'.','');
break;
case ($key == "rh"):
global $rh;
$rh = round($val);
break;
case ($key == "bp"):
global $bp;
$bp = number_format($val, 4,'.','');
break;
case ($key == "wdspd"):
global $wdspd;
$wdspd = number_format($val, 1,'.','');
break;
case ($key == "gst"):
global $gst;
$gst = number_format($val, 1,'.','');
break;
case ($key == "wddir"):
global $wddir;
$wddir = $val;
break;
case ($key == "rn"):
global $rn;
$rn = number_format($val, 2,'.','');
break;
case ($key == "drn"):
global $drn;
$drn = number_format($val, 2,'.','');
break;
case ($key == "rnrt"):
global $rnrt;
$rnrt = number_format($val, 2,'.','');
break;
endswitch;
$args[ $key ] = urldecode( $val );
}
$stringData=
"<wxdata>
<tm>" . $tm . "</tm>
<t1>" . $t1 . "</t1>
<dp>" . $dp . "</dp>
<rh>" . $rh . "</rh>
<bp>" . $bp . "</bp>
<wdspd>" . $wdspd . "</wdspd>
<gst>" . $gst . "</gst>
<wddir>" . $wddir . "</wddir>
<drn>" . $drn . "</drn>
<rnrt>" . $rnrt . "</rnrt>
</wxdata>";
fwrite($fh, $stringData);
fclose($fh);
?>
wget -O dump http://deanostoybox.com/weather/wxupdatexml.php?tm=$mysqltime$'&'t1=$t1$'&'t2=$t2$'&'dp=$dp1$'&'rh=$rh1$'&'bp=$bar1$'&'wdspd=$wsp$'&'gst=$wspmax$'&'wddir=$wdrname$'&'rn=$rain$'&'drn=$dailyrain$'&'rnrt=$rainrate$
<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url)
{
xmlhttp=null;
if (window.XMLHttpRequest)
{// code for IE7, Firefox, Opera, etc.
xmlhttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
if (xmlhttp!=null)
{
xmlhttp.onreadystatechange=state_Change;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}
else
{
alert("Your browser does not support XMLHTTP.");
}
}
function state_Change()
{
if (xmlhttp.readyState==4)
{// 4 = "loaded"
if (xmlhttp.status==200)
{// 200 = "OK"
var xmlDoc=xmlhttp.responseXML.documentElement;
document.getElementById("tm").innerHTML= xmlDoc.getElementsByTagName("tm")[0].childNodes[0].nodeValue;
document.getElementById("t1").innerHTML=
xmlDoc.getElementsByTagName("t1")[0].childNodes[0].nodeValue + "°F";
document.getElementById("dp").innerHTML=
xmlDoc.getElementsByTagName("dp")[0].childNodes[0].nodeValue + "°F";
document.getElementById("rh").innerHTML=
xmlDoc.getElementsByTagName("rh")[0].childNodes[0].nodeValue + "%";
document.getElementById("bp").innerHTML=
xmlDoc.getElementsByTagName("bp")[0].childNodes[0].nodeValue + " \"Hg";
document.getElementById("wdspd").innerHTML=
xmlDoc.getElementsByTagName("wdspd")[0].childNodes[0].nodeValue + " MPH";
document.getElementById("gst").innerHTML=
xmlDoc.getElementsByTagName("gst")[0].childNodes[0].nodeValue + " MPH";
document.getElementById("wddir").innerHTML=
xmlDoc.getElementsByTagName("wddir")[0].childNodes[0].nodeValue;
document.getElementById("wddirimg").src="/weather/wnddir/"+
xmlDoc.getElementsByTagName("wddir")[0].childNodes[0].nodeValue +".png";
document.getElementById("drn").innerHTML=
xmlDoc.getElementsByTagName("drn")[0].childNodes[0].nodeValue + " \"";
document.getElementById("rnrt").innerHTML=
xmlDoc.getElementsByTagName("rnrt")[0].childNodes[0].nodeValue + " \"/Hour";
}
}
}
var t;
function update()
{
t=setTimeout("update()",4000);
loadXMLDoc('last.xml'+'?'+Math.random()*101);
}
</script>