Package: bosesoundtouchapi
Bose SoundTouch API Python3 LibraryOverviewThis API provides Python programmers the ability to control Bose SoundTouch speakers from any program written in Python 3.It utilizes the Bose SoundTouch Webservices API, which is hosted on each SoundTouch device.More information about Bose SoundTouch speakers can be found on theBose SoundTouch Family page.FeaturesThe following features are supported by this API.Media Player controls (play pause, resume, next track, prev track, repeat, shuffle, etc)Media Content (streaming radio, play http or https url, Google TTS)Media Volume control (set / retrieve, tick up / down, mute, smart mute)Select Sources (Aux, Bluetooth, Airplay, Deezer, Spotify, iHeart, SiriusXm, etc)Multi-room Zone functions (create zone, add / remove zone members, syncronized play)Power functions (smart power on / off, power toggle, power to standby)Audio mode switching (Normal, Dialog, etc)Audio Tone Controls for Bass and Treble Levels (set, retrieve, supported min / max values)Audio Product CEC HDMI Control support (set, retrieve, supported values)Presets (store, remove, remove all, select)Recent Media History (list recent content that was played, select recent item for play)Pandora Music Service Support (add / remove stations, get saved stations, search for stations)Favorites and Ratings (add, remove, thumbs up, thumbs down)Snapshot device settings (store, restore)Change Device NameConfiguration data (clock time, clock, timezone, capabilities, bass capabilities)Notifications (receive real-time status updates from the device)Wireless configuration options (available networks in range, set last wifi source)Firmware update configuration (query software update status, check configuration)Zeroconf (aka MDNS) discovery of SoundTouch devices on the networkID3 tag support for media content played from a url... and moreRequirements and DependenciesThe following requirements must be met in order to utilize this API:Bose SoundTouch Speaker(s) that support the SoundTouch Webservices API.SoundTouch 10SoundTouch 300I have only tested with the above (what can I say; Bose products are expensive, and I can only afford the two! :D )Other SoundTouch devices should be compatible.Note that the newer line of Bose Speakers (Home Speaker 500, 700, etc) are NOT supported as they do not utilize the Bose WebServices API.The following Python-related requirements must be met in order to utilize this API:Python 3.4 or greater (Python 2 not supported).smartinspectPython package (>= 3.0.21) - for diagnostics and logging support.websocket-client package (>= 2.0).urllib3 package (>= 1.2.0).DocumentationDocumentation is located in the package library under the 'docs' folder; use the index.html as your starting point.
You can also view the latest docs on thereadthedocs web-site.InstallationThis module can be easily installed via pip:$python3-mpipinstallbosesoundtouchapiQuick-Start Sample CodeAlmost every method is documented with sample code; just click on the "Sample Code" links under the method, and use the "Copy to Clipboard" functionality to copy / paste.Check out the following classes to get you started:bosesoundtouchapi.soundtouchclient.SoundTouchClient- device controls and data gathering.bosesoundtouchapi.soundtouchdiscovery.SoundTouchDiscovery- device discovery via Zeroconf.bosesoundtouchapi.ws.soundtouchwebsocket.SoundTouchWebSocket- web-socket notification support.LicensingThis project is licensed and distributed under the terms of the MIT End-User License Agreement (EULA) license.Portions of this code and the overall "flow" were taken from contributions made byMatrixEditor.  My original intent was to fork his repository and add some changes, but there were just too many and I wanted to change some things that would have broken backward compatibility so I continued with my own repository.Logging / Tracing SupportThe SmartInspectPython package (installed with this package) can be used to easily debug your applications that utilize this API.The following topics and code samples will get you started on how to enable logging support.Note that logging support can be turned on and off without changing code or restarting the application.Click on the topics below to expand the section and reveal more information.Configure Logging Support Settings FileAdd the following lines to a new file (e.g. "smartinspect.cfg") in your application startup / test directory.  
  Note the file name can be whatever you like, just specify it on the call to `SiAuto.Si.LoadConfiguration()` when initializing the logger.; smartinspect.cfg; SmartInspect Logging Configuration General settings.; - "Enabled" parameter to turn logging on (True) or off (False).; - "Level" parameter to control the logging level (Debug|Verbose|Message|Warning|Error).; - "AppName" parameter to control the application name.Enabled=FalseLevel=VerboseDefaultLevel=DebugAppName=My Application Name; SmartInspect Logging Configuration Output settings.; - Log to SmartInspect Console Viewer running on the specified network address.Connections=tcp(host=192.168.1.1,port=4228,timeout=5000,reconnect=true,reconnect.interval=10s,async.enabled=true); - Log to a file, keeping 14 days worth of logs.;Connections = "file(filename=\"./tests/logfiles/logfile.log\", rotate=daily, maxparts=14, append=true)"; - Log to an encrypted file, keeping 14 days worth of logs.;Connections = "file(filename=\"./tests/logfiles/logfileEncrypted.sil\", encrypt=true, key=""1234567890123456"", rotate=daily, maxparts=14, append=true)"; set defaults for new sessions; note that session defaults do not apply to the SiAuto.Main session, since; this session was already added before a configuration file can be loaded.; session defaults only apply to newly added sessions and do not affect existing sessions.SessionDefaults.Active=TrueSessionDefaults.Level=MessageSessionDefaults.ColorBG=0xFFFFFF; configure some individual session properties.; note that this does not add the session to the sessionmanager; it simply; sets the property values IF the session name already exists.Session.Main.Active=TrueSession.Main.ColorBG=0xFFFFFFInitialize Logging Support, MAIN moduleAdd the following lines to your program startup module.  
  This will import the necessary package modules, and initialize logging support.  
  NOTE - This code should only be executed one time!# load SmartInspect settings from a configuration settings file.fromsmartinspectpython.siautoimport*siConfigPath:str="./tests/smartinspect.cfg"SIAuto.Si.LoadConfiguration(siConfigPath)# start monitoring the configuration file for changes, and reload it when it changes.# this will check the file for changes every 60 seconds.siConfig:SIConfigurationTimer=SIConfigurationTimer(SIAuto.Si,siConfigPath)# get smartinspect logger reference._logsi:SISession=SIAuto.Main# log system environment and application startup parameters._logsi.LogSeparator(SILevel.Fatal)_logsi.LogAppDomain(SILevel.Verbose)_logsi.LogSystem(SILevel.Verbose)Initialize Logging Support, CLASS or sub-modulesAdd the following lines to your program supporting modules.  
  This will import the necessary package modules, and initialize the shared logging session.# get smartinspect logger reference.fromsmartinspectpython.siautoimport*_logsi:SISession=SIAuto.MainMore Information on SmartInspectYou can use SmartInspectPython by itself to create log files for your own applications.  
  Use the following PIP command to install the SmartInspectPython package from PyPi.org:$python3-mpipinstallsmartinspectpythonThe SmarrtInspect Redistributable Console Viewer (free) is required to view SmartInspect Log (.sil) formatted log files, as well capture packets via the TcpProtocol or PipeProtocol connections.  The Redistributable Console Viewer can be downloaded from theCode-Partners Software Downloads Page. Note that the "Redistributable Console Viewer" is a free product, while the "SmartInspect Full Setup" is the Professional level viewer that adds a few more bells and whistles for a fee.  Also note that a Console Viewer is NOT required to view plain text (non .sil) formatted log files.ContributingContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make aregreatly appreciated.If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".Fork the ProjectCreate your Feature Branchgit checkout -b feature/AmazingFeatureCommit your Changesgit commit -m 'Add some AmazingFeature'Push to the Branchgit push origin feature/AmazingFeatureOpen a Pull Request