Weckerfunktoin vollständig implementiert
This commit is contained in:
70
main.py
70
main.py
@@ -9,6 +9,7 @@ import re
|
||||
import asyncio
|
||||
from weather_jetzt import get_weather_for_location
|
||||
from timer_control import parse_time, start_timer, stop_timer, timer_status_info, format_duration
|
||||
from wecker_control import parse_time_wecker, minutes_until, start_wecker, stop_wecker, wecker_status_info, calculate_target_datetime
|
||||
|
||||
#test
|
||||
|
||||
@@ -93,7 +94,7 @@ INTENTS = {
|
||||
# "duration": r"(\w+)\s*(sekunden|sekunde|minuten|minute|stunden|stunde)"
|
||||
"duration": r"((?:\w+)\s*(?:sekunden|sekunde|minuten|minute|stunden|stunde))"
|
||||
|
||||
}
|
||||
},
|
||||
},
|
||||
"stop": {
|
||||
"keywords": ["stopp", "stoppe", "beende"],
|
||||
@@ -104,6 +105,25 @@ INTENTS = {
|
||||
"required_slots": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"wecker": {
|
||||
"keywords": ["wecker", "timer"],
|
||||
"actions": {
|
||||
"start": {
|
||||
"keywords": ["erstelle", "stelle"],
|
||||
"required_slots": {
|
||||
"timeSet": r"\b([\w]+)\s*uhr(?:\s*([\w]+))?\b"
|
||||
},
|
||||
},
|
||||
"stop": {
|
||||
"keywords": ["stopp", "stoppe", "entferne"],
|
||||
"required_slots": {}
|
||||
},
|
||||
"status": {
|
||||
"keywords": ["status", "läuft", "noch"],
|
||||
"required_slots": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,7 +142,7 @@ def detect_intent(text):
|
||||
# =========================
|
||||
|
||||
|
||||
|
||||
## WEATHER
|
||||
def weather_skill(slots):
|
||||
location = slots["location"]
|
||||
result = asyncio.run(get_weather_for_location(location))
|
||||
@@ -133,6 +153,7 @@ def weather_skill(slots):
|
||||
return f"Keine Wetterdaten verfügbar"
|
||||
#return f"Das Wetter in {location} ist sonnig bei 20 Grad."
|
||||
|
||||
## TIMER
|
||||
def start_timer_skill(slots):
|
||||
duration = slots["duration"]
|
||||
seconds = parse_time(duration)
|
||||
@@ -162,7 +183,40 @@ def status_timer_skill(slots):
|
||||
else:
|
||||
return f"Es läuft kein Timer"
|
||||
|
||||
#ALARM
|
||||
def start_wecker_skill(slots):
|
||||
parsed = parse_time_wecker(slots["timeSet"])
|
||||
|
||||
if not parsed:
|
||||
return "Die Uhrzeit konnte nicht erkannt werden."
|
||||
|
||||
hour, minute = parsed
|
||||
target = calculate_target_datetime(hour, minute)
|
||||
|
||||
start_wecker(target)
|
||||
minutes = minutes_until(target)
|
||||
|
||||
return f"Wecker für {hour:02d}:{minute:02d} wurde gestellt er klingelt in {minutes} minuten"
|
||||
|
||||
def stopp_wecker_skill(slots):
|
||||
stop_wecker()
|
||||
print("Wecker wurde gestoppt")
|
||||
return f"Wecker wurde gestoppt"
|
||||
|
||||
def status_wecker_skill(slots):
|
||||
|
||||
info = wecker_status_info()
|
||||
|
||||
if info["status"] == "running":
|
||||
target_time = info["target_time"]
|
||||
return f"Ein Wecker wurde bereits auf {wecker_target_time} gestellt"
|
||||
elif info["status"] == "finished":
|
||||
return f"Der Wecker ist abgelaufen"
|
||||
elif info["status"] == "stopped":
|
||||
return f"Der Wecker wurde gestoppt, es ist kein Wecker gestellt"
|
||||
else:
|
||||
return f"Es ist kein Wecker gestellt"
|
||||
|
||||
|
||||
|
||||
SKILLS = {
|
||||
@@ -170,7 +224,12 @@ SKILLS = {
|
||||
"timer": {
|
||||
"start": start_timer_skill,
|
||||
"stop": stopp_timer_skill,
|
||||
"status": status_timer_skill
|
||||
"status": status_timer_skill,
|
||||
},
|
||||
"wecker": {
|
||||
"start": start_wecker_skill,
|
||||
"stop": stopp_wecker_skill,
|
||||
"status": status_wecker_skill
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,7 +305,7 @@ def check_required(text):
|
||||
if slot not in context["slots"]:
|
||||
match = re.search(pattern, text)
|
||||
if match:
|
||||
context["slots"][slot] = match.group(1) # schau an
|
||||
context["slots"][slot] = match.group(0) #alles slots
|
||||
else:
|
||||
context["pending_slot"] = slot
|
||||
ask_for_slot(slot)
|
||||
@@ -268,7 +327,8 @@ def check_required(text):
|
||||
def ask_for_slot(slot):
|
||||
questions = {
|
||||
"location": "Für welchen Ort?",
|
||||
"duration": "Wie lange soll der Timer laufen?"
|
||||
"duration": "Wie lange soll der Timer laufen?",
|
||||
"timeSet": "Zu welcher Uhrzeit soll der Wecker klingeln?"
|
||||
}
|
||||
speak(questions.get(slot, "Bitte spezifizieren."))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user