Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Rhasspy: Sprachsteuerung für BRING!-Adapter

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Rhasspy: Sprachsteuerung für BRING!-Adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • tobetobe
      tobetobe last edited by

      Hallo an alle Interessierten,

      Mit Hilfe des von @joergeli erstellten Skripts ist es mir gelungen, den BRING!-Adapter über Rhasspy mit Sprachkommandos zu steuern und eine akustische Bestätigung zu erhalten. Voraussetung ist natürlich, dass Der BRING!-Adapter im ioBroker installiert ist und man einen BRING!-Account besitzt, dessen Daten im Adapter hinterlegt sind.

      Mit diesem Teil des Skripts werden die notwendigen Vorbereitungen zur Übergabe der Sprachdaten an die TTS-API von Rhasspy vorgenommen:

      // Skript zur Ausgabe von Voice über TTS an Rhasspy
      // Für Rhasspy-TTS:
      let http = require('http');
      let options = {
          host: '192.168.13.157', //Rhasspy IP-Adresse
          port: 12101,            //Rhasspy Port
          path: "/api/text-to-speech",
          method: 'POST',
          headers: {
              'User-Agent' : 'ioBroker',
              'Content-Type': 'text/plain',
             // 'Content-Length': data.length
          }
      };
      
      //______________________________________________________________________________
      function httpPost(data) {
          let req = http.request(options, function(res) {
          console.log("http Status: " + res.statusCode);
          // Header (Rückmeldung vom Webserver)
          console.log('HEADERS: ' + JSON.stringify(res.headers), (res.statusCode != 200 ? "warn" : "info"));
          });
      
           // Fehler abfangen
              req.on('error', function(e) { 
              console.log('ERROR: ' + e.message,"warn");
          });
      
           // write data to request body
          console.log("Data to request body: " + data);
          (data ? req.write(data) : console.log("Daten: keine Daten vorhanden"));
          req.end();
      }
      

      Danach folgen die Skripte, die man per Sprache steuern will. Wird eine Bestätigung per Voice (TTS) gewünscht, müssen folgende Zeilen in die jeweiligen Skripte eingebaut werden:

      
      // Diese Zeilen jeweils in die nachfolgenden Skripte innerhalb von onID eintragen, wenn Sprachausgabe stattfinden soll
              data = 'Es sind momentan ' + value.val + ' Grad Celsius'; // Text und Werte ggf anpassen
              console.log("data: " + data); // kann man nach dem Testen auskommentieren
              log(value.val); // kann man nach dem Testen auskommentieren
              httpPost(data);
      //Ende
      
      

      Und dann folgt noch das eigentliche Skript zur Steuerung der States des BRING!_Adapters:

      
      // Hier Skript zum Befüllen der Einkaufslisten im Bring-Adapter
      var intentResult = $('mqtt.0.rhasspy.intent.SetShop*');
      var intentArray = [];
      
       for(var i = 0; i < intentResult.length; i++)
      {
          log(intentResult[i]);
          intentArray.push(intentResult[i]);
      }
      
      on({id: intentArray, change: "any"}, function (obj) {
          log(obj.newState.val); // kann man nach dem Testen auskommentieren oder löschen
      
          let intentObject = JSON.parse(obj.newState.val);
             if(intentObject.hasOwnProperty('device'))
          {
              var deviceID = intentObject.device;
              var command = intentObject.command;
              var state = intentObject.state;
              var value = intentObject.value;
              log('value:'+value); // kann man nach dem Testen auskommentieren oder löschen
              let data = value + ' auf die Einkaufsliste gesetzt';
              if(command === "false")
              {
              log('command:'+command); // kann man nach dem Testen auskommentieren oder löschen
              state = ".removeItem";
              log('state:'+state); // kann man nach dem Testen auskommentieren oder löschen
              data = value + ' von der Einkaufsliste entfernt';
              log("data:"+data) // kann man nach dem Testen auskommentieren oder löschen
              }
      
              log(deviceID + state + value); // kann man nach dem Testen auskommentieren oder löschen
              log('state:'+state); // kann man nach dem Testen auskommentieren oder löschen
              setState(deviceID + state, value);
              console.log("data: " + data); // kann man nach dem Testen auskommentieren oder löschen
              httpPost(data);
          }
      });
      
      

      Auf Seiten von Rhasspy werden nun noch die Sentences und die Slots benötigt. Der Sentence für die Eingabe eines Artikels in die Einkaufsliste(n) von Bring! sieht bei mir wie folgt aus:

      [SetShoppingList]
      ($synonyms_change_command) {command} ($shopping_item) {value} [auf] [die] ($device_name_shoppinglist) {device}(:){state:.saveItem}
      

      Und in den Slots habe ich folgende Werte aufgenommen:

          "device_name_shoppinglist": [
              "(Mann | Mannsliste):bring.0.e4xxxxxxxxxx",
              "(haushaltsliste | einkaufsliste):bring.0.fexxxxxxxxxxxx",
              "(Frau | Frausliste):bring.0.92xxxxxxxxxxxx"
          ],
          "shopping_item": [
              "(Butter)",
              "(Deo)",
              "(Watte)",
              "(Weißwein)",
              "(Lippenstift)",
              "(Shampoo)",
              "(Seife)",
              "(Rotwein)",
              "(Milch)",
              "(Käse)",
              "(Brot)",
              "(Bier)",
              "(Sekt)",
              "(Schinken)",
              "(Duschgel)"
          ],
          "synonyms_change_command": [
              "mach:true",
              "schalte:true",
              "setz:true",
              "mach mal:true",
              "stell:true",
              "setze:true",
              "schalt:true",
              "stelle:true",
              "schliesse:false",
              "lösche:false",
              "entferne:false"
          ],
      

      Anmerkung1: Die synonyms_change_command-Liste benutze ich auch zum Steuern von Lampen, Rollos usw. Deshalb enthält sie mehr Kommandos, als nur für den Bring!-Adapter notwendig.

      Anmerkung 2: Die "shopping_items" müssen hier in den Slots und auch im Wörterbuch vollständig erfasst werden. Hierzu ist manuelle Pflege erforderlich, wenn mal ein Wort fehlt. Das halte ich momentan noch für machbar, auf Dauer jedoch für etwas umständlich. Vielleicht fällt ja einem ioBroker user eine elegantere Lösung ein.

      Und nun viel Spaß beim Ausprobieren. Fragen und Anregungen willkommen.

      Gruß, Thomas

      PS: @Bluefox, @hiasii12 meine Anfrage zu MQTT hat sich damit erledigt. Vielen Dank.

      J 1 Reply Last reply Reply Quote 2
      • J
        jwerlsdf @tobetobe last edited by jwerlsdf

        @tobetobe
        hi, vielen Dank für dein tolles Skript. Ich bekomme jedoch folgenden Fehler:

        javascript.0 (7578) script.js.Rhasspy.Datenpunkte_setzen_schalten): Rhasspy: Funktion ist nicht definiert --> Fehler bei Intent SetShoppingList
        

        Bei slots "device_name_shoppinglist" habe ich folgendes eingetragen:

        (haushaltsliste | einkaufsliste):bring.0.787XXXXXXXXXXXXXXX9
        

        Der Sprachbefehl wird richtig erkannt und in die SetShoppingList gesetzt. Was eben nicht funktioniert ist das setzen des Befehls in den BRING-Adapter.
        Woran könnte das liegen?
        Der Fehler liegt wohl bei diesem Skript:

        //##########################################################################
        // Rhasspy-intents via MQTT empfangen und entspr.Datenpunkte setzen/schalten
        //##########################################################################
        let http = require('http');
        
        /*
        Definition meiner Räume und der jeweiligen Objekte darin
        Die Struktur sieht dabei wie folgt aus.
        Im Intent der übermittelt wird sind sowohl der Raum Name als auch der Objektname als Slot enthalten.
        Beide werden dann vom Skript verwendet um den korrekten Datenpunkt herauszufinden.
        */
        const rooms = {
           "Büro": {
               "Licht": "sonoff.0.ShellyV1_13.POWER",
           },
           "Wohnzimmer": {
               "Licht": "sonoff.0.ShellyV1_06.POWER",
               "Stehlampe": "hm-rpc.1.0001D3C99C1AF9.3.STATE",
               "Wohnwand": "OwnDevices.0.433mhzPlugs.10011.PlugB",
               "Rollo": ""
           },
           "Bad": {
               "Licht": "sonoff.0.ShellyV1_05.POWER",
               "Spiegel": "sonoff.0.ShellyV1_11.POWER",
               "Indirekte Licht": "sonoff.0.SonoffBasic_02.POWER"
           },
           "Esszimmer": {
               "Licht": "sonoff.0.ShellyV1_03.POWER",
               "Highboard": "sonoff.0.SonoffS26_3.POWER"
           },
           "Küche": {
               "Licht": "hm-rpc.1.000858A9960E7A.4.STATE",
               "Spüle": "sonoff.0.ShellyV1_02.POWER",
               "Herd": "sonoff.0.ShellyV1_01.POWER"
           },
           "Schlafzimmer": {
               "Licht": "sonoff.0.ShellyV1_09.POWER",
               "Schrank": "sonoff.0.ShellyV1_10.POWER",
               "Bett": "sonoff.0.SonoffBasic_01.POWER",
               "Rollo": ""
           },
           "Klo": {
               "Licht": "sonoff.0.ShellyV1_04.POWER"
           }
        }
        
        //In diesem  json werden nötige Informationen zu allen rhasspys abgelget.
        const rhasspySites = {
           "Wohnzimmer": {
               room: "Wohnzimmer",
               host: "192.168.178.34",
               httpPort: "12101"
           }
        }
        
        
        //************************ Functions *********************
        //Mit dieser Funktion werden Strings in einen Boolschen Wert umgewandelt
        //Wenn der Wert in 'trueValues' enthalten ist wird 'true' zurückgegeben. 
        //Wenn nicht, wird 'false' zurückgegeben
        function convertStateToBool(state) {
           const trueValues = ['ein', 'an'];
           return trueValues.includes(state);
        }
        
        //Reukursives durchsuchen eines JSON Objektes
        //© https://gist.github.com/shakhal/3cf5402fc61484d58c8d
        function findValues(obj, key) {
           return findValuesHelper(obj, key, []);
        }
        
        //Reukursives durchsuchen eines JSON Objektes
        //© https://gist.github.com/shakhal/3cf5402fc61484d58c8d
        function findValuesHelper(obj, key, list) {
           if (!obj) return list;
           if (obj instanceof Array) {
               for (var i in obj) {
                   list = list.concat(findValuesHelper(obj[i], key, []));
               }
               return list;
           }
           if (obj[key]) list.push(obj[key]);
        
           if ((typeof obj == "object") && (obj !== null)) {
               var children = Object.keys(obj);
               if (children.length > 0) {
                   for (i = 0; i < children.length; i++) {
                       list = list.concat(findValuesHelper(obj[children[i]], key, []));
                   }
               }
           }
           return list;
        }
        
        //Generiert ein JSON-Objekt mit allen wichtigen Informationen für die Funktionen im Skript.
        //Dies dient vor allem dazu den späteren Code lesbarer zu machen.
        //Beisipel Ergebnis
        /*
        {
          "slots":{
             "objectName":"Stehlampe",
             "state":"aus"
          },
          "intentName":"changeState",
          "siteId":"Wohnzimmer"
        }
        */
        function extractIntentData(message) {
           const parsedMessage = JSON.parse(message);
           let extractedJSON = {};
           extractedJSON.slots = {};
           extractedJSON.intentName = parsedMessage.intent.intentName;
           extractedJSON.siteId = parsedMessage.siteId;
        
           parsedMessage.slots.forEach(slot => {
               extractedJSON.slots[slot.slotName] = slot.value.value;
           });
        
           return extractedJSON;
        }
        
        //Damit kann jeder Rhasspy sprechen
        function speakRhasspy(text, rhasspySiteId) {
           console.log(rhasspySiteId);
           const rhasspy = rhasspySites[rhasspySiteId];
           const options = {
               host: rhasspy.host,
               port: rhasspy.httpPort,
               path: "/api/text-to-speech",
               method: 'POST',
               headers: {
                   'User-Agent': 'ioBroker',
                   'Content-Type': 'text/plain',
               }
           }
        
           let req = http.request(options);
           req.on('error', function (e) {
               console.error('ERROR: ' + e.message, "warn");
           });
           req.write(text);
           req.end();
        }
        
        
        //In dieser Variablen werden alle Funktionen gepsiechert die später aufgerufen werden.
        //Dies dient dazu den anfallenden Code zu minimieren.
        //Die Funktionen haben immer den selben Namen wie die Intents in rhasspy und werden auch darauf basierend aufgerufen.
        const callFunctions = {
           //Ändert den Wert eines ioBroker Datenpunktes in einem bestimmten Raum.
           changeLightRoom: function (json) {
               const objectName = json.slots.objectName;
               const roomName = json.slots.room;
               const state = convertStateToBool(json.slots.state);
        
        
               //Nur wenn alle 3 Werte vorhanden sind wird der Zustand geändert
               if (typeof roomName != 'undefined' && typeof state != 'undefined' && typeof objectName != 'undefined') {
                   const room = rooms[roomName];
        
                   if (typeof room != 'undefined') {
                       const lightId = room[objectName];
                       if (typeof lightId != 'undefined') {
                           setState(lightId, state);
                       }
                       else {
                           speakRhasspy(`Ich konnte ${objectName} nicht finden`, json.siteId);
                           console.warn(`can not find object '${objectName}' in room '${roomName}'`);
                       }
                   }
                   else {
                       speakRhasspy(`Ich konnte den Raum ${roomName} nicht finden`, json.siteId);
                       console.warn(`can not find room '${roomName}' in list of rooms`);
                   }
        
               }
               else {
                   speakRhasspy(`Etwas ist schief gelaufen`, json.siteId);
                   console.warn(`rhasspy intent '${json.intentName}' from '${json.siteId}' slots not complete | room = '${roomName}' | state = '${state}' | objectName = '${objectName}'`);
               }
           },
           //Ändert des Wert eines ioBroker Datenpunktes auf Basis des Raumes in welchem der Rhasspy sich befindet.
           //Wenn in diesem Raum kein objekt mit diesem Name ist wird rekursiv in allen Räumen danach geuscht.
           //Wenn dann nur ein Objekt mit diesem Namen gefunden wird, wird dieses geschalten.
           changeState: function (json) {
               const objectName = json.slots.objectName;
               const state = convertStateToBool(json.slots.state);
               const site = rhasspySites[json.siteId];
               const room = rooms[site.room];
               let lightId = room[objectName];
        
               if (typeof lightId === 'undefined') {
                   //Prüfen ob es mehr als ein Objekt mit diesem Namen gibt
                   const objects = findValues(rooms, objectName);
        
                   if (objects.length === 1) {
                       lightId = objects[0];
                   }
                   else if (objects.length > 1) {
                       speakRhasspy(`Es gibt mehrere Objekte mit dem Namen ${objectName}`, json.siteId);
                       console.warn(`rhasspy intent '${json.intentName}' from '${json.siteId}' - more than one object found with name '${objectName}'`);
                   }
                   else {
                       speakRhasspy(`Ich konnte ${objectName} nicht finden`, json.siteId);
                       console.warn(`rhasspy intent '${json.intentName}' from '${json.siteId}' - no object found with name '${objectName}'`);
                   }
               }
        
               if (typeof lightId != 'undefined' && typeof state != 'undefined') {
                   setState(lightId, state);
               }
               else {
                   speakRhasspy(`Etwas ist schief gelaufen`, json.siteId);
                   console.warn(`rhasspy intent '${json.intentName}' from '${json.siteId}' slots not complete | lightId = '${lightId}' | state = '${state}'`);
               }
           }
        }
        //************************ Functions *********************
        
        //************************ Events ************************
        //Wird beim auslösen jedes Intents getriggert
        on({ id: /mqtt\.0\.hermes\.intent\..*/, change: "any" }, function (obj) {
           const extractedJSON = extractIntentData(obj.state.val);
           const intentName = extractedJSON.intentName;
           const callFunction = callFunctions[intentName];
        
           if (typeof callFunction != 'undefined') {
               callFunction(extractedJSON);
           }
           else {
               console.error(`Rhasspy: Funktion ist nicht definiert --> Fehler bei Intent ${intentName}`);
           }
        });
        //************************ Events ************************
        
        

        Woran könnte das liegen?

        Hier noch das Skript des BRING-Adapters:

        // Hier Skript zum Befüllen der Einkaufslisten im Bring-Adapter
        var intentResult = $('mqtt.0.hermes.intent.SetShoppingList*');
        var intentArray = [];
        
        for(var i = 0; i < intentResult.length; i++)
        {
           log(intentResult[i]);
           intentArray.push(intentResult[i]);
        }
        
        on({id: intentArray, change: "any"}, function (obj) {
           log(obj.newState.val); // kann man nach dem Testen auskommentieren oder löschen
        
           let intentObject = JSON.parse(obj.newState.val);
              if(intentObject.hasOwnProperty('device'))
           {
               var deviceID = intentObject.device;
               var command = intentObject.command;
               var state = intentObject.state;
               var value = intentObject.value;
               log('value:'+value); // kann man nach dem Testen auskommentieren oder löschen
               let data = value + ' auf die Einkaufsliste gesetzt';
               if(command === "false")
               {
               log('command:'+command); // kann man nach dem Testen auskommentieren oder löschen
               state = ".removeItem";
               log('state:'+state); // kann man nach dem Testen auskommentieren oder löschen
               data = value + ' von der Einkaufsliste entfernt';
               log("data:"+data) // kann man nach dem Testen auskommentieren oder löschen
               }
        
               log(deviceID + state + value); // kann man nach dem Testen auskommentieren oder löschen
               log('state:'+state); // kann man nach dem Testen auskommentieren oder löschen
               setState(deviceID + state, value);
               console.log("data: " + data); // kann man nach dem Testen auskommentieren oder löschen
               httpPost(data);
           }
        });
        

        Muss noch das Sternchen weg bzw. muss bei Array noch was eingetragen werden?

        var intentResult = $('mqtt.0.hermes.intent.SetShoppingList*');
        var intentArray = [];
        
        tobetobe 1 Reply Last reply Reply Quote 0
        • tobetobe
          tobetobe @jwerlsdf last edited by tobetobe

          @jwerlsdf sagte in Rhasspy: Sprachsteuerung für BRING!-Adapter:

          Muss noch das Sternchen weg

          Hallo, sorry, dass du warten musstest. Nun konnte ich mir deine Angelegenheit einmal anschauen. Deine Skripte sind natürlich schon an deine Belange angepasst und nicht mehr identisch mit meinen. Dennoch glaube ich, etwas gefunden zu haben. Es ist wohl so, wie du vermutet hast:

          var intentResult = $('mqtt.0.hermes.intent.SetShoppingList*')
          

          Das Sternchen muss weg. In meinem Skript ist das * hinter intent. in Ordnung, weil ich damit mehrere aus Rhasspy gelieferte Intents addressiere (Licht, Temperaturen, usw). Davon ist die ShoppingList ein Intent. Somit habe ich nur EIN Skript für alle möglichen Intents.

          Bei dir sieht es so aus, als würdest du das BRING-Skript auch wirklich nur für den Datenpunkt ShoppingList verwenden.

          Die Frage ist somit, ob du überhaupt mehrere ShoppingList-Objekte hast, die das Sternchen und die weitere Variable "intentArray" benötigen bzw rechtfertigen. Bitte schau dazu in deine Objekte unter mqtt.0.hermes.intent. Wenn du wirklich nur ein Objekt für die ShoppingList hast, kannst du die Adressierung vereinfachen.

          Aus

          var intentResult = $('mqtt.0.hermes.intent.SetShoppingList*')
          

          wird dann einfach

          var intentResult = 'mqtt.0.hermes.intent.SetShoppingList'
          

          Und den weiteren Aufwand mit dem intentArray und der nachgelagerten Schleife zum durchsuchen des intentArrays kannst du dir auch sparen.

          Unabhängig davon verwende ich tatsächlich mehrere ShoppingLists (individuell für mich und für meine Frau, gemeinsam Haushalt), die aber alle nur mit dem einen Objekt abgefangen werden. Die Detailinformation, welche dieser ShoppingLists befüllt werden soll, schicke ich in der Definition des Intents mit, also direkt vom Rhasspy.

          Schau mal, ob dir das weiterhilft

          J 1 Reply Last reply Reply Quote 0
          • J
            jwerlsdf @tobetobe last edited by jwerlsdf

            @tobetobe
            danke für die Rückmeldung.

            var intentResult = 'mqtt.0.hermes.intent.SetShoppingList';
            

            brachte leider keinen Erfolg.

            In der intents

            hermes/intent/SetShoppingList
            

            bekomme ich folgendes angezeigt:

            {"input": "true Milch auf die bring.0.78XXXXXXXXXXXXX79 .saveItem", "intent": {"intentName": "SetShoppingList", "confidenceScore": 1.0}, "siteId": "Wohnzimmer", "id": "fed0e13d-5607b1d7a243", "slots": [{"entity": "synonyms_change_command", "value": {"kind": "Unknown", "value": "true"}, "slotName": "command", "rawValue": "setze", "confidence": 1.0, "range": {"start": 0, "end": 4, "rawStart": 0, "rawEnd": 5}}, {"entity": "shopping_item", "value": {"kind": "Unknown", "value": "Milch"}, "slotName": "value", "rawValue": "Milch", "confidence": 1.0, "range": {"start": 5, "end": 10, "rawStart": 6, "rawEnd": 11}}, {"entity": "device_name_shoppinglist", "value": {"kind": "Unknown", "value": "bring.0.787XXXXXXXXXXXXXX9"}, "slotName": "device", "rawValue": "Haushaltsliste", "confidence": 1.0, "range": {"start": 19, "end": 63, "rawStart": 20, "rawEnd": 34}}, {"entity": "state", "value": {"kind": "Unknown", "value": ".saveItem"}, "slotName": "state", "rawValue": "", "confidence": 1.0, "range": {"start": 64, "end": 73, "rawStart": 35, "rawEnd": 34}}], "sessionId": "fed0e13d-5607-31a1b1d7a243", "customData": null, "asrTokens": [[{"value": "true", "confidence": 1.0, "rangeStart": 0, "rangeEnd": 4, "time": null}, {"value": "Milch", "confidence": 1.0, "rangeStart": 5, "rangeEnd": 10, "time": null}, {"value": "auf", "confidence": 1.0, "rangeStart": 11, "rangeEnd": 14, "time": null}, {"value": "die", "confidence": 1.0, "rangeStart": 15, "rangeEnd": 18, "time": null}, {"value": "bring.0.78XXXXXXXXXXXXX9", "confidence": 1.0, "rangeStart": 19, "rangeEnd": 63, "time": null}, {"value": ".saveItem", "confidence": 1.0, "rangeStart": 64, "rangeEnd": 73, "time": null}]], "asrConfidence": null, "rawInput": "setze Milch auf die Haushaltsliste", "wakewordId": null, "lang": null}
            

            sieht für mich erst einmal richtig aus.

            tobetobe 1 Reply Last reply Reply Quote 0
            • tobetobe
              tobetobe @jwerlsdf last edited by

              @jwerlsdf sagte in Rhasspy: Sprachsteuerung für BRING!-Adapter:

              sieht für mich erst einmal richtig aus

              Hallo,

              das stimmt!!! Das sieht bei mir genauso aus. Daran liegt es also nicht

              Der Fehler liegt wohl bei diesem Skript:
              Ich versuche mal, mich dort einzulesen. Das Skript ist allerdings sehr mächtig und man müsste sicher sein, dass es nicht das BRING-Skript selbst ist, was den Fehler verursacht. Von daher einige Fragen: Welche Steuerungen funktionieren? Ist das Triggern der Einkaufsliste bzw. des BRING-Adapters die einzige Funktion, die nicht geht? Und was sagen die Logs im BRING-Skript, wenn du diese einschaltest?

              Aufgefallen ist mir folgendes:


              //************************ Events ************************
              //Wird beim auslösen jedes Intents getriggert
              on({ id: /mqtt.0.hermes.intent..*/, change: "any" }, function (obj) {
              const extractedJSON = extractIntentData(obj.state.val);
              const intentName = extractedJSON.intentName;
              const callFunction = callFunctions[intentName];

              if (typeof callFunction != 'undefined') {
              callFunction(extractedJSON);
              }
              else {
              console.error(Rhasspy: Funktion ist nicht definiert --> Fehler bei Intent ${intentName});
              }
              });


              Die Fehlermeldung stammt ja wohl aus diesem Teil deines Skripts, da die if-Bedingung nicht erfüllt wird. Hier könntest du selbst nachforschen. Bist du zB sicher, dass diese Adressierung korrekt ist:

              id: /mqtt\.0\.hermes\.intent\..*/
              

              müsste sie nicht eher so aussehen:

              id: 'mqtt.0.hermes.intent.ShoppingList'
              
              J 2 Replies Last reply Reply Quote 0
              • J
                jwerlsdf @tobetobe last edited by jwerlsdf

                @tobetobe
                das ist ein anderes Skript, mit dem ich alles andere schalte (Lampen, webradio, etc.).
                Als ich das Skript deaktiviert habe, hat das Bring-Skript von dir immer noch nicht die Werte in den Bring-Adapter geschrieben.
                Testweise habe ich in meiner VIS die Daten mal eingegeben und diese werden auch korrekt in der Objektstuktur angelegt und per Telegram versendet. Sollte also auch nicht am Bring-Adapter an sich liegen 😕

                tobetobe 1 Reply Last reply Reply Quote 0
                • tobetobe
                  tobetobe @jwerlsdf last edited by

                  @jwerlsdf sagte in Rhasspy: Sprachsteuerung für BRING!-Adapter:

                  das ist ein anderes Skript,

                  Hallo, ich hatte dir einen Vorschlag zur weiteren Fehlersuche gemacht. Hast du den gesehen?

                  1 Reply Last reply Reply Quote 0
                  • J
                    jwerlsdf @tobetobe last edited by

                    @tobetobe said in Rhasspy: Sprachsteuerung für BRING!-Adapter:

                    id: /mqtt.0.hermes.intent..*/

                    Die Adressierung ist korrekt, da diese ja mit meinen anderen Sprachbefehlen läuft...Es sind ja noch ein paar andere Intents, die ich auslese. Mit deinem Vorschlag ging es leider auch nicht.

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate
                    FAQ Cloud / IOT
                    HowTo: Node.js-Update
                    HowTo: Backup/Restore
                    Downloads
                    BLOG

                    430
                    Online

                    31.6k
                    Users

                    79.5k
                    Topics

                    1.3m
                    Posts

                    bring mqtt rhasspy tts
                    2
                    8
                    798
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo