Fixing conflicting files.
[smartthings-infrastructure.git] / Lock / Lock.groovy
index cc4b466ef22b96ce16409f865f750bd00c18b5fd..0271050af9dd100f9bedc0c430caa4fe3ea8a765 100644 (file)
@@ -3,7 +3,7 @@ package Lock
 import Timer.SimulatedTimer
 
 public class Lock {
-       private int id
+       private String id
        private String label
        private String displayName
        private String lockState
@@ -13,7 +13,7 @@ public class Lock {
        def timers
 
 
-       Lock(Closure sendEvent, int id, String label, String displayName, String lockState, String lockLatestValue) {
+       Lock(Closure sendEvent, String id, String label, String displayName, String lockState, String lockLatestValue) {
                this.id = id
                this.label = label
                this.sendEvent = sendEvent
@@ -26,49 +26,69 @@ public class Lock {
 
        //By Apps
        def lock() {
-               println("the door with id:$id is locked!")
-               this.lockLatestValue = this.lockState
-               this.lockState = "locked"
-               this.currentLock = "locked"
-               sendEvent([name: "lock", value: "locked", deviceId: this.id, descriptionText: "",
-                         displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
-       }
-
-       def lock(LinkedHashMap metaData) {
-               def task = timers.runAfter(metaData["delay"]) {
+               if (lockState != "locked") {
                        println("the door with id:$id is locked!")
-                       this.lockLatestValue = this.lockState
+                       this.lockLatestValue = "locked"
                        this.lockState = "locked"
                        this.currentLock = "locked"
                        sendEvent([name: "lock", value: "locked", deviceId: this.id, descriptionText: "",
-                                 displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
+                                 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "lock.locked", value: "locked", deviceId: this.id, descriptionText: "",
+                                 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+               }
+       }
+
+       def lock(LinkedHashMap metaData) {
+               if (lockState != "locked") {
+                       def task = timers.runAfter(metaData["delay"]) {
+                               println("the door with id:$id is locked!")
+                               this.lockLatestValue = "locked"
+                               this.lockState = "locked"
+                               this.currentLock = "locked"
+                               sendEvent([name: "lock", value: "locked", deviceId: this.id, descriptionText: "",
+                                         displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                               sendEvent([name: "lock.locked", value: "locked", deviceId: this.id, descriptionText: "",
+                                 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       }
                }
        }
        
        def unlock() {
-               println("the door with id:$id is unlocked!")
-               this.lockLatestValue = this.lockState
-               this.lockState = "unlocked"
-               this.currentLock = "unlocked"
-               sendEvent([name: "unlock", value: "unlocked", deviceId: this.id, descriptionText: "",
-                         displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
+               if (lockState != "unlocked") {
+                       println("the door with id:$id is unlocked!")
+                       this.lockLatestValue = "unlocked"
+                       this.lockState = "unlocked"
+                       this.currentLock = "unlocked"
+                       sendEvent([name: "unlock", value: "unlocked", deviceId: this.id, descriptionText: "",
+                                 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "lock", value: "unlocked", deviceId: this.id, descriptionText: "",
+                                 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                       sendEvent([name: "lock.unlocked", value: "unlocked", deviceId: this.id, descriptionText: "",
+                                 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+               }
        }
 
        def unlock(LinkedHashMap metaData) {
-               def task = timers.runAfter(metaData["delay"]) {
-                       println("the door with id:$id is locked!")
-                       this.lockLatestValue = this.lockState
-                       this.lockState = "locked"
-                       this.currentLock = "locked"
-                       sendEvent([name: "unlock", value: "unlocked", deviceId: this.id, descriptionText: "",
-                                 displayed: true, linkText: "", isStateChange: false, unit: "", data: []])
+               if (lockState != "unlocked") {
+                       def task = timers.runAfter(metaData["delay"]) {
+                               println("the door with id:$id is locked!")
+                               this.lockLatestValue = "unlocked"
+                               this.lockState = "unlocked"
+                               this.currentLock = "unlocked"
+                               sendEvent([name: "unlock", value: "unlocked", deviceId: this.id, descriptionText: "",
+                                         displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                               sendEvent([name: "lock", value: "unlocked", deviceId: this.id, descriptionText: "",
+                                         displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
+                               sendEvent([name: "lock.unlocked", value: "unlocked", deviceId: this.id, descriptionText: "",
+                                         displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])                             
+                       }
                }
        }
 
        //By Model Checker
        def setValue(String value) {
                println("the door with id:$id is $value!")
-               this.lockLatestValue = this.lockState
+               this.lockLatestValue = value
                this.lockState = value
                this.currentLock = value
        }