Compare commits

..

1 Commits

Author SHA1 Message Date
Brian Todoroff 839d50bf40 MSA-1641: Dance party on demand! Randomly toggles the selected list. 2016-12-07 19:26:47 -08:00
2 changed files with 145 additions and 48 deletions
@@ -16,15 +16,12 @@
* *
* 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"
@@ -217,7 +214,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(obs.solarradiation, sunriseDate, sunsetDate, weatherIcon) as Integer) send(name: "illuminance", value: estimateLux(sunriseDate, sunsetDate, weatherIcon))
// Forecast // Forecast
def f = get("forecast") def f = get("forecast")
@@ -308,54 +305,49 @@ private send(map) {
sendEvent(map) sendEvent(map)
} }
private estimateLux(solarradiation, sunriseDate, sunsetDate, weatherIcon) { private estimateLux(sunriseDate, sunsetDate, weatherIcon) {
def lux = 0 def lux = 0
def now = new Date().time
if (solarradiation != '--') { if (now > sunriseDate.time && now < sunsetDate.time) {
lux = solarradiation.toDouble() / 0.0079 //day
} else { switch(weatherIcon) {
def now = new Date().time case 'tstorms':
if (now > sunriseDate.time && now < sunsetDate.time) { lux = 200
//day break
switch(weatherIcon) { case ['cloudy', 'fog', 'rain', 'sleet', 'snow', 'flurries',
case 'tstorms': 'chanceflurries', 'chancerain', 'chancesleet',
lux = 200 'chancesnow', 'chancetstorms']:
break lux = 1000
case ['cloudy', 'fog', 'rain', 'sleet', 'snow', 'flurries', break
'chanceflurries', 'chancerain', 'chancesleet', case 'mostlycloudy':
'chancesnow', 'chancetstorms']: lux = 2500
lux = 1000 break
break case ['partlysunny', 'partlycloudy', 'hazy']:
case 'mostlycloudy': lux = 7500
lux = 2500 break
break default:
case ['partlysunny', 'partlycloudy', 'hazy']: //sunny, clear
lux = 7500 lux = 10000
break
default:
//sunny, clear
lux = 10000
}
//adjust for dusk/dawn
def afterSunrise = now - sunriseDate.time
def beforeSunset = sunsetDate.time - now
def oneHour = 1000 * 60 * 60
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 //adjust for dusk/dawn
//could do calculations for dusk/dawn too def afterSunrise = now - sunriseDate.time
lux = 10 def beforeSunset = sunsetDate.time - now
def oneHour = 1000 * 60 * 60
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
}
lux lux
} }
@@ -0,0 +1,105 @@
/**
* 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)
}