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?
