Gmocup2tou
New Member
Hi Every one,
I meet a problem with my code under Python . I would like change scene with python with a condition in this case when Countdown at 00:00:00.
Connexion OBS is OK, but the scene don't change with this command =>
await change_scene(obs_ws, "Resultats")
If you have an idea , that wil be great.
My code :
import asyncio
import websockets
import json
import time
from obswebsocket import obsws, requests
# Paramètres de connexion OBS
OBS_HOST = "localhost"
OBS_PORT = 4455 # Port par défaut pour le WebSocket OBS
OBS_PASSWORD = "Uhpyfkd1&2021" # Mot de passe configuré dans OBS
# Connexion OBS
def connect_to_obs():
ws = obsws(OBS_HOST, OBS_PORT, OBS_PASSWORD)
ws.connect()
return ws
# Changer la scène dans OBS
async def change_scene(obs_ws, scene_name):
obs_ws.call(requests.SetCurrentScene(scene_name=scene_name))
print(f"Changement vers la scène : {scene_name}")
async def listen_websocket(uri):
async with websockets.connect(uri) as websocket:
obs_ws = connect_to_obs() # Connexion à OBS
print("Connexion à OBS réussie.")
last_scene_change = time.time() # Initialisation de last_scene_change
while True:
message = await websocket.recv()
data = json.loads(message) # Convertir le message JSON en dictionnaire
# Traiter le message
event = data.get("EVENT", {})
if event:
print(f"Version : {event.get('VERSION')}")
print(f"Clé : {event.get('KEY')}")
print(f"Timestamp : {event.get('TIMESTAMP')}")
print(f"Mode : {event['CONFIG'].get('MODE')}")
# Afficher les données METADATA
metadata = event.get("METADATA", {})
print(f"Nom de l'évènement : {metadata.get('NAME')}")
print(f"Section : {metadata.get('SECTION')}")
print(f"Groupe : {metadata.get('GROUP')}")
print(f"Temps de course : {metadata.get('RACETIME')}")
print(f"Temps avant la fin : {metadata.get('REMAININGTIME')}")
print(f"Décompte : {metadata.get('COUNTDOWN')}")
# Traiter les données des pilotes
for pilot_data in event.get("DATA", []):
print(f"Place : {pilot_data.get('INDEX')} Pilote : {pilot_data.get('PILOT')}, "
f"Avance : {pilot_data.get('PROGRESS')}, Laps : {pilot_data.get('LAPS')}, "
f"Meilleurs temps : {pilot_data.get('BESTTIME')}, Temps au tour : {pilot_data.get('LAPTIME')}")
# Vérifier si le temps de course est à 0 pour changer de scène
remainingtime = metadata.get("REMAININGTIME")
if remainingtime == "00:00:00": # Vérification du temps de course
current_time = time.time()
# Vérifie si 30 secondes se sont écoulés depuis le dernier changement de scène
if current_time - last_scene_change >= 30:
print("Conditions remplies pour changer de scène.")
await change_scene(obs_ws, "Resultats") # Remplace "Jingle" par le nom de ta scène
last_scene_change = current_time # Mettre à jour le dernier changement
obs_ws.disconnect() # Déconnexion d'OBS après la boucle
if __name__ == "__main__":
uri = "ws://127.0.0.1:8787" # Remplace par l'URI de ton serveur
asyncio.run(listen_websocket(uri))
I meet a problem with my code under Python . I would like change scene with python with a condition in this case when Countdown at 00:00:00.
Connexion OBS is OK, but the scene don't change with this command =>
await change_scene(obs_ws, "Resultats")
If you have an idea , that wil be great.
My code :
import asyncio
import websockets
import json
import time
from obswebsocket import obsws, requests
# Paramètres de connexion OBS
OBS_HOST = "localhost"
OBS_PORT = 4455 # Port par défaut pour le WebSocket OBS
OBS_PASSWORD = "Uhpyfkd1&2021" # Mot de passe configuré dans OBS
# Connexion OBS
def connect_to_obs():
ws = obsws(OBS_HOST, OBS_PORT, OBS_PASSWORD)
ws.connect()
return ws
# Changer la scène dans OBS
async def change_scene(obs_ws, scene_name):
obs_ws.call(requests.SetCurrentScene(scene_name=scene_name))
print(f"Changement vers la scène : {scene_name}")
async def listen_websocket(uri):
async with websockets.connect(uri) as websocket:
obs_ws = connect_to_obs() # Connexion à OBS
print("Connexion à OBS réussie.")
last_scene_change = time.time() # Initialisation de last_scene_change
while True:
message = await websocket.recv()
data = json.loads(message) # Convertir le message JSON en dictionnaire
# Traiter le message
event = data.get("EVENT", {})
if event:
print(f"Version : {event.get('VERSION')}")
print(f"Clé : {event.get('KEY')}")
print(f"Timestamp : {event.get('TIMESTAMP')}")
print(f"Mode : {event['CONFIG'].get('MODE')}")
# Afficher les données METADATA
metadata = event.get("METADATA", {})
print(f"Nom de l'évènement : {metadata.get('NAME')}")
print(f"Section : {metadata.get('SECTION')}")
print(f"Groupe : {metadata.get('GROUP')}")
print(f"Temps de course : {metadata.get('RACETIME')}")
print(f"Temps avant la fin : {metadata.get('REMAININGTIME')}")
print(f"Décompte : {metadata.get('COUNTDOWN')}")
# Traiter les données des pilotes
for pilot_data in event.get("DATA", []):
print(f"Place : {pilot_data.get('INDEX')} Pilote : {pilot_data.get('PILOT')}, "
f"Avance : {pilot_data.get('PROGRESS')}, Laps : {pilot_data.get('LAPS')}, "
f"Meilleurs temps : {pilot_data.get('BESTTIME')}, Temps au tour : {pilot_data.get('LAPTIME')}")
# Vérifier si le temps de course est à 0 pour changer de scène
remainingtime = metadata.get("REMAININGTIME")
if remainingtime == "00:00:00": # Vérification du temps de course
current_time = time.time()
# Vérifie si 30 secondes se sont écoulés depuis le dernier changement de scène
if current_time - last_scene_change >= 30:
print("Conditions remplies pour changer de scène.")
await change_scene(obs_ws, "Resultats") # Remplace "Jingle" par le nom de ta scène
last_scene_change = current_time # Mettre à jour le dernier changement
obs_ws.disconnect() # Déconnexion d'OBS après la boucle
if __name__ == "__main__":
uri = "ws://127.0.0.1:8787" # Remplace par l'URI de ton serveur
asyncio.run(listen_websocket(uri))