-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
150 lines (97 loc) · 3.93 KB
/
main.py
File metadata and controls
150 lines (97 loc) · 3.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import subprocess
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
WEB_OS_SUCCESS_RETURN_VALUE = "'returnValue': True"
WEB_OS_IP = "192.168.50.196"
WEB_OS_API_SUCCESS = "nice"
WEB_OS_API_ERROR = "no"
def execute_command(command, value=""):
result = subprocess.Popen(f"bscpylgtvcommand {WEB_OS_IP} {command} {value}", shell=True,
stdout=subprocess.PIPE).stdout.read()
return str(result)
def is_webos_success(result):
return WEB_OS_SUCCESS_RETURN_VALUE in str(result)
def command_api_handler(command, value=""):
if is_webos_success(execute_command(command, value)):
return WEB_OS_API_SUCCESS, 200
return WEB_OS_API_ERROR, 500
def get_api_handler(command):
return execute_command(command), 200
class WebOSPowerGetState(Resource):
def get(self):
return get_api_handler("get_power_state")
class WebOSPowerOn(Resource):
def get(self):
return command_api_handler("power_on")
class WebOSPowerOff(Resource):
def get(self):
return command_api_handler("power_off")
class WebOSScreenOff(Resource):
def get(self):
return command_api_handler("turn_screen_off")
class WebOSScreenOn(Resource):
def get(self):
return command_api_handler("turn_screen_on")
class WebOSAudioGetStatus(Resource):
def get(self):
return get_api_handler("get_audio_status")
class WebOSAudioSetVolume(Resource):
def get(self, volume_value_str):
volume_value = int(volume_value_str)
if volume_value < 0 or volume_value > 100:
return WEB_OS_API_ERROR, 400
return command_api_handler("set_volume", volume_value_str)
class WebOSAudioGetVolume(Resource):
def get(self):
return get_api_handler("get_volume")
class WebOSAudioMute(Resource):
def get(self):
return command_api_handler("set_mute", "true")
class WebOSAudioUnmute(Resource):
def get(self):
return command_api_handler("set_mute", "false")
class WebOSAudioGetMuted(Resource):
def get(self):
return get_api_handler("get_muted")
class WebOSSystemGetSoftwareInfo(Resource):
def get(self):
return get_api_handler("get_software_info")
class WebOSSystemGetSystemInfo(Resource):
def get(self):
return get_api_handler("get_system_info")
class WebOSSystemGetConfigs(Resource):
def get(self):
return get_api_handler("get_configs")
class WebOSAppsGetApps(Resource):
def get(self):
# "get_apps_all" includes hidden ones, "get_apps" for regular ones
return get_api_handler("get_apps_all")
class WebOSAppsGetCurrentApp(Resource):
def get(self):
return get_api_handler("get_current_app")
class WebOSMiscSendMessage(Resource):
def get(self, message_text):
if len(message_text) == 0:
return WEB_OS_API_ERROR, 400
return command_api_handler("send_message", message_text)
api.add_resource(WebOSPowerGetState, '/lg/get-state')
api.add_resource(WebOSPowerOn, '/lg/on')
api.add_resource(WebOSPowerOff, '/lg/off')
api.add_resource(WebOSScreenOff, '/lg/screen-off')
api.add_resource(WebOSScreenOn, '/lg/screen-on')
api.add_resource(WebOSAudioGetStatus, '/lg/get-audio-status')
api.add_resource(WebOSAudioSetVolume, '/lg/set-volume/<string:volume_value_str>')
api.add_resource(WebOSAudioGetVolume, '/lg/get-volume')
api.add_resource(WebOSAudioUnmute, '/lg/unmute')
api.add_resource(WebOSAudioMute, '/lg/mute')
api.add_resource(WebOSAudioGetMuted, '/lg/get-muted')
api.add_resource(WebOSSystemGetSoftwareInfo, '/lg/get-software-info')
api.add_resource(WebOSSystemGetSystemInfo, '/lg/get-system-info')
api.add_resource(WebOSSystemGetConfigs, '/lg/get-configs')
api.add_resource(WebOSAppsGetApps, '/lg/get-apps')
api.add_resource(WebOSAppsGetCurrentApp, '/lg/get-current-app')
api.add_resource(WebOSMiscSendMessage, '/lg/send-notification/<string:message_text>')
if __name__ == '__main__':
app.run(debug=False)