Sonos UPnP services and functions - SoCo/SoCo GitHub Wiki
This is a static list of all Sonos UPnP service functions and their signatures, updated as of 2019-10-20. You can use it to find the right function call if the SoCo library does not directly support the action.
This list was compiled using the following code:
from soco.discovery import any_soco
from soco.services import *
player = any_soco()
service_classes = [
AVTransport,
ContentDirectory,
DeviceProperties,
RenderingControl,
ZoneGroupTopology,
AlarmClock,
SystemProperties,
MusicServices,
Queue,
GroupManagement,
GroupRenderingControl,
]
for service_class in service_classes:
service = service_class(player)
print("## {}".format(service.service_type))
for action in service.iter_actions():
print("* `", action, "`")
print()
SetAVTransportURI(InstanceID: ui4, CurrentURI: string, CurrentURIMetaData: string) -> {}
SetNextAVTransportURI(InstanceID: ui4, NextURI: string, NextURIMetaData: string) -> {}
AddURIToQueue(InstanceID: ui4, EnqueuedURI: string, EnqueuedURIMetaData: string, DesiredFirstTrackNumberEnqueued: ui4, EnqueueAsNext: boolean) -> {FirstTrackNumberEnqueued: ui4, NumTracksAdded: ui4, NewQueueLength: ui4}
AddMultipleURIsToQueue(InstanceID: ui4, UpdateID: ui4, NumberOfURIs: ui4, EnqueuedURIs: string, EnqueuedURIsMetaData: string, ContainerURI: string, ContainerMetaData: string, DesiredFirstTrackNumberEnqueued: ui4, EnqueueAsNext: boolean) -> {FirstTrackNumberEnqueued: ui4, NumTracksAdded: ui4, NewQueueLength: ui4, NewUpdateID: ui4}
ReorderTracksInQueue(InstanceID: ui4, StartingIndex: ui4, NumberOfTracks: ui4, InsertBefore: ui4, UpdateID: ui4) -> {}
RemoveTrackFromQueue(InstanceID: ui4, ObjectID: string, UpdateID: ui4) -> {}
RemoveTrackRangeFromQueue(InstanceID: ui4, UpdateID: ui4, StartingIndex: ui4, NumberOfTracks: ui4) -> {NewUpdateID: ui4}
RemoveAllTracksFromQueue(InstanceID: ui4) -> {}
SaveQueue(InstanceID: ui4, Title: string, ObjectID: string) -> {AssignedObjectID: string}
BackupQueue(InstanceID: ui4) -> {}
CreateSavedQueue(InstanceID: ui4, Title: string, EnqueuedURI: string, EnqueuedURIMetaData: string) -> {NumTracksAdded: ui4, NewQueueLength: ui4, AssignedObjectID: string, NewUpdateID: ui4}
AddURIToSavedQueue(InstanceID: ui4, ObjectID: string, UpdateID: ui4, EnqueuedURI: string, EnqueuedURIMetaData: string, AddAtIndex: ui4) -> {NumTracksAdded: ui4, NewQueueLength: ui4, NewUpdateID: ui4}
ReorderTracksInSavedQueue(InstanceID: ui4, ObjectID: string, UpdateID: ui4, TrackList: string, NewPositionList: string) -> {QueueLengthChange: i4, NewQueueLength: ui4, NewUpdateID: ui4}
GetMediaInfo(InstanceID: ui4) -> {NrTracks: [0..65535], MediaDuration: string, CurrentURI: string, CurrentURIMetaData: string, NextURI: string, NextURIMetaData: string, PlayMedium: [NONE, NETWORK], RecordMedium: [NONE], WriteStatus: string}
GetTransportInfo(InstanceID: ui4) -> {CurrentTransportState: [STOPPED, PLAYING, PAUSED_PLAYBACK, TRANSITIONING], CurrentTransportStatus: string, CurrentSpeed: [1]}
GetPositionInfo(InstanceID: ui4) -> {Track: [0..65535], TrackDuration: string, TrackMetaData: string, TrackURI: string, RelTime: string, AbsTime: string, RelCount: i4, AbsCount: i4}
GetDeviceCapabilities(InstanceID: ui4) -> {PlayMedia: string, RecMedia: string, RecQualityModes: string}
GetTransportSettings(InstanceID: ui4) -> {PlayMode=NORMAL: [NORMAL, REPEAT_ALL, REPEAT_ONE, SHUFFLE_NOREPEAT, SHUFFLE, SHUFFLE_REPEAT_ONE], RecQualityMode: string}
GetCrossfadeMode(InstanceID: ui4) -> {CrossfadeMode: boolean}
Stop(InstanceID: ui4) -> {}
Play(InstanceID: ui4, Speed: [1]) -> {}
Pause(InstanceID: ui4) -> {}
Seek(InstanceID: ui4, Unit: [TRACK_NR, REL_TIME, TIME_DELTA], Target: string) -> {}
Next(InstanceID: ui4) -> {}
Previous(InstanceID: ui4) -> {}
SetPlayMode(InstanceID: ui4, NewPlayMode=NORMAL: [NORMAL, REPEAT_ALL, REPEAT_ONE, SHUFFLE_NOREPEAT, SHUFFLE, SHUFFLE_REPEAT_ONE]) -> {}
SetCrossfadeMode(InstanceID: ui4, CrossfadeMode: boolean) -> {}
NotifyDeletedURI(InstanceID: ui4, DeletedURI: string) -> {}
GetCurrentTransportActions(InstanceID: ui4) -> {Actions: string}
BecomeCoordinatorOfStandaloneGroup(InstanceID: ui4) -> {DelegatedGroupCoordinatorID: string, NewGroupID: string}
DelegateGroupCoordinationTo(InstanceID: ui4, NewCoordinator: string, RejoinGroup: boolean) -> {}
BecomeGroupCoordinator(InstanceID: ui4, CurrentCoordinator: string, CurrentGroupID: string, OtherMembers: string, TransportSettings: string, CurrentURI: string, CurrentURIMetaData: string, SleepTimerState: string, AlarmState: string, StreamRestartState: string, CurrentQueueTrackList: string) -> {}
BecomeGroupCoordinatorAndSource(InstanceID: ui4, CurrentCoordinator: string, CurrentGroupID: string, OtherMembers: string, CurrentURI: string, CurrentURIMetaData: string, SleepTimerState: string, AlarmState: string, StreamRestartState: string, CurrentAVTTrackList: string, CurrentQueueTrackList: string, CurrentSourceState: string, ResumePlayback: boolean) -> {}
ChangeCoordinator(InstanceID: ui4, CurrentCoordinator: string, NewCoordinator: string, NewTransportSettings: string, CurrentAVTransportURI: string) -> {}
ChangeTransportSettings(InstanceID: ui4, NewTransportSettings: string, CurrentAVTransportURI: string) -> {}
ConfigureSleepTimer(InstanceID: ui4, NewSleepTimerDuration: string) -> {}
GetRemainingSleepTimerDuration(InstanceID: ui4) -> {RemainingSleepTimerDuration: string, CurrentSleepTimerGeneration: ui4}
RunAlarm(InstanceID: ui4, AlarmID: ui4, LoggedStartTime: string, Duration: string, ProgramURI: string, ProgramMetaData: string, PlayMode=NORMAL: [NORMAL, REPEAT_ALL, REPEAT_ONE, SHUFFLE_NOREPEAT, SHUFFLE, SHUFFLE_REPEAT_ONE], Volume: ui2, IncludeLinkedZones: boolean) -> {}
StartAutoplay(InstanceID: ui4, ProgramURI: string, ProgramMetaData: string, Volume: ui2, IncludeLinkedZones: boolean, ResetVolumeAfter: boolean) -> {}
GetRunningAlarmProperties(InstanceID: ui4) -> {AlarmID: ui4, GroupID: string, LoggedStartTime: string}
SnoozeAlarm(InstanceID: ui4, Duration: string) -> {}
EndDirectControlSession(InstanceID: ui4) -> {}
GetSearchCapabilities() -> {SearchCaps: string}
GetSortCapabilities() -> {SortCaps: string}
GetSystemUpdateID() -> {Id: ui4}
GetAlbumArtistDisplayOption() -> {AlbumArtistDisplayOption: string}
GetLastIndexChange() -> {LastIndexChange: string}
Browse(ObjectID: string, BrowseFlag: [BrowseMetadata, BrowseDirectChildren], Filter: string, StartingIndex: ui4, RequestedCount: ui4, SortCriteria: string) -> {Result: string, NumberReturned: ui4, TotalMatches: ui4, UpdateID: ui4}
FindPrefix(ObjectID: string, Prefix: string) -> {StartingIndex: ui4, UpdateID: ui4}
GetAllPrefixLocations(ObjectID: string) -> {TotalPrefixes: ui4, PrefixAndIndexCSV: string, UpdateID: ui4}
CreateObject(ContainerID: string, Elements: string) -> {ObjectID: string, Result: string}
UpdateObject(ObjectID: string, CurrentTagValue: string, NewTagValue: string) -> {}
DestroyObject(ObjectID: string) -> {}
RefreshShareIndex(AlbumArtistDisplayOption: string) -> {}
RequestResort(SortOrder: string) -> {}
GetShareIndexInProgress() -> {IsIndexing: boolean}
GetBrowseable() -> {IsBrowseable: boolean}
SetBrowseable(Browseable: boolean) -> {}
SetLEDState(DesiredLEDState: [On, Off]) -> {}
GetLEDState() -> {CurrentLEDState: [On, Off]}
AddBondedZones(ChannelMapSet: string) -> {}
RemoveBondedZones(ChannelMapSet: string, KeepGrouped: boolean) -> {}
CreateStereoPair(ChannelMapSet: string) -> {}
SeparateStereoPair(ChannelMapSet: string) -> {}
SetZoneAttributes(DesiredZoneName: string, DesiredIcon: string, DesiredConfiguration: string) -> {}
GetZoneAttributes() -> {CurrentZoneName: string, CurrentIcon: string, CurrentConfiguration: string}
GetHouseholdID() -> {CurrentHouseholdID: string}
GetZoneInfo() -> {SerialNumber: string, SoftwareVersion: string, DisplaySoftwareVersion: string, HardwareVersion: string, IPAddress: string, MACAddress: string, CopyrightInfo: string, ExtraInfo: string, HTAudioIn: ui4, Flags: ui4}
SetAutoplayLinkedZones(IncludeLinkedZones: boolean, Source: string) -> {}
GetAutoplayLinkedZones(Source: string) -> {IncludeLinkedZones: boolean}
SetAutoplayRoomUUID(RoomUUID: string, Source: string) -> {}
GetAutoplayRoomUUID(Source: string) -> {RoomUUID: string}
SetAutoplayVolume(Volume: [0..100], Source: string) -> {}
GetAutoplayVolume(Source: string) -> {CurrentVolume: [0..100]}
ImportSetting(SettingID: [0..65535], SettingURI: string) -> {}
SetUseAutoplayVolume(UseVolume: boolean, Source: string) -> {}
GetUseAutoplayVolume(Source: string) -> {UseVolume: boolean}
AddHTSatellite(HTSatChanMapSet: string) -> {}
RemoveHTSatellite(SatRoomUUID: string) -> {}
EnterConfigMode(Mode: string, Options: string) -> {State: string}
ExitConfigMode(Options: string) -> {}
GetButtonState() -> {State: string}
SetButtonLockState(DesiredButtonLockState: [On, Off]) -> {}
GetButtonLockState() -> {CurrentButtonLockState: [On, Off]}
GetMute(InstanceID: ui4, Channel: [Master, LF, RF, SpeakerOnly]) -> {CurrentMute: boolean}
SetMute(InstanceID: ui4, Channel: [Master, LF, RF, SpeakerOnly], DesiredMute: boolean) -> {}
ResetBasicEQ(InstanceID: ui4) -> {Bass: [-10..10], Treble: [-10..10], Loudness: boolean, LeftVolume: [0..100], RightVolume: [0..100]}
ResetExtEQ(InstanceID: ui4, EQType: string) -> {}
GetVolume(InstanceID: ui4, Channel: [Master, LF, RF]) -> {CurrentVolume: [0..100]}
SetVolume(InstanceID: ui4, Channel: [Master, LF, RF], DesiredVolume: [0..100]) -> {}
SetRelativeVolume(InstanceID: ui4, Channel: [Master, LF, RF], Adjustment: i4) -> {NewVolume: [0..100]}
GetVolumeDB(InstanceID: ui4, Channel: [Master, LF, RF]) -> {CurrentVolume: i2}
SetVolumeDB(InstanceID: ui4, Channel: [Master, LF, RF], DesiredVolume: i2) -> {}
GetVolumeDBRange(InstanceID: ui4, Channel: [Master, LF, RF]) -> {MinValue: i2, MaxValue: i2}
GetBass(InstanceID: ui4) -> {CurrentBass: [-10..10]}
SetBass(InstanceID: ui4, DesiredBass: [-10..10]) -> {}
GetTreble(InstanceID: ui4) -> {CurrentTreble: [-10..10]}
SetTreble(InstanceID: ui4, DesiredTreble: [-10..10]) -> {}
GetEQ(InstanceID: ui4, EQType: string) -> {CurrentValue: i2}
SetEQ(InstanceID: ui4, EQType: string, DesiredValue: i2) -> {}
GetLoudness(InstanceID: ui4, Channel: [Master, LF, RF]) -> {CurrentLoudness: boolean}
SetLoudness(InstanceID: ui4, Channel: [Master, LF, RF], DesiredLoudness: boolean) -> {}
GetSupportsOutputFixed(InstanceID: ui4) -> {CurrentSupportsFixed: boolean}
GetOutputFixed(InstanceID: ui4) -> {CurrentFixed: boolean}
SetOutputFixed(InstanceID: ui4, DesiredFixed: boolean) -> {}
GetHeadphoneConnected(InstanceID: ui4) -> {CurrentHeadphoneConnected: boolean}
RampToVolume(InstanceID: ui4, Channel: [Master, LF, RF], RampType: [SLEEP_TIMER_RAMP_TYPE, ALARM_RAMP_TYPE, AUTOPLAY_RAMP_TYPE], DesiredVolume: [0..100], ResetVolumeAfter: boolean, ProgramURI: string) -> {RampTime: ui4}
RestoreVolumePriorToRamp(InstanceID: ui4, Channel: [Master, LF, RF]) -> {}
SetChannelMap(InstanceID: ui4, ChannelMap: string) -> {}
SetRoomCalibrationX(InstanceID: ui4, CalibrationID: string, Coefficients: string, CalibrationMode: string) -> {}
GetRoomCalibrationStatus(InstanceID: ui4) -> {RoomCalibrationEnabled: boolean, RoomCalibrationAvailable: boolean}
SetRoomCalibrationStatus(InstanceID: ui4, RoomCalibrationEnabled: boolean) -> {}
CheckForUpdate(UpdateType: [All, Software], CachedOnly: boolean, Version: string) -> {UpdateItem: string}
BeginSoftwareUpdate(UpdateURL: string, Flags: ui4, ExtraOptions: string) -> {}
ReportUnresponsiveDevice(DeviceUUID: string, DesiredAction: [Remove, TopologyMonitorProbe, VerifyThenRemoveSystemwide]) -> {}
SubmitDiagnostics(IncludeControllers: boolean, Type: string) -> {DiagnosticID: ui4}
RegisterMobileDevice(MobileDeviceName: string, MobileDeviceUDN: string, MobileIPAndPort: string) -> {}
GetZoneGroupAttributes() -> {CurrentZoneGroupName: string, CurrentZoneGroupID: string, CurrentZonePlayerUUIDsInGroup: string, CurrentMuseHouseholdId: string}
GetZoneGroupState() -> {ZoneGroupState: string}
SetFormat(DesiredTimeFormat: string, DesiredDateFormat: string) -> {}
GetFormat() -> {CurrentTimeFormat: string, CurrentDateFormat: string}
SetTimeZone(Index: i4, AutoAdjustDst: boolean) -> {}
GetTimeZone() -> {Index: i4, AutoAdjustDst: boolean}
GetTimeZoneAndRule() -> {Index: i4, AutoAdjustDst: boolean, CurrentTimeZone: string}
GetTimeZoneRule(Index: i4) -> {TimeZone: string}
SetTimeServer(DesiredTimeServer: string) -> {}
GetTimeServer() -> {CurrentTimeServer: string}
SetTimeNow(DesiredTime: string, TimeZoneForDesiredTime: string) -> {}
GetHouseholdTimeAtStamp(TimeStamp: string) -> {HouseholdUTCTime: string}
GetTimeNow() -> {CurrentUTCTime: string, CurrentLocalTime: string, CurrentTimeZone: string, CurrentTimeGeneration: ui4}
CreateAlarm(StartLocalTime: string, Duration: string, Recurrence: [ONCE, WEEKDAYS, WEEKENDS, DAILY], Enabled: boolean, RoomUUID: string, ProgramURI: string, ProgramMetaData: string, PlayMode=NORMAL: [NORMAL, REPEAT_ALL, SHUFFLE_NOREPEAT, SHUFFLE], Volume: ui2, IncludeLinkedZones: boolean) -> {AssignedID: ui4}
UpdateAlarm(ID: ui4, StartLocalTime: string, Duration: string, Recurrence: [ONCE, WEEKDAYS, WEEKENDS, DAILY], Enabled: boolean, RoomUUID: string, ProgramURI: string, ProgramMetaData: string, PlayMode=NORMAL: [NORMAL, REPEAT_ALL, SHUFFLE_NOREPEAT, SHUFFLE], Volume: ui2, IncludeLinkedZones: boolean) -> {}
DestroyAlarm(ID: ui4) -> {}
ListAlarms() -> {CurrentAlarmList: string, CurrentAlarmListVersion: string}
SetDailyIndexRefreshTime(DesiredDailyIndexRefreshTime: string) -> {}
GetDailyIndexRefreshTime() -> {CurrentDailyIndexRefreshTime: string}
SetString(VariableName: string, StringValue: string) -> {}
GetString(VariableName: string) -> {StringValue: string}
Remove(VariableName: string) -> {}
GetWebCode(AccountType: ui4) -> {WebCode: string}
ProvisionCredentialedTrialAccountX(AccountType: ui4, AccountID: string, AccountPassword: string) -> {IsExpired: boolean, AccountUDN: string}
AddAccountX(AccountType: ui4, AccountID: string, AccountPassword: string) -> {AccountUDN: string}
AddOAuthAccountX(AccountType: ui4, AccountToken: string, AccountKey: string, OAuthDeviceID: string, AuthorizationCode: string, RedirectURI: string, UserIdHashCode: string) -> {AccountUDN: string, AccountNickname: string}
RemoveAccount(AccountType: ui4, AccountID: string) -> {}
EditAccountPasswordX(AccountType: ui4, AccountID: string, NewAccountPassword: string) -> {}
SetAccountNicknameX(AccountUDN: string, AccountNickname: string) -> {}
RefreshAccountCredentialsX(AccountType: ui4, AccountUID: ui4, AccountToken: string, AccountKey: string) -> {}
EditAccountMd(AccountType: ui4, AccountID: string, NewAccountMd: string) -> {}
EnableRDM(RDMValue: boolean) -> {}
GetRDM() -> {RDMValue: boolean}
ReplaceAccountX(AccountUDN: string, NewAccountID: string, NewAccountPassword: string, AccountToken: string, AccountKey: string, OAuthDeviceID: string) -> {NewAccountUDN: string}
GetSessionId(ServiceId: ui4, Username: string) -> {SessionId: string}
ListAvailableServices() -> {AvailableServiceDescriptorList: string, AvailableServiceTypeList: string, AvailableServiceListVersion: string}
AddURI(QueueID: ui4, UpdateID: ui4, EnqueuedURI: string, EnqueuedURIMetaData: string, DesiredFirstTrackNumberEnqueued: ui4, EnqueueAsNext: boolean) -> {FirstTrackNumberEnqueued: ui4, NumTracksAdded: ui4, NewQueueLength: ui4, NewUpdateID: ui4}
AddMultipleURIs(QueueID: ui4, UpdateID: ui4, ContainerURI: string, ContainerMetaData: string, DesiredFirstTrackNumberEnqueued: ui4, EnqueueAsNext: boolean, NumberOfURIs: ui4, EnqueuedURIsAndMetaData: string) -> {FirstTrackNumberEnqueued: ui4, NumTracksAdded: ui4, NewQueueLength: ui4, NewUpdateID: ui4}
AttachQueue(QueueOwnerID: string) -> {QueueID: ui4, QueueOwnerContext: string}
Backup() -> {}
Browse(QueueID: ui4, StartingIndex: ui4, RequestedCount: ui4) -> {Result: string, NumberReturned: ui4, TotalMatches: ui4, UpdateID: ui4}
CreateQueue(QueueOwnerID: string, QueueOwnerContext: string, QueuePolicy: string) -> {QueueID: ui4}
RemoveAllTracks(QueueID: ui4, UpdateID: ui4) -> {NewUpdateID: ui4}
RemoveTrackRange(QueueID: ui4, UpdateID: ui4, StartingIndex: ui4, NumberOfTracks: ui4) -> {NewUpdateID: ui4}
ReorderTracks(QueueID: ui4, StartingIndex: ui4, NumberOfTracks: ui4, InsertBefore: ui4, UpdateID: ui4) -> {NewUpdateID: ui4}
ReplaceAllTracks(QueueID: ui4, UpdateID: ui4, ContainerURI: string, ContainerMetaData: string, CurrentTrackIndex: ui4, NewCurrentTrackIndices: string, NumberOfURIs: ui4, EnqueuedURIsAndMetaData: string) -> {NewQueueLength: ui4, NewUpdateID: ui4}
SaveAsSonosPlaylist(QueueID: ui4, Title: string, ObjectID: string) -> {AssignedObjectID: string}
AddMember(MemberID: string, BootSeq: ui4) -> {CurrentTransportSettings: string, CurrentURI: string, GroupUUIDJoined: string, ResetVolumeAfter: boolean, VolumeAVTransportURI: string}
RemoveMember(MemberID: string) -> {}
ReportTrackBufferingResult(MemberID: string, ResultCode: i4) -> {}
GetGroupMute(InstanceID: ui4) -> {CurrentMute: boolean}
SetGroupMute(InstanceID: ui4, DesiredMute: boolean) -> {}
GetGroupVolume(InstanceID: ui4) -> {CurrentVolume: [0..100]}
SetGroupVolume(InstanceID: ui4, DesiredVolume: [0..100]) -> {}
SetRelativeGroupVolume(InstanceID: ui4, Adjustment: i4) -> {NewVolume: [0..100]}
SnapshotGroupVolume(InstanceID: ui4) -> {}