Skip to content

Commit 64f4fb1

Browse files
authored
Merge pull request #196 from svrooij/feature/group-volume
feat: Implemented group volume controls
2 parents 8373525 + 86d9deb commit 64f4fb1

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

docs/control/1-commands.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ All these commands are crafted specially to be used in sonos2mqtt.
3232

3333
|Command| |Description|Input|
3434
|-------|-|-----------|-------|
35+
|`groupvolume`|:speaker:|Set the group volume to a value|number (between 1 and 100)|
36+
|`groupvolumedown`|:heavy_minus_sign:|Decrease group volume by 2 or input number|optional number|
37+
|`groupvolumeup`|:heavy_plus_sign:|Increase group volume by 2 or input number|optional number|
3538
|`joingroup`||Join another group by name|name of other device|
3639
|`leavegroup`||Remove current device from the group it's in| |
3740
|`mute`|:speaker:|Mute the volume| |
@@ -62,7 +65,7 @@ All these commands are crafted specially to be used in sonos2mqtt.
6265
|`toggle`||Toggle between pause and play| |
6366
|`unmute`|:mute:|Unmute the volume| |
6467
|`volume`|:speaker:|Set the volume to a value|number (between 1 and 100)|
65-
|`volumedown`|:heavy_minus_sign:|Decrease volume with 5 or number|optional number|
66-
|`volumeup`|:heavy_plus_sign:|Increase volume with 5 or number|optional number|
68+
|`volumedown`|:heavy_minus_sign:|Decrease volume by 2 or input number|optional number|
69+
|`volumeup`|:heavy_plus_sign:|Increase volume by 2 or input number|optional number|
6770

6871
Check out the [commands](https://github.com/svrooij/sonos2mqtt/blob/master/src/sonos-commands.ts) or the [mapping](https://github.com/svrooij/sonos2mqtt/blob/master/src/sonos-command-mapping.ts) if you're interested in how this works.

src/sonos-command-mapping.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,21 @@ export class SonosCommandMapping {
3030
case SonosCommands.Crossfade:
3131
return await device.AVTransportService.SetCrossfadeMode({ InstanceID: 0, CrossfadeMode: SonosCommandMapping.PayloadToBool(payload) })
3232

33+
case SonosCommands.GroupVolume:
34+
if(typeof payload === 'number')
35+
return await device.Coordinator.GroupRenderingControlService.SetGroupVolume({ InstanceID: 0, DesiredVolume: payload })
36+
break;
37+
38+
case SonosCommands.GroupVolumeDown:
39+
return await device.GroupRenderingControlService.SetRelativeGroupVolume({
40+
InstanceID: 0,
41+
Adjustment: ((typeof payload === 'number') ? payload : 2) * -1})
42+
43+
case SonosCommands.GroupVolumeUp:
44+
return await device.GroupRenderingControlService.SetRelativeGroupVolume({
45+
InstanceID: 0,
46+
Adjustment: ((typeof payload === 'number') ? payload : 2)})
47+
3348
case SonosCommands.JoinGroup:
3449
if(typeof payload === 'string')
3550
return await device.JoinGroup(payload)
@@ -149,6 +164,9 @@ export class SonosCommandMapping {
149164
}
150165
} else if (typeof payload === 'string') {
151166
return await device.AVTransportService.SnoozeAlarm({InstanceID: 0, Duration: payload})
167+
} else if (!payload) {
168+
// Cancel snoozed alarm
169+
return await device.AVTransportService.SnoozeAlarm({ InstanceID: 0, Duration: '' });
152170
}
153171
break;
154172
case SonosCommands.Speak:
@@ -189,12 +207,12 @@ export class SonosCommandMapping {
189207
case SonosCommands.VolumeDown:
190208
return await device.RenderingControlService.SetRelativeVolume({
191209
InstanceID: 0, Channel: 'Master',
192-
Adjustment: ((typeof payload === 'number') ? payload : 4) * -1})
210+
Adjustment: ((typeof payload === 'number') ? payload : 2) * -1})
193211

194212
case SonosCommands.VolumeUp:
195213
return await device.RenderingControlService.SetRelativeVolume({
196214
InstanceID: 0, Channel: 'Master',
197-
Adjustment: ((typeof payload === 'number') ? payload : 4)})
215+
Adjustment: ((typeof payload === 'number') ? payload : 2)})
198216

199217
default:
200218
throw new Error(`Command '${command}' not implemented`)

src/sonos-commands.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ export enum SonosCommands {
33
ClearQueue = 'clearqueue',
44
Command = 'command',
55
Crossfade = 'crossfade',
6+
GroupVolume = 'groupvolume',
7+
GroupVolumeDown = 'groupvolumedown',
8+
GroupVolumeUp = 'groupvolumeup',
69
JoinGroup = 'joingroup',
710
LeaveGroup = 'leavegroup',
811
Mute = 'mute',

0 commit comments

Comments
 (0)