kdschlosser / samsungctl

Remote control Samsung televisions via a TCP/IP connection
MIT License
155 stars 33 forks source link

Connection failure #20

Closed derjoern closed 5 years ago

derjoern commented 5 years ago

Hi there!

Many thanks for your work now there is hope that my TV will work. However I downloaded your fork installed it on my Debian stable with Python 3.5.3 and it gave me an error for my Samsung UE55J TV:

$ python -m samsungctl -vvv --host $IP --name myremote --method websocket KEY_VOLDOWN Traceback (most recent call last): File "/usr/lib/python3.5/runpy.py", line 193, in _run_module_as_main "main", mod_spec) File "/usr/lib/python3.5/runpy.py", line 85, in _run_code exec(code, run_globals) File "/home/joern/software/samsungctl/samsungctl/main.py", line 206, in main() File "/home/joern/software/samsungctl/samsungctl/main.py", line 181, in main with Remote(config) as remote: File "/home/joern/software/samsungctl/samsungctl/remote.py", line 13, in init self.remote = RemoteWebsocket(config) File "/home/joern/software/samsungctl/samsungctl/remote_websocket.py", line 50, in init self.open() File "/home/joern/software/samsungctl/samsungctl/remote_websocket.py", line 117, in open raise RuntimeError('Connection Failure') RuntimeError: Connection Failure ^CException ignored in: <module 'threading' from '/usr/lib/python3.5/threading.py'> Traceback (most recent call last): File "/usr/lib/python3.5/threading.py", line 1288, in _shutdown t.join() File "/usr/lib/python3.5/threading.py", line 1054, in join self._wait_for_tstate_lock() File "/usr/lib/python3.5/threading.py", line 1070, in _wait_for_tstate_lock elif lock.acquire(block, timeout): KeyboardInterrupt

The installation looked like this:

$ sudo python setup.py install /usr/lib/python3/dist-packages/setuptools/dist.py:333: UserWarning: Normalizing '0.8.0b' to '0.8.0b0' normalized_version, running install running bdist_egg running egg_info writing requirements to samsungctl.egg-info/requires.txt writing dependency_links to samsungctl.egg-info/dependency_links.txt writing samsungctl.egg-info/PKG-INFO writing top-level names to samsungctl.egg-info/top_level.txt writing entry points to samsungctl.egg-info/entry_points.txt reading manifest file 'samsungctl.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' warning: no files found matching 'README.rst' writing manifest file 'samsungctl.egg-info/SOURCES.txt' installing library code to build/bdist.linux-x86_64/egg running install_lib running build_py creating build/bdist.linux-x86_64/egg creating build/bdist.linux-x86_64/egg/samsungctl copying build/lib/samsungctl/exceptions.py -> build/bdist.linux-x86_64/egg/samsungctl copying build/lib/samsungctl/remote.py -> build/bdist.linux-x86_64/egg/samsungctl copying build/lib/samsungctl/remote_websocket.py -> build/bdist.linux-x86_64/egg/samsungctl copying build/lib/samsungctl/remote_legacy.py -> build/bdist.linux-x86_64/egg/samsungctl copying build/lib/samsungctl/interactive.py -> build/bdist.linux-x86_64/egg/samsungctl copying build/lib/samsungctl/main.py -> build/bdist.linux-x86_64/egg/samsungctl copying build/lib/samsungctl/init.py -> build/bdist.linux-x86_64/egg/samsungctl copying build/lib/samsungctl/key_mappings.py -> build/bdist.linux-x86_64/egg/samsungctl byte-compiling build/bdist.linux-x86_64/egg/samsungctl/exceptions.py to exceptions.cpython-35.pyc byte-compiling build/bdist.linux-x86_64/egg/samsungctl/remote.py to remote.cpython-35.pyc byte-compiling build/bdist.linux-x86_64/egg/samsungctl/remote_websocket.py to remote_websocket.cpython-35.pyc byte-compiling build/bdist.linux-x86_64/egg/samsungctl/remote_legacy.py to remote_legacy.cpython-35.pyc byte-compiling build/bdist.linux-x86_64/egg/samsungctl/interactive.py to interactive.cpython-35.pyc byte-compiling build/bdist.linux-x86_64/egg/samsungctl/main.py to main.cpython-35.pyc byte-compiling build/bdist.linux-x86_64/egg/samsungctl/init.py to init.cpython-35.pyc byte-compiling build/bdist.linux-x86_64/egg/samsungctl/key_mappings.py to key_mappings.cpython-35.pyc creating build/bdist.linux-x86_64/egg/EGG-INFO copying samsungctl.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO copying samsungctl.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO copying samsungctl.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO copying samsungctl.egg-info/entry_points.txt -> build/bdist.linux-x86_64/egg/EGG-INFO copying samsungctl.egg-info/requires.txt -> build/bdist.linux-x86_64/egg/EGG-INFO copying samsungctl.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO zip_safe flag not set; analyzing archive contents... samsungctl.pycache.main.cpython-35: module references file creating 'dist/samsungctl-0.8.0b0-py3.5.egg' and adding 'build/bdist.linux-x86_64/egg' to it removing 'build/bdist.linux-x86_64/egg' (and everything under it) Processing samsungctl-0.8.0b0-py3.5.egg removing '/usr/local/lib/python3.5/dist-packages/samsungctl-0.8.0b0-py3.5.egg' (and everything under it) creating /usr/local/lib/python3.5/dist-packages/samsungctl-0.8.0b0-py3.5.egg Extracting samsungctl-0.8.0b0-py3.5.egg to /usr/local/lib/python3.5/dist-packages samsungctl 0.8.0b0 is already the active version in easy-install.pth Installing samsungctl script to /usr/local/bin

