#! /usr/bin/python
# Title: samsungremote.py
# Author: Asif Iqbal
# Date: 05APR2012
# Info: To send remote control commands to the Samsung tv over LAN
# TODO:
import socket
import base64
import time, datetime
#IP Address of TV
tvip = "100.0.0.123" #get_settings('tvip')
#IP Address of TV
myip = "100.0.0.112" #get_settings('myip')
#Used for the access control/validation, but not after that AFAIK
mymac = "00-0c-29-3e-b1-4f" #get_settings('mymac')
#What the iPhone app reports
appstring = "iphone..iapp.samsung"
#Might need changing to match your TV type
tvappstring = "iphone.UE55C8000.iapp.samsung"
#What gets reported when it asks for permission
remotename = "Python Samsung Remote"
# Function to send keys
def sendKey(skey, dataSock, appstring):
messagepart3 = chr(0x00) + chr(0x00) + chr(0x00) + chr(len(
base64.b64encode(skey))) + chr(0x00) + base64.b64encode(skey);
part3 = chr(0x00) + chr(len(appstring)) + chr(0x00) \
+ appstring + chr(len(messagepart3)) + chr(0x00) + messagepart3
dataSock.send(part3);
# Open Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((tvip, 55000))
# Key Reference
# Normal remote keys
#KEY_0
#KEY_1
#KEY_2
#KEY_3
#KEY_4
#KEY_5
#KEY_6
#KEY_7
#KEY_8
#KEY_9
#KEY_UP
#KEY_DOWN
#KEY_LEFT
#KEY_RIGHT
#KEY_MENU
#KEY_PRECH
#KEY_GUIDE
#KEY_INFO
#KEY_RETURN
#KEY_CH_LIST
#KEY_EXIT
#KEY_ENTER
#KEY_SOURCE
#KEY_AD #KEY_PLAY
#KEY_PAUSE
#KEY_MUTE
#KEY_PICTURE_SIZE
#KEY_VOLUP
#KEY_VOLDOWN
#KEY_TOOLS
#KEY_POWEROFF
#KEY_CHUP
#KEY_CHDOWN
#KEY_CONTENTS
#KEY_W_LINK #Media P
#KEY_RSS #Internet
#KEY_MTS #Dual
#KEY_CAPTION #Subt
#KEY_REWIND
#KEY_FF
#KEY_REC
#KEY_STOP
# Bonus buttons not on the normal remote:
#KEY_TV
#Don't work/wrong codes:
#KEY_CONTENT
#KEY_INTERNET
#KEY_PC
#KEY_HDMI1
#KEY_OFF
#KEY_POWER
#KEY_STANDBY
#KEY_DUAL
#KEY_SUBT
#KEY_CHANUP
#KEY_CHAN_UP
#KEY_PROGUP
#KEY_PROG_UP
# First configure the connection
ipencoded = base64.b64encode(myip)
macencoded = base64.b64encode(mymac)
messagepart1 = chr(0x64) + chr(0x00) + chr(len(ipencoded)) \
+ chr(0x00) + ipencoded + chr(len(macencoded)) + chr(0x00) \
+ macencoded + chr(len(base64.b64encode(remotename))) + chr(0x00) \
+ base64.b64encode(remotename)
part1 = chr(0x00) + chr(len(appstring)) + chr(0x00) + appstring \
+ chr(len(messagepart1)) + chr(0x00) + messagepart1
sock.send(part1)
messagepart2 = chr(0xc8) + chr(0x00)
part2 = chr(0x00) + chr(len(appstring)) + chr(0x00) + appstring \
+ chr(len(messagepart2)) + chr(0x00) + messagepart2
sock.send(part2)
# Now send the keys as you like, e.g.,
#sendKey("KEY_VOLUP",sock,tvappstring)
#time.sleep(1)
#sendKey("KEY_TOOLS",sock,tvappstring)
#time.sleep(1)
#sendKey("KEY_RIGHT",sock,tvappstring)
#time.sleep(1)
#sendKey("KEY_DOWN",sock,tvappstring)
#time.sleep(1)
#sendKey("KEY_RIGHT",sock,tvappstring)
# Close the socket when done
#sock.closet()
### Attempt to make a samsung control ###
def key_0():
try:
sendKey("KEY_0",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key 0, DEBUG')
def key_1():
try:
sendKey("KEY_1",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key 1, DEBUG')
def key_2():
try:
sendKey("KEY_2",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key 2, DEBUG')
def key_3():
try:
sendKey("KEY_3",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key 3, DEBUG')
def key_4():
try:
sendKey("KEY_4",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key 4, DEBUG')
def key_5():
try:
sendKey("KEY_5",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key 5, DEBUG')
def key_6():
try:
sendKey("KEY_6",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key 6, DEBUG')
def key_7():
try:
sendKey("KEY_7",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key 7, DEBUG')
def key_8():
try:
sendKey("KEY_8",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key 8, DEBUG')
def key_9():
try:
sendKey("KEY_9",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key 9, DEBUG')
def key_up():
try:
sendKey("KEY_UP",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key up, DEBUG')
def key_down():
try:
sendKey("KEY_DOWN",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key 9, DEBUG')
def key_left():
try:
sendKey("KEY_LEFT",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key left, DEBUG')
def key_right():
try:
sendKey("KEY_RIGHT",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key right, DEBUG')
def key_menu():
try:
sendKey("KEY_MENU",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key menu, DEBUG')
def key_prech():
try:
sendKey("KEY_PRECH",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key menu, DEBUG')
def key_guide():
try:
sendKey("KEY_GUIDE",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key menu, DEBUG')
def key_info():
try:
sendKey("KEY_INFO",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key menu, DEBUG')
def key_return():
try:
sendKey("KEY_RETURN",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key menu, DEBUG')
def key_ch_list():
try:
sendKey("KEY_CH_LIST",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key menu, DEBUG')
def key_exit():
try:
sendKey("KEY_EXIT",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key exit, DEBUG')
def key_enter():
try:
sendKey("KEY_ENTER",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key enter, DEBUG')
def key_source():
try:
sendKey("KEY_SOURCE",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key source, DEBUG')
def key_ad():
try:
sendKey("KEY_AD",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key AD, DEBUG')
def key_play():
try:
sendKey("KEY_PLAY",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key PLAY, DEBUG')
def key_pause():
try:
sendKey("KEY_PAUSE",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key PAUSE, DEBUG')
def key_mute():
try:
sendKey("KEY_MUTE",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key PLAY, DEBUG')
def key_picture_size():
try:
sendKey("KEY_PICTURE_SIZE",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key PICTURE SIZE, DEBUG')
def key_volup():
try:
sendKey("KEY_VOLUP",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key VOLUME UP, DEBUG')
def key_voldown():
try:
sendKey("KEY_VOLDOWN",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key PICTURE SIZE, DEBUG')
def key_tools():
try:
sendKey("KEY_TOOLS",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key TOOLS, DEBUG')
def key_poweroff():
try:
sendKey("KEY_POWEROFF",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key POWER OFF, DEBUG')
def key_poweroff():
try:
sendKey("KEY_POWEROFF",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key POWER OFF, DEBUG')
def key_chup():
try:
sendKey("KEY_CHUP",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key CH UP, DEBUG')
def key_chdown():
try:
sendKey("KEY_CHDOWN",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key CH DOWN, DEBUG')
def key_contents():
try:
sendKey("KEY_CONTENTS",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key CONTENTS, DEBUG')
def key_chdown():
try:
sendKey("KEY_CHDOWN",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key CH DOWN, DEBUG')
def key_w_link():
try:
sendKey("KEY_W_LINK",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key W LINK, DEBUG')
def key_media_p():
try:
sendKey("Media P",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key MEDIA P, DEBUG')
def key_rss():
try:
sendKey("KEY_RSS",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key RSS, DEBUG')
def key_internet():
try:
sendKey("KEY_CHDOWN",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key INTERNET, DEBUG')
def key_mts():
try:
sendKey("KEY_MTS",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key CH MTS, DEBUG')
def key_dual():
try:
sendKey("Dual",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key DUAL, DEBUG')
def key_caption():
try:
sendKey("KEY_CAPTION",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key CAPTION, DEBUG')
def key_subt():
try:
sendKey("Subt",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key SUBT, DEBUG')
def key_rewind():
try:
sendKey("KEY_REWIND",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key REWIND, DEBUG')
def key_ff():
try:
sendKey("KEY_FF",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key CH DOWN, DEBUG')
def key_rec():
try:
sendKey("KEY_REC",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key REC, DEBUG')
def key_stop():
try:
sendKey("KEY_STOP",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key STOP, DEBUG')
def key_stop():
try:
sendKey("KEY_TV",sock,tvappstring)
sock.close()
except:
#logger.log('Samsung remote failed pressing key STOP, DEBUG')
# To test this remote you need to call each function eg if you want to the stop key you write: key_stop()
# After this comments
0 comments:
Post a Comment