From e4e9629a932797465e8715a3698595e9cfee6402 Mon Sep 17 00:00:00 2001 From: Kelly Kristek Date: Sat, 19 Nov 2016 20:02:10 -0800 Subject: [PATCH] MSA-1594: This simple app helps people with virtual 3 way switches work properly. The 'smart lights' app doesn't work properly and sometimes a switch can be in the 'on' state with the light off, and a persons pushes on, and the switch does nothing. My app fixes this so that the 2 light switches are constantly in the same state regardless of where the light is turned on or off (even if its done so within smart things!). However there can be up to a 10 second delay between the aux switch getting the new info to turn on or off to match the primary switch ( i do not know if there's any way for me to speed this up). This code is very simple and should protect against infinite loops. --- .../switch-sync.src/switch-sync.groovy | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 smartapps/electricview/switch-sync.src/switch-sync.groovy diff --git a/smartapps/electricview/switch-sync.src/switch-sync.groovy b/smartapps/electricview/switch-sync.src/switch-sync.groovy new file mode 100644 index 0000000..a91a755 --- /dev/null +++ b/smartapps/electricview/switch-sync.src/switch-sync.groovy @@ -0,0 +1,91 @@ +/** + * Switch Sync + * + * Copyright 2016 Kelly Kristek + * + * 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: "Switch Sync", + namespace: "Electricview", + author: "Kelly Kristek", + description: "This is an app that attempts to keep your virtual 3 way switches in sync regardless of where they are iniated from.\r\n", + category: "Convenience", + iconUrl: "http://i230.photobucket.com/albums/ee70/pickyassgamer/switchsyncsmall.png", + iconX2Url: "http://i230.photobucket.com/albums/ee70/pickyassgamer/switchsyncmedium.png", + iconX3Url: "http://i230.photobucket.com/albums/ee70/pickyassgamer/switchsync.png") + + +preferences { + section("Select Mains Switch") { + input "firstswitch", "capability.switch", required: true + } + section("Select AUX switch") { + input "secondswitch", "capability.switch", required: true + } +} + +def installed() { + log.debug "Installed with settings: ${settings}" + + initialize() +} + +def updated() { + log.debug "Updated with settings: ${settings}" + + unsubscribe() + initialize() +} + +def initialize() { + subscribe(firstswitch, "switch.on", firstswitchon) + subscribe(firstswitch, "switch.off", firstswitchoff) + subscribe(secondswitch,"switch.on", secondswitchon) + subscribe(secondswitch,"switch.off", secondswitchoff) +} +def firstswitchon(evt){ + log.debug "FirstSwitchOn called: $evt" + + // Adding an if statement to verify the switch isn't already in the position we desire, to avoid endless loops + if( "off" == secondswitch.currentSwitch) { + secondswitch.on() + } +} + +def firstswitchoff(evt){ + log.debug "FirstSwitchOff called: $evt" + + // Adding an if statement to verify the switch isn't already in the position we desire, to avoid endless loops + if ( "on" == secondswitch.currentSwitch){ + secondswitch.off() + } +} + +def secondswitchon(evt){ + log.debug "SecondSwitchOn called: $evt" + + // Adding an if statement to verify the switch isn't already in the position we desire, to avoid endless loops + if ( "off" == firstswitch.currentSwitch){ + firstswitch.on() + } +} + +def secondswitchoff(evt){ + log.debug "SecondSwitchOff called: $evt" + + // Adding an if statement to verify the switch isn't already in the position we desire, to avoid endless loops + if ( "on" == firstswitch.currentSwitch){ + firstswitch.off() + } +} + +// TODO: implement event handlers \ No newline at end of file