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?