Installed /usr/local/lib/python3.5/dist-packages/samsungctl-0.8.0b0-py3.5.egg Processing dependencies for samsungctl==0.8.0b0 Searching for websocket-client==0.54.0 Best match: websocket-client 0.54.0 Processing websocket_client-0.54.0-py3.5.egg websocket-client 0.54.0 is already the active version in easy-install.pth Installing wsdump.py script to /usr/local/bin

Using /usr/local/lib/python3.5/dist-packages/websocket_client-0.54.0-py3.5.egg Searching for six==1.10.0 Best match: six 1.10.0 Adding six 1.10.0 to easy-install.pth file

Using /usr/lib/python3/dist-packages Finished processing dependencies for samsungctl==0.8.0b0

Hope this will help!

Best regards Jörn

iAbadia commented 5 years ago

Try uninstalling websocket-client and installing version 0.48.0 instead of the latest 0.54.0.

dcorsus commented 5 years ago

You have a J series TV, correct? I think this program does not support the PIN based+Encryption J/K series models ... or so I think.

kdschlosser commented 5 years ago

I will he adding in support for H and J series TV's in the next week.

dcorsus commented 5 years ago

are you planning on compiling in the smart-view DLLs or the Javascript-based-reverse-engineered Smartviews app implementation that is out there? The prior works fine for Windows but doesn't run under mono for Linux. The latter I can't comment on, didn't think there was a PY based solution out there.

kdschlosser commented 5 years ago

nope. i simply want to see the code to see how they are doing things in the smartview app. I do not plan on compiling the DLL and using it. I want to keep this as a pure python library. It keeps things easier to alter that way. building extension dll's really complicates the hell out of things.

dcorsus commented 5 years ago

Figured that's what you wanted to do, but unless I've missed it, nobody has figured out how to do this, except from de-compiling the smartview app in javascript, with a bunch of code that is pretty much unreadable, especially the authentication part. Once past the authentication it is straight forward AES encrypted payloads ... and did I mention the command structure being totally different from what is done on current TVs. There is a JS.Node solution out there, that has the SmartView functions running on a server somewhere and you can do the authentication remotely. Not sure that's what you want to do either but just letting you know it is available. I ended up including the smartview DLLs to do the authentication (PIN based) and once past that, use existing AES classes to do the communication. (sorry all in VB.Net :-()

