b4d09f7c9199e040e3788b7b21613974d616d331
[smartthings-infrastructure.git] / SwitchLevel / SwitchLevel.groovy
1 //Create a class for switch level
2 package SwitchLevel
3 import SmartThing.SmartThing
4
5 //Importing mutable integer class
6 import MutableInteger.MutableInteger
7
8 public class SwitchLevel extends SmartThing {
9         // id, label, and display name of the device
10         StringBuilder id = new StringBuilder()
11         StringBuilder label = new StringBuilder()
12         StringBuilder displayName = new StringBuilder()
13         // Features with numberical values
14         MutableInteger currentLevel = new MutableInteger()
15         // Maps from features to values
16         HashMap<String, MutableInteger> deviceIntValuesMap = new HashMap<String, MutableInteger>()
17         
18         SwitchLevel(Closure sendEvent, StringBuilder id, StringBuilder label, StringBuilder displayName, MutableInteger currentLevel) {
19                 deviceIntValuesMap = deviceIntValueSmartThing
20                 idSmartThing = id
21                 labelSmartThing = label
22                 displayNameSmartThing = displayName
23                 sendEventSmartThings = sendEvent
24
25                 // Initialization
26                 this.id = id
27                 this.label = label
28                 this.displayName = displayName
29                 this.currentLevel = currentLevel
30
31                 deviceIntValuesMap.put("level", currentLevel)
32         }
33
34         // Methods to set values
35         def setLevel(String newValue) {
36                 setLevel(newValue.toInteger())
37         }
38
39         def setLevel(long newValue) {
40                 setLevel((int) newValue)
41         }
42
43         def setLevel(int newValue) {
44                 if (!currentLevel.getValue().equals(newValue)) {
45                         String tmpID = id.toString()
46                         variable.setValue(newValue)
47                         println("the switch with id:$tmpID is setted to level $level!")
48                         sendEvent([name: "level", value: newValue, deviceId: tmpID, descriptionText: "",
49                                    displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
50                 }
51         }
52         
53         // Methods to return values
54         def getCurrentLevel() {
55                 return currentLevel.getValue()
56         }
57 }