Skip to content

Instantly share code, notes, and snippets.

@danielfaust
Created May 30, 2011 04:12
Show Gist options
  • Star 64 You must be signed in to star a gist
  • Fork 33 You must be signed in to fork a gist
  • Save danielfaust/998441 to your computer and use it in GitHub Desktop.
Save danielfaust/998441 to your computer and use it in GitHub Desktop.
Samsung TV Remote Control Python Script
import time
import socket
import base64
src = '192.168.1.2' # ip of remote
mac = '00-AB-11-11-11-11' # mac of remote
remote = 'python remote' # remote name
dst = '192.168.1.3' # ip of tv
app = 'python' # iphone..iapp.samsung
tv = 'LE32C650' # iphone.LE32C650.iapp.samsung
def push(key):
new = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
new.connect((dst, 55000))
msg = chr(0x64) + chr(0x00) +\
chr(len(base64.b64encode(src))) + chr(0x00) + base64.b64encode(src) +\
chr(len(base64.b64encode(mac))) + chr(0x00) + base64.b64encode(mac) +\
chr(len(base64.b64encode(remote))) + chr(0x00) + base64.b64encode(remote)
pkt = chr(0x00) +\
chr(len(app)) + chr(0x00) + app +\
chr(len(msg)) + chr(0x00) + msg
new.send(pkt)
msg = chr(0x00) + chr(0x00) + chr(0x00) +\
chr(len(base64.b64encode(key))) + chr(0x00) + base64.b64encode(key)
pkt = chr(0x00) +\
chr(len(tv)) + chr(0x00) + tv +\
chr(len(msg)) + chr(0x00) + msg
new.send(pkt)
new.close()
time.sleep(0.1)
while True:
# switch to tv
push("KEY_TV")
# switch to channel one
push("KEY_1")
push("KEY_ENTER")
time.sleep(5)
# switch to channel 15
push("KEY_1")
push("KEY_5")
push("KEY_ENTER")
time.sleep(5)
# switch to HDMI
push("KEY_HDMI")
time.sleep(5)
@ccampanale
Copy link

Love this. Made a port to Ruby that I will push to GH sometime. Thanks so much for posting this! 😄

@cherezov
Copy link

Briliant! Thanks for sharing this! Made a port to Python3 and use it in my home automation project (smarpy)!

@mmphego
Copy link

mmphego commented Jun 20, 2016

I am unable to connect, please help
In [4]: new = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

In [5]: new.conne
new.connect new.connect_ex

In [5]: new.connect(('192.168.1.2', 55000))

ConnectionRefusedError Traceback (most recent call last)
in ()
----> 1 new.connect(('192.168.1.2', 55000))

ConnectionRefusedError: [Errno 111] Connection refused

@adriandelcl
Copy link

Same error here.

Conection refused.

@smhaggerty
Copy link

What is the model number of the TV you are attempting to connect to?

@CryptKid
Copy link

Detects my TV, terminals says, it works, but nothing happens. Maybe that has something to do with the PIN i had to enter on the App?

@jeremy7358
Copy link

Hi ,can it work with google home>>ifttt>> google assistant>> webhook ?
without other materials, if so how thank you very much

@WiseSage17
Copy link

WiseSage17 commented Jan 10, 2018

Hi, I am also getting Connection Refused.

Python Version 2.7

src = 'MAC IP' # ip of remote
mac = 'MAC Address of IP' # mac of remote
remote = 'MAC Machine remote' # remote name
dst = 'IP OF TV' # ip of tv
app = 'python' # iphone..iapp.samsung
tv = 'LED46 - Name of TV in TV Settings' # iphone.LE32C650.iapp.samsung

Traceback (most recent call last):
File "/Users//Downloads/998441-c89144315e5fa304e51a88e352d90541b87a8f94/samsung_remote.py", line 35, in
push("KEY_TV")
File "/Users/
/Downloads/998441-c89144315e5fa304e51a88e352d90541b87a8f94/samsung_remote.py", line 15, in push
new.connect((dst, 55000))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
error: [Errno 61] Connection refused

Ive scanned the 5 Samsun TVs i have and none of them have Port 55000 Open

@LeThinh2511
Copy link

Hi, I am also getting Connection Refused.

Python Version 2.7

src = 'MAC IP' # ip of remote
mac = 'MAC Address of IP' # mac of remote
remote = 'MAC Machine remote' # remote name
dst = 'IP OF TV' # ip of tv
app = 'python' # iphone..iapp.samsung
tv = 'LED46 - Name of TV in TV Settings' # iphone.LE32C650.iapp.samsung

Traceback (most recent call last):
File "/Users//Downloads/998441-c89144315e5fa304e51a88e352d90541b87a8f94/samsung_remote.py", line 35, in
push("KEY_TV")
File "/Users/
/Downloads/998441-c89144315e5fa304e51a88e352d90541b87a8f94/samsung_remote.py", line 15, in push
new.connect((dst, 55000))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
error: [Errno 61] Connection refused

Ive scanned the 5 Samsun TVs i have and none of them have Port 55000 Open

I used port 8001 instead.

@omriarieli
Copy link

Hi, great work.
how can i get a list of the supported tests in my tv
what i mean is when using the smart remote feature adding my a/v receiver via optical i have a test button that switches the receiver on and off so techincally i know its possible but i cant control it after for on/off only for volume
thinking of making some kind of script to do it as long as i dont need to get up from the couch :)
thanks

@Will695
Copy link

Will695 commented Feb 29, 2020

I'm getting
Traceback (most recent call last):
File "c:\Users\Will.vscode\extensions\ms-python.python-2020.2.64397\pythonFiles\ptvsd_launcher.py", line 48, in
main(ptvsdArgs)
File "c:\Users\Will.vscode\extensions\ms-python.python-2020.2.64397\pythonFiles\lib\python\old_ptvsd\ptvsd_main_.py", line 432, in main
run()
File "c:\Users\Will.vscode\extensions\ms-python.python-2020.2.64397\pythonFiles\lib\python\old_ptvsd\ptvsd_main_.py", line 316, in run_file
runpy.run_path(target, run_name='main')
File "C:\Users\Will\AppData\Local\Programs\Python\Python36-32\lib\runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "C:\Users\Will\AppData\Local\Programs\Python\Python36-32\lib\runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "C:\Users\Will\AppData\Local\Programs\Python\Python36-32\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "c:\Users\Will\Google Drive\Python Scripts\Samsung\SmartThings\pysmartthingspy.py", line 57, in
push("KEY_TV")
File "c:\Users\Will\Google Drive\Python Scripts\Samsung\SmartThings\pysmartthingspy.py", line 41, in push
chr(len(base64.b64encode(remote))) + chr(0x00) + base64.b64encode(remote)
File "C:\Users\Will\AppData\Local\Programs\Python\Python36-32\lib\base64.py", line 58, in b64encode
encoded = binascii.b2a_base64(s, newline=False)
TypeError: a bytes-like object is required, not 'str'

I've got this as my config
src = 'IP of PC' # ip of remote
mac = 'Mac of PC' # mac of remote
remote = 'Hostname of PC' # remote name
dst = 'IP of TV' # ip of tv
app = 'python' # iphone..iapp.samsung
tv = '[TV] Samsung' # Name of my TV

and set the port to 8001 as i've got a 2015 tv

I don't actually have a SmartThings HUB, I've been trying to control my TV via my pc or Hassio

@nandishyb
Copy link

Do you know the way we can send the mouse pointer movement command to Samsung 2013 TV ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment