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