kdschlosser commented 5 years ago

that is the point. smartview is open source. we have to e-mail samsung in order to get the code for it. then there will be no reason to de-compile smartview. de-compiling is a really crappy process because when code gets compiled it does not store things like the variable names. so the de-compiling process makes a mess you have to figure out. and the variable names will no longer be user friendly names. so you really will not have a clue as to what does what. and the comments in the code are not added ot the compiled version. so you lose that as well. if we can get the source code from Samsung this will include all of those things.

So if you are feeling up to it send an e-mail to that e-mail address io posted above and ask them for the source code to smartview. it is an opensource project so they should provide it. if they happen to ask why... tell them it's none of their business... LOL.. IDK come up with some BS reason. honestly they shouldn't even ask. But you can tell them that you are developing an application and you want to use the code form the smartview application as a reference.

If they do not give you the code then they are in violation of the license and we will go from there to see what can be done about it.

dcorsus commented 5 years ago

I'll ask, not holding my breath. Not sure our interpretation of Open Source is the same. My interpretation is that you must publish the source code wrt to the changes you made to "open source". No company is mandated to publish all their code because it runs on a open source kernel platform. About to email them right now

kdschlosser commented 5 years ago

the definition of Open Source.. in very simple terms.. Means "available to the public free of charge". Now depending on the license there will stipulations on the redistribution and or the use of any any of the code. or a modification of the original code. All of the stipulations contained in the OpenSource licenses have stipulations on the redistribution of the code. Which we are not doing. we are using it as a reference and nothing more.

here is the full license for some light reading... I do want to point you to read section 2.1

Open Source Announcement

To send inquiries and requests for questions regarding open sources, contact Samsung via Email (oss.request@samsung.com).

Mozilla Public License, version 2.0

1.Definitions
1.1. “Contributor” means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software.

1.2. “Contributor Version” means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor’s Contribution.

1.3. “Contribution” means Covered Software of a particular Contributor.

1.4. “Covered Software” means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof.

1.5. “Incompatible With Secondary Licenses” means that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License.

1.6. “Executable Form” means any form of the work other than Source Code Form.

1.7. “Larger Work” means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software.

1.8. “License” means this document.

1.9. “Licensable” means having the right to grant, to the maximum extent possible,whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License.

1.10. “Modifications” means any of the following: 
any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or any new file in Source Code Form that contains any Covered Software.

1.11. “Patent Claims” of a Contributor means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version.

means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
means the form of the work preferred for making modifications.
means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses.
means the form of the work preferred for making modifications.
means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.

means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses.

means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version.

means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.

means the form of the work preferred for making modifications.

means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.

means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses.

means the form of the work preferred for making modifications.

means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.

2. License Grants and Conditions
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version.

2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution.

2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: for any code that a Contributor has removed from Covered Software; or for infringements caused by: (i) Your and any other third party’s modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or under Patent Claims infringed by Covered Software in the absence of its Contributions.
This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section .

2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3).

2.5. Representation
Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License.

2.6. Fair Use
This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents.

2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1.

3. Responsibilities
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients’ rights in the Source Code Form.

3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then: such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients’ rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s).

3.4. Notices
You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies.

3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction.

4. Inability to Comply Due to Statute or Regulation
If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.

5. Termination
5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice.

5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination.

6. Disclaimer of Warranty
Covered Software is provided under this License on an “as is” basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the Covered Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Covered Software is with You. Should any Covered Software prove defective in any respect, You (not any Contributor) assume the cost of any necessary servicing, repair, or correction. This disclaimer of warranty constitutes an essential part of this License. No use of any Covered Software is authorized under this License except under this disclaimer.

7. Limitation of Liability
Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall any Contributor, or anyone who distributes Covered Software as permitted above, be liable to You for any direct, indirect, special, incidental, or consequential damages of any character including, without limitation, damages for lost profits, loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party’s negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You.

8. Litigation
Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party’s ability to bring cross-claims or counter-claims.

9. Miscellaneous
This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor.

10. Versions of the License
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number.

10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward.

10.3. Modified Versions
If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached.

Exhibit A - Source Code Form License Notice
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.

If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.

You may add additional accurate notices of copyright ownership.

Exhibit B - “Incompatible With Secondary Licenses” Notice
This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0.

The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the OpenSSL License and the original SSLeay license apply to the toolkit. See below for the actual license texts. Actually both licenses are BSD-style Open Source licenses. In case of any license issues related to OpenSSL please contact openssl-core@openssl.org.

OpenSSL License
Copyright (c) 1998-2007 The OpenSSL Project.  All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. All advertising materials mentioning features or use of this software must display the following acknowledgment: "This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)"

4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact openssl-core@openssl.org.

5. Products derived from this software may not be called "OpenSSL" nor may "OpenSSL" appear in their names without prior written permission of the OpenSSL Project.

6. Redistributions of any form whatsoever must retain the following acknowledgment: "This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/)"

THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

This product includes cryptographic software written by Eric Young (eay@cryptsoft.com).  This product includes software written by Tim Hudson (tjh@cryptsoft.com).

Original SSLeay License
Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) All rights reserved.

This package is an SSL implementation written by Eric Young (eay@cryptsoft.com). 
The implementation was written so as to conform with Netscapes SSL.

This library is free for commercial and non-commercial use as long as the following conditions are aheared to.  The following conditions apply to all code found in this distribution, be it the RC4, RSA, lhash, DES, etc., code; not just the SSL code.  The SSL documentation included with this distribution is covered by the same copyright terms except that the holder is Tim Hudson (tjh@cryptsoft.com).

Copyright remains Eric Young's, and as such any Copyright notices in the code are not to be removed. If this package is used in a product, Eric Young should be given attribution as the author of the parts of the library used. This can be in the form of a textual message at program startup or in documentation (online or textual) provided with the package.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software must display the following acknowledgement:
"This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)"
The word 'cryptographic' can be left out if the rouines from the library being used are not cryptographic related :-).
4. If you include any Windows specific code (or a derivative thereof) from the apps directory (application code) you must include an acknowledgement: "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"

THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The licence and distribution terms for any publically available version or derivative of this code cannot be changed.  i.e. this code cannot simply be copied and put under another distribution licence [including the GNU Public Licence.]

Apache License, Version 2.0

Foundation Projects People Get Involved Download Support Apache Home ≫ Licenses

Apache License Version 2.0, January 2004

http://www.apache.org/licenses/ 

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.

"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of this License; and You must cause any modified files to carry prominent notices stating that You changed the files; and You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work
To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
kdschlosser commented 5 years ago

and that is right out of the smartview application.

kdschlosser commented 5 years ago

also I already have the connection bits for the H and J series TV's all done up. I have to add it and run some tests on it.

raydog153 commented 5 years ago

Are you saying this would allow us to control an H series model UN40H5203? That is the exact model I have but with latest firmware. I’ve been unsuccessful in previous attempts to control tv but willing to help any way, whether testing, debugging, coding... I’m a chief software architect and a ruby guru. While not python I have done some python coding and just semantics at this point.

At one point I was able to get pin screen to show up for my tv, but not further than than. Very few ports are turned on, seems like recent software updates have only disabled more...

kdschlosser commented 5 years ago

the only ports we need to have running for the H and J series is 8001 i believe. I would have to double check.

We should be able to get something going..

the H and J series TV's use what is called Rijndael cypher for the encryption for the data being sent over the connection.

If I can manage to get my fingers on the source code for smartview there would be a whole lot I can learn form it. Because as it stands the only thing you will be able to do is send remote button presses to the TV.

I will see if I can get it going for you in the next 20 minutes or so. at least a test version to see what happens.

derjoern commented 5 years ago

Maybe this can help. It works but is not usable:

https://github.com/tdudek/samsung-remote-models-2014-and-newer

raydog153 commented 5 years ago

Back on Nov 21, 2017 I had these ports open:

