loading
Objective

Replace my PC (which has been on 24-7 for 6 years) and weather station software with an Arduino – Lower power consumption, less maintenance and smaller physical footprint.  Minimum PC functionality requiring duplication:

• Logging of weather data (wind speed, wind direction, outdoor humidity, outdoor temperature, rain, UV,  cloud height, wind chill, pressure, forecast, indoor temperature/humidity (x3 channels) every hour
• House power usage (logged every hour)
• Web page update showing current data and 24/48 hour trends for all elements above
• Email alerts of extremes

Hardware to be monitored
• Oregon Scientific WMR628 wireless weather station
• OWL power monitor

Overview

Following some extensive research on the web, I established that there was nothing that quite met my objectives so if I wanted to do this, I had to do it myself!  Before we get into the design/code, I need to stress that I am an engineer, and as my IT group tell me on regular occasions, engineers don’t make good software developers.  This will become apparent as we go through this process – however what I’ve built works, meets my needs and I’m quite pleased with the overall outcome.  That’s not to say that I am not open to feedback (constructive of course!).  As I lead you through the development, if there is anything that I could do more efficiently or just better, please let me know as it’s the only way I can learn!

Note in order to view the web pages from the weather station external to your local network, you will need to open a port on your router.  This is not covered here.

Step 1: Decode the Wireless Signals

This was the biggest hurdle and I have to pass all the credit for this phase to Dominique Pierre at JeeLabs whose code I have used (with support from Dominique) to decode all my sensors.  Hardware for testing is simple (and explained on the JeeLabs website).  A point to note here is that initially I used an Arduino UNO, but (as will be explained later) I moved to a MEGA.  For testing and decoding purposes, either will work and I strongly recommend this step before anything else so that you can identify and verify that the received signals are from the sensors and that you can interpret them.  I used a simple Excel spreadsheet to manually verify the decoded signals and work out the check sums before any weather station coding started.

Step 2: Hardware

In addition to the RF radio receiver, I used an RTC – You could use the Ethernet shield and an NTP, but I felt the key focus should be the logging rather than the internet/server side, and this could be done ‘offline’ should the network be down when using an RTC.  I have built a variant of this project for a friend too who had limited sensors, so included an ‘on board’ pressure and temperature sensor.  What you use is up to you, and I have included example code for all elements later.  The schematic provides an overview of the hardware that has been used.  Built in Fritzing, I have also created a ‘mini Shield’ that slots onto the ‘end’ of the MEGA where the Ethernet shield finishes (shown in white in the photo).  This ‘shield’ incorporates foot prints for the optional items and some break-out pins for future options.  Combinations that have been tried/tested include:

• RF receiver for Oregon Scientific sensors and RTC
• RF receiver for Cresta sensors, RTC and BMP085 barometric/temperature sensor
• External LM35 temperature sensor (waterproofed and measure the temperature of the stream in our garden) and external stream depth monitor (not detailed here, but uses an I2C ultrasonic distance meter mounted on a bridge to assess height of stream – interestingly, the depth can vary from 30cm to 150cm during heavy rain!).

However any combination should work and code can be modified to log/web serve as appropriate.

Schematic shows the components on the shield, as I indicate above, not all need to be used, but options are there if wanted.  Not shown is the Ethernet shield too that simply plugs into the MEGA.

Components you’ll need:
1. Arduino MEGA 2560 
2. Ethernet shield (with micro SD card)
3. RF 433MHz receiver (Aurel RX-4M50RR30SF used and functions well from here)  
4. Aerial
5. DS3234 RTC breakout module
6. LM35 temperature sensor (up to 2, optional) 
7. BMP085 pressure sensor (optional)

In order to mount the Arduino and ‘shield’ into a standard Arduino enclosure, I had to remove two of the locating pins, but these are easily snapped off and do not impact the secure mounting of the hardware.  Note that on the PCB, the receiver module is located on the underside of the PCB (plenty of room) so that the memory card can still be ejected without interference.

I used a 433MHz whip aerial to make the device look neater (not connected in the photo, but shown mounted on the box in the 2nd picture) – not sure it responds any better than my test aerial – a piece of wire; but looks a lot neater and more professional!

Step 3: Code for Logging Data

This is an extension of step 1, taking the received signals and interpreting the signals to get ‘real’ values.  These are stored in global variables as the data is used in multiple places (i.e. the logging phase, and the web page serving page, Step 4).  I have typically used integers to save memory where possible and speed up processing, dividing by 10 to get one decimal place when logging or ‘serving’ the values to the web.   I also have included triggers for maximum and minimum values (that are stored in EEPROM at midnight in case of power loss at some point during the year).   For certain parameters, there are also triggers to send an email (Step 5).

I have added a checksum to those elements that required validation as occasionally, erroneous data would be processed and skew the maximum/minimum data.  Decoding of the Oregon Scientific signals was based on info found on the internet here and for the Cresta devices here.   Note that the RF decoding code is different for each the Oregon Scientific and the Cresta devices.  Examples of both are included in the example sketch file.

Step 4: Code for Web Serving

There are two key elements to this.  One is to serve a page directly from the Arduino that is fixed format and essentially a list of sensor readings, battery status, Arduino status etc.  This is useful for ‘debugging’ both the software, but also verifies that the hardware is working as expected – for example if a sensor is not being decoded as it’s out of range or suffers interference, it can be monitored on the ‘last updated’ details.  The second element is to serve more complex pages.  The solution coded is (I think) quite powerful, as it will load a template file (in text form) from the root of the SD card and where it finds a ‘variable’ (indicated with an opening and closing ~~), it replaces this with the value before serving to the web page.  This means that quite complicated web pages can be created without re-coding the Arduino and without hogging memory/resources, including references to external files such as .css files, images etc. which can be stored on your own website rather than on and served by the Arduino (which it isn’t designed to do it).  

Originally, the code was intended to work on an UNO, but I needed to store large arrays of data (48 values x 13 groups)  for the trend graphs (see example web page) and although the compile size came in under the 32k mark, the Arduino failed due to memory ‘overload’…  Going to the MEGA also allowed additional functionality to be added (such as emails, sunrise etc.) without issue.  Feel free to optimise the code and squeeze it onto the UNO…

The example file (graphs.htm) creates the web page below and makes use of the Google Charts api to render the charts with simple hyperlink calls.  Note that the code only works with 8.3 named files (due to the use of SDFat), hence the use of .htm named files.  To view the processed page, simply type the Arduino IP code:Port followed by /graphs.htm.

The code also includes maths for calculating some derived parameters, such as cloud base height and wind chill. Two other actions are available via URL in addition to the normal page delivery:

• YourIP:Port/EEPROM – Forces the current maximum and minimum (and rain count) to be logged in EEPROM. Useful to do before powering down for any reason to ensure that the yearly data is maintained.  Note: the EEPROM is only written too once per day, at midnight.  This extends the life of the Arduino EEPROM and as this device is intended to be powered indefinitely I figured daily was sufficient.

• YourIP:Port /TIME&year&mo&day&hr&mi – although an RTC has been used, it seems to lose time over a period.  This function allows the user to reset the RTC (via the web) to the ‘correct time’ and to update for summer time changes. 

The basic logging and Server code is based on the tutorial here and modified to suit both my needs and changes to Arduino 1.0 compiler.

Library References

TimeLord Library
EEPROMWriteAnything Library
RTCLib Library 
SDFat Library (and Ethernet/SD card tutorial) 

Step 5: Code for Email

Using a simple web page client, I call a URL to a php script located on my web page to email a set email distribution list.  Again, as this is hosted off the Arduino, I can change the distribution and content of the email at any time.

Weather Station Alert email php script:

<?php
// The following lines read the parameters from the URL
$TO       = 'email address 1';
$TO      .= ', email address 2';
$FROM     = 'your email address';
$SUBJECT  = 'Weather Station Update';
$TIME     = $_REQUEST["TIME"];
$TEMPNOW  = $_REQUEST["TEMPNOW"];
$WSNOW    = $_REQUEST["WSNOW"];
$WDNOW    = $_REQUEST["WDNOW"];
$RAIN     = $_REQUEST["RAIN"];
$TEMPMAX  = $_REQUEST["TEMPMAX"];
$TEMPMIN  = $_REQUEST["TEMPMIN"];
$WSMAX    = $_REQUEST["WSMAX"];
$TRIGGER  = $_REQUEST["TRIGGER"];
$MESSAGE  = 'Message from Weather Station
Timed at ' .$TIME. '

- Temperature now is' .$TEMPNOW. 'C
- Wind Speed now is ' .$WSNOW. 'mph at deg
- Rain Today ' .$RAIN. 'mm

- Max Temperature Today is ' .$TEMPMAX. 'C
- Min Temperature Today is ' .$TEMPMIN. 'C
- Max Wind Speed Today is ' .$WSMAX. 'mph

Email sent due to ' .$TRIGGER. ';
// This sends the message
mail($TO, $SUBJECT, $MESSAGE, "From: ".$FROM);
?>

There is also an email issued if there is power loss and the system is rebooted.

Step 6: Known Limitations and Areas for Improvement

1. The biggest issue I have come across is that whilst checking for any web page request, the Arduino is missing decoding the RF signals.  This was made worse by the change to Arduino 1.0 (which seems to take an age to check for any server requests). To overcome this, I only check for internet activity when there is an RF signal received and has been decoded (which works well for me as I have lots of sensors and there is a signal received every few seconds) , or every 5 seconds by means of a check on mills().  This works in practice (with a maximum delay in receipt of the web page by the user of around  5 seconds and without obvious loss of readings), but I am sure there are better ways of doing this, such as software interrupts maybe?

2. Some of the coding is poor (I could make better use of functions/procedures and possibly even some library work (which is beyond me)) and I am sure there are more efficient ways of achieving the same ends.  The code works and it does what I want it to do reliably (been running several months with no issues), but any improvements/recommendation welcome.

Hope this information is useful.

<p>Hi there!</p><p>Congratulations on your amazing project, I'm having issues getting the libraries: SdFat, RCTlib, and TimeLord, the links does not work anymore and there are many different versions these libraries out there. Could you please upload the libraries to Dropbox or similar and share the link?<br><br>Thanks!!!</p>
<p>Javier las librerias actuales parecen no funcionar, podias ilustrarme como lo has hecho?</p><p>Gracias</p>
<p>Hi. First... Wonderful work.</p><p>I have some problems compiling with the new ide of arduino.</p><p>What ide of arduino need? What libraries? </p><p>I need help, please.</p>
<p>why does it says &quot; 'sd2card' does nto a name type</p>
<p>Hi Imcirca, i have the same problem whit the &quot; does not a name type&quot; , Can you help me with this trouble?</p><p>Thanks a lot.</p>
<p>I can't download the code for web serving (graphs.htm)</p>
I've posted the code on a previous reply. Simply copy it into a blank text file and save as xxxxx.htm. Hope that helps.
<p>why it says &quot; 'RTC_DS1307' does not a name type' &quot;?</p>
Nice approach! <br>I cannot download the 'graph.html' code. Could you please upload it in another format? Zip or at least TXT, please. <br>
I have posted it in text form previously. if you can't get it, let me know.<br>
Doh! Shows it as html! &nbsp;Need to add the html tags at the&nbsp;beginning&nbsp;and end...<br> <br> &lt;head&gt;<br> &lt;meta HTTP-EQUIV=&quot;CONTENT-TYPE&quot; CONTENT=&quot;text/html; charset=UTF-8&quot;&gt;<br> &lt;/head&gt;<br> <br> &lt;body&gt;<br> <br> &lt;br&gt;<br> &lt;table align=&quot;center&quot; border=&quot;0&quot;&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td valign=&quot;top&quot; align =&quot;center&quot; colspan=&quot;2&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;h1&gt;Weather Data and Trends&lt;/h1&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Outdoor Temperature&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading ~~OutTempNow~~&amp;#176;C&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,-10,30&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=3399CC&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=-100,300&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~OUTTEMPGP~~,~~OUTTEMPGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,12.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5|r,0000AA10,0,0,.25&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Outdoor Humidity&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading ~~OutHumNow~~%&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,0,100&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=80FF5A&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,100&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~OUTHUMGP~~,~~OUTHUMGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,20&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Wind Chill&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading ~~WINDCHILLNOW~~&amp;#176;C&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,-10,30&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=BA55D3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=-100,300&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~OUTWINDCHILLGP~~,~~OUTWINDCHILLGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,12.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5|r,0000AA10,0,0,.25&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Cloud Base Height (Estimated)&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Height to Cumulus Cloud Base now ~~CLOUDNOW~~km&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,0,2.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=607080&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~CLOUDGP~~,~~CLOUDGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,20&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,2.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Pressure&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading ~~BarrometerNow~~mbar&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,950,1050&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=FF9900&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=950,1050&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~PRESSUREGP~~,~~PRESSUREGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,25&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;UV&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading ~~UVNow~~&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,0,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=FFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~UVGP~~,~~UVGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,20&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;&nbsp;&nbsp;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Rain&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Total Rain since midnight ~~TotalRainFrom0000~~mm&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;img src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,67676700&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|2:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=0,0,25,50,75,100|2,0,50&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=1,0,5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,12.5,-1,l,676767|1,000000,12.5,0,l,000000|2,676767,11.5,-1,l,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,y,x&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chbh=4,1,1&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|1,5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=bvs&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=FF0000&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~RAINGP~~,~~RAINGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,20&quot; width=&quot;300&quot; height=&quot;200&quot;<br> &nbsp;&nbsp;&nbsp; alt=&quot;&quot;&gt;&lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Wind Speed (Average)&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading (Average) ~~AverageNow~~mph at ~~DirectionNow~~&amp;#176;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,0,25&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=009000&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,25&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~AVERAGEGP~~,~~AVERAGEGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,20&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;center&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p align=&quot;left&quot; class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Wind Rose (Average)&lt;/b&gt;&lt;br&gt;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp;&nbsp; &lt;td rowspan=&quot;2&quot; width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Wind Direction&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~|2:|N|NE|E|SE|S|SW|W|NW|N&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,0,360&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=009000&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,360&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~DIRECTIONGP~~,~~DIRECTIONGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,12.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=t-,008000,0,-1,30&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; height=&quot;300&quot; valign=&quot;top&quot; align =&quot;center&quot; background=&quot;http://www.host.co.uk/Images/Rose.gif&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p align = &quot;center&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;img src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=chxl=0:|+|+|+|1:|+|+|+|2:|+|+|+|3:|+|+|+&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,-300,300&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,676767,0,0,_,676767|1,676767,0,0,_,676767|2,676767,0,0,_,676767|3,676767,0,0,_,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,y,r,t&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x300&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=s&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=009000A1&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,0&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=-265,265,-265,265&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=25,25, 5, 0&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~ROSEX~~|~~ROSEY~~|3&quot;<br> &nbsp;&nbsp;&nbsp;&nbsp; width=&quot;300&quot;<br> &nbsp;&nbsp;&nbsp;&nbsp; height=&quot;300&quot;<br> &nbsp;&nbsp;&nbsp;&nbsp; alt=&quot;&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;&nbsp;<br> &nbsp; &lt;/tr&gt;<br> &lt;/table&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp; &lt;table align=&quot;center&quot; border=&quot;0&quot;&gt;<br> &lt;tr&gt;<br> &nbsp; &lt;td width=&quot;350&quot; valign=&quot;top&quot; align =&quot;center&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt; Updated on ~~SHORTDATE~~ at ~~FULLTIME~~<br> &nbsp; &lt;/td&gt;<br> &lt;/tr&gt;<br> &nbsp;&nbsp;&nbsp; &lt;/table&gt;<br> &lt;/body&gt;<br>
Not sure why you can't download, but here it is in text form. Have fun :-) .... <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> Weather Data and Trends <br> <br> <br> <br> <br> <br> <br> <p><b>Outdoor Temperature</b><br> <br> Latest Reading ~~OutTempNow~~&deg;C<br> <br> <br></p><p align="right"> <br> &gt; <br> </p> <br> <br> <br> <p><b>Outdoor Humidity</b><br> <br> Latest Reading ~~OutHumNow~~%<br> <br> <br></p><p align="right"> <br> &gt; <br> </p> <br> <br> <br> <br> <br> <br> <br> <p><b>Wind Chill</b><br> <br> Latest Reading ~~WINDCHILLNOW~~&deg;C<br> <br> <br></p><p align="right"> <br> &gt; <br> </p> <br> <br> <br> <br> <br> <p><b>Cloud Base Height (Estimated)</b><br> <br> Height to Cumulus Cloud Base now ~~CLOUDNOW~~km<br> <br> <br></p><p align="right"> <br> &gt; <br> </p> <br> <br> <br> <br> <br> <br> <br> <p><b>Pressure</b><br> <br> Latest Reading ~~BarrometerNow~~mbar<br> <br> <br></p><p align="right"> <br> &gt; <br> </p> <br> <br> <br> <br> <br> <p><b>UV</b><br> <br> Latest Reading ~~UVNow~~<br> <br> <br></p><p align="right"> <br> &gt; <br> </p> <br> <br> <br> <br> <br> <br> <br> <p><b>Rain</b><br> <br> Total Rain since midnight ~~TotalRainFrom0000~~mm<br> <br> <br></p><p align="right"> <br> alt=&quot;&quot;&gt;</p> <br> <br> <br> <br> <br> <p><b>Wind Speed (Average)</b><br> <br> Latest Reading (Average) ~~AverageNow~~mph at ~~DirectionNow~~&deg;<br> <br> <br></p><p align="right"> <br> &gt;</p> <br> <br> <br> <br> <br> <br> <br> <br> <br> <p align="left"><b>Wind Rose (Average)</b><br> <br> </p> <br> <br> <br> <br> <br> <br> <p><b>Wind Direction</b><br> <br> <br></p><p align="right"> <br> &gt;</p> <br> <br> <br> <br> <br> <p align="center"> <br> width=&quot;300&quot; <br> height=&quot;300&quot; <br> alt=&quot;&quot;&gt; <br> </p> <br> <br> <br> <br> <br> <br> <br> <br> Updated on ~~SHORTDATE~~ at ~~FULLTIME~~ <br> <br> <br> <br> <br> <br>
Great, great post!!! <br>Congratulations on your skills! <br> <br>I can't download the graph code however the donwload is blocked, maybe because of the htm extension. <br> <br>Regards <br>Tiago
Very nice! <br>To avoid concurring requests (rf decoding &lt;-&gt; http request) you can use Interrupts. Need extra coding (but not too much) but is a lot more efficient. You need to setup an interrupt on a pin (rf receiver data pin) e define a routine to be executed when the irq trigger (data received on pin). <br>When interrupts was triggered arduino stop the current code, run the irq routine, then go back to orginal code.
again, thanks, but why is it not possible to look at &quot;graphs.htm&quot; ? <br>That is where I really need help!!
I'm not sure - I've uploaded it, but appears to be blocked. Listed below in text form. Cut and paste into a text editor and save as graphs.htm. &nbsp;Hope this helps.<br> <br> <em>&lt;html&gt;<br> <br> &lt;head&gt;<br> &lt;meta HTTP-EQUIV=&quot;CONTENT-TYPE&quot; CONTENT=&quot;text/html; charset=UTF-8&quot;&gt;<br> &lt;/head&gt;<br> <br> &lt;body&gt;<br> <br> &lt;br&gt;<br> &lt;table align=&quot;center&quot; border=&quot;0&quot;&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td valign=&quot;top&quot; align =&quot;center&quot; colspan=&quot;2&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;h1&gt;Weather Data and Trends&lt;/h1&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Outdoor Temperature&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading ~~OutTempNow~~&amp;#176;C&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,-10,30&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=3399CC&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=-100,300&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~OUTTEMPGP~~,~~OUTTEMPGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,12.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5|r,0000AA10,0,0,.25&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Outdoor Humidity&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading ~~OutHumNow~~%&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,0,100&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=80FF5A&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,100&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~OUTHUMGP~~,~~OUTHUMGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,20&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Wind Chill&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading ~~WINDCHILLNOW~~&amp;#176;C&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,-10,30&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=BA55D3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=-100,300&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~OUTWINDCHILLGP~~,~~OUTWINDCHILLGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,12.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5|r,0000AA10,0,0,.25&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Cloud Base Height (Estimated)&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Height to Cumulus Cloud Base now ~~CLOUDNOW~~km&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,0,2.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=607080&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~CLOUDGP~~,~~CLOUDGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,20&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,2.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Pressure&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading ~~BarrometerNow~~mbar&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,950,1050&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=FF9900&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=950,1050&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~PRESSUREGP~~,~~PRESSUREGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,25&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;UV&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading ~~UVNow~~&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,0,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=FFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~UVGP~~,~~UVGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,20&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;&nbsp;&nbsp;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Rain&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Total Rain since midnight ~~TotalRainFrom0000~~mm&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;img src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,67676700&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|2:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=0,0,25,50,75,100|2,0,50&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=1,0,5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,12.5,-1,l,676767|1,000000,12.5,0,l,000000|2,676767,11.5,-1,l,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,y,x&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chbh=4,1,1&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|1,5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=bvs&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=FF0000&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~RAINGP~~,~~RAINGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,20&quot; width=&quot;300&quot; height=&quot;200&quot;<br> &nbsp;&nbsp;&nbsp; alt=&quot;&quot;&gt;&lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Wind Speed (Average)&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Latest Reading (Average) ~~AverageNow~~mph at ~~DirectionNow~~&amp;#176;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,0,25&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=009000&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,25&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~AVERAGEGP~~,~~AVERAGEGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,20&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=R,67676720,0,0,0.5&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; valign=&quot;top&quot; align =&quot;center&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p align=&quot;left&quot; class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Wind Rose (Average)&lt;/b&gt;&lt;br&gt;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp;&nbsp; &lt;td rowspan=&quot;2&quot; width=&quot;300&quot; valign=&quot;top&quot; align =&quot;left&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p class=&quot;GraphHeading&quot;&gt;&lt;b&gt;Wind Direction&lt;/b&gt;&lt;br&gt;<br> &nbsp;&nbsp;&nbsp; &lt;br&gt;&lt;/p&gt;&lt;p align = &quot;right&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img alt=&quot;&quot; src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=0:|00%3A00|12%3A00|00%3A00|12%3A00|00%3A00|1:|Yesterday|Today, ~~SHORTDATE~~|2:|N|NE|E|SE|S|SW|W|NW|N&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxp=1,0,24&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,0,48|1,0,48|2,0,360&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,000000,11.5,-1,lt,676767|1,676767,11.5,-1,l,676767|2,000000,11.5,1,lt,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,10|2,10&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,x,y&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x200&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=lc&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=009000&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=0,360&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~DIRECTIONGP~~,~~DIRECTIONGC~~,-999&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=12.5,12.5&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chls=2&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chma=0,0,3&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chm=t-,008000,0,-1,30&quot;&nbsp;<br> &nbsp;&nbsp;&nbsp; &gt;&lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;<br> &nbsp; &lt;/tr&gt;<br> &nbsp; &lt;tr&gt;<br> &nbsp;&nbsp; &lt;td width=&quot;300&quot; height=&quot;300&quot; valign=&quot;top&quot; align =&quot;center&quot; background=&quot;http://www.host.co.uk/Images/Rose.gif&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;p align = &quot;center&quot;&gt;<br> &nbsp;&nbsp;&nbsp; &lt;img src=&quot;http://chart.apis.google.com/chart?<br> &nbsp;&nbsp;&nbsp;&nbsp; chxl=chxl=0:|+|+|+|1:|+|+|+|2:|+|+|+|3:|+|+|+&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chf=bg,s,FFFFFF00&amp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxr=0,-300,300&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxs=0,676767,0,0,_,676767|1,676767,0,0,_,676767|2,676767,0,0,_,676767|3,676767,0,0,_,676767&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxt=x,y,r,t&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chs=300x300&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; cht=s&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chco=009000A1&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chxtc=0,0&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chds=-265,265,-265,265&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chg=25,25, 5, 0&amp;<br> &nbsp;&nbsp;&nbsp;&nbsp; chd=t:~~ROSEX~~|~~ROSEY~~|3&quot;<br> &nbsp;&nbsp;&nbsp;&nbsp; width=&quot;300&quot;<br> &nbsp;&nbsp;&nbsp;&nbsp; height=&quot;300&quot;<br> &nbsp;&nbsp;&nbsp;&nbsp; alt=&quot;&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br> &nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;<br> &nbsp;&nbsp; &lt;/td&gt;&nbsp;<br> &nbsp; &lt;/tr&gt;<br> &lt;/table&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp; &lt;table align=&quot;center&quot; border=&quot;0&quot;&gt;<br> &lt;tr&gt;<br> &nbsp; &lt;td width=&quot;350&quot; valign=&quot;top&quot; align =&quot;center&quot;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt; Updated on ~~SHORTDATE~~ at ~~FULLTIME~~<br> &nbsp; &lt;/td&gt;<br> &lt;/tr&gt;<br> &nbsp;&nbsp;&nbsp; &lt;/table&gt;<br> &lt;/body&gt;<br> <br> &lt;/html&gt;</em>
Hello again Wicksc <br>I finally see how to serve a web page from an SD card but also use variables from the Arduino, using the ~~ etc.. <br>You have saved me, I have looked everywhere for how to do this... <br>I am trying to modify your code to suit my web page but I am getting lost. <br>My question is this (and feel free to ignore it) <br>Can you please point me to a tutorial or something that shows this process in a simple 1 or 2 variable code? <br>If I can see the process with a very basic index.htm, and simple Arduino sketch, I will be able to apply it to mine. <br> <br>Thanks in advance, and for opening the door at last for me. <br> <br>Cheers VK5OI
There is no tutorial with this, it's just as it's written in the code. Essentially I load the file one character at a time, check to see if it is a ~. If not, then send to the web page. Read the next character. If that too is a ~ then I know that all the following characters are a variable, so build up that variable name character by character until I get to another ~. On receipt of the 2nd closing ~, send the variables <strong>value </strong>to the web rather than any character from the file. Once we have read two closing ~, start again and read a single character and forward to the web page unless it is a ~ etc.<br> <br> Hope that makes sense - basically send a character at a time to the web page unless we come across a pair of ~ in&nbsp;which&nbsp;case send the variables value.<br> <br> The key code is:<br> <br> <em>while ((t = html.read()) &gt; 0) { &nbsp;//while not at the end of the file on the SD card read the next character from the html file.<br> if (t != 126) {<br> &nbsp; &nbsp; client.print(char(t)); //if the character from the file is not a ~ then send it to the web page<br> }<br> else<br> {</em><br> <em>t = html.read(); &nbsp; //get next character from the html file on the SD card &nbsp;this will be the 2nd ~<br> if (t == 126) { //if it is a ~ then start the do loop to build up the variable name (MyTag)<br> &nbsp; do {<br> &nbsp; &nbsp; &nbsp; &nbsp; t = html.read(); &nbsp; &nbsp; // read the next character from the SD card &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br> &nbsp; &nbsp; &nbsp; &nbsp; if (t != 126) MyTag += char(t); &nbsp;//if it is not a ~ then add character to build MyTag (the variable name) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br> &nbsp; &nbsp; &nbsp; &nbsp; }<br> &nbsp; &nbsp;while (t != 126); &nbsp;/ continue to buld the variable name until we read another ~ from the file on the SD card<br> &nbsp; &nbsp;t = html.read();&nbsp; //Get 2nd ~<br> &nbsp;&nbsp;&nbsp;if (MyTag == &quot;SIMPLETIME&quot;)&nbsp;</em><em>client.print(LogHour); etc... // we now have a variable name, so want to send a value to the page. &nbsp;Use ifs to select the variable we want to send to the web and send it. &nbsp;Close loop and start back at the&nbsp;beginning.</em><br> <br> Does this help?
Again, outstanding, thanks Wicksc. <br>I did manage to study your code further, and understand most, and now your explanation has &quot;filled in the gaps&quot; <br>I did not mean for you to provide a tutorial, only to perhaps tell me where I could find more information. But, i am glad you did, you have explained it very well. <br>I thought after years of PLC programming, I would learn this quickly, but it seems PLC work is usually much simpler than this. You guys really are clever. <br>I really appreciate the assistance <br> <br>Best regards <br>VK5OI
Thanks Chris, much appreciated. <br> <br> <br>Cheers
Hi, <br>This is a nice project you have created. I think I will try to copie it. <br>Were can I find the sheild you have in the picture in Step 2. <br>Im trying to find the components in Sweden, the only thing I havn't found yet are the BMP085 but I can start with out it. <br>Best Regards <br>Johan
If you are referring to the larger Ethernet shield, fairly standard stock for most Arduino sellers - mine came from <a href="http://http://proto-pic.co.uk/arduino-ethernet-shield-rev3-without-poe-module/" rel="nofollow">http://proto-pic.co.uk/arduino-ethernet-shield-rev3-without-poe-module/</a>&nbsp;. If you are talking about the white shield, I fabricated this with via Fritzing (http://fritzing.org/). The file I used is at the bottom of step 2. Hope that helps.
Thanks for your answer! <br>It was the white shield I ment. <br>I will try with http://fritzing.org <br>BR Johan <br>
nice idea. In my experience however, various emailservers are quite picky in receiving email coming from a private server. So evebthough the script may work, google or yahoo or hotmail may refuse to receive/deliver the mail because they do not know yr domain or ip address as a ligitimate mailserver
Noted, but I have not had any issues so far to the addressees I have.
This is a great project and well put together information!<br><br>I was was in the process of building something similar and now could use what you already have built. Here are some additional thoughts that I have considered for my project:<br>1. Do logging to a cloud service, something like Google app engine(appengine.google.com). This would provide with many advantages of not serving data from Arduino and having historic data going back beyond the storage card.<br>2. I was thinking it would be cool to develop my own plug-and-play wireless sensors based on xBee or JeeNode with solar support. With XBee it would be possible to have a network that allows for node to node communications that would allow to spread sensors farther from the main controller(grid).<br><br>Are you located in UK? Would be great to chat and brainstorm. Cheers and thank you again!<br>
Awesome project...definately above my level of learning , but very well written . <br>Be proud of what you accomplished my friend , it is very impressive. <br> <br>I saved this as a favorite and hope that it may be a winter project later this year . <br> <br>Thank you for sharing, <br>Build_it_Bob <br>
Thanks. Was fun making it and the challenges it presented!
Is there a link to your server I can look at?<br>
This is excellent, really good work, exactly what I have been trying to do but not very well. thanks a lot<br>One question, I can't seem to compile it without the error &quot;class DateTime&quot; has no member named &quot;unixtime&quot;<br>I'm sure this is simple, and I apologise in advance, but I am new to Arduino, and I think my years of PLC programming is not helping.<br><br>Thanks again <br>Cheers<br>
Glad it help. This may be due to a different version of the RTClib. Try using the version from Ladyada at www.ladyada.net/make/log shield/rtc.html. Let me know...
Thanks wicksc<br>that was it, I should have worked that out I think.<br>I am really impressed with Arduino and the incredible amount of information and help available, but being open source and the big change to 1.0 makes library management very very frustrating.<br><br>Thanks again, and great work.
This project would be better if you used images of your actual project for the main images rather than stock photos. I think people would rather see your work.
Thanks. Not a lot to see other than the two photos I have added already showing the shield in place with the rtc on. The hardware is pretty simple and hopefully explained well in the schematic also added. However, any future work I will take more pictures and post too.

About This Instructable

105,379views

142favorites

License:

More by wicksc:Arduino Wireless Weather Station & Web Server 
Add instructable to: