[V4.5 IP3] Offline Sprachsteuerung mit Rhasspy, Auswertung MQTT-Topic / HermesMQTT Protokoll
Verfasst: Do Mär 13, 2025 10:36 pm
Hat jemand Erfahrung mit Rhasspy https://rhasspy.readthedocs.io/en/latest/?
Ich habe mich jetzt ein paar Stunden damit beschäftigt und es auf einem Pi 4 grundsätzlich zum Laufen gebracht. Kommunikation mit dem TWS kann via MQTT erfolgen (Hermes Protokoll https://ip-team2.intia.de/tech-stack/hermesmqtt/).
Das Esstischlicht ein und ausschalten war recht schnell gemacht, aber es braucht noch etwas Cleveres, um solch ein Topic auszuwerten:
Das könnte eine Logik sein, die aus dem MQTT-Subsystem die "values" aller Slots bekommt. Aber dann braucht man eine Logik pro "intent".
Wirkt ziemlich fummelig. Hat jemand eine bessere Idee?
Ich habe mich jetzt ein paar Stunden damit beschäftigt und es auf einem Pi 4 grundsätzlich zum Laufen gebracht. Kommunikation mit dem TWS kann via MQTT erfolgen (Hermes Protokoll https://ip-team2.intia.de/tech-stack/hermesmqtt/).
Das Esstischlicht ein und ausschalten war recht schnell gemacht, aber es braucht noch etwas Cleveres, um solch ein Topic auszuwerten:
Code: Alles auswählen
{
"input": "schalte die garagenlicht aus",
"intent": {
"intentName": "ChangeLightState", <---- Die grundlegende Funktion: Licht an/aus
"confidenceScore": 1
},
"siteId": "default",
"id": null,
"slots": [ <----- Dieses Array kann beliebig lang werden und bildet die Dimensionalität der Befehlssätze ab
{
"entity": "name",
"value": {
"kind": "Unknown",
"value": "garagenlicht" <---- Das steht drin, welches Licht
},
"slotName": "name",
"rawValue": "garagenlicht",
"confidence": 1,
"range": {
"start": 12,
"end": 24,
"rawStart": 12,
"rawEnd": 24
}
},
{
"entity": "state",
"value": {
"kind": "Unknown",
"value": "aus" <------ An- oder ausschalten?
},
"slotName": "state",
"rawValue": "aus",
"confidence": 1,
"range": {
"start": 25,
"end": 28,
"rawStart": 25,
"rawEnd": 28
}
}
],
"sessionId": "default-default-5f044920-a813-4474-88f4-f816c24d2867",
"customData": "default",
"asrTokens": [
[
{
"value": "schalte",
"confidence": 1,
"rangeStart": 0,
"rangeEnd": 7,
"time": null
},
{
"value": "die",
"confidence": 1,
"rangeStart": 8,
"rangeEnd": 11,
"time": null
},
{
"value": "garagenlicht",
"confidence": 1,
"rangeStart": 12,
"rangeEnd": 24,
"time": null
},
{
"value": "aus",
"confidence": 1,
"rangeStart": 25,
"rangeEnd": 28,
"time": null
}
]
],
"asrConfidence": 0.7371840000000001,
"rawInput": "schalte die garagenlicht aus",
"wakewordId": "default",
"lang": null
}

Wirkt ziemlich fummelig. Hat jemand eine bessere Idee?