5 Steps to Post Your CR6 Data to Weather Underground

by Sam Utley | Updated: 03/23/2016 | Comments: 6

Search the Blog


Subscribe to the Blog

Set up your preferences for receiving email notifications when new blog articles are posted that match your areas of interest.


Area / Application

Product Category

Activity

Corporate / News

Enter your email address:



Suggest an Article

Is there a topic you would like to learn more about? Let us know. Please be as specific as possible.

Leave this field empty

CR6 datalogger connected to Internet and Weather Underground

Over the years, you may have seen a number of Weather Underground PWS (personal weather station) discussions and solutions posted on the Campbell Scientific User Forum. In this article, I’ll show you how to post your data directly from an Internet-connected CR6 Measurement and Control Datalogger to Weather Underground.

Background

Weather Underground is a service that provides weather observations and forecasts via the Internet. Their data products use information collected from many sources, including over 180,000 personal weather stations.

Weather Underground provides a relatively simple web-based protocol for uploading data from a PWS. Their protocol is much simpler to use than many other hosted services you might find out there. The Weather Underground protocol requires only a simple HTTP GET request with the station, user, and sensor information embedded into the URL. This process can be quite easy for a Campbell Scientific datalogger, such as a CR6, to perform using the HTTPGet() instruction and a few string operators.

Recommended for You: For more detailed information about the protocol, read the “PWS – Upload Protocol” wiki entry.

There are a number of Campbell Scientific-based personal weather stations in operation today. One example is KUTNORTH6, which is owned and operated by a Campbell Scientific employee in Logan, Utah. From the Weather Underground website, you can view the KUTNORTH6 PWS dashboard, which is an example of what your data might look like after you post it.

#1 - Create an account

To get started, you will need to make sure you’ve registered with Weather Underground, created a PWS, and made note of your PWS station ID and account password. (Currently, a basic account is free on their site.)

#2 - Create a weather station program

The easiest way to create your weather station program is to use the Short Cut Program Generator for Windows. Here is an example program I created that includes measurements for wind speed, wind direction, air temperature, and relative humidity:

Public WindSpeed_MPH, WindDir, TRHData(2)
Alias TRHData(1) = AirTemp_F, RH
BeginProg
Scan(1,Min,1,0)
'measure 05103 windspeed and direction;
'then measure cs215 temp/RH probe with SDI-12;
PulseCount(WindSpeed_MPH,1,U4,5,1,0.2192,0)
BrHalf(WindDir,1,mV5000,U2,U1,1,2500,True,20000,60,355,0)
If WindDir>=360 Or WindDir<0 then Winddir=0
SDI12Recorder(TRHData(),C1,"0","M!",1,0)
AirTemp_F=AirTemp_F*1.8+32
NextScan
EndProg

#3 - Download the file

Download the wunderground.dld file, and load it onto your datalogger’s CPU drive. You will reference this file in your program using the Include() instruction. (Alternatively, you could copy the contents of the file into your program before the BeginProg statement. In this example, however, I’ll just use the Include() instruction method.)

#4 - Declare an array

Note: In the wunderground.dld file that you downloaded in the previous step, there is an instruction that I have named wundergroundPWS(). Using Include "CPU:wunderground.dld" makes the wundergroundPWS() instruction available for use within your CRBasic program. 

You will need to declare an array that passes your data into the wundergroundPWS() instruction. The data in this array are organized in a very specific order, which must be followed.

  • It’s OK to make the array smaller than its maximum size.
  • It’s OK to not include all of the information.
  • When you include information, it must be done in a very specific order.

The weather data array can hold 1 to 30 elements of data that may include those in the following list. For our example, we only need to use a subset of the weather data array. So I have declared the array in our example to a size of 11 (Dim WxData(11)), making it just large enough to allow me to specify our instantaneous wind direction, wind speed, relative humidity, and air temperature measurements.

  1. Instantaneous Wind Speed in miles-per-hour
  2. Instantaneous Wind Direction in degrees
  3. Wind Gust in miles-per-hour, calculated over a user-defined period
  4. Wind Gust Direction in degrees, calculated over a user-defined period
  5. 2 minute Average Wind Speed in mph
  6. 2 minute Average Wind Direction in degrees
  7. 10 minute Wind Gust in mph
  8. 10 minute Wind Gust Direction in degrees
  9. Percent Relative Humidity
  10. Dew Point Temperature in deg F
  11. Air Temperature #1 in deg F
  12. Air Temperature #2 in deg F
  13. Air Temperature #3 in deg F
  14. Air Temperature #4 in deg F
  15. Air Temperature #5 in deg F
  16. Hourly Rainfall in inches
  17. Daily Rainfall in inches
  18. Barometric Pressure in inches
  19. Soil Temperature #1 in deg F
  20. Soil Temperature #2 in deg F
  21. Soil Temperature #3 in deg F
  22. Soil Temperature #4 in deg F
  23. Soil Temperature #5 in deg F
  24. Percent Leaf Wetness #1
  25. Percent Leaf Wetness #2
  26. Solar Radiation in Watts/m2
  27. UV Index
  28. Visibility
  29. Indoor Temperature in deg F
  30. Indoor Percent Relative Humidity

