Compare commits

..

1 Commits

Author SHA1 Message Date
Brian Steere 559bc31194 Update weather station tile
Now with actual lux calculation when solar radiation data is available. Also includes refresh/polling capabilities
2016-12-19 11:32:25 -06:00
2 changed files with 47 additions and 144 deletions
@@ -16,12 +16,15 @@
* *
* Date: 2013-04-30 * Date: 2013-04-30
*/ */
// for the UI
metadata { metadata {
// Automatically generated. Make future change here.
definition (name: "SmartWeather Station Tile", namespace: "smartthings", author: "SmartThings") { definition (name: "SmartWeather Station Tile", namespace: "smartthings", author: "SmartThings") {
capability "Illuminance Measurement" capability "Illuminance Measurement"
capability "Temperature Measurement" capability "Temperature Measurement"
capability "Relative Humidity Measurement" capability "Relative Humidity Measurement"
capability "Sensor" capability "Sensor"
capability "Polling"
attribute "localSunrise", "string" attribute "localSunrise", "string"
attribute "localSunset", "string" attribute "localSunset", "string"
@@ -214,7 +217,7 @@ def poll() {
send(name: "localSunrise", value: localSunrise, descriptionText: "Sunrise today is at $localSunrise") send(name: "localSunrise", value: localSunrise, descriptionText: "Sunrise today is at $localSunrise")
send(name: "localSunset", value: localSunset, descriptionText: "Sunset today at is $localSunset") send(name: "localSunset", value: localSunset, descriptionText: "Sunset today at is $localSunset")
send(name: "illuminance", value: estimateLux(sunriseDate, sunsetDate, weatherIcon)) send(name: "illuminance", value: estimateLux(obs.solarradiation, sunriseDate, sunsetDate, weatherIcon) as Integer)
// Forecast // Forecast
def f = get("forecast") def f = get("forecast")
@@ -305,48 +308,53 @@ private send(map) {
sendEvent(map) sendEvent(map)
} }
private estimateLux(sunriseDate, sunsetDate, weatherIcon) { private estimateLux(solarradiation, sunriseDate, sunsetDate, weatherIcon) {
def lux = 0 def lux = 0
def now = new Date().time
if (now > sunriseDate.time && now < sunsetDate.time) {
//day
switch(weatherIcon) {
case 'tstorms':
lux = 200
break
case ['cloudy', 'fog', 'rain', 'sleet', 'snow', 'flurries',
'chanceflurries', 'chancerain', 'chancesleet',
'chancesnow', 'chancetstorms']:
lux = 1000
break
case 'mostlycloudy':
lux = 2500
break
case ['partlysunny', 'partlycloudy', 'hazy']:
lux = 7500
break
default:
//sunny, clear
lux = 10000
}
//adjust for dusk/dawn if (solarradiation != '--') {
def afterSunrise = now - sunriseDate.time lux = solarradiation.toDouble() / 0.0079
def beforeSunset = sunsetDate.time - now } else {
def oneHour = 1000 * 60 * 60 def now = new Date().time
if (now > sunriseDate.time && now < sunsetDate.time) {
//day
switch(weatherIcon) {
case 'tstorms':
lux = 200
break
case ['cloudy', 'fog', 'rain', 'sleet', 'snow', 'flurries',
'chanceflurries', 'chancerain', 'chancesleet',
'chancesnow', 'chancetstorms']:
lux = 1000
break
case 'mostlycloudy':
lux = 2500
break
case ['partlysunny', 'partlycloudy', 'hazy']:
lux = 7500
break
default:
//sunny, clear
lux = 10000
}
if(afterSunrise < oneHour) { //adjust for dusk/dawn
//dawn def afterSunrise = now - sunriseDate.time
lux = (long)(lux * (afterSunrise/oneHour)) def beforeSunset = sunsetDate.time - now
} else if (beforeSunset < oneHour) { def oneHour = 1000 * 60 * 60
//dusk
lux = (long)(lux * (beforeSunset/oneHour)) if(afterSunrise < oneHour) {
//dawn
lux = (long)(lux * (afterSunrise/oneHour))
} else if (beforeSunset < oneHour) {
//dusk
lux = (long)(lux * (beforeSunset/oneHour))
}
}
else {
//night - always set to 10 for now
//could do calculations for dusk/dawn too
lux = 10
} }
}
else {
//night - always set to 10 for now
//could do calculations for dusk/dawn too
lux = 10
} }
lux lux
@@ -1,105 +0,0 @@
/**
* Copyright 2015 Brian Todoroff
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
* for the specific language governing permissions and limitations under the License.
*
* Party Lights
*
* Author: Brian Todoroff
*
* Date: 2016-12-06
*/
definition(
name: "Party Lights",
namespace: "btodoroff",
author: "Brian Todoroff",
description: "Flashes a set of lights",
category: "Convenience",
iconUrl: "https://s3.amazonaws.com/smartapp-icons/Meta/light_outlet.png",
iconX2Url: "https://s3.amazonaws.com/smartapp-icons/Meta/light_outlet@2x.png"
)
preferences {
section("When this switch is turned on or off") {
input "master", "capability.switch", title: "Where?"
}
section("At start, turn off all of these switches") {
input "offSwitches", "capability.switch", multiple: true, required: false
}
section("And turn on all of these switches") {
input "onSwitches", "capability.switch", multiple: true, required: false
}
section("Start randomly toggling these switches") {
input "switches", "capability.switch", multiple: true, required: true
}
}
def installed()
{
initialize()
}
def updated()
{
unsubscribe()
initialize()
}
def initialize()
{
state.flashing = false;
state.random = new Random()
state.on = false;
state.light = 0;
subscribe(master, "switch.on", onHandler)
subscribe(master, "switch.off", offHandler)
}
def logHandler(evt) {
log.debug evt.value
}
def onHandler(evt) {
log.debug evt.value
log.debug onSwitches
onSwitches?.on()
offSwitches?.off()
state.flashing = true
runIn(1,flashHandler)
}
def offHandler(evt) {
log.debug evt.value
log.debug offSwitches
state.flashing = false
}
def flashHandler()
{
def curLight = switches[new Random().nextInt(switches.size())]
def curValue = curLight.currentValue("switch")
log.debug curLight
if(curValue == "on")
{
curLight.off()
}
else
{
curLight.on()
}
//switches[state.light].off()
//state.light = state.light+1
//if(state.light > switches.size()-1) state.light = 0
//log.debug state.light
//switches[state.light].on()
if(state.flashing == true) runIn(1,flashHandler)
}