mirror of
https://github.com/mtan93/SmartThingsPublic.git
synced 2026-03-22 21:03:51 +00:00
Compare commits
1 Commits
MSA-2147-2
...
MSA-2151-1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c33d51179 |
133
smartapps/microsoft/cortana-skill.src/cortana-skill.groovy
Normal file
133
smartapps/microsoft/cortana-skill.src/cortana-skill.groovy
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
/**
|
||||||
|
* Cortana Skill
|
||||||
|
*
|
||||||
|
* Copyright 2017 Microsoft Corporation
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
definition(
|
||||||
|
name: "Cortana Skill",
|
||||||
|
namespace: "microsoft",
|
||||||
|
author: "Logan Stromberg",
|
||||||
|
description: "Cortana skill integration",
|
||||||
|
category: "Convenience",
|
||||||
|
iconUrl: "https://botletstorage.blob.core.windows.net/static-template-images/Cortana-64.png",
|
||||||
|
iconX2Url: "https://botletstorage.blob.core.windows.net/static-template-images/Cortana-128.png",
|
||||||
|
iconX3Url: "https://botletstorage.blob.core.windows.net/static-template-images/Cortana-256.png")
|
||||||
|
|
||||||
|
|
||||||
|
preferences(oauthPage: "deviceAuthorization") {
|
||||||
|
page(name: "deviceAuthorization", title: "", install: false, uninstall: true)
|
||||||
|
{
|
||||||
|
section("Switches")
|
||||||
|
{
|
||||||
|
input "switches", "capability.switch", multiple: true, required: false
|
||||||
|
}
|
||||||
|
section("Dimmers")
|
||||||
|
{
|
||||||
|
input "dimmers", "capability.switchLevel", multiple: true, required: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def installed() {
|
||||||
|
//log.debug "Installed with settings: ${settings}"
|
||||||
|
initialize()
|
||||||
|
}
|
||||||
|
|
||||||
|
def updated() {
|
||||||
|
//log.debug "Updated with settings: ${settings}"
|
||||||
|
unsubscribe()
|
||||||
|
initialize()
|
||||||
|
}
|
||||||
|
|
||||||
|
def initialize() {
|
||||||
|
subscribe(app, appTouch)
|
||||||
|
}
|
||||||
|
|
||||||
|
mappings {
|
||||||
|
path("/status") {
|
||||||
|
action: [
|
||||||
|
GET: "showStatus"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/switches/:id") {
|
||||||
|
action: [
|
||||||
|
PUT: "commandSwitch"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
path("/dimmers/:id") {
|
||||||
|
action: [
|
||||||
|
PUT: "commandDimmer"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def showStatus() {
|
||||||
|
|
||||||
|
def returnVal = []
|
||||||
|
switches.each { device ->
|
||||||
|
def s = device.currentState("switch")
|
||||||
|
returnVal.add([type: "switch", id: device.id, label: device.displayName, name: device.displayName, state: s])
|
||||||
|
}
|
||||||
|
dimmers.each { device ->
|
||||||
|
def s = device.currentState("level")
|
||||||
|
returnVal.add([type: "dimmer", id: device.id, label: device.displayName, name: device.displayName, state: s])
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
void commandSwitch() {
|
||||||
|
log.debug "commandSwitch, request: ${request.JSON}, params: ${params}"
|
||||||
|
|
||||||
|
def command = request.JSON?.command
|
||||||
|
|
||||||
|
if (command)
|
||||||
|
{
|
||||||
|
def mySwitch = switches.find { it.id == params.id }
|
||||||
|
|
||||||
|
if (!mySwitch)
|
||||||
|
{
|
||||||
|
mySwitch = dimmers.find { it.id == params.id }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mySwitch)
|
||||||
|
{
|
||||||
|
httpError(404, "Switch not found")
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mySwitch."$command"()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void commandDimmer() {
|
||||||
|
log.debug "commandDimmer, request: ${request.JSON}, params: ${params}"
|
||||||
|
|
||||||
|
def value = request.JSON?.value
|
||||||
|
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
def mySwitch = dimmers.find { it.id == params.id }
|
||||||
|
|
||||||
|
if (!mySwitch)
|
||||||
|
{
|
||||||
|
httpError(404, "Dimmer not found")
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log.debug "setting value to ${value}"
|
||||||
|
mySwitch.setLevel(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,344 +1,344 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2015 SmartThings
|
* Copyright 2015 SmartThings
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
* 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:
|
* in compliance with the License. You may obtain a copy of the License at:
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* 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
|
* 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
|
* 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.
|
* for the specific language governing permissions and limitations under the License.
|
||||||
*
|
*
|
||||||
* Button Controller
|
* Button Controller
|
||||||
*
|
*
|
||||||
* Author: SmartThings
|
* Author: SmartThings
|
||||||
* Date: 2014-5-21
|
* Date: 2014-5-21
|
||||||
*/
|
*/
|
||||||
definition(
|
definition(
|
||||||
name: "Button Controller",
|
name: "Button Controller",
|
||||||
namespace: "smartthings",
|
namespace: "smartthings",
|
||||||
author: "SmartThings",
|
author: "SmartThings",
|
||||||
description: "Control devices with buttons like the Aeon Labs Minimote",
|
description: "Control devices with buttons like the Aeon Labs Minimote",
|
||||||
category: "Convenience",
|
category: "Convenience",
|
||||||
iconUrl: "https://s3.amazonaws.com/smartapp-icons/MyApps/Cat-MyApps.png",
|
iconUrl: "https://s3.amazonaws.com/smartapp-icons/MyApps/Cat-MyApps.png",
|
||||||
iconX2Url: "https://s3.amazonaws.com/smartapp-icons/MyApps/Cat-MyApps@2x.png"
|
iconX2Url: "https://s3.amazonaws.com/smartapp-icons/MyApps/Cat-MyApps@2x.png"
|
||||||
)
|
)
|
||||||
|
|
||||||
preferences {
|
preferences {
|
||||||
page(name: "selectButton")
|
page(name: "selectButton")
|
||||||
for (def i=1; i<=8; i++) {
|
for (def i=1; i<=8; i++) {
|
||||||
page(name: "configureButton$i")
|
page(name: "configureButton$i")
|
||||||
}
|
}
|
||||||
|
|
||||||
page(name: "timeIntervalInput", title: "Only during a certain time") {
|
page(name: "timeIntervalInput", title: "Only during a certain time") {
|
||||||
section {
|
section {
|
||||||
input "starting", "time", title: "Starting", required: false
|
input "starting", "time", title: "Starting", required: false
|
||||||
input "ending", "time", title: "Ending", required: false
|
input "ending", "time", title: "Ending", required: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def selectButton() {
|
def selectButton() {
|
||||||
dynamicPage(name: "selectButton", title: "First, select your button device", nextPage: "configureButton1", uninstall: configured()) {
|
dynamicPage(name: "selectButton", title: "First, select your button device", nextPage: "configureButton1", uninstall: configured()) {
|
||||||
section {
|
section {
|
||||||
input "buttonDevice", "capability.button", title: "Button", multiple: false, required: true
|
input "buttonDevice", "capability.button", title: "Button", multiple: false, required: true
|
||||||
}
|
}
|
||||||
|
|
||||||
section(title: "More options", hidden: hideOptionsSection(), hideable: true) {
|
section(title: "More options", hidden: hideOptionsSection(), hideable: true) {
|
||||||
|
|
||||||
def timeLabel = timeIntervalLabel()
|
def timeLabel = timeIntervalLabel()
|
||||||
|
|
||||||
href "timeIntervalInput", title: "Only during a certain time", description: timeLabel ?: "Tap to set", state: timeLabel ? "complete" : null
|
href "timeIntervalInput", title: "Only during a certain time", description: timeLabel ?: "Tap to set", state: timeLabel ? "complete" : null
|
||||||
|
|
||||||
input "days", "enum", title: "Only on certain days of the week", multiple: true, required: false,
|
input "days", "enum", title: "Only on certain days of the week", multiple: true, required: false,
|
||||||
options: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
|
options: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
|
||||||
|
|
||||||
input "modes", "mode", title: "Only when mode is", multiple: true, required: false
|
input "modes", "mode", title: "Only when mode is", multiple: true, required: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def createPage(pageNum) {
|
def createPage(pageNum) {
|
||||||
if ((state.numButton == pageNum) || (pageNum == 8))
|
if ((state.numButton == pageNum) || (pageNum == 8))
|
||||||
state.installCondition = true
|
state.installCondition = true
|
||||||
dynamicPage(name: "configureButton$pageNum", title: "Set up button $pageNum here",
|
dynamicPage(name: "configureButton$pageNum", title: "Set up button $pageNum here",
|
||||||
nextPage: "configureButton${pageNum+1}", install: state.installCondition, uninstall: configured(), getButtonSections(pageNum))
|
nextPage: "configureButton${pageNum+1}", install: state.installCondition, uninstall: configured(), getButtonSections(pageNum))
|
||||||
}
|
}
|
||||||
|
|
||||||
def configureButton1() {
|
def configureButton1() {
|
||||||
state.numButton = buttonDevice.currentState("numberOfButtons")?.longValue ?: 4
|
state.numButton = buttonDevice.currentState("numberOfButtons")?.longValue ?: 4
|
||||||
log.debug "state variable numButton: ${state.numButton}"
|
log.debug "state variable numButton: ${state.numButton}"
|
||||||
state.installCondition = false
|
state.installCondition = false
|
||||||
createPage(1)
|
createPage(1)
|
||||||
}
|
}
|
||||||
def configureButton2() {
|
def configureButton2() {
|
||||||
createPage(2)
|
createPage(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
def configureButton3() {
|
def configureButton3() {
|
||||||
createPage(3)
|
createPage(3)
|
||||||
}
|
}
|
||||||
|
|
||||||
def configureButton4() {
|
def configureButton4() {
|
||||||
createPage(4)
|
createPage(4)
|
||||||
}
|
}
|
||||||
|
|
||||||
def configureButton5() {
|
def configureButton5() {
|
||||||
createPage(5)
|
createPage(5)
|
||||||
}
|
}
|
||||||
|
|
||||||
def configureButton6() {
|
def configureButton6() {
|
||||||
createPage(6)
|
createPage(6)
|
||||||
}
|
}
|
||||||
|
|
||||||
def configureButton7() {
|
def configureButton7() {
|
||||||
createPage(7)
|
createPage(7)
|
||||||
}
|
}
|
||||||
|
|
||||||
def configureButton8() {
|
def configureButton8() {
|
||||||
createPage(8)
|
createPage(8)
|
||||||
}
|
}
|
||||||
|
|
||||||
def getButtonSections(buttonNumber) {
|
def getButtonSections(buttonNumber) {
|
||||||
return {
|
return {
|
||||||
section("Lights") {
|
section("Lights") {
|
||||||
input "lights_${buttonNumber}_pushed", "capability.switch", title: "Pushed", multiple: true, required: false
|
input "lights_${buttonNumber}_pushed", "capability.switch", title: "Pushed", multiple: true, required: false
|
||||||
input "lights_${buttonNumber}_held", "capability.switch", title: "Held", multiple: true, required: false
|
input "lights_${buttonNumber}_held", "capability.switch", title: "Held", multiple: true, required: false
|
||||||
}
|
}
|
||||||
section("Locks") {
|
section("Locks") {
|
||||||
input "locks_${buttonNumber}_pushed", "capability.lock", title: "Pushed", multiple: true, required: false
|
input "locks_${buttonNumber}_pushed", "capability.lock", title: "Pushed", multiple: true, required: false
|
||||||
input "locks_${buttonNumber}_held", "capability.lock", title: "Held", multiple: true, required: false
|
input "locks_${buttonNumber}_held", "capability.lock", title: "Held", multiple: true, required: false
|
||||||
}
|
}
|
||||||
section("Sonos") {
|
section("Sonos") {
|
||||||
input "sonos_${buttonNumber}_pushed", "capability.musicPlayer", title: "Pushed", multiple: true, required: false
|
input "sonos_${buttonNumber}_pushed", "capability.musicPlayer", title: "Pushed", multiple: true, required: false
|
||||||
input "sonos_${buttonNumber}_held", "capability.musicPlayer", title: "Held", multiple: true, required: false
|
input "sonos_${buttonNumber}_held", "capability.musicPlayer", title: "Held", multiple: true, required: false
|
||||||
}
|
}
|
||||||
section("Modes") {
|
section("Modes") {
|
||||||
input "mode_${buttonNumber}_pushed", "mode", title: "Pushed", required: false
|
input "mode_${buttonNumber}_pushed", "mode", title: "Pushed", required: false
|
||||||
input "mode_${buttonNumber}_held", "mode", title: "Held", required: false
|
input "mode_${buttonNumber}_held", "mode", title: "Held", required: false
|
||||||
}
|
}
|
||||||
def phrases = location.helloHome?.getPhrases()*.label
|
def phrases = location.helloHome?.getPhrases()*.label
|
||||||
if (phrases) {
|
if (phrases) {
|
||||||
section("Hello Home Actions") {
|
section("Hello Home Actions") {
|
||||||
log.trace phrases
|
log.trace phrases
|
||||||
input "phrase_${buttonNumber}_pushed", "enum", title: "Pushed", required: false, options: phrases
|
input "phrase_${buttonNumber}_pushed", "enum", title: "Pushed", required: false, options: phrases
|
||||||
input "phrase_${buttonNumber}_held", "enum", title: "Held", required: false, options: phrases
|
input "phrase_${buttonNumber}_held", "enum", title: "Held", required: false, options: phrases
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
section("Sirens") {
|
section("Sirens") {
|
||||||
input "sirens_${buttonNumber}_pushed","capability.alarm" ,title: "Pushed", multiple: true, required: false
|
input "sirens_${buttonNumber}_pushed","capability.alarm" ,title: "Pushed", multiple: true, required: false
|
||||||
input "sirens_${buttonNumber}_held", "capability.alarm", title: "Held", multiple: true, required: false
|
input "sirens_${buttonNumber}_held", "capability.alarm", title: "Held", multiple: true, required: false
|
||||||
}
|
}
|
||||||
|
|
||||||
section("Custom Message") {
|
section("Custom Message") {
|
||||||
input "textMessage_${buttonNumber}", "text", title: "Message", required: false
|
input "textMessage_${buttonNumber}", "text", title: "Message", required: false
|
||||||
}
|
}
|
||||||
|
|
||||||
section("Push Notifications") {
|
section("Push Notifications") {
|
||||||
input "notifications_${buttonNumber}_pushed","bool" ,title: "Pushed", required: false, defaultValue: false
|
input "notifications_${buttonNumber}_pushed","bool" ,title: "Pushed", required: false, defaultValue: false
|
||||||
input "notifications_${buttonNumber}_held", "bool", title: "Held", required: false, defaultValue: false
|
input "notifications_${buttonNumber}_held", "bool", title: "Held", required: false, defaultValue: false
|
||||||
}
|
}
|
||||||
|
|
||||||
section("Sms Notifications") {
|
section("Sms Notifications") {
|
||||||
input "phone_${buttonNumber}_pushed","phone" ,title: "Pushed", required: false
|
input "phone_${buttonNumber}_pushed","phone" ,title: "Pushed", required: false
|
||||||
input "phone_${buttonNumber}_held", "phone", title: "Held", required: false
|
input "phone_${buttonNumber}_held", "phone", title: "Held", required: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def installed() {
|
def installed() {
|
||||||
initialize()
|
initialize()
|
||||||
}
|
}
|
||||||
|
|
||||||
def updated() {
|
def updated() {
|
||||||
unsubscribe()
|
unsubscribe()
|
||||||
initialize()
|
initialize()
|
||||||
}
|
}
|
||||||
|
|
||||||
def initialize() {
|
def initialize() {
|
||||||
subscribe(buttonDevice, "button", buttonEvent)
|
subscribe(buttonDevice, "button", buttonEvent)
|
||||||
}
|
}
|
||||||
|
|
||||||
def configured() {
|
def configured() {
|
||||||
return buttonDevice || buttonConfigured(1) || buttonConfigured(2) || buttonConfigured(3) || buttonConfigured(4)
|
return buttonDevice || buttonConfigured(1) || buttonConfigured(2) || buttonConfigured(3) || buttonConfigured(4)
|
||||||
}
|
}
|
||||||
|
|
||||||
def buttonConfigured(idx) {
|
def buttonConfigured(idx) {
|
||||||
return settings["lights_$idx_pushed"] ||
|
return settings["lights_$idx_pushed"] ||
|
||||||
settings["locks_$idx_pushed"] ||
|
settings["locks_$idx_pushed"] ||
|
||||||
settings["sonos_$idx_pushed"] ||
|
settings["sonos_$idx_pushed"] ||
|
||||||
settings["mode_$idx_pushed"] ||
|
settings["mode_$idx_pushed"] ||
|
||||||
settings["notifications_$idx_pushed"] ||
|
settings["notifications_$idx_pushed"] ||
|
||||||
settings["sirens_$idx_pushed"] ||
|
settings["sirens_$idx_pushed"] ||
|
||||||
settings["notifications_$idx_pushed"] ||
|
settings["notifications_$idx_pushed"] ||
|
||||||
settings["phone_$idx_pushed"]
|
settings["phone_$idx_pushed"]
|
||||||
}
|
}
|
||||||
|
|
||||||
def buttonEvent(evt){
|
def buttonEvent(evt){
|
||||||
if(allOk) {
|
if(allOk) {
|
||||||
def buttonNumber = evt.data // why doesn't jsonData work? always returning [:]
|
def buttonNumber = evt.data // why doesn't jsonData work? always returning [:]
|
||||||
def value = evt.value
|
def value = evt.value
|
||||||
log.debug "buttonEvent: $evt.name = $evt.value ($evt.data)"
|
log.debug "buttonEvent: $evt.name = $evt.value ($evt.data)"
|
||||||
log.debug "button: $buttonNumber, value: $value"
|
log.debug "button: $buttonNumber, value: $value"
|
||||||
|
|
||||||
def recentEvents = buttonDevice.eventsSince(new Date(now() - 3000)).findAll{it.value == evt.value && it.data == evt.data}
|
def recentEvents = buttonDevice.eventsSince(new Date(now() - 3000)).findAll{it.value == evt.value && it.data == evt.data}
|
||||||
log.debug "Found ${recentEvents.size()?:0} events in past 3 seconds"
|
log.debug "Found ${recentEvents.size()?:0} events in past 3 seconds"
|
||||||
|
|
||||||
if(recentEvents.size <= 1){
|
if(recentEvents.size <= 1){
|
||||||
switch(buttonNumber) {
|
switch(buttonNumber) {
|
||||||
case ~/.*1.*/:
|
case ~/.*1.*/:
|
||||||
executeHandlers(1, value)
|
executeHandlers(1, value)
|
||||||
break
|
break
|
||||||
case ~/.*2.*/:
|
case ~/.*2.*/:
|
||||||
executeHandlers(2, value)
|
executeHandlers(2, value)
|
||||||
break
|
break
|
||||||
case ~/.*3.*/:
|
case ~/.*3.*/:
|
||||||
executeHandlers(3, value)
|
executeHandlers(3, value)
|
||||||
break
|
break
|
||||||
case ~/.*4.*/:
|
case ~/.*4.*/:
|
||||||
executeHandlers(4, value)
|
executeHandlers(4, value)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.debug "Found recent button press events for $buttonNumber with value $value"
|
log.debug "Found recent button press events for $buttonNumber with value $value"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def executeHandlers(buttonNumber, value) {
|
def executeHandlers(buttonNumber, value) {
|
||||||
log.debug "executeHandlers: $buttonNumber - $value"
|
log.debug "executeHandlers: $buttonNumber - $value"
|
||||||
|
|
||||||
def lights = find('lights', buttonNumber, value)
|
def lights = find('lights', buttonNumber, value)
|
||||||
if (lights != null) toggle(lights)
|
if (lights != null) toggle(lights)
|
||||||
|
|
||||||
def locks = find('locks', buttonNumber, value)
|
def locks = find('locks', buttonNumber, value)
|
||||||
if (locks != null) toggle(locks)
|
if (locks != null) toggle(locks)
|
||||||
|
|
||||||
def sonos = find('sonos', buttonNumber, value)
|
def sonos = find('sonos', buttonNumber, value)
|
||||||
if (sonos != null) toggle(sonos)
|
if (sonos != null) toggle(sonos)
|
||||||
|
|
||||||
def mode = find('mode', buttonNumber, value)
|
def mode = find('mode', buttonNumber, value)
|
||||||
if (mode != null) changeMode(mode)
|
if (mode != null) changeMode(mode)
|
||||||
|
|
||||||
def phrase = find('phrase', buttonNumber, value)
|
def phrase = find('phrase', buttonNumber, value)
|
||||||
if (phrase != null) location.helloHome.execute(phrase)
|
if (phrase != null) location.helloHome.execute(phrase)
|
||||||
|
|
||||||
def textMessage = findMsg('textMessage', buttonNumber)
|
def textMessage = findMsg('textMessage', buttonNumber)
|
||||||
|
|
||||||
def notifications = find('notifications', buttonNumber, value)
|
def notifications = find('notifications', buttonNumber, value)
|
||||||
if (notifications?.toBoolean()) sendPush(textMessage ?: "Button $buttonNumber was pressed" )
|
if (notifications?.toBoolean()) sendPush(textMessage ?: "Button $buttonNumber was pressed" )
|
||||||
|
|
||||||
def phone = find('phone', buttonNumber, value)
|
def phone = find('phone', buttonNumber, value)
|
||||||
if (phone != null) sendSms(phone, textMessage ?:"Button $buttonNumber was pressed")
|
if (phone != null) sendSms(phone, textMessage ?:"Button $buttonNumber was pressed")
|
||||||
|
|
||||||
def sirens = find('sirens', buttonNumber, value)
|
def sirens = find('sirens', buttonNumber, value)
|
||||||
if (sirens != null) toggle(sirens)
|
if (sirens != null) toggle(sirens)
|
||||||
}
|
}
|
||||||
|
|
||||||
def find(type, buttonNumber, value) {
|
def find(type, buttonNumber, value) {
|
||||||
def preferenceName = type + "_" + buttonNumber + "_" + value
|
def preferenceName = type + "_" + buttonNumber + "_" + value
|
||||||
def pref = settings[preferenceName]
|
def pref = settings[preferenceName]
|
||||||
if(pref != null) {
|
if(pref != null) {
|
||||||
log.debug "Found: $pref for $preferenceName"
|
log.debug "Found: $pref for $preferenceName"
|
||||||
}
|
}
|
||||||
|
|
||||||
return pref
|
return pref
|
||||||
}
|
}
|
||||||
|
|
||||||
def findMsg(type, buttonNumber) {
|
def findMsg(type, buttonNumber) {
|
||||||
def preferenceName = type + "_" + buttonNumber
|
def preferenceName = type + "_" + buttonNumber
|
||||||
def pref = settings[preferenceName]
|
def pref = settings[preferenceName]
|
||||||
if(pref != null) {
|
if(pref != null) {
|
||||||
log.debug "Found: $pref for $preferenceName"
|
log.debug "Found: $pref for $preferenceName"
|
||||||
}
|
}
|
||||||
|
|
||||||
return pref
|
return pref
|
||||||
}
|
}
|
||||||
|
|
||||||
def toggle(devices) {
|
def toggle(devices) {
|
||||||
log.debug "toggle: $devices = ${devices*.currentValue('switch')}"
|
log.debug "toggle: $devices = ${devices*.currentValue('switch')}"
|
||||||
|
|
||||||
if (devices*.currentValue('switch').contains('on')) {
|
if (devices*.currentValue('switch').contains('on')) {
|
||||||
devices.off()
|
devices.off()
|
||||||
}
|
}
|
||||||
else if (devices*.currentValue('switch').contains('off')) {
|
else if (devices*.currentValue('switch').contains('off')) {
|
||||||
devices.on()
|
devices.on()
|
||||||
}
|
}
|
||||||
else if (devices*.currentValue('lock').contains('locked')) {
|
else if (devices*.currentValue('lock').contains('locked')) {
|
||||||
devices.unlock()
|
devices.unlock()
|
||||||
}
|
}
|
||||||
else if (devices*.currentValue('lock').contains('unlocked')) {
|
else if (devices*.currentValue('lock').contains('unlocked')) {
|
||||||
devices.lock()
|
devices.lock()
|
||||||
}
|
}
|
||||||
else if (devices*.currentValue('alarm').contains('off')) {
|
else if (devices*.currentValue('alarm').contains('off')) {
|
||||||
devices.siren()
|
devices.siren()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
devices.on()
|
devices.on()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def changeMode(mode) {
|
def changeMode(mode) {
|
||||||
log.debug "changeMode: $mode, location.mode = $location.mode, location.modes = $location.modes"
|
log.debug "changeMode: $mode, location.mode = $location.mode, location.modes = $location.modes"
|
||||||
|
|
||||||
if (location.mode != mode && location.modes?.find { it.name == mode }) {
|
if (location.mode != mode && location.modes?.find { it.name == mode }) {
|
||||||
setLocationMode(mode)
|
setLocationMode(mode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// execution filter methods
|
// execution filter methods
|
||||||
private getAllOk() {
|
private getAllOk() {
|
||||||
modeOk && daysOk && timeOk
|
modeOk && daysOk && timeOk
|
||||||
}
|
}
|
||||||
|
|
||||||
private getModeOk() {
|
private getModeOk() {
|
||||||
def result = !modes || modes.contains(location.mode)
|
def result = !modes || modes.contains(location.mode)
|
||||||
log.trace "modeOk = $result"
|
log.trace "modeOk = $result"
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
private getDaysOk() {
|
private getDaysOk() {
|
||||||
def result = true
|
def result = true
|
||||||
if (days) {
|
if (days) {
|
||||||
def df = new java.text.SimpleDateFormat("EEEE")
|
def df = new java.text.SimpleDateFormat("EEEE")
|
||||||
if (location.timeZone) {
|
if (location.timeZone) {
|
||||||
df.setTimeZone(location.timeZone)
|
df.setTimeZone(location.timeZone)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
df.setTimeZone(TimeZone.getTimeZone("America/New_York"))
|
df.setTimeZone(TimeZone.getTimeZone("America/New_York"))
|
||||||
}
|
}
|
||||||
def day = df.format(new Date())
|
def day = df.format(new Date())
|
||||||
result = days.contains(day)
|
result = days.contains(day)
|
||||||
}
|
}
|
||||||
log.trace "daysOk = $result"
|
log.trace "daysOk = $result"
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
private getTimeOk() {
|
private getTimeOk() {
|
||||||
def result = true
|
def result = true
|
||||||
if (starting && ending) {
|
if (starting && ending) {
|
||||||
def currTime = now()
|
def currTime = now()
|
||||||
def start = timeToday(starting, location.timeZone).time
|
def start = timeToday(starting, location.timeZone).time
|
||||||
def stop = timeToday(ending, location.timeZone).time
|
def stop = timeToday(ending, location.timeZone).time
|
||||||
result = start < stop ? currTime >= start && currTime <= stop : currTime <= stop || currTime >= start
|
result = start < stop ? currTime >= start && currTime <= stop : currTime <= stop || currTime >= start
|
||||||
}
|
}
|
||||||
log.trace "timeOk = $result"
|
log.trace "timeOk = $result"
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
private hhmm(time, fmt = "h:mm a")
|
private hhmm(time, fmt = "h:mm a")
|
||||||
{
|
{
|
||||||
def t = timeToday(time, location.timeZone)
|
def t = timeToday(time, location.timeZone)
|
||||||
def f = new java.text.SimpleDateFormat(fmt)
|
def f = new java.text.SimpleDateFormat(fmt)
|
||||||
f.setTimeZone(location.timeZone ?: timeZone(time))
|
f.setTimeZone(location.timeZone ?: timeZone(time))
|
||||||
f.format(t)
|
f.format(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
private hideOptionsSection() {
|
private hideOptionsSection() {
|
||||||
(starting || ending || days || modes) ? false : true
|
(starting || ending || days || modes) ? false : true
|
||||||
}
|
}
|
||||||
|
|
||||||
private timeIntervalLabel() {
|
private timeIntervalLabel() {
|
||||||
(starting && ending) ? hhmm(starting) + "-" + hhmm(ending, "h:mm a z") : ""
|
(starting && ending) ? hhmm(starting) + "-" + hhmm(ending, "h:mm a z") : ""
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user