diff --git a/example.py b/example.py
index 11398fc..1f84065 100644
--- a/example.py
+++ b/example.py
@@ -7,4 +7,5 @@ if __name__ == "__main__":
key = raw_input('Enter pairing key: ')
remote.set_pairing_key(key)
- remote.send_command(Remote.VOLUME_UP)
+ print("EXAMPLE: remote.send_command(INSERT_CMD_HERE, remote.session)")
+ import pdb; pdb.set_trace()
diff --git a/lg.py b/lg.py
index 8f46445..276c7a9 100644
--- a/lg.py
+++ b/lg.py
@@ -23,12 +23,13 @@ class Remote():
self.pair_key = pair_key
self.ip_address = ip_address
+ self.session = None
if not self.ip_address:
raise Remote.NoTVFound
if self.pair_key:
- self.get_session()
+ self.session = self.get_session()
else:
self.request_pair()
@@ -82,7 +83,7 @@ class Remote():
"""
self.pair_key = pair_key
- self.get_session()
+ self.session = self.get_session()
def make_request(self, endpoint, content, extra_headers={}):
"""
@@ -108,7 +109,7 @@ class Remote():
AuthKeyReq
"""
- self.make_request('/roap/api/auth', content)
+ self.make_request('/hdcp/api/auth', content)
def get_session(self):
"""
@@ -122,10 +123,10 @@ class Remote():
{0}
""".format(self.pair_key)
- response = self.make_request('/roap/api/auth', content)
+ response = self.make_request('/hdcp/api/auth', content)
return response.find('session').text
- def send_command(self, code):
+ def send_command(self, code, session):
"""
Send a remote control key command. Ignores response for now.
"""
@@ -135,11 +136,12 @@ class Remote():
content = """
- HandleKeyInput
+ {1}
+ HandleKeyInput
{0}
- """.format(code)
- self.make_request('/roap/api/command', content)
+ """.format(code, session)
+ self.make_request('/hdcp/api/dtv_wifirc', content)
def send_multiple(self, codes, delay=0.2):
"""
@@ -149,7 +151,7 @@ class Remote():
"""
for code in codes:
- self.send_command(code)
+ self.send_command(code, self.session)
time.sleep(delay)
# exceptions
@@ -168,71 +170,141 @@ class Remote():
"""
pass
+ # heavily inspired by https://github.com/dreamcat4/lgremote/blob/master/lgremote
+ commands = {}
- # command code shortcuts
+ # all work with 42LW579S-ZD
+ menus = {
+ "STATUS_BAR" : 35,
+ "QUICK_MENU" : 69,
+ "HOME_MENU" : 67,
+ "PREMIUM_MENU" : 89
+ }
- POWER = 1
- NUM_0 = 2
- NUM_1 = 3
- NUM_2 = 4
- NUM_3 = 5
- NUM_4 = 6
- NUM_5 = 7
- NUM_6 = 8
- NUM_7 = 9
- NUM_8 = 10
- NUM_9 = 11
- UP = 12
- DOWN = 13
- LEFT = 14
- RIGHT = 15
- OK = 20
- HOME = 21
- MENU = 22
- BACK = 23
- VOLUME_UP = 24
- VOLUME_DOWN = 25
- MUTE = 26
- CHANNEL_UP = 27
- CHANNEL_DOWN = 28
- BLUE = 29
- GREEN = 30
- RED = 31
- YELLOW = 32
- PLAY = 33
- PAUSE = 34
- STOP = 35
- FF = 36
- REW = 37
- SKIP_FF = 38
- SKIP_REW = 39
- REC = 40
- REC_LIST = 41
- LIVE = 43
- EPG = 44
- INFO = 45
- ASPECT = 46
- EXT = 47
- PIP = 48
- SUBTITLE = 49
- PROGRAM_LIST = 50
- TEXT = 51
- MARK = 52
- _3D = 400
- _3D_LR = 401
- DASH = 402
- PREV = 403
- FAV = 404
- QUICK_MENU = 405
- TEXT_OPTION = 406
- AUDIO_DESC = 407
- NETCAST = 408
- ENERGY_SAVE = 409
- AV = 410
- SIMPLINK = 411
- EXIT = 412
- RESERVE = 413
- PIP_CHANNEL_UP = 414
- PIP_CHANNEL_DOWN = 415
- PIP_SWITCH = 416
- APPS = 417
+ # all work with 42LW579S-ZD
+ power_controls = {
+ "POWER" : 8,
+ "SLEEP_MENU" : 14
+ }
+
+ # all work with 42LW579S-ZD
+ navigation_controls = {
+ "LEFT" : 7,
+ "RIGHT" : 6,
+ "UP" : 64,
+ "DOWN" : 65,
+ "SELECT" : 68,
+ "BACK" : 40,
+ "EXIT" : 91,
+ "RED" : 114,
+ "GREEN" : 113,
+ "YELLOW" : 99,
+ "BLUE" : 97
+ }
+
+ # all work with 42LW579S-ZD
+ keypad_controls = {
+ "0" : 16,
+ "1" : 17,
+ "2" : 18,
+ "3" : 19,
+ "4" : 20,
+ "5" : 21,
+ "6" : 22,
+ "7" : 23,
+ "8" : 24,
+ "9" : 25,
+ "_" : 76,
+ }
+
+ # untested
+ playback_controls = {
+ "PLAY" : 176,
+ "PAUSE" : 186,
+ "FAST_FORWARD" : 142,
+ "REWIND" : 143,
+ "STOP" : 177,
+ "RECORD" : 189
+ }
+
+ # untested
+ tv_controls = {
+ "CHANNEL_UP" : 0,
+ "CHANNEL_DOWN" : 1,
+ "CHANNEL_BACK" : 26,
+ "FAVORITES" : 30,
+ "TELETEXT" : 32,
+ "T_OPT" : 33,
+ "CHANNEL_LIST" : 83,
+ "GUIDE" : 169,
+ "INFO_TOGGLE" : 170,
+ "INFO" : 217,
+ "LIVE_TV" : 158
+ }
+
+ # all work with 42LW579S-ZD
+ input_controls = {
+ "TV_RADIO" : 15,
+ "SIMPLINK" : 126,
+ "INPUT" : 11,
+ "COMPONENT_RGB_HDMI" : 152,
+ "RGB" : 213, #215 seems to do the same
+ "COMPONENT" : 191,
+ "ANTENNA" : 214, #240 does the same without channels programmed. 240 could also be CABLE input
+ "HDMI" : 198,
+ "HDMI1" : 206,
+ "HDMI2" : 204,
+ "HDMI3" : 233,
+ "HDMI4" : 218,
+ "AV1" : 90,
+ "AV2" : 208,
+ "AV3" : 209,
+ "USB" : 124,
+ "SLIDESHOW_USB1" : 238,
+ "SLIDESHOW_USB2" : 168
+ }
+
+ # should work
+ audio_controls = {
+ "VOLUME_UP" : 2,
+ "VOLUME_DOWN" : 3,
+ "MUTE" : 9,
+ "AUDIO" : 10,
+ "SOUND_MODE" : 82,
+ "SUBTITLE_LANGUAGE" : 57,
+ "AUDIO_DESCRIPTION" : 145,
+ "FACTORY_SOUND_CHECK" : 253
+ }
+
+ # all work with 42LW579S-ZD
+ picture_controls = {
+ "AV_MODE" : 48,
+ "PICTURE_MODE" : 77,
+ "RATIO" : 121,
+ "RATIO_4_3" : 118,
+ "RATIO_16_9" : 119,
+ "ENERGY_SAVING" : 149, #only works as expected in quick-menu. Outside of it it sets Energy Saving to Auto and toggles the GREEN_EYE_CHECK menu. Maybe due to previous tinkering with POWER_ONLY mode.
+ "CINEMA_ZOOM" : 175,
+ "3D" : 220,
+ "FACTORY_PICTURE_CHECK" : 252
+ }
+
+ # not sure about these
+ self_diagnosis = {
+ "DIAG1" : 164,
+ "DIAG2" : 165,
+ "DIAG3" : 173,
+ "DIAG4" : 188,
+ "DIAG5" : 190,
+ "PICTURE_TEST" : 249
+ }
+
+ # see: http://openlgtv.org.ru/wiki/index.php/Hidden_service_modes_/_menus
+ hidden_menues = {
+ "INSTALLATION_MENU" : 207,
+ "POWER_ONLY" : 254,
+ "EZ_ADJUST" : 255,
+ "IN_START" : 251
+ }
+
+ HAPPENS_WITHOUT_CONFIRMATION = { "FACTORY_RESET" : 250 }