{ "info": { "author": "Krystian Galutowski", "author_email": "k.galutowski@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Topic :: Home Automation" ], "description": "Samsung Multiroom (WIP)\n=======================\n\nControl Samsung Multiroom speakers.\n\n.. image:: https://img.shields.io/travis/krygal/samsung_multiroom/master.svg\n :target: https://travis-ci.org/krygal/samsung_multiroom\n.. image:: https://img.shields.io/librariesio/github/krygal/samsung_multiroom.svg\n.. image:: https://img.shields.io/codeclimate/maintainability-percentage/krygal/samsung_multiroom.svg\n :target: https://codeclimate.com/github/krygal/samsung_multiroom\n.. image:: https://img.shields.io/codeclimate/coverage/krygal/samsung_multiroom.svg\n :target: https://codeclimate.com/github/krygal/samsung_multiroom\n.. image:: https://img.shields.io/pypi/v/samsung_multiroom.svg\n :target: https://pypi.org/project/samsung_multiroom/\n.. image:: https://img.shields.io/pypi/pyversions/samsung_multiroom.svg\n.. image:: https://img.shields.io/pypi/l/samsung_multiroom.svg\n\n\nInstallation\n-------------\n\n .. code:: bash\n\n pip install samsung_multiroom\n\n\nExample speaker control\n-----------------------\n\n**Initialise**\n\n.. code:: python\n\n from samsung_multiroom import SamsungMultiroomSpeaker\n\n # initialise (replace with your speaker's ip address)\n speaker = SamsungMultiroomSpeaker('192.168.1.129')\n\n # get speaker name\n speaker.get_name()\n\n\n**Basic functions**\n\n.. code:: python\n\n # get/set volume\n volume = speaker.get_volume()\n print(volume)\n\n speaker.set_volume(10)\n\n # switch source to connect with your samsung tv\n speaker.set_source('soundshare')\n\n # mute/unmute\n speaker.mute()\n speaker.unmute()\n\n\n**Audio source browsers**\n\n.. code:: python\n\n # browse dlna device called nas\n browser = speaker.service('dlna').browser\n # or shorter\n browser = speaker.browser('dlna')\n browser = browser.browse('/nas/Music/By Folder/Air/Moon Safari/CD 1')\n\n for item in browser:\n print(item.object_type, item.object_id, item.artist, '-', item.name)\n\n\n # browse TuneIn radios\n browser = speaker.service('tunein').browser\n browser = browser.browse('/Trending/')\n\n for item in browser:\n print(item.object_type, item.object_id, item.name)\n\n\n**App integrations**\n\n.. code:: python\n\n # check available services\n names = speaker.get_services_names()\n print(names)\n\n # authenticate (unless you've done it already via mobile app)\n speaker.service('Deezer').login('your email', 'your password')\n\n browser = speaker.service('Deezer').browser\n browser = browser.browse('/Browse/Rock/Artists/Queen')\n\n for item in browser:\n print(item.object_type, item.object_id, item.name)\n\n\n**Player functions**\n\n.. code:: python\n\n # create playlist from browser items (see above) and play\n speaker.player.play(browser)\n\n # pause/resume\n speaker.player.pause()\n speaker.player.resume()\n\n # repeat mode\n from samsung_multiroom import REPEAT_ALL, REPEAT_ONE, REPEAT_OFF\n speaker.player.repeat(REPEAT_ALL)\n\n # get track info\n track = speaker.player.get_current_track()\n print(track)\n\n\n**Equalizer functions**\n\n.. code:: python\n\n # get preset names\n presets = speaker.equalizer.get_presets_names()\n print(presets)\n\n # set predefined equalizer settings\n speaker.equalizer.set('Pop')\n\n # set adhoc settings\n speaker.equalizer.set([4,3,2,1,2,3,0]) # <-6, 6>\n\n # overwrite current preset\n speaker.equalizer.save()\n\n # ... or save as a new preset\n speaker.equalizer.save('Experimental')\n\n\n**Clock functions**\n\n.. code:: python\n\n # set alarm\n browser = speaker.service('tunein').browser\n browser = browser.browse('/Trending/')\n\n speaker.clock.alarm.slot(0).set(\n time='17:28',\n weekdays=[0,1,5], # Mon, Tue, Fri\n playlist=browser,\n )\n\n # enable/disable alarm 0\n speaker.clock.alarm.slot(0).enable()\n speaker.clock.alarm.slot(0).disable()\n\n # sleep after 30 seconds\n speaker.clock.timer.start(300)\n\n remaining_time = speaker.clock.timer.get_remaining_time()\n print(remaining_time)\n\n\n**Speaker discovery**\n\n.. code:: python\n\n from samsung_multiroom import SamsungSpeakerDiscovery\n speakers = SamsungSpeakerDiscovery().discover() # takes some time\n\n for s in speakers:\n print(s.get_name(), '@', s.ip_address)\n\n\n**Speaker grouping**\n\n.. code:: python\n\n # (after speaker discovery)\n main_speaker = speakers[0]\n rest_speakers = speakers[1:]\n\n speaker_group = main_speaker.group('My first group', rest_speakers)\n\n # now use speaker group like a speaker\n speaker_group.set_volume(10)\n\n browser = speaker_group.service('dlna').browser\n browser = browser.browse('/nas/Music/By Folder/Air/Moon Safari/CD 1')\n\n speaker_group.player.play(browser)\n\n\n**Events (preview)**\n\nYou can monitor events emitted by the speaker without polling. Full list of supported events can be found in\nsamsung_multiroom/event/type/.\n\n.. code:: python\n\n import asyncio\n\n from samsung_multiroom import SamsungMultiroomSpeaker\n\n\n # listener will be passed an Event object (see samsung_multiroom/event/type/)\n def listener(event):\n print(event.name, event)\n\n\n async def main():\n speaker = SamsungMultiroomSpeaker('192.168.1.129')\n event_loop = speaker.event_loop\n event_loop.add_listener('*', listener)\n\n await event_loop.loop()\n\n\n loop = asyncio.get_event_loop()\n loop.run_until_complete(main())\n loop.close()\n\n.. code:: python\n\n # listen to all events\n event_loop.add_listener('*', listener)\n\n # listen to events within a namespace\n event_loop.add_listener('speaker.service.*', listener)\n\n # listen to a single event\n event_loop.add_listener('speaker.service.changed', listener)\n\n\nLicense\n-------\n\nMIT License\n\nCopyright (c) 2018 Krystian Galutowski\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/krygal/samsung_multiroom", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "samsung-multiroom", "package_url": "https://pypi.org/project/samsung-multiroom/", "platform": "", "project_url": "https://pypi.org/project/samsung-multiroom/", "project_urls": { "Homepage": "https://github.com/krygal/samsung_multiroom" }, "release_url": "https://pypi.org/project/samsung-multiroom/0.0.7/", "requires_dist": null, "requires_python": "", "summary": "Samsung multiroom speaker support", "version": "0.0.7" }, "last_serial": 5168123, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "9694fd9d21e1b6996c45f26cf61a27ef", "sha256": "e45d6390487f3d7ed9bcf009145de7a5ce52bc8bdc7dc80ec0b7379c10a42622" }, "downloads": -1, "filename": "samsung_multiroom-0.0.2.tar.gz", "has_sig": false, "md5_digest": "9694fd9d21e1b6996c45f26cf61a27ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58796, "upload_time": "2019-01-13T17:26:43", "url": "https://files.pythonhosted.org/packages/13/fd/d0bf6b855989e23eaaa3c056de0bad0c09324f9a9ff437bd3fb79d04bc87/samsung_multiroom-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "c02efd1d50c615e3a37f398a6b573cb2", "sha256": "c30994da825c278156ad87a1d15eff14b466a7952dbe6e83da45d3c3730b6992" }, "downloads": -1, "filename": "samsung_multiroom-0.0.3.tar.gz", "has_sig": false, "md5_digest": "c02efd1d50c615e3a37f398a6b573cb2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66329, "upload_time": "2019-01-16T10:54:09", "url": "https://files.pythonhosted.org/packages/93/70/2f47f7dfd4cd25c8824be45d959dab2f91a40a2945003b9fffced101aa6f/samsung_multiroom-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "0a93b16de711f47d8c481d25eb5c0612", "sha256": "3d956f98986aa3c4f2b9139cf738d3f5d17e8bc5807f6878bc921ada85450773" }, "downloads": -1, "filename": "samsung_multiroom-0.0.4.tar.gz", "has_sig": false, "md5_digest": "0a93b16de711f47d8c481d25eb5c0612", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69266, "upload_time": "2019-01-22T19:20:14", "url": "https://files.pythonhosted.org/packages/ee/81/4902a5e3e405498abe28a2cdc1ce1c78bc9eca2c4eeeca0326ae7a1e064d/samsung_multiroom-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "59cfc8b70e9de2b2df3e214121b0ab42", "sha256": "7e545f9d14303e904e6226a2a609e9c7ae6950afff9301a01175b8f44a9c50e1" }, "downloads": -1, "filename": "samsung_multiroom-0.0.5.tar.gz", "has_sig": false, "md5_digest": "59cfc8b70e9de2b2df3e214121b0ab42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 70729, "upload_time": "2019-01-26T16:08:47", "url": "https://files.pythonhosted.org/packages/08/af/30cbe279ae2a6cc451ec7233ec03273393e616ea29db220731c9e79d30ef/samsung_multiroom-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "e037601b9f0e2f5c3c9de65976d7476b", "sha256": "3a3a087cd5f62ce31cf550c0e08e3370ad9869e05ac016157e5051d46284eea2" }, "downloads": -1, "filename": "samsung_multiroom-0.0.6.tar.gz", "has_sig": false, "md5_digest": "e037601b9f0e2f5c3c9de65976d7476b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 74937, "upload_time": "2019-02-09T17:43:17", "url": "https://files.pythonhosted.org/packages/73/60/3d6a3e1d63b556ab88cc2c748bbffdb27a940f663e1567a4a9c6e4ecb4db/samsung_multiroom-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "b7d4daaab516698f7c0169c921ab6f2c", "sha256": "a92850d198d8b56c44acfe6bd222c7240f4e996e8381d6fe5ecd6a935ed8e4d5" }, "downloads": -1, "filename": "samsung_multiroom-0.0.7.tar.gz", "has_sig": false, "md5_digest": "b7d4daaab516698f7c0169c921ab6f2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 74928, "upload_time": "2019-04-20T16:36:49", "url": "https://files.pythonhosted.org/packages/f5/ec/918b4b3bc03f485e6e574b72f17b1697e4eb905f1ce2ea15ea227df52558/samsung_multiroom-0.0.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b7d4daaab516698f7c0169c921ab6f2c", "sha256": "a92850d198d8b56c44acfe6bd222c7240f4e996e8381d6fe5ecd6a935ed8e4d5" }, "downloads": -1, "filename": "samsung_multiroom-0.0.7.tar.gz", "has_sig": false, "md5_digest": "b7d4daaab516698f7c0169c921ab6f2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 74928, "upload_time": "2019-04-20T16:36:49", "url": "https://files.pythonhosted.org/packages/f5/ec/918b4b3bc03f485e6e574b72f17b1697e4eb905f1ce2ea15ea227df52558/samsung_multiroom-0.0.7.tar.gz" } ] }