You can play sounds with OpenHAB, you only need to add a speaker to your server.
To control your speaker, here is the code.
The first is for volume (number item)
The second is for command (these are not all available, you can find them on the internet)
In both cases Return will hold the xml answer of the speaker.
You can parse it if needed.
rule Samsung_Volume
when
Item Speaker_Volume changed
then
var Volume = Speaker_Volume.state.toString
var URL = 'http://SPEAKER_IP:PORT/UIC?cmd=%3Cname%3ESetVolume%3C/name%3E%3Cp%20type=%22dec%22%20name=%22volume%22%20val=%22' + Volume + '%22/%3E'
var Return = sendHttpGetRequest(URL)
end
rule Samsung_Multiroom_Command
when
Item Speaker_Command received command
then
var Command = Speaker_Command .state.toString
var URL = ""
switch Command {
//Input mode
case "setOptical" : URL = '/UIC?cmd=%3Cname%3ESetFunc%3C/name%3E%3Cp%20type=%22str%22%20name=%22function%22%20val=%22optical%22/%3E'
case "setBluetooth" : URL = '/UIC?cmd=%3Cname%3ESetFunc%3C/name%3E%3Cp%20type=%22str%22%20name=%22function%22%20val=%22bt%22/%3E'
case "setWifi" : URL = '/UIC?cmd=%3Cname%3ESetFunc%3C/name%3E%3Cp%20type=%22str%22%20name=%22function%22%20val=%22wifi%22/%3E'
case "setHDMI" : URL = '/UIC?cmd=%3Cname%3ESetFunc%3C/name%3E%3Cp%20type=%22str%22%20name=%22function%22%20val=%22hdmi%22/%3E'
case "setAux" : URL = '/UIC?cmd=%3Cname%3ESetFunc%3C/name%3E%3Cp%20type=%22str%22%20name=%22function%22%20val=%22aux%22/%3E'
case "setRadio1On" : URL = '/CPM?cmd=%3Cname%3ESetPlayPreset%3C/name%3E%3Cp%20type=%22dec%22%20name=%22presetindex%22%20val=0/%3E%3Cp%20type=%22dec%22%20name=%22presettype%22%20val=%221%22/%3E'
case "setRadio1Off" : URL = '/CPM?cmd=%3Cname%3ESetPlayPreset%3C/name%3E%3Cp%20type=%22dec%22%20name=%22presetindex%22%20val=0/%3E%3Cp%20type=%22dec%22%20name=%22presettype%22%20val=%220%22/%3E'
case "setRadio2On" : URL = '/CPM?cmd=%3Cname%3ESetPlayPreset%3C/name%3E%3Cp%20type=%22dec%22%20name=%22presetindex%22%20val=1/%3E%3Cp%20type=%22dec%22%20name=%22presettype%22%20val=%221%22/%3E'
case "setRadio2Off" : URL = '/CPM?cmd=%3Cname%3ESetPlayPreset%3C/name%3E%3Cp%20type=%22dec%22%20name=%22presetindex%22%20val=1/%3E%3Cp%20type=%22dec%22%20name=%22presettype%22%20val=%220%22/%3E'
case "setRadio3On" : URL = '/CPM?cmd=%3Cname%3ESetPlayPreset%3C/name%3E%3Cp%20type=%22dec%22%20name=%22presetindex%22%20val=2/%3E%3Cp%20type=%22dec%22%20name=%22presettype%22%20val=%221%22/%3E'
case "setRadio3Off" : URL = '/CPM?cmd=%3Cname%3ESetPlayPreset%3C/name%3E%3Cp%20type=%22dec%22%20name=%22presetindex%22%20val=2/%3E%3Cp%20type=%22dec%22%20name=%22presettype%22%20val=%220%22/%3E'
case "setAutoRadio" : URL = '/UIC?cmd=%3Cname%3ESetRadioAutoPlay%3C/name%3E%3Cp%20type=%22str%22%20name=%22cpname%22%20val=%22%s%22/%3E%3Cp%20type=%22dec%22%20name=%220%22%20val=%22%s%22/%3E'
case "getMusic" : URL = '/CPM?cmd=%3Cname%3EGetRadioInfo%3C/name%3E'
case "setNext" : URL = '/CPM?cmd=%3Cname%3ESetSkipCurrentTrack%3C/name%3E'
case "setPrev" : URL = '/CPM?cmd=%3Cname%3ESetPreviousTrack%3C/name%3E'
case "setPlay" : URL = '/CPM?cmd=%3Cname%3ESetPlaybackControl%3C/name%3E%3Cp%20type=%22str%22%20name=%22playbackcontrol%22%20val=%22play%22/%3E'
case "setPause" : URL = '/CPM?cmd=%3Cname%3ESetPlaybackControl%3C/name%3E%3Cp%20type=%22str%22%20name=%22playbackcontrol%22%20val=%22pause%22/%3E'
case "setReapeatOn" : URL = '/"UIC?cmd=%3Cname%3ESetRepeatMode%3C/name%3E%3Cp%20type=%22str%22%20name=%22repeatmode%22%20val=%22on%22/%3E%22'
case "setReapeatOff" : URL = '/"UIC?cmd=%3Cname%3ESetRepeatMode%3C/name%3E%3Cp%20type=%22str%22%20name=%22repeatmode%22%20val=%22off%22/%3E%22'
case "setShuffle" : URL = '/CPM?cmd=<name>SetToggleShuffle</name><p type=\"dec\" name=\"mode\" val=\"%s\"/>'
}
URL = "http://SPEAKER_IP:PORT" + URL
var Return = sendHttpGetRequest(URL)
end
Volume can also be handled directly without a rule:
Dimmer Speaker_Volume "SB_Bedroom_Volume [%d %%]" { http=">[CHANGED:GET:http://SPEAKER_IP:PORT/UIC?cmd=%3Cname%3ESetVolume%3C/name%3E%3Cp%20type=%22dec%22%20name=%22volume%22%20val=%22%2%d%22/%3E] <[http://SPEAKER_IP:PORT/UIC?cmd=%3Cname%3EGetVolume%3C/name%3E:5000:REGEX(.*?<volume>(.*?)</volume>.*)]" }
Other items like mute can handled this way too:
Switch SB_Bedroom_Mute "SB_Bedroom_Mute" { http=">[ON:GET:http://SPEAKER_IP:PORT/UIC?cmd=%3Cname%3ESetMute%3C/name%3E%3Cp%20type=%22str%22%20name=%22mute%22%20val=%22on%22/%3E] >[OFF:GET:http://SPEAKER_IP:PORT/UIC?cmd=%3Cname%3ESetMute%3C/name%3E%3Cp%20type=%22str%22%20name=%22mute%22%20val=%22off%22/%3E] <[http://SPEAKER_IP:PORT/UIC?cmd=%3Cname%3EGetMute%3C/name%3E:5000:REGEX(.*?<mute>(.*?)</mute>.*)]" }
Addons needed:
- HTTP binding
- REGEX Transformation
I hope it will help you!
- Jordo