From e05183ffeb4e2027c3199cf1e5b81274418a7b61 Mon Sep 17 00:00:00 2001 From: Alex Orid Date: Tue, 4 May 2021 16:23:00 -0400 Subject: [PATCH] Working Version --- obsWebSocket.py | 72 ++++++++++++++++++++++++++++++++++++++ standalone_obsWebSocket.py | 35 ++++++++++-------- 2 files changed, 93 insertions(+), 14 deletions(-) create mode 100644 obsWebSocket.py diff --git a/obsWebSocket.py b/obsWebSocket.py new file mode 100644 index 0000000..ad4a28d --- /dev/null +++ b/obsWebSocket.py @@ -0,0 +1,72 @@ +import asyncio +import simpleobsws +import json + +loop = asyncio.get_event_loop() +ws = simpleobsws.obsws(host='127.0.0.1', port=4444, password='MYSecurePassword', loop=loop) # Every possible argument has been passed, but none are required. See lib code for defaults. + + +async def default_request(): + await ws.connect() # Make the connection to OBS-Websocket + result = await ws.call('GetVersion') # We get the current OBS version. More request data is not required + print(result) # Print the raw json output of the GetVersion request + await asyncio.sleep(1) + print("\n\n") + requests = result['available-requests'].split(',') + for r in requests: + print(r) + print("\n\n") + #data = {'source':'test_source', 'volume':0.5} + #result = await ws.call('SetVolume', data) # Make a request with the given data + #print(result) + await ws.disconnect() # Clean things up by disconnecting. Only really required in a few specific situations, but good practice if you are done making requests or listening to events. + +async def make_custom_request(request, data=None): + await ws.connect() # Make the connection to OBS-Websocket + result = await ws.call(request) # We get the current OBS version. More request data is not required + print(result) # Print the raw json output of the GetVersion request + await asyncio.sleep(1) + if not data==None: + data = {'source':'test_source', 'volume':0.5} + result = await ws.call('SetVolume', data) # Make a request with the given data + print(result) + await ws.disconnect() # Clean things up by disconnecting. Only really required in a few specific situations, but good practice if you are done making requests or listening to events. + + + +async def on_event(data): + print('New event! Type: {} | Raw Data: {}'.format(data['update-type'], data)) # Print the event data. Note that `update-type` is also provided in the data + +async def on_switchscenes(data): + print("\n===========================================\n\n") + print('Scene switched to "{}". It has these sources: {}'.format(data['scene-name'], data['sources'])) + + + +def getRequests(): + loop.run_until_complete(default_request()) + +def makeRequest(request): + loop.run_until_complete(make_custom_request(request)) + + + +def listenForData(): + print("\n\nListener:") + + loop = asyncio.get_event_loop() + ws = simpleobsws.obsws(host='127.0.0.1', port=4444, password='MYSecurePassword', loop=loop) # Every possible argument has been passed, but none are required. See lib code for defaults. + loop.run_until_complete(ws.connect()) + ws.register(on_event) # By not specifying an event to listen to, all events are sent to this callback. + ws.register(on_switchscenes, 'SwitchScenes') + loop.run_forever() + + + +if __name__ == "__main__": + #print("\n\nRequests:") + #loop.run_until_complete(get_requests()) + + #makeRequest("ToggleStudioMode") + #listenForData() + pass diff --git a/standalone_obsWebSocket.py b/standalone_obsWebSocket.py index 5cad0d5..7a22e8a 100644 --- a/standalone_obsWebSocket.py +++ b/standalone_obsWebSocket.py @@ -1,17 +1,24 @@ -import asyncio -import simpleobsws +import flask +from flask import request -loop = asyncio.get_event_loop() -ws = simpleobsws.obsws(host='127.0.0.1', port=4444, password='MYSecurePassword', loop=loop) # Every possible argument has been passed, but none are required. See lib code for defaults. +import obsWebSocket -async def make_request(): - await ws.connect() # Make the connection to OBS-Websocket - result = await ws.call('GetVersion') # We get the current OBS version. More request data is not required - print(result) # Print the raw json output of the GetVersion request - await asyncio.sleep(1) - data = {'source':'test_source', 'volume':0.5} - result = await ws.call('SetVolume', data) # Make a request with the given data - print(result) - await ws.disconnect() # Clean things up by disconnecting. Only really required in a few specific situations, but good practice if you are done making requests or listening to events. +import os +import praxis_logging +praxis_logger_obj = praxis_logging.praxis_logger() +praxis_logger_obj.init(os.path.basename(__file__)) +praxis_logger_obj.log("\n -Starting Logs: " + os.path.basename(__file__)) -loop.run_until_complete(make_request()) \ No newline at end of file +api = flask.Flask(__name__) +# enable/disable this to get web pages of crashes returned +api.config["DEBUG"] = False + +def init(): + obsWebSocket.getRequests() + #obsWebSocket.makeRequest("ToggleStudioMode") + obsWebSocket.listenForData() + + +if __name__ == "__main__": + init() + api.run(host='0.0.0.0', port=6009) \ No newline at end of file