Starting Nmap 7.60 ( https://nmap.org ) at 2017-11-20 15:12 EST
Nmap scan report for tv (192.168.1.17)
Host is up (0.021s latency).
Not shown: 65529 closed ports
PORT     STATE SERVICE
4443/tcp open  pharos
7011/tcp open  talon-disc
7676/tcp open  imqbrokerd
8080/tcp open  http-proxy
8443/tcp open  https-alt
9080/tcp open  glrpc

And now I only have these:

Starting Nmap 7.70 ( https://nmap.org ) at 2019-01-06 13:51 EST
Nmap scan report for 192.168.1.11
Host is up (0.0091s latency).
Not shown: 65530 closed ports
PORT     STATE SERVICE
4443/tcp open  pharos
7011/tcp open  talon-disc
7676/tcp open  imqbrokerd
8080/tcp open  http-proxy
8443/tcp open  https-alt

I was able to run the websockets stuff over port 8080 and get a pin screen to show up using type=0.

kdschlosser commented 5 years ago

OK so here it is.. download that branch and run

python setup.py install

https://github.com/kdschlosser/samsungctl/tree/H_J_series_TVs

test code


import samsungctl

config = {
    "name": "samsungctl",
    "description": "PC",
    "id": "kjhjKJDHljkjHJFEREkmjkllkf",
    "method": "encrypted",
        "host": "CHANGE THIS TO YOUR TV IP"
    "port": 8000,
        "http_port": 8080,
    "timeout": 0,
        "token": None
}

with samsungctl.Remote(config) as remote:
    for _ in range(10):
        remote.command('KEY_VOLUP')

give that a try

raydog153 commented 5 years ago

I'm having trouble getting it to run, and installing missing modules, the one I am stuck on is Crypto.Cipher.

~/samsungtv/samsungctl$ python setup.py install
Traceback (most recent call last):
  File "setup.py", line 45, in <module>
    import samsungctl
  File "/Users/rboutotte/samsungtv/samsungctl/samsungctl/__init__.py", line 13, in <module>
    from .remote import Remote # NOQA
  File "/Users/rboutotte/samsungtv/samsungctl/samsungctl/remote.py", line 6, in <module>
    from .remote_encrypted import RemoteWebsocketEncrypted
  File "/Users/rboutotte/samsungtv/samsungctl/samsungctl/remote_encrypted.py", line 12, in <module>
    from .pySmartCrypto.command_encryption import AESCipher
  File "/Users/rboutotte/samsungtv/samsungctl/samsungctl/pySmartCrypto/command_encryption.py", line 3, in <module>
    from Crypto.Cipher import AES
ImportError: No module named Crypto.Cipher
raydog153 commented 5 years ago

Nevermind....got past that....

raydog153 commented 5 years ago

I get no errors now, but no PIN prompt on TV either. Tried all my open ports.

derjoern commented 5 years ago

Tried to install it and got broken after the downgrade of websocket-client:

Proceed (y/n)? y Successfully uninstalled websocket-client-0.54.0 Traceback (most recent call last): File "setup.py", line 34, in for mod_name in sys.modules.keys(): RuntimeError: dictionary changed size during iteration

kdschlosser commented 5 years ago

duh duh duh duh.. I'm an idiot... I forgot that in python 3 the returned values from dict,keys() is an iterable. meaning it will change of the dictionary changes. (the dictionary being sys.modules) and if the dictionary changes then the iteration gets all fowled up. It's an easy fix. TY for pointing this out..

kdschlosser commented 5 years ago

@raydog153 i forgot to add pycrypto to the requirements. that is the reason for that first problem.

now onto the second... I am going to add some extensive logging to the code. se we can see exactly where it might be getting stuck. I use a series of thread locks and thread events to handle responses form the TV. It very well could be getting deadlocked. Give me a little while to add the debugging routines and I will fix the issue with pycrypto as well.

@derjoern what branch are you running?

derjoern commented 5 years ago

I think:

[branch "H_J_series_TVs"]

iAbadia commented 5 years ago

I've been trying to make my NU7100 work with combination_branch and I still get the Connection failure due to a timeout on remote_websocket.py:119. I've tried a JS lib and and a random android app from the PlayStore and both work (the JS lib crashes after sending the key but it does send it) so the TV is compatible.

I've tried downgrading websocket-client to random versions < 0.48.0 and no luck. I've tried Python 2 and 3, Ubuntu and Debian. Any ideas where to keep digging? This is what I'm running:

python3 -m samsungctl --host 192.168.31.11 --port 8002 --method websocket --name remoteCmd KEY_VOLDOWN
keatontaylor commented 5 years ago

@iAbadia same on an NU8000 series. Something is up.

kdschlosser commented 5 years ago

if you downloaded some "random" app from the play store and it works. you are most likly specifying the wrong values in your command line arguments.

the commands you are specifying are specifically for TV that are running a version of the firmware that changes the connection behavior to use SSL.

To my knowledge samsungctl is the only library that has the solution for the SSL problem implemented. so if some "random" app works then it is most likly using the old conneection scheme.

change the port to 8001.

the library is set up so that if the TV returns "unauthorized" on port 8001 it will then attempt to make the connection on 8002

kdschlosser commented 5 years ago

@derjoern ok i will make the changes to that branch to fix the downgrade issue.

kdschlosser commented 5 years ago

@derjoern ok i fixed the problem in the setup program on the H_J_series_TVs branch. give it a try again if you want. If you have an H or a J series TV that branch is still not going to function. I have to do some more work on it. I have an H series TV here I need to connect to my network. It's a process to do that because the TV has no WiFi card in it. It does have a network card so I have to run a wire down 2 floors and plug it into my server rack. It will be something i do in the next few days. when I get that running I will be able to test against my own TV which will make development a lot faster.

iAbadia commented 5 years ago

if you downloaded some "random" app from the play store and it works. you are most likly specifying the wrong values in your command line arguments.

the commands you are specifying are specifically for TV that are running a version of the firmware that changes the connection behavior to use SSL.

To my knowledge samsungctl is the only library that has the solution for the SSL problem implemented. so if some "random" app works then it is most likly using the old conneection scheme.

change the port to 8001.

the library is set up so that if the TV returns "unauthorized" on port 8001 it will then attempt to make the connection on 8002

This is the android app, since version 2.0 they included support for the new models. I understand that's the ssl protocol on port 8002. https://play.google.com/store/apps/details?id=ir.remote.smg.tv

This is the JS lib I used, debugging I confirmed that it's using ssl and port 8002, not the old 8001. And again, it does send the key (although then crashes). https://github.com/natalan/samsung-remote

derjoern commented 5 years ago

@kdschlosser If the websocket-client is installed (via pip3) it removes the installation and gets then in an error about missing the websocket-client module. If the module is not installed it goes directly in this error.

AlexStapleton commented 5 years ago

Hello, I am having issues getting this package to connect to my tv. When the file runs, I get the notification on my tv where I click "Allow", however it then says "Connection Failure" and no action occurs. Running from a python2 file, not command line. Any help please, this project seems awesome!

Samsungctl Version = samsungctl-combination_branch (as of 19:40 PST) TV Version = NU8000 Freshly installed python 2.7.15 Websocket-client is version 0.48.0

Python Code is similar to the one in the tutorial, updated it after reading through comments in this repo: import samsungctl import time

config = { "name": "samsungctl", "description": "PC", "id": "", "host": "192.168.1.22", "port": 8002, "method": "websocket", "timeout": 0 }

with samsungctl.Remote(config) as remote: for i in range(10): remote.control("KEY_MENU") time.sleep(0.5)

Output: Traceback (most recent call last): File "C:\Users\Z-Acer\Desktop\samsungctl_v1.py", line 16, in with samsungctl.Remote(config) as remote: File "C:\Python27\lib\site-packages\samsungctl-0.8.0b0-py2.7.egg\samsungctl\remote.py", line 13, in init self.remote = RemoteWebsocket(config) File "C:\Python27\lib\site-packages\samsungctl-0.8.0b0-py2.7.egg\samsungctl\remote_websocket.py", line 65, in init self.open() File "C:\Python27\lib\site-packages\samsungctl-0.8.0b0-py2.7.egg\samsungctl\remote_websocket.py", line 132, in open raise RuntimeError('Connection Failure') RuntimeError: Connection Failure

kdschlosser commented 5 years ago

there is a bug in the websocket-client library that is causing issues. try this branch and see what happens

https://github.com/kdschlosser/samsungctl/tree/new_websocket_client

AlexStapleton commented 5 years ago

@kdschlosser

Yes that version is working for me now. Thank you for all of the effort you've put in to this. Hopefully I can figure out a way to include this as a component in my Home Assistant setup.

xxKeoxx commented 5 years ago

@kdschlosser - I am having the same issue. I cloned and installed the branch referenced above, but I still have the issue. Do I need to remove the old version first? If so, how I do I remove it?

AlexStapleton commented 5 years ago

@xxKeoxx

You should do pip uninstall samsungctl before installing the new version he linked above.

xxKeoxx commented 5 years ago

@xxKeoxx

You should do pip uninstall samsungctl before installing the new version he linked above.

Traceback (most recent call last): File "./samsung_test.py", line 16, in <module> with samsungctl.Remote(config) as remote: File "/usr/lib/python2.7/site-packages/samsungctl-0.8.0b-py2.7.egg/samsungctl/remote.py", line 13, in __init__ self.remote = RemoteWebsocket(config) File "/usr/lib/python2.7/site-packages/samsungctl-0.8.0b-py2.7.egg/samsungctl/remote_websocket.py", line 50, in __init__ self.open() File "/usr/lib/python2.7/site-packages/samsungctl-0.8.0b-py2.7.egg/samsungctl/remote_websocket.py", line 117, in open raise RuntimeError('Connection Failure') RuntimeError: Connection Failure

Still getting the error.

jnimmo commented 5 years ago

Using the new_websocket_client I'm getting Auth Failure, which is looking promising (I'm not near the TV to click the Yes button)

xxKeoxx commented 5 years ago

You should do pip uninstall samsungctl before

Which version of websocket-client should I be using. I see early on in this post he references an older release.

xxKeoxx commented 5 years ago

Finally got past the error. I must have been pulling the wrong version.

Any ideas how to get the app ID? I want to launch Vudu

kdschlosser commented 5 years ago

go to that branch and read how to code in a script that will allow you to run an application. I have not made any of thee application stuff available via the command line yet. so it has to be don from a script.


import samsungctl

config = {
    "name": "samsungctl",
    "description": "PC",
    "id": "",
    "host": "192.168.1.22",
    "port": 8002,
    "method": "websocket",
    "timeout": 0
}

with samsungctl.Remote(config) as remote:
    for app in remote.applications:
        if app.name.lower() == 'vudu':
            app.run()
            break

Now you can also surf through different application defined content groups. and this is part of the reason why I have not added thee applications to the command line yet. I am trying to come up with a way to do this kind of a thing gracefully

from __future__ import print_function
import samsungctl

config = {
    "name": "samsungctl",
    "description": "PC",
    "id": "",
    "host": "192.168.1.22",
    "port": 8002,
    "method": "websocket",
    "timeout": 0
}

with samsungctl.Remote(config) as remote:
    for app in remote.applications:
        if app.name.lower() == 'vudu':
            for group in app:
                print(group.title)
                for content in group:
                    print('   ', content.title)
                    # if you wanted to run a specific piece of content.
                    # if content.title == 'some movie title':
                          # content.run()
kdschlosser commented 5 years ago

and the version of the websocket-client does not matter anymore. I got that all sorted out as well.

kdschlosser commented 5 years ago

Oh i forgot about this.

from __future__ import print_function
import samsungctl

config = {
    "name": "samsungctl",
    "description": "PC",
    "id": "",
    "host": "192.168.1.22",
    "port": 8002,
    "method": "websocket",
    "timeout": 0
}

with samsungctl.Remote(config) as remote:
    vudu = remote.get_application('Vudu')
    # or vudu.run()
    for group in vudu:
        print(group.title)
        for content in group:
            print('   ', content.title)
            # if you wanted to run a specific piece of content.
            # if content.title == 'some movie title':
                # content.run()
kdschlosser commented 5 years ago

if you have one of those TV remots you can talk to. this will start the voice recognition system and give you 15 seconds to say what you want and then close the voice recognition

from __future__ import print_function
import samsungctl
import time

config = {
    "name": "samsungctl",
    "description": "PC",
    "id": "",
    "host": "192.168.1.22",
    "port": 8002,
    "method": "websocket",
    "timeout": 0
}

with samsungctl.Remote(config) as remote:
    remote.start_voice_recognition()
    time.sleep(15)
    remote.stop_voice_recognition()
AlexStapleton commented 5 years ago

Oh i forgot about this.

from __future__ import print_function
import samsungctl

config = {
    "name": "samsungctl",
    "description": "PC",
    "id": "",
    "host": "192.168.1.22",
    "port": 8002,
    "method": "websocket",
    "timeout": 0
}

with samsungctl.Remote(config) as remote:
    vudu = remote.get_application('Vudu')
    # or vudu.run()
    for group in vudu:
        print(group.title)
        for content in group:
            print('   ', content.title)
            # if you wanted to run a specific piece of content.
            # if content.title == 'some movie title':
                # content.run()

I tried running this with the Netflix app but it sent the below error. (I know the name is "Netflix" because i can run it using a post command)

Code:

with samsungctl.Remote(config) as remote: netflix = remote.get_application('Netflix') for group in netflix: print(group.title) for content in group: print(' ', content.title)

Error Response:

TypeError Traceback (most recent call last)

in () 1 with samsungctl.Remote(config) as remote: ----> 2 netflix = remote.get_application('Netflix') 3 for group in netflix: 4 print(group.title) 5 for content in group: c:\python27\lib\site-packages\samsungctl-0.8.0b0-py2.7.egg\samsungctl\remote_websocket.pyc in get_application(self, pattern) 171 172 def get_application(self, pattern): --> 173 for app in self.applications: 174 if pattern in (app.app_id, app.name): 175 return app c:\python27\lib\site-packages\samsungctl-0.8.0b0-py2.7.egg\samsungctl\remote_websocket.pyc in applications(self) 210 for app_1 in app_data[1]: 211 for app_2 in app_data[0]: --> 212 if app_1['appId'] == app_2['appId']: 213 app_1.update(app_2) 214 TypeError: string indices must be integers
xxKeoxx commented 5 years ago

TypeError: string indices must be integers

I am going to be looking into this:

See this thread:

https://github.com/kdschlosser/samsungctl/issues/25

I was able to get past that error but then another was thrown. I plan on working on this later tonight to see if I can come up with a fix.

kdschlosser commented 5 years ago

I am going to have a look at the data structures again to see what is going on.

Also can someone do me a favor. I need to know if I need to stall the receive thread so it doesn't consume to much of the CPU. so can someone please check their CPU use while the script below is running

import threading
import samsungctl

config = {
    "name": "samsungctl",
    "description": "PC",
    "id": "",
    "host": "192.168.1.22",
    "port": 8002,
    "method": "websocket",
    "timeout": 0
}

event = threading.event()
with samsungctl.Remote(config) as remote:
    try:
        event.wait()
    except KeyboardInterrupt:
        pass

the script above is going to appear to get hung it really isn't. it will allow you to see what the CPU use is. ctrl + c will exit the script

AlexStapleton commented 5 years ago

See this thread:

25

I was able to get past that error but then another was thrown. I plan on working on this later tonight to see if I can come up with a fix.

@xxKeoxx Sorry didn't see you had opened a new issue on this topic. I will follow up in that issue thread.

@kdschlosser I can try the CPU test later today aka after work.

kdschlosser commented 5 years ago

I believe that the connection issues should have now been repaired. I am going to close this.