2 * Weather Underground PWS Connect
4 * Copyright 2015 Andrew Mager
6 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
7 * in compliance with the License. You may obtain a copy of the License at:
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
12 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
13 * for the specific language governing permissions and limitations under the License.
17 import java.text.DecimalFormat
20 name: "Weather Underground PWS Connect",
21 namespace: "co.mager",
22 author: "Andrew Mager",
23 description: "Connect your SmartSense Temp/Humidity sensor to your Weather Underground Personal Weather Station.",
24 category: "Green Living",
25 iconUrl: "http://i.imgur.com/HU0ANBp.png",
26 iconX2Url: "http://i.imgur.com/HU0ANBp.png",
27 iconX3Url: "http://i.imgur.com/HU0ANBp.png",
32 section("Select a sensor") {
33 input "temp", "capability.temperatureMeasurement", title: "Temperature", required: true
34 input "humidity", "capability.relativeHumidityMeasurement", title: "Humidity", required: true
36 section("Configure your Weather Underground credentials") {
37 input "weatherID", "text", title: "Weather Station ID", required: true
38 input "password", "password", title: "Weather Underground password", required: true
44 log.debug "Installed with settings: ${settings}"
50 log.debug "Updated with settings: ${settings}"
57 runEvery10Minutes(updateCurrentWeather)
59 log.trace "Temp: " + temp.currentTemperature
60 log.trace "Humidity: " + humidity.currentHumidity
61 log.trace "Dew Point: " + calculateDewPoint(temp.currentTemperature, humidity.currentHumidity)
66 def updateCurrentWeather() {
69 uri: "http://weatherstation.wunderground.com",
70 path: "/weatherstation/updateweatherstation.php",
75 "tempf": temp.currentTemperature,
76 "humidity": humidity.currentHumidity,
77 "dewptf": calculateDewPoint(temp.currentTemperature, humidity.currentHumidity),
78 "action": "updateraw",
79 "softwaretype": "SmartThings"
83 if (temp.currentTemperature) {
85 httpGet(params) { resp ->
86 log.debug "response data: ${resp.data}"
89 log.error "something went wrong: $e"
96 def calculateDewPoint(t, rh) {
97 def dp = 243.04 * ( Math.log(rh / 100) + ( (17.625 * t) / (243.04 + t) ) ) / (17.625 - Math.log(rh / 100) - ( (17.625 * t) / (243.04 + t) ) )
98 return new DecimalFormat("##.##").format(dp)