114 lines
3.1 KiB
Python
114 lines
3.1 KiB
Python
import time
|
|
import threading
|
|
from text2numde import text2num, is_number, sentence2num
|
|
from playsound3 import playsound
|
|
|
|
timer_thread = None
|
|
timer_stop = threading.Event()
|
|
timer_status = "idle"
|
|
timer_start = 0
|
|
timer_duration = 0
|
|
|
|
|
|
def parse_time(text):
|
|
"""
|
|
Wandelt einen deutschen Text wie 'fünf Minuten' in Sekunden um.
|
|
"""
|
|
text = text.lower().strip()
|
|
|
|
"""
|
|
'Eine' folgt sonst mit einem fehler
|
|
"""
|
|
text = text.replace("eine ", "ein ").replace("eins ", "ein ")
|
|
|
|
try:
|
|
if "sekunde" in text:
|
|
number_text = text.replace("sekunden", "").replace("sekunde", "").strip()
|
|
seconds = text2num(number_text) # Use text2num from text2numde
|
|
return seconds
|
|
elif "minute" in text:
|
|
number_text = text.replace("minuten", "").replace("minute", "").strip()
|
|
minutes = text2num(number_text)
|
|
return minutes * 60 # Convert minutes to seconds
|
|
elif "stunde" in text:
|
|
number_text = text.replace("stunden", "").replace("stunde", "").strip()
|
|
hours = text2num(number_text)
|
|
return hours * 3600 # Convert hours to seconds
|
|
else:
|
|
# Default: assume seconds
|
|
return text2num(text) # Convert general text to number (in seconds)
|
|
except ValueError:
|
|
print("Konnte die Zahl nicht erkennen.")
|
|
return None
|
|
|
|
|
|
def start_timer(seconds):
|
|
|
|
global timer_thread, timer_status, timer_start, timer_duration
|
|
|
|
if timer_status == "running":
|
|
return False # timer läuft bereits
|
|
|
|
timer_stop.clear()
|
|
timer_duration = seconds
|
|
timer_start = time.time()
|
|
timer_status = "running"
|
|
|
|
def run():
|
|
global timer_status
|
|
if not timer_stop.wait(seconds):
|
|
timer_status = "finished"
|
|
print("Timer abgelaufen") # """ TTS """
|
|
|
|
timer_thread = threading.Thread(target=run, daemon=True)
|
|
timer_thread.start()
|
|
return True
|
|
"""
|
|
print(f"Timer startet für {seconds} Sekunden...")
|
|
time.sleep(seconds)
|
|
print("Timer abgelaufen!")
|
|
playsound("/home/tino/Desktop/Abschlussprojekt/test assistant/cloneAssistantAllInOne/RasPi_Voice_Assistant--WIP/clock-alarm-8761.mp3")
|
|
sound.stop()
|
|
"""
|
|
|
|
""" # Beispielnutzung
|
|
spoken_input = "eine sekunde" # This could come from a voice assistant
|
|
seconds = parse_time(spoken_input)
|
|
if seconds:
|
|
start_timer(seconds) """
|
|
|
|
def stop_timer():
|
|
global timer_status
|
|
if timer_status != "running":
|
|
print("Kein Timer gestellt")
|
|
return False
|
|
|
|
timer_stop.set()
|
|
timer_status = "stopped"
|
|
return True
|
|
|
|
def timer_status_info():
|
|
if timer_status != "running":
|
|
return {"status": timer_status, "remaining": 0}
|
|
|
|
elapsed = time.time() - timer_start
|
|
remaining = max(0, int(timer_duration - elapsed))
|
|
|
|
return {
|
|
"status": "running",
|
|
"remaining": remaining
|
|
}
|
|
|
|
def format_duration(seconds):
|
|
if seconds < 60:
|
|
return f"{seconds} Sekunden"
|
|
elif seconds < 3600:
|
|
minutes = seconds // 60
|
|
return f"{minutes} Minuten"
|
|
else:
|
|
hours = seconds // 3600
|
|
return f"{hours} Stunden"
|
|
|
|
|
|
|