Tip: If you’re interested in posting air-quality data, the wundergroundPWS() instruction also supports a second air-quality data array. The second array’s content and order can be found inside the wunderground.dld file you downloaded. Alternatively, you can find the information in the Pollution Fields section of the PWS wiki entry.

The wundergroundPWS() instruction accepts a number of parameters:

  1. The first parameter is the variable where a result code is placed. This code indicates if the post was successful or not.
  2. The second parameter is the PWS station ID as a quoted string.
  3. The third parameter is your account password as a quoted string.
  4. The fourth and fifth parameters are the arrays that contain your weather and air-quality data. If you are not using one or the other, simply enter a zero.
  5. There are also three optional parameters that most users do not use, and they aren’t used in our example. These optional parameters are used to specify the data timestamp in terms of seconds-since-1990, the desired UTC offset (difference in hours and minutes between Coordinated Universal Time and a location’s observed time), and an additional string-formatted diagnostics result field.

If you were to include all of the parameters, the instruction would look like this:

Call wundergroundPWS(Result,ID,Pass,Weather,AirQual,Timestamp,UTCOffset,ServerResponse)

#5 - Fill the array and call the instruction

The final step to post your data to the Weather Underground website is to put the data into your array and call the wundergroundPWS() instruction.

Tip: You can use the TimeIntoInterval() instruction to control how often data is posted over the Internet.

When you have completed the steps, your program might look similar to this:


'include the contents of wunderground.dld
'that has been placed on the datalogger cpu drive
Include "CPU:wunderground.dld"
Dim WxData(11)

Public Result
Public WindSpeed_MPH, WindDir, TRHData(2)
Alias TRHData(1) = AirTemp_F, RH
BeginProg
Scan(1,Min,1,0)
'measure 05103 windspeed and direction;
'then measure cs215 temp/RH probe with SDI-12;
PulseCount(WindSpeed_MPH,1,U4,5,1,0.2192,0)
BrHalf(WindDir,1,mV5000,U2,U1,1,2500,True,20000,60,355,0)
If WindDir>=360 Or WindDir<0 Then WindDir=0
SDI12Recorder(TRHData(),C1,"0","M!",1,0)
AirTemp_F=AirTemp_F*1.8+32
If TimeIntoInterval(0,10,Min) Then
'initialize array with NAN;
'then populate with data;
'then call our instruction
WxData() = NAN
WxData(1) = WindDir
WxData(2) = WindSpeed_MPH
WxData(9) = RH
WxData(11) = AirTemp_F
Call wundergroundPWS(Result,"stationID","password",WxData,0)
EndIf

NextScan
EndProg

Conclusion

By using the wunderground.dld file with the wundergroundPWS() instruction, along with the CRBasic Include() instruction, I hope you’re able to successfully post your data to the Weather Underground website. If it’s helpful to you, you can copy my example program file.

Be sure to post your Station ID below, so we can see your data display. Let us know if your experience went smoothly or if you have any questions.


Share This Article



About the Author

sam utley Sam Utley is the Vice President of Sales and Marketing at Campbell Scientific, Inc. His deep understanding and appreciation for Campbell Scientific customers and their need for measurement and control solutions developed from his experience as a Campbell Scientific customer, sales and support engineer, and product manager. Sam is a University of Georgia Biological and Agricultural Engineer graduate.

View all articles by this author.


Comments

IslandMan | 12/15/2016 at 11:42 AM

Thanks Sam.

Link to my weather station.

https://www.wunderground.com/us/ny/kings-park/zmw:11754.1.99999?MR=1

gonzalig | 03/29/2017 at 10:53 AM

Sam

 

I thanks you for this post, Its really helpful. The sub was working great in my CR1000 Ver 30 until I upgrade OS to 32. Now the part for the UTC has commands that don’t compile under the new OS.

Can you help?

GaryTRoberts | 03/29/2017 at 01:00 PM

gonzalig,

Thank you for finding and reporting this bug.  We have fixed it and it will be part of a bug fix release we are planning in the very near future.  The fix will be included in CR6 OS 06.03 and CR1000/CR800/CR3000 OS 31.03.

gonzalig | 03/31/2017 at 10:41 AM

GaryTRoberts

Yes, I meant I upgraded to 31.02. I´ll look forward to get the new OS.

Perhaps it’s not as popular but is there a post like this to help us send data to CWOP / MADIS? Your colleagues from Au already help some, but not all the times my data gets received by MADIS.

cellectronic | 11/17/2017 at 11:49 AM

Hi Guys, 

I am wondering if the bugs got sorted ? I have an error when trying to compile and the offending line is 

Call wundergroundPWS(Result,"stationID","password",WxData,0)

with the error Undeclared variable Result,, Any ideas anyone  ? Please.

uplander | 11/28/2017 at 11:42 AM

This sounds like your program needs to have the variable 'result' declared.  Add the following line to the other Public declarations at the beginning of your program:

Public  Result

Please log in or register to comment.


We're active on Social Media!
Stay informed with our latest updates by following us on these platforms: