V1 after team test
This commit is contained in:
@@ -2,11 +2,11 @@
|
|||||||
#include <ESP8266WebServer.h>
|
#include <ESP8266WebServer.h>
|
||||||
|
|
||||||
// Remplacez par les informations de votre réseau WiFi
|
// Remplacez par les informations de votre réseau WiFi
|
||||||
const char* ssid = "Le chateau de Chantenay";
|
const char* ssid = "Refugees Welcome";
|
||||||
const char* password = "crevette4ever";
|
const char* password = "calais62";
|
||||||
|
|
||||||
// Adresse du serveur HTTP sur le PC
|
// Adresse du serveur HTTP sur le PC
|
||||||
const char* host = "192.168.1.62"; // Remplacez par l'adresse IP de votre PC
|
const char* host = "192.168.234.214"; // Remplacez par l'adresse IP de votre PC
|
||||||
const int port = 5000;
|
const int port = 5000;
|
||||||
|
|
||||||
const int buttonPin = D7; // Définir le pin du bouton
|
const int buttonPin = D7; // Définir le pin du bouton
|
||||||
@@ -14,12 +14,27 @@ bool lastButtonState = HIGH; // État précédent du bouton
|
|||||||
unsigned long lastDebounceTime = 0; // Dernier temps de changement d'état
|
unsigned long lastDebounceTime = 0; // Dernier temps de changement d'état
|
||||||
unsigned long debounceDelay = 50; // Délai de débounce (en millisecondes)
|
unsigned long debounceDelay = 50; // Délai de débounce (en millisecondes)
|
||||||
|
|
||||||
|
const int ledPin = D5;
|
||||||
|
unsigned long lastBlinkTime = 0; // Dernier temps de clignotement
|
||||||
|
const unsigned long blinkInterval = 500; // Intervalle de clignotement (en millisecondes)
|
||||||
|
// Énumération pour les états de la LED
|
||||||
|
enum LEDState {
|
||||||
|
OFF,
|
||||||
|
ON,
|
||||||
|
BLINKING
|
||||||
|
};
|
||||||
|
LEDState ledState = OFF; // État initial de la LED
|
||||||
|
|
||||||
|
ESP8266WebServer server(5000); // Créer un serveur HTTP sur le port 80
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
delay(10);
|
delay(10);
|
||||||
|
|
||||||
|
pinMode(ledPin, OUTPUT);
|
||||||
pinMode(buttonPin, INPUT_PULLUP);
|
pinMode(buttonPin, INPUT_PULLUP);
|
||||||
|
|
||||||
|
digitalWrite(ledPin, LOW);
|
||||||
WiFi.begin(ssid, password);
|
WiFi.begin(ssid, password);
|
||||||
Serial.print("Connexion à ");
|
Serial.print("Connexion à ");
|
||||||
Serial.print(ssid);
|
Serial.print(ssid);
|
||||||
@@ -28,12 +43,59 @@ void setup() {
|
|||||||
Serial.print(".");
|
Serial.print(".");
|
||||||
}
|
}
|
||||||
Serial.println(" connectée");
|
Serial.println(" connectée");
|
||||||
|
|
||||||
|
server.on("/blink", []() {
|
||||||
|
// Cette fonction sera appelée lorsque le serveur reçoit une requête sur /update
|
||||||
|
Serial.println("Requête reçue sur /play");
|
||||||
|
// Par exemple, vous pouvez allumer la LED si la requête le demande
|
||||||
|
ledState = BLINKING; // Allumer la LED
|
||||||
|
server.send(200, "text/plain", "LED blink"); // Envoyer une réponse
|
||||||
|
});
|
||||||
|
|
||||||
|
// Définir le gestionnaire pour la requête entrante
|
||||||
|
server.on("/on", []() {
|
||||||
|
// Cette fonction sera appelée lorsque le serveur reçoit une requête sur /update
|
||||||
|
Serial.println("Requête reçue sur /win");
|
||||||
|
// Par exemple, vous pouvez allumer la LED si la requête le demande
|
||||||
|
ledState = ON; // Allumer la LED
|
||||||
|
server.send(200, "text/plain", "LED high"); // Envoyer une réponse
|
||||||
|
});
|
||||||
|
|
||||||
|
server.on("/off", []() {
|
||||||
|
// Cette fonction sera appelée lorsque le serveur reçoit une requête sur /update
|
||||||
|
Serial.println("Requête reçue sur /wait");
|
||||||
|
// Par exemple, vous pouvez allumer la LED si la requête le demande
|
||||||
|
ledState = OFF; // Allumer la LED
|
||||||
|
server.send(200, "text/plain", "LED low"); // Envoyer une réponse
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
server.begin(); // Démarrer le serveur
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
// Gérer les requêtes entrantes
|
||||||
|
server.handleClient();
|
||||||
|
|
||||||
|
// LED management
|
||||||
|
unsigned long currentTime = millis();
|
||||||
|
|
||||||
|
// Logique de clignotement en fonction de l'état
|
||||||
|
if (ledState == BLINKING) {
|
||||||
|
if (currentTime - lastBlinkTime >= blinkInterval) {
|
||||||
|
lastBlinkTime = currentTime;
|
||||||
|
digitalWrite(ledPin, !digitalRead(ledPin)); // Inverser l'état de la LED
|
||||||
|
}
|
||||||
|
} else if (ledState == ON) {
|
||||||
|
digitalWrite(ledPin, HIGH); // LED allumée
|
||||||
|
} else {
|
||||||
|
digitalWrite(ledPin, LOW); // LED éteinte
|
||||||
|
}
|
||||||
|
|
||||||
int buttonState = digitalRead(buttonPin); // Lire l'état du bouton
|
int buttonState = digitalRead(buttonPin); // Lire l'état du bouton
|
||||||
|
|
||||||
// Vérifier le débounce
|
// Débounce
|
||||||
if (buttonState != lastButtonState) {
|
if (buttonState != lastButtonState) {
|
||||||
lastDebounceTime = millis(); // Réinitialiser le temps de débounce
|
lastDebounceTime = millis(); // Réinitialiser le temps de débounce
|
||||||
}
|
}
|
||||||
@@ -45,7 +107,7 @@ void loop() {
|
|||||||
Serial.println("Bouton pressé! Envoi de la requête...");
|
Serial.println("Bouton pressé! Envoi de la requête...");
|
||||||
WiFiClient client;
|
WiFiClient client;
|
||||||
if (client.connect(host, port)) {
|
if (client.connect(host, port)) {
|
||||||
client.print(String("GET /execute?box_id=1 HTTP/1.1\r\n") +
|
client.print(String("GET /execute HTTP/1.1\r\n") +
|
||||||
"Host: " + host + "\r\n" +
|
"Host: " + host + "\r\n" +
|
||||||
"Connection: close\r\n\r\n");
|
"Connection: close\r\n\r\n");
|
||||||
|
|
||||||
|
|||||||
BIN
Python/bell.mp3
Normal file
BIN
Python/bell.mp3
Normal file
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{"1": "192.168.1.34", "2": "192.168.1.42"}
|
{"1": "192.168.234.240"}
|
||||||
BIN
Python/coin.mp3
Normal file
BIN
Python/coin.mp3
Normal file
Binary file not shown.
@@ -10,7 +10,7 @@ app = Flask(__name__)
|
|||||||
|
|
||||||
buttons = {} # Dictionnaire pour stocker les boutons et leurs IP
|
buttons = {} # Dictionnaire pour stocker les boutons et leurs IP
|
||||||
lock = threading.Lock()
|
lock = threading.Lock()
|
||||||
EXPECTED_BUTTONS = 2 # Nombre de boutons attendus
|
EXPECTED_BUTTONS = 0 # Nombre de boutons attendus
|
||||||
|
|
||||||
# Fichier pour enregistrer la correspondance
|
# Fichier pour enregistrer la correspondance
|
||||||
BUTTONS_FILE = 'buttons.json'
|
BUTTONS_FILE = 'buttons.json'
|
||||||
@@ -53,4 +53,5 @@ def execute_script():
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("Serveur d'enregistrement démarré")
|
print("Serveur d'enregistrement démarré")
|
||||||
|
EXPECTED_BUTTONS = int(input("Nombre de buzzers ? "))
|
||||||
serve(app, host='0.0.0.0', port=5000) # Utiliser Waitress pour démarrer le serveur
|
serve(app, host='0.0.0.0', port=5000) # Utiliser Waitress pour démarrer le serveur
|
||||||
|
|||||||
196
Python/server.py
196
Python/server.py
@@ -7,14 +7,17 @@ import keyboard
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from waitress import serve
|
from waitress import serve
|
||||||
|
from pygame import mixer
|
||||||
import time
|
import time
|
||||||
|
import requests # Ajouté pour envoyer des requêtes HTTP
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
DEBUG = False
|
DEBUG = False
|
||||||
|
INGAME = True
|
||||||
|
|
||||||
# Variables globales
|
# Variables globales
|
||||||
fastest = None
|
port = 5000 # Définir le port utilisé par vos boutons
|
||||||
lock = threading.Lock()
|
lock = threading.Lock()
|
||||||
order = [] # Liste pour suivre l'ordre des boutons
|
order = [] # Liste pour suivre l'ordre des boutons
|
||||||
button_ips = {} # Dictionnaire pour enregistrer les adresses IP des boutons
|
button_ips = {} # Dictionnaire pour enregistrer les adresses IP des boutons
|
||||||
@@ -25,9 +28,30 @@ if os.path.exists(json_file):
|
|||||||
with open(json_file, 'r') as f:
|
with open(json_file, 'r') as f:
|
||||||
button_ips = json.load(f)
|
button_ips = json.load(f)
|
||||||
|
|
||||||
|
def init_mixer():
|
||||||
|
if not mixer.get_init():
|
||||||
|
mixer.init()
|
||||||
|
if DEBUG:
|
||||||
|
print("Mixer initialized.")
|
||||||
|
|
||||||
|
def play_sound(file):
|
||||||
|
mixer.music.load(file)
|
||||||
|
mixer.music.play()
|
||||||
|
|
||||||
|
def notify_button(ip, endpoint):
|
||||||
|
""" Fonction pour envoyer une requête à un bouton à son adresse IP. """
|
||||||
|
url = f"http://{ip}:{port}{endpoint}" # Utiliser la variable `port` définie en haut
|
||||||
|
try:
|
||||||
|
response = requests.get(url)
|
||||||
|
if DEBUG:
|
||||||
|
print(f"Requête envoyée à {ip}{endpoint}: {response.status_code}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Erreur lors de l'envoi de la requête à {ip}: {e}")
|
||||||
|
|
||||||
@app.route('/execute')
|
@app.route('/execute')
|
||||||
def execute_script():
|
def execute_script():
|
||||||
global fastest
|
|
||||||
|
if INGAME:
|
||||||
client_ip = request.remote_addr # Obtenir l'adresse IP du client
|
client_ip = request.remote_addr # Obtenir l'adresse IP du client
|
||||||
|
|
||||||
# Vérifier si l'adresse IP est enregistrée
|
# Vérifier si l'adresse IP est enregistrée
|
||||||
@@ -37,97 +61,171 @@ def execute_script():
|
|||||||
button_id = button
|
button_id = button
|
||||||
break
|
break
|
||||||
|
|
||||||
if button_id is None: # Si l'IP n'est pas trouvée
|
# if button_id is None: # Si l'IP n'est pas trouvée
|
||||||
error_message = {"message": "Erreur : cette adresse IP n'est pas enregistrée."}
|
# error_message = {"message": "Erreur : cette adresse IP n'est pas enregistrée."}
|
||||||
print(f"{error_message['message']} - IP: {client_ip}")
|
# print(f"{error_message['message']} - IP: {client_ip}")
|
||||||
return jsonify(error_message), 400 # Retourne un code d'erreur 400
|
# return jsonify(error_message), 400 # Retourne un code d'erreur 400
|
||||||
|
|
||||||
send_vlc_command('pl_pause', True) # Mettre VLC en pause
|
|
||||||
|
|
||||||
# Utiliser un verrou pour gérer les accès concurrents
|
# Utiliser un verrou pour gérer les accès concurrents
|
||||||
with lock:
|
with lock:
|
||||||
if button_id not in order:
|
if button_id not in order:
|
||||||
|
send_vlc_command('pl_pause', True) # Mettre VLC en pause
|
||||||
|
play_sound('coin.mp3') # Son de canard au premier buzz
|
||||||
order.append(button_id) # Ajouter le boîtier à la liste d'ordre
|
order.append(button_id) # Ajouter le boîtier à la liste d'ordre
|
||||||
print(f"Boîtiers en ordre: {order}")
|
print(f"Boîtiers en ordre: {order}")
|
||||||
if fastest is None:
|
|
||||||
fastest = button_id # Le premier à arriver devient le gagnant
|
# Notification au bouton premier dans l'ordre
|
||||||
response_message = {"message": "fastest"}
|
if order[0] == button_id:
|
||||||
# print(f"Fastest is {button_id}")
|
notify_button(button_ips[button_id], '/on') # Envoyer /on
|
||||||
else:
|
|
||||||
response_message = {"message": "second"}
|
# Notifier tous les autres boutons enregistrés avec /off
|
||||||
# print(f"{button_id} is second")
|
for other_button_id, ip in button_ips.items():
|
||||||
|
if other_button_id != button_id:
|
||||||
|
notify_button(ip, '/off') # Envoyer /off
|
||||||
|
|
||||||
|
response_message = {"message": "added"} # Réponse pour l'ajout à l'ordre
|
||||||
else:
|
else:
|
||||||
response_message = {"message": "duplicate"} # Requête répétée, rejetée
|
response_message = {"message": "duplicate"} # Requête répétée, rejetée
|
||||||
|
|
||||||
return jsonify(response_message), 200
|
return jsonify(response_message), 200
|
||||||
|
|
||||||
|
else:
|
||||||
|
return jsonify({"message": "not allowed"}), 200
|
||||||
|
|
||||||
def good_answer():
|
def good_answer():
|
||||||
|
global INGAME
|
||||||
while True:
|
while True:
|
||||||
# Attendre que la touche 'r' soit pressée pour vider l'ordre
|
# Attendre que la touche 'o' soit pressée pour vider l'ordre
|
||||||
keyboard.wait('o')
|
keyboard.wait('o')
|
||||||
with lock:
|
with lock:
|
||||||
fastest = None # Réinitialiser le gagnant
|
|
||||||
if order:
|
if order:
|
||||||
|
INGAME = False
|
||||||
print(f"--- Boîtier {order[0]} gagne ! ---")
|
print(f"--- Boîtier {order[0]} gagne ! ---")
|
||||||
order.clear() # Enlever le premier boîtier de l'ordre
|
play_sound('victory.mp3')
|
||||||
#seek_to_time('')
|
# Envoyer /off à tous les boutons
|
||||||
send_vlc_command('pl_play')
|
for button, ip in button_ips.items():
|
||||||
|
notify_button(ip, '/off') # Envoi de /off aux boutons
|
||||||
|
order.clear() # Vider l'ordre
|
||||||
|
time.sleep(1)
|
||||||
|
send_vlc_command('pl_play') # Reprendre la musique
|
||||||
|
|
||||||
def incomplet_answer():
|
def incomplet_answer():
|
||||||
global fastest
|
|
||||||
while True:
|
while True:
|
||||||
# Attendre que la touche 'r' soit pressée pour vider l'ordre
|
# Attendre que la touche 'x' soit pressée pour enlever le premier boîtier
|
||||||
keyboard.wait('x')
|
keyboard.wait('x')
|
||||||
with lock:
|
with lock:
|
||||||
fastest = None # Réinitialiser le gagnant
|
|
||||||
if order:
|
if order:
|
||||||
print(f"Boîtier {order[0]} : Réponse incomplète")
|
# Vérifier si le premier boîtier est retiré
|
||||||
|
first_button = order[0]
|
||||||
|
print(f"Boîtier {first_button} : Réponse incomplète")
|
||||||
order.pop(0) # Enlever le premier boîtier de l'ordre
|
order.pop(0) # Enlever le premier boîtier de l'ordre
|
||||||
print(f"Boîtiers en ordre: {order}")
|
print(f"Boîtiers en ordre: {order}")
|
||||||
if not order:
|
|
||||||
send_vlc_command('pl_play')
|
|
||||||
|
|
||||||
def no_answer():
|
# Si le bouton retiré était le premier, lui envoyer /off
|
||||||
global fastest
|
notify_button(button_ips[first_button], '/off')
|
||||||
while True:
|
|
||||||
# Attendre que la touche 'r' soit pressée pour vider l'ordre
|
|
||||||
keyboard.wait('p')
|
|
||||||
|
|
||||||
with lock:
|
# Si le second boîtier devient le premier, envoyer /on
|
||||||
fastest = None # Réinitialiser le gagnant
|
|
||||||
if order:
|
if order:
|
||||||
print(f"Boîtier {order[0]} : Pas de réponse")
|
second_button = order[0]
|
||||||
order.pop(0) # Enlever le premier boîtier de l'ordre
|
notify_button(button_ips[second_button], '/on')
|
||||||
print(f"Boîtiers en ordre: {order}")
|
|
||||||
if not order:
|
if not order:
|
||||||
send_vlc_command('pl_play')
|
# Envoyer /blink à tous les boutons
|
||||||
|
send_vlc_command('pl_play') # Reprendre la musique
|
||||||
|
for button, ip in button_ips.items():
|
||||||
|
notify_button(ip, '/blink')
|
||||||
|
|
||||||
def next_song():
|
def next_song():
|
||||||
global fastest
|
global INGAME
|
||||||
while True:
|
while True:
|
||||||
# Attendre que la touche 'r' soit pressée pour vider l'ordre
|
# Attendre que la touche 'n' soit pressée pour demander le prochain son
|
||||||
keyboard.wait('n')
|
|
||||||
print("Are you sure to next ?")
|
|
||||||
keyboard.wait('n')
|
keyboard.wait('n')
|
||||||
|
send_vlc_command('pl_pause')
|
||||||
|
for button, ip in button_ips.items():
|
||||||
|
notify_button(ip, '/off')
|
||||||
|
time.sleep(1)
|
||||||
|
play_sound('bell.mp3')
|
||||||
|
print("Music - Next in 2 seconds")
|
||||||
|
time.sleep(2)
|
||||||
|
send_vlc_command('pl_next') # Passer à la chanson suivante
|
||||||
|
INGAME = True
|
||||||
with lock:
|
with lock:
|
||||||
fastest = None # Réinitialiser le gagnant
|
# Si order est vide, envoyer /blink à tous les boutons
|
||||||
if order:
|
if not order:
|
||||||
order.pop(0) # Enlever le premier boîtier de l'ordre
|
for button, ip in button_ips.items():
|
||||||
print('Next song')
|
notify_button(ip, '/blink') # Envoyer /blink à tous les boutons
|
||||||
send_vlc_command('pl_next')
|
send_vlc_command('pl_play') # Reprendre la musique
|
||||||
|
|
||||||
|
def play():
|
||||||
|
while True:
|
||||||
|
# Attendre que la touche 'space' soit pressée pour mettre VLC en pause
|
||||||
|
keyboard.wait('m')
|
||||||
|
print("Music - Play")
|
||||||
|
send_vlc_command('pl_play')
|
||||||
|
|
||||||
def pause():
|
def pause():
|
||||||
while True:
|
while True:
|
||||||
# Attendre que la touche 'r' soit pressée pour vider l'ordre
|
# Attendre que la touche 'space' soit pressée pour mettre VLC en pause
|
||||||
keyboard.wait('space')
|
keyboard.wait('p')
|
||||||
|
print("Music - Pause")
|
||||||
send_vlc_command('pl_pause', True)
|
send_vlc_command('pl_pause', True)
|
||||||
|
|
||||||
|
def light_on():
|
||||||
|
while True:
|
||||||
|
keyboard.wait('r')
|
||||||
|
print("Buzzer light - On")
|
||||||
|
for button, ip in button_ips.items():
|
||||||
|
notify_button(ip, '/on')
|
||||||
|
|
||||||
|
def light_blink():
|
||||||
|
while True:
|
||||||
|
keyboard.wait('t')
|
||||||
|
print("Buzzer light - Blink")
|
||||||
|
for button, ip in button_ips.items():
|
||||||
|
notify_button(ip, '/blink')
|
||||||
|
|
||||||
|
def light_off():
|
||||||
|
while True:
|
||||||
|
keyboard.wait('y')
|
||||||
|
print("Buzzer light - Off")
|
||||||
|
for button, ip in button_ips.items():
|
||||||
|
notify_button(ip, '/off')
|
||||||
|
|
||||||
|
def buzzer_on():
|
||||||
|
global INGAME
|
||||||
|
while True:
|
||||||
|
keyboard.wait('f')
|
||||||
|
INGAME = True
|
||||||
|
print("Buzzer - Enable")
|
||||||
|
for button, ip in button_ips.items():
|
||||||
|
notify_button(ip, '/blink')
|
||||||
|
|
||||||
|
def buzzer_off():
|
||||||
|
global INGAME
|
||||||
|
while True:
|
||||||
|
keyboard.wait('h')
|
||||||
|
INGAME = False
|
||||||
|
print("Buzzer - Disable")
|
||||||
|
for button, ip in button_ips.items():
|
||||||
|
notify_button(ip, '/off')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("Serveur démarré")
|
print("Serveur démarré")
|
||||||
|
init_mixer()
|
||||||
threading.Thread(target=good_answer, daemon=True).start()
|
threading.Thread(target=good_answer, daemon=True).start()
|
||||||
threading.Thread(target=incomplet_answer, daemon=True).start()
|
threading.Thread(target=incomplet_answer, daemon=True).start()
|
||||||
threading.Thread(target=no_answer, daemon=True).start()
|
|
||||||
threading.Thread(target=next_song, daemon=True).start()
|
threading.Thread(target=next_song, daemon=True).start()
|
||||||
|
threading.Thread(target=play, daemon=True).start()
|
||||||
threading.Thread(target=pause, daemon=True).start()
|
threading.Thread(target=pause, daemon=True).start()
|
||||||
|
threading.Thread(target=light_on, daemon=True).start()
|
||||||
|
threading.Thread(target=light_off, daemon=True).start()
|
||||||
|
threading.Thread(target=light_blink, daemon=True).start()
|
||||||
|
threading.Thread(target=buzzer_on, daemon=True).start()
|
||||||
|
threading.Thread(target=buzzer_off, daemon=True).start()
|
||||||
|
|
||||||
|
INGAME = True
|
||||||
|
print("Buzzer - Enable")
|
||||||
|
for button, ip in button_ips.items():
|
||||||
|
notify_button(ip, '/blink')
|
||||||
|
|
||||||
serve(app, host='0.0.0.0', port=5000)
|
serve(app, host='0.0.0.0', port=5000)
|
||||||
BIN
Python/victory.mp3
Normal file
BIN
Python/victory.mp3
Normal file
Binary file not shown.
@@ -1,4 +1,5 @@
|
|||||||
import requests
|
import requests
|
||||||
|
import time
|
||||||
|
|
||||||
# Configurer l'adresse et le port de l'interface Web de VLC
|
# Configurer l'adresse et le port de l'interface Web de VLC
|
||||||
VLC_WEB_URL = 'http://localhost:8080'
|
VLC_WEB_URL = 'http://localhost:8080'
|
||||||
@@ -49,3 +50,36 @@ def seek_to_time(minutes, seconds):
|
|||||||
total_seconds = minutes * 60 + seconds
|
total_seconds = minutes * 60 + seconds
|
||||||
send_vlc_command(f'seek&val={total_seconds}')
|
send_vlc_command(f'seek&val={total_seconds}')
|
||||||
|
|
||||||
|
def decrease_volume():
|
||||||
|
"""
|
||||||
|
Decrease the volume of VLC to 0 with fixed step and duration.
|
||||||
|
"""
|
||||||
|
if not is_vlc_running():
|
||||||
|
print(f"VLC n'est pas accessible à {VLC_WEB_URL}. Assurez-vous que VLC est ouvert et que l'interface Web est activée.")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Récupérer le volume actuel
|
||||||
|
status = get_vlc_status()
|
||||||
|
if status is None:
|
||||||
|
return
|
||||||
|
current_volume = int(status.get('volume', 256))
|
||||||
|
|
||||||
|
# Paramètres fixes
|
||||||
|
step_duration = 0.5 # Durée en secondes entre chaque diminution de volume
|
||||||
|
volume_step = 5 # Diminution du volume par étape
|
||||||
|
|
||||||
|
while current_volume > 0:
|
||||||
|
current_volume -= volume_step
|
||||||
|
if current_volume < 0:
|
||||||
|
current_volume = 0
|
||||||
|
send_vlc_command(f'volume&val={int(current_volume)}')
|
||||||
|
time.sleep(step_duration)
|
||||||
|
|
||||||
|
# S'assurer que le volume est à 0
|
||||||
|
send_vlc_command('volume&val=0')
|
||||||
|
if DEBUG:
|
||||||
|
print("Volume baissé à 0.")
|
||||||
|
except requests.RequestException as e:
|
||||||
|
if DEBUG:
|
||||||
|
print(f"Erreur lors de la diminution du volume : {e}")
|
||||||
Reference in New Issue
Block a user