Hi all,

Below is a vb.net script (save it with a .vb extension) to update Weather Underground (WU) with local weather data. Since I used Oregon Scientific sensors with the RFXCom plugin, I did not have a direct way to upload sensor data to WU and therefore created this script. To use it, you need to have a WU account and station set up. You'll need to modify the script with your own station ID and password, along with the device IDs of your own weather devices. Since WU expect data based on specific units of measure, I had to use formulas to change the values RFXCom reports to ones that WU needs. Depending on how you have your devices configured, you may need to alter or eliminate those formulas. How WU expects data is explained here: http://wiki.wunderground.com/index.p...pload_Protocol.


Sub Main(Parms As Object)

	Dim Debug as Boolean = False
	Dim logName As String = "WUnderground"				'set log name for HS log

	Dim cDateTime As Date = Now.ToUniversalTime()		'retrieve current time and convert to UTC
	If Debug Then hs.writelog(logName,CStr(cDateTime))
	Dim sDateTime As String = cDateTime.ToString("yyyy-MM-dd+HH:mm:ss")	'change time to format required by WUnderground
	sDateTime = Replace(sDateTime,":","%3A")							'URLEncode :
	If Debug Then hs.writelog(logName,sDateTime)

	Dim httpCommand As String = "/weatherstation/updateweatherstation.php?ID=ZZZZZZ&PASSWORD=xxxxxx"  'Change to use your own station ID and password
	httpCommand = httpCommand & "&dateutc=" & sDateTime

	If hs.DeviceString(513) <> "Communication Failure" Then httpCommand = httpCommand & "&winddir=" & CStr(hs.DeviceValueEx(513))
	If hs.DeviceString(506) <> "Communication Failure" Then httpCommand = httpCommand & "&windspeedmph=" & CStr(CDbl(hs.DeviceValueEx(506) * 2.23694))
	If hs.DeviceString(512) <> "Communication Failure" Then httpCommand = httpCommand & "&windgustmph="  & CStr(CDbl(hs.DeviceValueEx(512) * 2.23694))
	If hs.DeviceString(519) <> "Communication Failure" Then httpCommand = httpCommand & "&tempf=" & Replace(CStr(CDbl((hs.DeviceValueEx(519) * 9/5) + 32)),",",".")
	If hs.DeviceString(525) <> "Communication Failure" Then httpCommand = httpCommand & "&dailyrainin=" & CStr(CDbl(hs.DeviceValueEx(525) * 0.0393701))
	If hs.DeviceString(505) <> "Communication Failure" Then httpCommand = httpCommand & "&baromin=" & CStr(CInt(hs.DeviceValueEx(505) * 0.029529988))
	If hs.DeviceString(520) <> "Communication Failure" Then httpCommand = httpCommand & "&dewptf=" & Replace(CStr(CDbl((hs.DeviceValueEx(520) * 9/5) + 32)),",",".")
	If hs.DeviceString(516) <> "Communication Failure" Then httpCommand = httpCommand & "&humidity=" & CStr(hs.DeviceValueEx(511))
	If hs.DeviceString(516) <> "Communication Failure" Then httpCommand = httpCommand & "&uv=" & CStr(hs.DeviceValueEx(516))

	httpCommand = httpCommand & "&softwaretype=hs"
	httpCommand = httpCommand & "&action=updateraw"
	If Debug Then hs.writelog(logName, httpCommand)

	Dim info2 As String = hs.GetURL("weatherstation.wunderground.com",httpCommand,False,80)
	If InStr(info2,"success") > 0 Then
		hs.writelog(logName, "Succesfully Updated")
		hs.writelog(logName, info2)
	End If
End Sub