Heartbeat, Error Handling, SSE, Füllwörter-Verwaltung, Sprach-Coach
This commit is contained in:
parent
92a8363f5d
commit
df0951916a
8 changed files with 38 additions and 26 deletions
Binary file not shown.
Binary file not shown.
BIN
aufnahme.wav
BIN
aufnahme.wav
Binary file not shown.
|
|
@ -1,4 +1,4 @@
|
||||||
# config.py
|
# config.py
|
||||||
# Zentrale Stelle für Netzwerkparameter
|
# Zentrale Stelle für Netzwerkparameter
|
||||||
MISTY_IP = "192.168.68.65"
|
MISTY_IP = "192.168.68.57"
|
||||||
RTSP_URL = f"rtsp://{MISTY_IP}:1936"
|
RTSP_URL = "rtsp://{MISTY_IP}:1936"
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,5 @@
|
||||||
"hm",
|
"hm",
|
||||||
"also",
|
"also",
|
||||||
"sozusagen",
|
"sozusagen",
|
||||||
"irgendwie",
|
"irgendwie"
|
||||||
"test",
|
|
||||||
"nochmal test"
|
|
||||||
]
|
]
|
||||||
|
|
@ -3,25 +3,14 @@
|
||||||
"sessions": [
|
"sessions": [
|
||||||
{
|
{
|
||||||
"nummer": 1,
|
"nummer": 1,
|
||||||
"zeit": "12:36",
|
"zeit": "12:59",
|
||||||
"text": "Okay, das heißt, wenn ich jetzt hier rede und eine Präsentation halt, wieder nimmst du das Ganze auch. Okay. Aber dann merke ich gerade, dann ist es doch kein Livestream. Weil er nimmt jetzt wahrscheinlich auf, speichert das Ganze in eine wunderschöne Datei. Und diese Datei, die nennen wir Mississippi und gucken, ob er auch ganz viele verschiedene Worte und schwierige Worte wie Retoreg erkennt und dann wird das Ganze wahrscheinlich mit Whisper analysiert.",
|
"text": "Blah, blah, blah, blah, blah, blah, blah, blah, blah.",
|
||||||
"fuellwoerter_anzahl": 1,
|
|
||||||
"gefundene_woerter": {
|
|
||||||
"halt": 1
|
|
||||||
},
|
|
||||||
"tempo": 146,
|
|
||||||
"feedback": "Du hattest ein Füllwort. Du hast das Füllwort halt einmal benutzt. Dein Sprechtempo war sehr angenehm.",
|
|
||||||
"gesicht": "e_Love.jpg"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"nummer": 2,
|
|
||||||
"zeit": "12:37",
|
|
||||||
"text": "Die mit manch schlecht.",
|
|
||||||
"fuellwoerter_anzahl": 0,
|
"fuellwoerter_anzahl": 0,
|
||||||
"gefundene_woerter": {},
|
"gefundene_woerter": {},
|
||||||
"tempo": 266,
|
"tempo": 102,
|
||||||
"feedback": "Keine Füllwörter gefunden. Hervorragend! Dein Sprechtempo war etwas zu schnell. Versuche dich etwas zu verlangsamen.",
|
"feedback": "Keine Füllwörter gefunden. Hervorragend! Dein Sprechtempo war sehr angenehm.",
|
||||||
"gesicht": "e_Contempt.jpg"
|
"gesicht": "e_Love.jpg"
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"fehler": "WebSocket Fehler: "
|
||||||
}
|
}
|
||||||
|
|
@ -44,6 +44,28 @@ def setze_fehler(nachricht):
|
||||||
with open(DATEN_DATEI, "w", encoding="utf-8") as f:
|
with open(DATEN_DATEI, "w", encoding="utf-8") as f:
|
||||||
json.dump(daten, f, ensure_ascii=False, indent=2)
|
json.dump(daten, f, ensure_ascii=False, indent=2)
|
||||||
|
|
||||||
|
def loesche_fehler():
|
||||||
|
if os.path.exists(DATEN_DATEI):
|
||||||
|
with open(DATEN_DATEI, "r", encoding="utf-8") as f:
|
||||||
|
daten = json.load(f)
|
||||||
|
if daten.get("fehler"):
|
||||||
|
daten["fehler"] = None
|
||||||
|
daten["status"] = "wartend"
|
||||||
|
with open(DATEN_DATEI, "w", encoding="utf-8") as f:
|
||||||
|
json.dump(daten, f, ensure_ascii=False, indent=2)
|
||||||
|
print("✅ Misty wieder erreichbar – Fehler zurückgesetzt")
|
||||||
|
|
||||||
|
def heartbeat():
|
||||||
|
print("--- Heartbeat gestartet (alle 5 Sekunden) ---")
|
||||||
|
while True:
|
||||||
|
time.sleep(5)
|
||||||
|
if not laeuft_gerade:
|
||||||
|
if not pruefe_misty_verbindung():
|
||||||
|
print("❌ Heartbeat: Misty nicht erreichbar!")
|
||||||
|
setze_fehler(f"Verbindung zu Misty verloren. Bitte Misty einschalten und IP in config.py prüfen.")
|
||||||
|
else:
|
||||||
|
loesche_fehler()
|
||||||
|
|
||||||
def coaching_prozess():
|
def coaching_prozess():
|
||||||
global laeuft_gerade, aufnahme_laeuft, aufnahme_start
|
global laeuft_gerade, aufnahme_laeuft, aufnahme_start
|
||||||
laeuft_gerade = True
|
laeuft_gerade = True
|
||||||
|
|
@ -157,6 +179,9 @@ if not pruefe_misty_verbindung():
|
||||||
else:
|
else:
|
||||||
print(f"✅ Misty erreichbar unter {MISTY_IP}")
|
print(f"✅ Misty erreichbar unter {MISTY_IP}")
|
||||||
|
|
||||||
|
# Heartbeat-Thread starten
|
||||||
|
threading.Thread(target=heartbeat, daemon=True).start()
|
||||||
|
|
||||||
ws = websocket.WebSocketApp(
|
ws = websocket.WebSocketApp(
|
||||||
f"ws://{MISTY_IP}/pubsub",
|
f"ws://{MISTY_IP}/pubsub",
|
||||||
on_open=on_open,
|
on_open=on_open,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Misty Rhetorik-Coach</title>
|
<title>Misty Sprach-Coach</title>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||||
<style>
|
<style>
|
||||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||||
|
|
@ -251,7 +251,7 @@ header {
|
||||||
<div class="brand">
|
<div class="brand">
|
||||||
<div class="brand-avatar">🤖</div>
|
<div class="brand-avatar">🤖</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="brand-name">Misty Rhetorik-Coach</div>
|
<div class="brand-name">Misty Sprach-Coach</div>
|
||||||
<div class="brand-sub">PH Weingarten · Modul M2 · WS 2025/26</div>
|
<div class="brand-sub">PH Weingarten · Modul M2 · WS 2025/26</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -405,7 +405,7 @@ header {
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="empty-state">
|
<div class="empty-state">
|
||||||
🤖 Willkommen beim Misty Rhetorik-Coach!<br><br>
|
🤖 Willkommen beim Misty Sprach-Coach!<br><br>
|
||||||
Hier werden die Ergebnisse jeder Präsentation – Füllwörter, Sprechtempo und Mistys Feedback gezeigt.<br><br>
|
Hier werden die Ergebnisse jeder Präsentation – Füllwörter, Sprechtempo und Mistys Feedback gezeigt.<br><br>
|
||||||
Sobald der erste Durchgang abgeschlossen ist, erscheinen die Ergebnisse automatisch.<br><br>
|
Sobald der erste Durchgang abgeschlossen ist, erscheinen die Ergebnisse automatisch.<br><br>
|
||||||
Im Sessionverlauf ist zu sehen, wie sich die Leistung über mehrere Durchgänge hinweg verbessert.<br><br>
|
Im Sessionverlauf ist zu sehen, wie sich die Leistung über mehrere Durchgänge hinweg verbessert.<br><br>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue