1 //Create a class for music player
3 import SmartThing.SmartThing
5 public class MusicPlayer 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 // Features with string values
13 StringBuilder currentMute = new StringBuilder()
14 StringBuilder currentStatus = new StringBuilder()
15 StringBuilder currentTrackData = new StringBuilder()
16 StringBuilder currentTrackDescription = new StringBuilder()
17 // Maps from features to values
18 HashMap<String, StringBuilder> deviceValuesMap = new HashMap<String, StringBuilder>()
19 HashMap<String, MutableInteger> deviceIntValuesMap = new HashMap<String, MutableInteger>()
20 // Possible values for eventsSince method
21 List<StringBuilder> possibleValues = new ArrayList<StringBuilder>();
23 MusicPlayer(Closure sendEvent, StringBuilder id, StringBuilder label, StringBuilder displayName, MutableInteger currentLevel,
24 StringBuilder currentMute, StringBuilder currentStatus, StringBuilder currentTrackData, StringBuilder currentTrackDescription) {
25 deviceValuesMap = deviceValueSmartThing
26 deviceIntValuesMap = deviceIntValueSmartThing
28 labelSmartThing = label
29 displayNameSmartThing = displayName
30 sendEventSmartThings = sendEvent
31 possibleValuesSmartThings = possibleValues
36 this.currentLevel = currentLevel
37 this.currentMute = currentMute
38 this.currentStatus = currentStatus
39 this.currentTrackData = currentTrackData
40 this.currentTrackDescription = currentTrackDescription
41 possibleValues.add("on")
42 possibleValues.add("off")
44 deviceValuesMap.put("status", currentStatus)
45 deviceValuesMap.put("playpause", currentStatus)
46 deviceValuesMap.put("trackDescription", currentTrackDescription)
47 deviceValuesMap.put("mute", currentMute)
48 deviceValuesMap.put("trackData", currentTrackData)
49 deviceIntValuesMap.put("level", currentLevel)
52 // Methods to set values
53 def on(LinkedHashMap metaData) {
58 action(currentStatus, "on", "status")
61 def off(LinkedHashMap metaData) {
66 action(currentStatus, "off", "status")
69 def mute(LinkedHashMap metaData) {
74 action(currentMute, "muted", "mute")
77 def unmute(LinkedHashMap metaData) {
82 action(currentMute, "unmuted", "mute")
85 def nextTrack(LinkedHashMap metaData) {
94 def pause(LinkedHashMap metaData) {
99 action(currentStatus, "pause", "status")
102 def play(LinkedHashMap metaData) {
107 action(currentStatus, "play", "status")
110 def playTrack(LinkedHashMap metaData) {
114 def playTrack(String trackToPlay) {
119 def previousTrack(LinkedHashMap metaData) {
123 def previousTrack() {
128 def resumeTrack(LinkedHashMap metaData) {
132 def resumeTrack(String trackToResume) {
136 def restoreTrack(LinkedHashMap metaData) {
140 def restoreTrack(String trackToRestore) {
145 def setLevel(LinkedHashMap metaData) {
149 def setLevel(int level) {
150 action(currentLevel, level, "level")
153 def setTrack(LinkedHashMap metaData) {
157 def setTrack(String trackToSet) {
162 def stop(LinkedHashMap metaData) {
167 action(currentStatus, "stop", "status")
170 def action(StringBuilder variable, String newValue, String feature) {
171 if (!variable.toString().equals(newValue)) {
172 String tmpID = id.toString()
173 variable.replace(0, variable.length(), newValue)
174 println("$feature of the music player with id:$tmpID is changed to $newValue!")
175 sendEvent([name: feature, value: newValue, deviceId: tmpID, descriptionText: "",
176 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
180 def action(MutableInteger variable, int newValue, String feature) {
181 if (!variable.getValue().equals(newValue)) {
182 String tmpID = id.toString()
183 variable.setValue(newValue)
184 println("$feature for the thermostat with id:$tmpID is changed to $newValue!")
185 sendEvent([name: feature, value: newValue, deviceId: tmpID, descriptionText: "",
186 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
190 def musicChangeEvents() {
191 sendEvent([name: "trackDescription", value: "someDescriptions", deviceId: id.toString(), descriptionText: "",
192 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
193 sendEvent([name: "trackData", value: "someTrack", deviceId: id.toString(), descriptionText: "",
194 displayed: true, linkText: "", isStateChange: false, unit: "", data: '{"info": "info"}'])
197 // Methods to return values
198 def getCurrentLevel() {
199 return currentLevel.getValue()
202 def getCurrentMute() {
203 return currentMute.toString()
206 def getCurrentStatus() {
207 return currentStatus.toString()
210 def getCurrentTrackData() {
211 return currentTrackData.toString()
214 def getCurrentTrackDescription() {
215 return currentTrackDescription.toString()