Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Off Topic
  4. Rhasspy Offline Sprachsteuerung

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    12
    2
    256

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

Rhasspy Offline Sprachsteuerung

Rhasspy Offline Sprachsteuerung

Scheduled Pinned Locked Moved Off Topic
403 Posts 30 Posters 99.2k Views 47 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • joergeliJ joergeli

    Hallo Thomas,

    @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

    Ich habe die Übung dann auch mal gemacht und mit dem Ergebnis war ich in der Lage, einen JSON-String, der entweder vom mqtt-Client oder direkt vom Mosquitto-Broker kam, zu parsen und daraus wieder den Befehl ans Device aufzubauen. Ein Lichtblick!!! Das Parsen habe ich stur geradeaus gemacht: Slot[0], Slot[1], ... usw. Das funktioniert, ist aber nicht sonderlich elegant und auch nicht dynamisch in Punkto Slot-Anzahl, so wie ich das vorher hatte.

    Tja, mühsam ernährt sich das Eichhörnchen 😊

    Ich habe mal ein wenig mit dem JS experimentiert, welches @Tictactoo am 23. Jan. 2020, 20:52 vorgestellt hatte.
    Ich bin zumindest soweit gekommen, daß es über den mqtt.1-Client (mit Deiner geliebten, schlanken Schleife) folgendes auswirft:
    ( abhängig von der Anzahl der Slots werden mehr, bzw. weniger Werte ausgegeben).

    20:30:22.731	info	javascript.0 (18426) script.js.common.sprache.testi: Anzahl Slots:2
    20:30:22.731	info	javascript.0 (18426) script.js.common.sprache.testi: intent:Lampen
    20:30:22.732	info	javascript.0 (18426) script.js.common.sprache.testi: slot[0]:wandspots
    20:30:22.732	info	javascript.0 (18426) script.js.common.sprache.testi: slot[1]:aus
    
    

    Auswertungen, bzw. Schaltvorgänge auslösen ist nicht enthalten, aber vielleicht hilft Dir dieses Codeschnippsel trotzdem weiter:

    
    var intentResult = $('mqtt.1.hermes.intent.*');
    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);
        let intentObject = JSON.parse(obj.newState.val);
    
        let anzslots = intentObject.slots.length; //Anzahl Slots ermitteln
        log("Anzahl Slots:" + anzslots);
    
    
        let intent = intentObject.intent.intentName;
        log("intent:" + intent);
    
        for (i = 0; i < anzslots; i++) { 
            let slot = intentObject.slots[i].value.value;
            log("slot[" +i + "]:" + slot);
        } // end of for
    });
    
    

    Gruß
    Jörg

    tobetobeT Offline
    tobetobeT Offline
    tobetobe
    wrote on last edited by
    #214

    @joergeli said in Rhasspy Offline Sprachsteuerung:

    Hallo Jörg,

    ich habe dein Skript ein wenig ergänzt. Zum einen habe ich die siteId mit aufgenommen, weil ich damit lokalisieren kann, in welchem Raum sich ein Satellit befindet, bzw. von wo die Anforderung kam.

    In Anlehnung an Kay Kochs Node-Red Skript lese ich nun auch noch den Namen eines Slots aus und stelle ihn dem Slotwert voran. Das sieht dann so aus:

    var intentResult = $('mqtt.1.hermes.intent.*');
    var intentArray = [];
    
     for(var i = 0; i < intentResult.length; i++)
    {
        log("Zeile8:"+intentResult[i]);
        intentArray.push(intentResult[i]);
    }
    
    on({id: intentArray, change: "any"}, function (obj) {
        log(obj.newState.val);
        let intentObject = JSON.parse(obj.newState.val);
        let anzslots = intentObject.slots.length; //Anzahl Slots ermitteln
        log("Anzahl Slots:" + anzslots); 
        let intent = intentObject.intent.intentName;
        log("intent:" + intent);
        let siteId = intentObject.siteId;
        log("siteID:" + siteId);   
        var slot = [];
        
        for (i = 0; i < anzslots; i++) { 
            let slot = intentObject.slots[i].slotName+':'+intentObject.slots[i].value.value;
            log("slot[" +i + "]:" + slot);
        } // end of for
    
       setState(slot[0]+slot[2],slot[1]);
     //   log(slot[0]+slot[2], slot[1]);
    })
    
    

    Ab Zeile 25 würde dann bei mir der Aufruf von Funktionen stattfinden, die zu den jeweiligen Intents passen. Dazu muss dann auch das setState-Kommando zusammengesetzt werden. Bei HomeMatic sähe das bei mir dann so aus:

    setState(deviceId.state, value)
    

    Momentan versuche ich, ein solches Kommando aus den vorangestellten Namen der Slots zusammenzustellen. Das was du oben im Skript siehst (Zeilen 26 und 27) funktioniert allerdings noch nicht.

    Soweit mein Zwischenstand.

    Viele Grüße
    Thomas

    Beste Grüße
    tobetobe

    joergeliJ 1 Reply Last reply
    0
    • capitaenzC capitaenz

      Hallo zusammen,

      ich habe noch ein Snips zu hause laufen und wollte Rhasspy testen.
      Ich habe mich an die Anleitung gehalten und eine SD-Karte für den Pi 3b+ mit buster-light neu aufgesetzt.
      Die Erste Hürde: Docker!? Will ich eigentlich nicht, was ist das? 🙂
      Jedenfalls hab ich schon das Problem, dass ich das Webinterface unter 192.168.0.93:12101 nicht aufgerufen bekomme.
      Wenn ich Rhasspy mit:

      docker run -d -p 12101:12101 \
            --restart unless-stopped \
            -v "$HOME/.config/rhasspy/profiles:/profiles" \
            --device /dev/snd:/dev/snd \
            synesthesiam/rhasspy-server:latest \
            --user-profiles /profiles \
            --profile en
      

      starte wird ein Code angezeigt, die LED am Pi fängt an zu blinken und der Cursor erscheint wieder ohne Fehlermeldung, aber das Webinterface lässt sich nicht aufrufen...
      Um es kurz zu machen, gibt es irgendwo ein fertiges Image von Rhasspy zum Download? (Pi 3b+)

      VG
      Leif

      tobetobeT Offline
      tobetobeT Offline
      tobetobe
      wrote on last edited by
      #215

      @capitaenz

      Hallo und willkommen in unserer Rhasspy-Runde,

      ich gehe mal kurz auf deine Fragen ein:

      @capitaenz said in Rhasspy Offline Sprachsteuerung:

      Ich habe mich an die Anleitung gehalten und eine SD-Karte für den Pi 3b+ mit buster-light neu aufgesetzt.

      Das ist doch schon mal gut.

      @capitaenz said in Rhasspy Offline Sprachsteuerung:

      Die Erste Hürde: Docker!? Will ich eigentlich nicht, was ist das?

      Docker ist eine virtuelle Umgebung, in der das Programm läuft. Bei Snips lief alles unter SAM. Wolltest du auch nicht, brauchtest du aber. So ist es bei Rhasspy auch. Viele Programme laufen heute bereits unter Docker. Das ist eine sehr moderne und Ressourcen-schonende Methode, virtuelle Umgebungen auf zu bauen. Gerade für Raspberry ideal. Wenn du partout kein Docker willst, kannst du Rhasspy auch unter Python als virtuelle Umgebung aufsetzen. Ist mMn aber etwas kniffliger.

      Empfehlung: Halt dich an die Anweisung und installiere Docker mit dem entsprechenden curl-Befehl:

      curl -sSL https://get.docker.com | sh        (ggf. mit sudo)
      sudo usermod -aG docker pi                    (diesen Befehl auf keinen Fall vergessen!)
                                                                         pi ggf. durch deinen Usernamen ersetzen
      

      Dann ziehst du dir noch das neueste Image:

      sudo docker pull rhasspy/rhasspy:2.5.0-pre
      

      Und setzt danach das Kommando zu Starten ab:

      docker run -d -p 12101:12101 \
            --restart unless-stopped \
            -v "$HOME/.config/rhasspy/profiles:/profiles" \
            --device /dev/snd:/dev/snd \
            synesthesiam/rhasspy-server:latest \
            --user-profiles /profiles \
            --profile de
      

      Da du wohl eine deutschsprachige Variante haben willst, habe ich für dich den Profileintrag in "de" geändert.

      Jetzt nur noch die IP-Adresse und die Portnummer im Browser eingeben und los geht's. Einfacher geht es wirklich nicht.

      Gutes Gelingen!

      Beste Grüße
      tobetobe

      1 Reply Last reply
      0
      • tobetobeT tobetobe

        @joergeli said in Rhasspy Offline Sprachsteuerung:

        Hallo Jörg,

        ich habe dein Skript ein wenig ergänzt. Zum einen habe ich die siteId mit aufgenommen, weil ich damit lokalisieren kann, in welchem Raum sich ein Satellit befindet, bzw. von wo die Anforderung kam.

        In Anlehnung an Kay Kochs Node-Red Skript lese ich nun auch noch den Namen eines Slots aus und stelle ihn dem Slotwert voran. Das sieht dann so aus:

        var intentResult = $('mqtt.1.hermes.intent.*');
        var intentArray = [];
        
         for(var i = 0; i < intentResult.length; i++)
        {
            log("Zeile8:"+intentResult[i]);
            intentArray.push(intentResult[i]);
        }
        
        on({id: intentArray, change: "any"}, function (obj) {
            log(obj.newState.val);
            let intentObject = JSON.parse(obj.newState.val);
            let anzslots = intentObject.slots.length; //Anzahl Slots ermitteln
            log("Anzahl Slots:" + anzslots); 
            let intent = intentObject.intent.intentName;
            log("intent:" + intent);
            let siteId = intentObject.siteId;
            log("siteID:" + siteId);   
            var slot = [];
            
            for (i = 0; i < anzslots; i++) { 
                let slot = intentObject.slots[i].slotName+':'+intentObject.slots[i].value.value;
                log("slot[" +i + "]:" + slot);
            } // end of for
        
           setState(slot[0]+slot[2],slot[1]);
         //   log(slot[0]+slot[2], slot[1]);
        })
        
        

        Ab Zeile 25 würde dann bei mir der Aufruf von Funktionen stattfinden, die zu den jeweiligen Intents passen. Dazu muss dann auch das setState-Kommando zusammengesetzt werden. Bei HomeMatic sähe das bei mir dann so aus:

        setState(deviceId.state, value)
        

        Momentan versuche ich, ein solches Kommando aus den vorangestellten Namen der Slots zusammenzustellen. Das was du oben im Skript siehst (Zeilen 26 und 27) funktioniert allerdings noch nicht.

        Soweit mein Zwischenstand.

        Viele Grüße
        Thomas

        joergeliJ Online
        joergeliJ Online
        joergeli
        wrote on last edited by joergeli
        #216

        Hallo Thomas,
        @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

        Ab Zeile 25 würde dann bei mir der Aufruf von Funktionen stattfinden, die zu den jeweiligen Intents passen. Dazu muss dann auch das setState-Kommando zusammengesetzt werden.

        Versuche es mal so:

        
        var intentResult = $('mqtt.1.hermes.intent.*');
        var intentArray = [];
        
         for(var i = 0; i < intentResult.length; i++)
        {
            log("Zeile8:"+intentResult[i]);
            intentArray.push(intentResult[i]);
        }
        
        on({id: intentArray, change: "any"}, function (obj) {
            log(obj.newState.val);
            let intentObject = JSON.parse(obj.newState.val);
            let anzslots = intentObject.slots.length; //Anzahl Slots ermitteln
            log("Anzahl Slots:" + anzslots); 
            let intent = intentObject.intent.intentName;
            log("intent:" + intent);
            let siteId = intentObject.siteId;
            log("siteID:" + siteId);   
        
            let slot = [];
            let wertearray = [];
        
            for (i = 0; i < anzslots; i++) { 
                let slot = intentObject.slots[i].slotName+':'+intentObject.slots[i].value.value;
                log("slot[" +i + "]:" + slot);
                let slotwert  = intentObject.slots[i].value.value;
                wertearray.push(slotwert); // hier werden nur! die Werte der Slots in ein neues array "wertearray" geschrieben
            } // end of for
        
                log("Ausgabe: " + wertearray[0] + "." + wertearray[2]   + "," + wertearray[1]);
        
                //Setzen der States, bzw. Aufruf der entspr. Funktionen
                //setState (wertearray[0] + "." + wertearray[2] , wertearray[1], true);
        
        })
        
        

        Damit bekommst Du die Werte aus den Slots extrahiert und kannst dann damit das "setState" zusammenbauen.
        Es setzt aber voraus, daß immer 3 Slots ( slot[0], slot[1], slot[2]) von Rhasspy geliefert werden.

        Gruß
        Jörg

        tobetobeT 1 Reply Last reply
        0
        • capitaenzC Offline
          capitaenzC Offline
          capitaenz
          wrote on last edited by
          #217

          @tobetobe
          Danke für deine Hilfe!
          Das Problem sitzt vor dem Monitor und ich war so blöd und habe meinen Benutzernamen nicht eingetragen.

          Ich fasse einmal zusammen was ich gemacht habe:

          Image Flashen mit Win32 DiskImager (Raspian Buster lite)
          
          ssh und wpa_supplicant.conf auf SD-Karte anlegen
          
          sudo apt update
          
          sudo apt full-upgrade
          
          sudo curl -sSL https://get.docker.com | sh
          
          sudo usermod -aG docker pi
          
          sudo reboot -n
          
          sudo docker pull rhasspy/rhasspy:2.5.0-pre
          
          docker run -d -p 12101:12101 \
                --restart unless-stopped \
                -v "$HOME/.config/rhasspy/profiles:/profiles" \
                --device /dev/snd:/dev/snd \
                synesthesiam/rhasspy-server:latest \
                --user-profiles /profiles \
                --profile de
          

          Ich mache mich dann mal an das konfigurieren und hoffe, dass ich mein respeaker 2-mics pi hat bzw. respeaker 4-mics pi hat installiert bekomme.

          Danke und VG
          Leif

          ioBroker auf Synology DS920+ (SSD Raid / 20GB RAM) im VMM

          joergeliJ tobetobeT 2 Replies Last reply
          0
          • capitaenzC capitaenz

            @tobetobe
            Danke für deine Hilfe!
            Das Problem sitzt vor dem Monitor und ich war so blöd und habe meinen Benutzernamen nicht eingetragen.

            Ich fasse einmal zusammen was ich gemacht habe:

            Image Flashen mit Win32 DiskImager (Raspian Buster lite)
            
            ssh und wpa_supplicant.conf auf SD-Karte anlegen
            
            sudo apt update
            
            sudo apt full-upgrade
            
            sudo curl -sSL https://get.docker.com | sh
            
            sudo usermod -aG docker pi
            
            sudo reboot -n
            
            sudo docker pull rhasspy/rhasspy:2.5.0-pre
            
            docker run -d -p 12101:12101 \
                  --restart unless-stopped \
                  -v "$HOME/.config/rhasspy/profiles:/profiles" \
                  --device /dev/snd:/dev/snd \
                  synesthesiam/rhasspy-server:latest \
                  --user-profiles /profiles \
                  --profile de
            

            Ich mache mich dann mal an das konfigurieren und hoffe, dass ich mein respeaker 2-mics pi hat bzw. respeaker 4-mics pi hat installiert bekomme.

            Danke und VG
            Leif

            joergeliJ Online
            joergeliJ Online
            joergeli
            wrote on last edited by joergeli
            #218

            @capitaenz
            Hallo Leif,
            ich habe ein Respeaker 4-Mic Array.
            Die entspr. Respeaker-Treiber kannst Du auch installieren, indem Du zuerst HLC (Hermes LED Control) installierst,
            das dient zum Ansteuern des LED-Ringes.

            siehe HermesLedControl
            und hier: Installation & update

            Im Verlauf der HLC-Installation wirst Du u.a. gefragt, welches Mikrofon Du benutzt.
            Wenn Du dann Dein entspr. Respeaker-Mic auswählst, wirst Du anschl. gefragt, ob Du auch die entspr. Treiber installieren willst.

            Gruß
            Jörg

            1 Reply Last reply
            0
            • joergeliJ joergeli

              Hallo Thomas,
              @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

              Ab Zeile 25 würde dann bei mir der Aufruf von Funktionen stattfinden, die zu den jeweiligen Intents passen. Dazu muss dann auch das setState-Kommando zusammengesetzt werden.

              Versuche es mal so:

              
              var intentResult = $('mqtt.1.hermes.intent.*');
              var intentArray = [];
              
               for(var i = 0; i < intentResult.length; i++)
              {
                  log("Zeile8:"+intentResult[i]);
                  intentArray.push(intentResult[i]);
              }
              
              on({id: intentArray, change: "any"}, function (obj) {
                  log(obj.newState.val);
                  let intentObject = JSON.parse(obj.newState.val);
                  let anzslots = intentObject.slots.length; //Anzahl Slots ermitteln
                  log("Anzahl Slots:" + anzslots); 
                  let intent = intentObject.intent.intentName;
                  log("intent:" + intent);
                  let siteId = intentObject.siteId;
                  log("siteID:" + siteId);   
              
                  let slot = [];
                  let wertearray = [];
              
                  for (i = 0; i < anzslots; i++) { 
                      let slot = intentObject.slots[i].slotName+':'+intentObject.slots[i].value.value;
                      log("slot[" +i + "]:" + slot);
                      let slotwert  = intentObject.slots[i].value.value;
                      wertearray.push(slotwert); // hier werden nur! die Werte der Slots in ein neues array "wertearray" geschrieben
                  } // end of for
              
                      log("Ausgabe: " + wertearray[0] + "." + wertearray[2]   + "," + wertearray[1]);
              
                      //Setzen der States, bzw. Aufruf der entspr. Funktionen
                      //setState (wertearray[0] + "." + wertearray[2] , wertearray[1], true);
              
              })
              
              

              Damit bekommst Du die Werte aus den Slots extrahiert und kannst dann damit das "setState" zusammenbauen.
              Es setzt aber voraus, daß immer 3 Slots ( slot[0], slot[1], slot[2]) von Rhasspy geliefert werden.

              Gruß
              Jörg

              tobetobeT Offline
              tobetobeT Offline
              tobetobe
              wrote on last edited by tobetobe
              #219

              @joergeli said in Rhasspy Offline Sprachsteuerung:

                  log("Ausgabe: " + wertearray[0] + "." + wertearray[2]   + "," + wertearray[1]);                                                                    
              

              Hallo Jörg,

              ganz hervorragend! Vielen Dank. Wie gesagt, baue ich mir nun Funktionsaufrufe ein, die ich über if- Abfragen steuere. if bezieht sich dabei auf den Namen des intents, sodass ich die Funktionen spezifisch passend zum intent aufbauen kann. Dein Feld "wertarray" enthält natürlich immer so viele Werte, wie es slots gibt. Damit kann ich dann in einer Funktion auch "setState" immer so aufbauen, wie es für das intent notwendig ist, bzw auch alles sonstige, wie zB TTS-Funktionen mit hineinpacken.. Das finde ich jetzt schon ziemlich elegant.

              Mittlerweile schält sich bei mir auch immer mehr die Vorstellung heraus, dass ich wohl bei dem mqtt-Client von ioBroker bleibe und nicht direkt auf den Mosquitto-Broker zugreife. Es ist einfach angenehmer, wenn man die intents auch als Datenobjekte sehen kann. Und die Subscription erledigt der Client ja nun wirklich zuverlässig.

              Es interessiert mich noch, ob ich mir den Mosquitto-Broker nicht sogar sparen kann, indem ich direkt auf den internen Broker zugreife, allerdings mit eingetragener IP-Adresse. Ich muss nochmals nachlesen, was du dazu schon geschrieben hattest, bzw andere im Rhasspy-Forum. Oder halt einfach mal testen...

              Heute passiert allerdings nichts mehr. In diesem Sinne noch einen schönen Abend
              Thomas

              Beste Grüße
              tobetobe

              joergeliJ 1 Reply Last reply
              0
              • capitaenzC capitaenz

                @tobetobe
                Danke für deine Hilfe!
                Das Problem sitzt vor dem Monitor und ich war so blöd und habe meinen Benutzernamen nicht eingetragen.

                Ich fasse einmal zusammen was ich gemacht habe:

                Image Flashen mit Win32 DiskImager (Raspian Buster lite)
                
                ssh und wpa_supplicant.conf auf SD-Karte anlegen
                
                sudo apt update
                
                sudo apt full-upgrade
                
                sudo curl -sSL https://get.docker.com | sh
                
                sudo usermod -aG docker pi
                
                sudo reboot -n
                
                sudo docker pull rhasspy/rhasspy:2.5.0-pre
                
                docker run -d -p 12101:12101 \
                      --restart unless-stopped \
                      -v "$HOME/.config/rhasspy/profiles:/profiles" \
                      --device /dev/snd:/dev/snd \
                      synesthesiam/rhasspy-server:latest \
                      --user-profiles /profiles \
                      --profile de
                

                Ich mache mich dann mal an das konfigurieren und hoffe, dass ich mein respeaker 2-mics pi hat bzw. respeaker 4-mics pi hat installiert bekomme.

                Danke und VG
                Leif

                tobetobeT Offline
                tobetobeT Offline
                tobetobe
                wrote on last edited by
                #220

                @capitaenz

                Gut soweit! Bei Fragen meldest du dich.

                Beste Grüße
                tobetobe

                1 Reply Last reply
                0
                • tobetobeT tobetobe

                  @joergeli said in Rhasspy Offline Sprachsteuerung:

                      log("Ausgabe: " + wertearray[0] + "." + wertearray[2]   + "," + wertearray[1]);                                                                    
                  

                  Hallo Jörg,

                  ganz hervorragend! Vielen Dank. Wie gesagt, baue ich mir nun Funktionsaufrufe ein, die ich über if- Abfragen steuere. if bezieht sich dabei auf den Namen des intents, sodass ich die Funktionen spezifisch passend zum intent aufbauen kann. Dein Feld "wertarray" enthält natürlich immer so viele Werte, wie es slots gibt. Damit kann ich dann in einer Funktion auch "setState" immer so aufbauen, wie es für das intent notwendig ist, bzw auch alles sonstige, wie zB TTS-Funktionen mit hineinpacken.. Das finde ich jetzt schon ziemlich elegant.

                  Mittlerweile schält sich bei mir auch immer mehr die Vorstellung heraus, dass ich wohl bei dem mqtt-Client von ioBroker bleibe und nicht direkt auf den Mosquitto-Broker zugreife. Es ist einfach angenehmer, wenn man die intents auch als Datenobjekte sehen kann. Und die Subscription erledigt der Client ja nun wirklich zuverlässig.

                  Es interessiert mich noch, ob ich mir den Mosquitto-Broker nicht sogar sparen kann, indem ich direkt auf den internen Broker zugreife, allerdings mit eingetragener IP-Adresse. Ich muss nochmals nachlesen, was du dazu schon geschrieben hattest, bzw andere im Rhasspy-Forum. Oder halt einfach mal testen...

                  Heute passiert allerdings nichts mehr. In diesem Sinne noch einen schönen Abend
                  Thomas

                  joergeliJ Online
                  joergeliJ Online
                  joergeli
                  wrote on last edited by
                  #221

                  Hallo Thomas,

                  @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                  Es interessiert mich noch, ob ich mir den Mosquitto-Broker nicht sogar sparen kann, indem ich direkt auf den internen Broker zugreife, allerdings mit eingetragener IP-Adresse. Ich muss nochmals nachlesen, was du dazu schon geschrieben hattest, bzw andere im Rhasspy-Forum. Oder halt einfach mal testen...

                  ... das wäre mir auch lieber, und ich hatte es auch schon versucht mit Rhasspy-IP/Port 12183.
                  Funktioniert aber nicht, da man wohl nicht an den internen MQTT-Server im Docker herankommt?
                  Habe diesbzgl. auch mal gegoogelt nach " auf MQTT-Server in Docker-Container zugreifen", aber da habe ich nur gefunden, wie man einen MQTT-Broker in einem Docker-Container installieren kann.
                  Andererseits setzt wohl Hermes Led Control auch einen eigenständigen MQTT-Server voraus.

                  Wenn man sich die Netzwerkparameter des Rhasspy-Raspis mit ifconfig ansieht, taucht da auch ein eigenständiges Netzwerkinterface namens "docker0" auf. Keine Ahnung, ob man damit was anfangen kann.
                  Dessen IP-Adresse 172.17.0.1 ist natürlich in meinem 192.168.192.xxx-LAN nicht erreichbar.

                  pi@voltron:~ $ ifconfig
                  docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
                          inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
                          inet6 fe80::42:e6ff:fe9b:3c5b  prefixlen 64  scopeid 0x20<link>
                          ether 02:42:e6:9b:3c:5b  txqueuelen 0  (Ethernet)
                          RX packets 3295954  bytes 2538688841 (2.3 GiB)
                          RX errors 0  dropped 0  overruns 0  frame 0
                          TX packets 3287164  bytes 4911703231 (4.5 GiB)
                          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                  
                  eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
                          ether dc:a6:32:59:af:da  txqueuelen 1000  (Ethernet)
                          RX packets 0  bytes 0 (0.0 B)
                          RX errors 0  dropped 0  overruns 0  frame 0
                          TX packets 0  bytes 0 (0.0 B)
                          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                  
                  lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
                          inet 127.0.0.1  netmask 255.0.0.0
                          inet6 ::1  prefixlen 128  scopeid 0x10<host>
                          loop  txqueuelen 1000  (Lokale Schleife)
                          RX packets 8740  bytes 684161 (668.1 KiB)
                          RX errors 0  dropped 0  overruns 0  frame 0
                          TX packets 8740  bytes 684161 (668.1 KiB)
                          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                  
                  veth09f4fc4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
                          inet 169.254.198.203  netmask 255.255.0.0  broadcast 169.254.255.255
                          inet6 fe80::a520:6aa2:cace:e177  prefixlen 64  scopeid 0x20<link>
                          ether 26:46:35:aa:f2:a2  txqueuelen 0  (Ethernet)
                          RX packets 3295954  bytes 2584832197 (2.4 GiB)
                          RX errors 0  dropped 0  overruns 0  frame 0
                          TX packets 3288284  bytes 4912121058 (4.5 GiB)
                          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                  
                  wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
                          inet 192.168.192.26  netmask 255.255.255.0  broadcast 192.168.192.255
                          inet6 fe80::dea6:32ff:fe59:afdb  prefixlen 64  scopeid 0x20<link>
                          inet6 2002:5fde:1123:0:dea6:32ff:fe59:afdb  prefixlen 64  scopeid 0x0<global>
                          ether dc:a6:32:59:af:db  txqueuelen 1000  (Ethernet)
                          RX packets 118339  bytes 12174857 (11.6 MiB)
                          RX errors 0  dropped 69914  overruns 0  frame 0
                          TX packets 14616  bytes 8131441 (7.7 MiB)
                          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                  
                  

                  Nebenbei:
                  Ich habe mich in der mqtt.1-Client-Instanz jetzt nur noch auf folgende Topics subscribed:
                  hermes/intent/#, hermes/asr/startListening, hermes/nlu/intentNotRecognized

                  Das reicht aus, um alle Intents, das WakeWord und Intent-Nicht-Erkannt auszuwerten

                  Gruß
                  Jörg

                  tobetobeT 1 Reply Last reply
                  0
                  • capitaenzC Offline
                    capitaenzC Offline
                    capitaenz
                    wrote on last edited by capitaenz
                    #222

                    @tobetobe
                    Dank euch aus dem Forum hab ich die Installation jetzt soweit am laufen, aber noch nicht funktionsfähig.
                    Ich habe noch einmal meine Schritte dokumentiert:

                    • Image Flashen mit Win32 DiskImager (Raspian Buster lite)

                    • ssh und wpa_supplicant.conf auf SD-Karte anlegen

                    • sudo apt update

                    • sudo apt full-upgrade

                    • sudo curl -sSL https://get.docker.com | sh

                    • sudo usermod -aG docker pi

                    • sudo reboot -n

                    • sudo docker pull rhasspy/rhasspy:2.5.0-pre

                    • docker run -d -p 12101:12101
                      --restart unless-stopped
                      -v "$HOME/.config/rhasspy/profiles:/profiles"
                      --device /dev/snd:/dev/snd
                      synesthesiam/rhasspy-server:latest
                      --user-profiles /profiles
                      --profile de

                    • sudo wget https://gist.githubusercontent.com/Psychokiller1888/a9826f92c5a3c5d03f34d182fda1ce4c/raw/cbb53252dd55dc4e9f5f6064a493f0981cf133fb/hlc_download.sh

                    • sudo chmod +x hlc_download.sh

                    • sudo ./hlc_download.sh

                    Abfragen:

                    • What assistant engine are you using?
                      2 (rhasspy)

                    • What's the path to your assistant config file?
                      /home/pi/.config/rhasspy/profiles/de/profile.json

                    • What device do you wish to control with SLC?
                      1 (respeaker2)

                    • What pattern do you want to use?
                      5 (kiboost)

                    • Do you need to install / configure your respeaker2?
                      1 (yes)

                    • sudo raspi-config (SPI Aktivieren)
                      ->5->P4->EXIT

                    • sudo reboot -n

                    • 192.168.0.93:12101 -> Webinterface aufrufen

                    • Use PyAudio (default)
                      Audio Recording -> 2: seees-2mic-vicecard: bcm2825-i2cs...

                    • Save + Restart Rhasspy

                    • Audio Playing
                      Use aplay directly (ALSA)
                      Output Device (default:CARD=ALSA: Default Audio Device)

                    Jetzt muss noch MQTT aktiviert werden und ein WakeWord ausgewählt werden, allerdings scheint der Speaker und der Leuchtring noch nicht zu funktionieren, was wohl daran liegt, dass ich im Webinterface von Rhasspy den Output Device nicht abspeichern kann. Nach dem Neustart steht dieser wieder auf default.

                    default.JPG

                    Kann mir bitte noch jemand den entscheidenden Hinweis geben?

                    Danke und VG
                    Leif

                    ioBroker auf Synology DS920+ (SSD Raid / 20GB RAM) im VMM

                    joergeliJ tobetobeT 3 Replies Last reply
                    0
                    • capitaenzC capitaenz

                      @tobetobe
                      Dank euch aus dem Forum hab ich die Installation jetzt soweit am laufen, aber noch nicht funktionsfähig.
                      Ich habe noch einmal meine Schritte dokumentiert:

                      • Image Flashen mit Win32 DiskImager (Raspian Buster lite)

                      • ssh und wpa_supplicant.conf auf SD-Karte anlegen

                      • sudo apt update

                      • sudo apt full-upgrade

                      • sudo curl -sSL https://get.docker.com | sh

                      • sudo usermod -aG docker pi

                      • sudo reboot -n

                      • sudo docker pull rhasspy/rhasspy:2.5.0-pre

                      • docker run -d -p 12101:12101
                        --restart unless-stopped
                        -v "$HOME/.config/rhasspy/profiles:/profiles"
                        --device /dev/snd:/dev/snd
                        synesthesiam/rhasspy-server:latest
                        --user-profiles /profiles
                        --profile de

                      • sudo wget https://gist.githubusercontent.com/Psychokiller1888/a9826f92c5a3c5d03f34d182fda1ce4c/raw/cbb53252dd55dc4e9f5f6064a493f0981cf133fb/hlc_download.sh

                      • sudo chmod +x hlc_download.sh

                      • sudo ./hlc_download.sh

                      Abfragen:

                      • What assistant engine are you using?
                        2 (rhasspy)

                      • What's the path to your assistant config file?
                        /home/pi/.config/rhasspy/profiles/de/profile.json

                      • What device do you wish to control with SLC?
                        1 (respeaker2)

                      • What pattern do you want to use?
                        5 (kiboost)

                      • Do you need to install / configure your respeaker2?
                        1 (yes)

                      • sudo raspi-config (SPI Aktivieren)
                        ->5->P4->EXIT

                      • sudo reboot -n

                      • 192.168.0.93:12101 -> Webinterface aufrufen

                      • Use PyAudio (default)
                        Audio Recording -> 2: seees-2mic-vicecard: bcm2825-i2cs...

                      • Save + Restart Rhasspy

                      • Audio Playing
                        Use aplay directly (ALSA)
                        Output Device (default:CARD=ALSA: Default Audio Device)

                      Jetzt muss noch MQTT aktiviert werden und ein WakeWord ausgewählt werden, allerdings scheint der Speaker und der Leuchtring noch nicht zu funktionieren, was wohl daran liegt, dass ich im Webinterface von Rhasspy den Output Device nicht abspeichern kann. Nach dem Neustart steht dieser wieder auf default.

                      default.JPG

                      Kann mir bitte noch jemand den entscheidenden Hinweis geben?

                      Danke und VG
                      Leif

                      joergeliJ Online
                      joergeliJ Online
                      joergeli
                      wrote on last edited by joergeli
                      #223

                      Hallo Leif,

                      das sieht m.E. soweit gut aus.

                      @capitaenz sagte in Rhasspy Offline Sprachsteuerung:

                      sudo docker pull rhasspy/rhasspy:2.5.0-pre

                      docker run -d -p 12101:12101
                      --restart unless-stopped
                      -v "$HOME/.config/rhasspy/profiles:/profiles"
                      --device /dev/snd:/dev/snd
                      synesthesiam/rhasspy-server:latest
                      --user-profiles /profiles
                      --profile de

                      Hier ist aber möglicherweise eine Diskrepanz.
                      "latest" ist die aktuelle stabile Version von Rhasspy ( IMHO V.2.4.19)
                      "rhasspy:2.5.0-pre" ist ein Preview zur kommenden Rhasspy V.2.5 (auch "Voltron" genannt), d.h. sie ist noch nicht als stable definiert. Dennoch läuft sie schon recht stabil und ist momentan die Version, die Thomas und ich verwenden.

                      Deshalb:
                      Stoppe mal Deinen docker-container:
                      1.) docker ps --> docker container anzeigen und Container ID notieren.
                      2.) docker stop <Container ID> --> docker container stoppen.
                      3.) Neuen docker-container wie folgt anlegen/starten:
                      docker run -d -p 12101:12101
                      --restart unless-stopped
                      -v "$HOME/.config/rhasspy/profiles:/profiles"
                      --device /dev/snd:/dev/snd rhasspy/rhasspy:2.5.0-pre
                      --user-profiles /profiles
                      --profile de

                      Soweit, so gut.
                      Zuerst solltest Du dann mal überprüfen, ob Rhasspy überhaupt auf Dein WakeWord, bzw. Micro, reagiert.
                      Dazu im Rhasspy-GUI unter WakeWord "snowboy" aktivieren, mit einer Sensitivity = 0.9, Apply Frontend nicht aktiviert.
                      und unter MQTT "internal" aktivieren.
                      Wenn Du einen Kopfhörer zur Hand hast, diesen mal in die 3,5mm Klinkenbuchse des Raspi einstöpseln.
                      Wenn Du dann das WakeWord "snowboy" sagst, sollten im Kophörer dann "Beeps" zu hören sein, d.h. Micro und WakeWord-Erkennung funktionieren.
                      Du kannst auch im Rhasspy-GUI das Log beobachten, ob sich dort beim Sprechen des WakeWords was tut.

                      Wenn das soweit funktioniert, können wir uns um weitere Probleme kümmern ( nebenbei: aplay steht bei mir auch auf default )

                      Gruß
                      Jörg

                      P.S.
                      Du hast nachträglich Deinen Post editiert: und der Leuchtring
                      Heißt das, das der LED-Ring funktioniert?
                      Du hast als LED-Pattern "kiboost" gewählt, allerdings scheint der 'ne Macke zu haben.
                      Ich verwende als Pattern "projectalice"
                      Du kannst die Konfiguration ändern, wie ich in meinem Post joergeli vom 9. Mai 2020, 20:15 beschrieben habe.

                      1 Reply Last reply
                      0
                      • capitaenzC capitaenz

                        @tobetobe
                        Dank euch aus dem Forum hab ich die Installation jetzt soweit am laufen, aber noch nicht funktionsfähig.
                        Ich habe noch einmal meine Schritte dokumentiert:

                        • Image Flashen mit Win32 DiskImager (Raspian Buster lite)

                        • ssh und wpa_supplicant.conf auf SD-Karte anlegen

                        • sudo apt update

                        • sudo apt full-upgrade

                        • sudo curl -sSL https://get.docker.com | sh

                        • sudo usermod -aG docker pi

                        • sudo reboot -n

                        • sudo docker pull rhasspy/rhasspy:2.5.0-pre

                        • docker run -d -p 12101:12101
                          --restart unless-stopped
                          -v "$HOME/.config/rhasspy/profiles:/profiles"
                          --device /dev/snd:/dev/snd
                          synesthesiam/rhasspy-server:latest
                          --user-profiles /profiles
                          --profile de

                        • sudo wget https://gist.githubusercontent.com/Psychokiller1888/a9826f92c5a3c5d03f34d182fda1ce4c/raw/cbb53252dd55dc4e9f5f6064a493f0981cf133fb/hlc_download.sh

                        • sudo chmod +x hlc_download.sh

                        • sudo ./hlc_download.sh

                        Abfragen:

                        • What assistant engine are you using?
                          2 (rhasspy)

                        • What's the path to your assistant config file?
                          /home/pi/.config/rhasspy/profiles/de/profile.json

                        • What device do you wish to control with SLC?
                          1 (respeaker2)

                        • What pattern do you want to use?
                          5 (kiboost)

                        • Do you need to install / configure your respeaker2?
                          1 (yes)

                        • sudo raspi-config (SPI Aktivieren)
                          ->5->P4->EXIT

                        • sudo reboot -n

                        • 192.168.0.93:12101 -> Webinterface aufrufen

                        • Use PyAudio (default)
                          Audio Recording -> 2: seees-2mic-vicecard: bcm2825-i2cs...

                        • Save + Restart Rhasspy

                        • Audio Playing
                          Use aplay directly (ALSA)
                          Output Device (default:CARD=ALSA: Default Audio Device)

                        Jetzt muss noch MQTT aktiviert werden und ein WakeWord ausgewählt werden, allerdings scheint der Speaker und der Leuchtring noch nicht zu funktionieren, was wohl daran liegt, dass ich im Webinterface von Rhasspy den Output Device nicht abspeichern kann. Nach dem Neustart steht dieser wieder auf default.

                        default.JPG

                        Kann mir bitte noch jemand den entscheidenden Hinweis geben?

                        Danke und VG
                        Leif

                        tobetobeT Offline
                        tobetobeT Offline
                        tobetobe
                        wrote on last edited by tobetobe
                        #224

                        @capitaenz
                        Hallo,

                        das sieht ja alles schon ganz gut aus.

                        @capitaenz said in Rhasspy Offline Sprachsteuerung:

                        Jetzt muss noch MQTT aktiviert werden

                        Ich zweifle gerade, was ich dir empfehlen soll. MQTT ist gerade noch so eine Baustelle in der Version 2.5pre. Am besten, gehst du den sauberen Weg, zu dem Jörg und ich dir auch helfen können.

                        Das bedeutet, dass du dir einen eigenen MQTT-Broker installieren musst. Der kann auf einem anderen Rechner laufen und muss sich nicht auf dem Raspi für den Rhasspy befinden. Kann er aber auch...

                        Nimm zB den Eclipse, den du mit diesem Befehl lädtst:

                        sudo apt update
                        docker pull eclipse-mosquitto
                        

                        Eine Anleitung findest du hier:

                        https://hub.docker.com/_/eclipse-mosquitto
                        

                        Dort siehst du auch, dass noch einige Files anzulegen sind, bevor du den Broker dann starten kannst. Dazu (zu den Files) schicke ich dir gleich noch eine Anleitung.

                        Noch ein Hinweis: Mit dem iobroker-Adapter für mqtt kannst du diesen Broker nicht ersetzen, so funktioniert es nicht!

                        Ich sehe gerade, dass soeben auch Jörg geantwortet hat. Folge zunächst einmal seinen Hinweisen, bevor du dich diesem MQTT-Broker zuwendest. Aber keine Angst, das ist kein Hexenwerk.

                        Als WakeWord würde ich dir zunächst den Standard "Snowboy" empfehlen. Mit dem Herstellen eigener Wakewords solltest du noch warten.

                        Beste Grüße
                        tobetobe

                        1 Reply Last reply
                        0
                        • capitaenzC Offline
                          capitaenzC Offline
                          capitaenz
                          wrote on last edited by capitaenz
                          #225

                          @joergeli @tobetobe
                          Ich danke euch beiden! Mich begeistert dieses Forum, denn hier begegnet man sich auf Augenhöhe.
                          Ich muss aber sagen, ich packe mein Testsystem erstmal wieder zusammen und verfolge weiterhin Rhasspy aufmerksam, denn auch wenn ich Ausdauer besitze (die braucht man bei Hausautomatisierung besonders), ist mir das Ganze noch zu unausgereift.
                          Außerdem hatte ich mir vorgestellt, den Snips-Adapter los zu werden, als ich MQTT gehört hatte.
                          Snips halte ich dann noch eine Weile am Leben und überarbeite das Gehäuse noch einmal:
                          link text

                          Trotzdem Danke und bitte nicht böse sein, die zusammengefassten Infos können bestimmt auch andere noch brauchen.
                          Leif

                          ioBroker auf Synology DS920+ (SSD Raid / 20GB RAM) im VMM

                          tobetobeT 1 Reply Last reply
                          0
                          • capitaenzC capitaenz

                            @tobetobe
                            Dank euch aus dem Forum hab ich die Installation jetzt soweit am laufen, aber noch nicht funktionsfähig.
                            Ich habe noch einmal meine Schritte dokumentiert:

                            • Image Flashen mit Win32 DiskImager (Raspian Buster lite)

                            • ssh und wpa_supplicant.conf auf SD-Karte anlegen

                            • sudo apt update

                            • sudo apt full-upgrade

                            • sudo curl -sSL https://get.docker.com | sh

                            • sudo usermod -aG docker pi

                            • sudo reboot -n

                            • sudo docker pull rhasspy/rhasspy:2.5.0-pre

                            • docker run -d -p 12101:12101
                              --restart unless-stopped
                              -v "$HOME/.config/rhasspy/profiles:/profiles"
                              --device /dev/snd:/dev/snd
                              synesthesiam/rhasspy-server:latest
                              --user-profiles /profiles
                              --profile de

                            • sudo wget https://gist.githubusercontent.com/Psychokiller1888/a9826f92c5a3c5d03f34d182fda1ce4c/raw/cbb53252dd55dc4e9f5f6064a493f0981cf133fb/hlc_download.sh

                            • sudo chmod +x hlc_download.sh

                            • sudo ./hlc_download.sh

                            Abfragen:

                            • What assistant engine are you using?
                              2 (rhasspy)

                            • What's the path to your assistant config file?
                              /home/pi/.config/rhasspy/profiles/de/profile.json

                            • What device do you wish to control with SLC?
                              1 (respeaker2)

                            • What pattern do you want to use?
                              5 (kiboost)

                            • Do you need to install / configure your respeaker2?
                              1 (yes)

                            • sudo raspi-config (SPI Aktivieren)
                              ->5->P4->EXIT

                            • sudo reboot -n

                            • 192.168.0.93:12101 -> Webinterface aufrufen

                            • Use PyAudio (default)
                              Audio Recording -> 2: seees-2mic-vicecard: bcm2825-i2cs...

                            • Save + Restart Rhasspy

                            • Audio Playing
                              Use aplay directly (ALSA)
                              Output Device (default:CARD=ALSA: Default Audio Device)

                            Jetzt muss noch MQTT aktiviert werden und ein WakeWord ausgewählt werden, allerdings scheint der Speaker und der Leuchtring noch nicht zu funktionieren, was wohl daran liegt, dass ich im Webinterface von Rhasspy den Output Device nicht abspeichern kann. Nach dem Neustart steht dieser wieder auf default.

                            default.JPG

                            Kann mir bitte noch jemand den entscheidenden Hinweis geben?

                            Danke und VG
                            Leif

                            tobetobeT Offline
                            tobetobeT Offline
                            tobetobe
                            wrote on last edited by
                            #226

                            @capitaenz

                            Hallo Leif,
                            so, nun nochmals in Fortführung meines vorigen Posts zum Thema MQTT.

                            Ich habe mir unter /opt ein neues Verzeichnis mqtt angelegt. Darin befinden sich:

                            • die Datei mosquitto.conf

                            • die Datei docker-compose.yml, die du dir entspechend editieren musst

                            • und das leere Verzeichnis pwfile

                            Die docker-compose.yml sollte folgenden Inhalt haben:

                            mosquitto:
                              image: eclipse-mosquitto
                              hostname: mqtt-server
                              container_name: mqtt-server
                              restart: unless-stopped
                              ports:
                                - "1883:1883"
                                - "8883:8883"
                              volumes:
                                - /opt/mqtt/mosquitto.conf:/etc/mosquitto/mosquitto.conf
                                - /opt/mqtt/pwfile:/etc/mosquitto/pwfile
                                - /opt/mqtt:/var/lib/mosquitto
                            

                            Wenn deine Datei mosquitto.con diesen Inhalt hat, ist alles OK (Datei habe ich gekürzt):

                            user mosquitto
                            
                            port 1883
                            listener 9001
                            protocol websockets
                            
                            persistence true
                            
                            persistence_location /mqtt/data
                            
                            allow_anonymous false
                            
                            password_file /mqtt/pwfile
                            

                            Nun noch starten, aber bitte die Pfadangabe zur mosquitto.conf vorher anpassen!:

                            $ docker run -it -p 1883:1883 -p 9001:9001 -v mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto
                            

                            Damit läuft dein Broker.

                            In Rhasspy kannst du nun Hermes auf extern setzen und dort IP und Port eintragen, unter denen der Broker erreichbar ist.

                            Nun noch ein mqtt-Adapter im ioBroker installieren und ihn als Client konfigurieren. Dieser Client legt dir dann alle Objekte an, die du mit Skripten abholen und weiter verarbeiten kannst.

                            Beste Grüße
                            tobetobe

                            joergeliJ 1 Reply Last reply
                            0
                            • capitaenzC capitaenz

                              @joergeli @tobetobe
                              Ich danke euch beiden! Mich begeistert dieses Forum, denn hier begegnet man sich auf Augenhöhe.
                              Ich muss aber sagen, ich packe mein Testsystem erstmal wieder zusammen und verfolge weiterhin Rhasspy aufmerksam, denn auch wenn ich Ausdauer besitze (die braucht man bei Hausautomatisierung besonders), ist mir das Ganze noch zu unausgereift.
                              Außerdem hatte ich mir vorgestellt, den Snips-Adapter los zu werden, als ich MQTT gehört hatte.
                              Snips halte ich dann noch eine Weile am Leben und überarbeite das Gehäuse noch einmal:
                              link text

                              Trotzdem Danke und bitte nicht böse sein, die zusammengefassten Infos können bestimmt auch andere noch brauchen.
                              Leif

                              tobetobeT Offline
                              tobetobeT Offline
                              tobetobe
                              wrote on last edited by
                              #227

                              Hallo Leif,

                              schade, aber natürlich kein Problem.

                              @capitaenz said in Rhasspy Offline Sprachsteuerung:

                              das Ganze ist mir noch zu unausgereift.

                              Das kann man so mittlerweile eigentlich nicht mehr sagen. Aber Zeit zum Aufsetzen braucht man natürlich dennoch.

                              @capitaenz said in Rhasspy Offline Sprachsteuerung:

                              Außerdem hatte ich mir vorgestellt den Snips-Adapter los zu werden, als ich MQTT gehört hatte

                              Ja, das ist ja auch so. Den Snips-Adapter brauchst du nicht mehr.

                              Beste Grüße
                              tobetobe

                              1 Reply Last reply
                              0
                              • tobetobeT tobetobe

                                @capitaenz

                                Hallo Leif,
                                so, nun nochmals in Fortführung meines vorigen Posts zum Thema MQTT.

                                Ich habe mir unter /opt ein neues Verzeichnis mqtt angelegt. Darin befinden sich:

                                • die Datei mosquitto.conf

                                • die Datei docker-compose.yml, die du dir entspechend editieren musst

                                • und das leere Verzeichnis pwfile

                                Die docker-compose.yml sollte folgenden Inhalt haben:

                                mosquitto:
                                  image: eclipse-mosquitto
                                  hostname: mqtt-server
                                  container_name: mqtt-server
                                  restart: unless-stopped
                                  ports:
                                    - "1883:1883"
                                    - "8883:8883"
                                  volumes:
                                    - /opt/mqtt/mosquitto.conf:/etc/mosquitto/mosquitto.conf
                                    - /opt/mqtt/pwfile:/etc/mosquitto/pwfile
                                    - /opt/mqtt:/var/lib/mosquitto
                                

                                Wenn deine Datei mosquitto.con diesen Inhalt hat, ist alles OK (Datei habe ich gekürzt):

                                user mosquitto
                                
                                port 1883
                                listener 9001
                                protocol websockets
                                
                                persistence true
                                
                                persistence_location /mqtt/data
                                
                                allow_anonymous false
                                
                                password_file /mqtt/pwfile
                                

                                Nun noch starten, aber bitte die Pfadangabe zur mosquitto.conf vorher anpassen!:

                                $ docker run -it -p 1883:1883 -p 9001:9001 -v mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto
                                

                                Damit läuft dein Broker.

                                In Rhasspy kannst du nun Hermes auf extern setzen und dort IP und Port eintragen, unter denen der Broker erreichbar ist.

                                Nun noch ein mqtt-Adapter im ioBroker installieren und ihn als Client konfigurieren. Dieser Client legt dir dann alle Objekte an, die du mit Skripten abholen und weiter verarbeiten kannst.

                                joergeliJ Online
                                joergeliJ Online
                                joergeli
                                wrote on last edited by
                                #228

                                @tobetobe
                                Hallo Thomas,

                                ist es wirklich nötig, den MQTT so kompliziert aufzusetzen?

                                Ich habe einfach wie hier HermesLEDControl install Mosquitto beschrieben, einen normalen (nicht eclipse) Mosquitto installiert. Da braucht nichts mehr extra konfiguriert werden,
                                nur den mosquitto-service starten und gut ist.

                                Ich finde es ebenfalls schade, daß Leif ausgestiegen ist, obwohl er eigentlich schon rel. weit war.
                                Ich verstehe aber, daß es für einen Rhasspy-Neueinsteiger sehr unübersichtlich ist, sich durch unseren "mehr oder weniger 2er-Chat" mit momentan ca. 220 Posts durchzuwühlen.

                                Vorschlag:
                                Aber das veranlasst mich zu der Überlegung, ob wir nicht mal - in einem eigenen Thread ( Offline-Spracherkennung mit Rhasspy) - eine Schritt-für-Schritt-Anleitung zur Installation/Konfiguration von Rhasspy unter ioBroker erstellen sollten.
                                Dazu sind die Einzelschritte, die @capitaenz weiter oben aufgelistet hat, schon sehr hilfreich.
                                Darin sollte dann aber nur die reine Installation beschrieben werden.

                                Unsere persönlichen Vorlieben bzgl. JS-Auswertung der Intents sollten m.E. aber besser in jeweils eigenen Threads behandelt werden.
                                In etwa so: Rhasspy-Sentences/Slots vorstellen und ebenfalls das zugehörige ioBroker-JS-Auswertescript.

                                Gruß
                                Jörg

                                tobetobeT 1 Reply Last reply
                                0
                                • joergeliJ joergeli

                                  Hallo Thomas,

                                  @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                                  Es interessiert mich noch, ob ich mir den Mosquitto-Broker nicht sogar sparen kann, indem ich direkt auf den internen Broker zugreife, allerdings mit eingetragener IP-Adresse. Ich muss nochmals nachlesen, was du dazu schon geschrieben hattest, bzw andere im Rhasspy-Forum. Oder halt einfach mal testen...

                                  ... das wäre mir auch lieber, und ich hatte es auch schon versucht mit Rhasspy-IP/Port 12183.
                                  Funktioniert aber nicht, da man wohl nicht an den internen MQTT-Server im Docker herankommt?
                                  Habe diesbzgl. auch mal gegoogelt nach " auf MQTT-Server in Docker-Container zugreifen", aber da habe ich nur gefunden, wie man einen MQTT-Broker in einem Docker-Container installieren kann.
                                  Andererseits setzt wohl Hermes Led Control auch einen eigenständigen MQTT-Server voraus.

                                  Wenn man sich die Netzwerkparameter des Rhasspy-Raspis mit ifconfig ansieht, taucht da auch ein eigenständiges Netzwerkinterface namens "docker0" auf. Keine Ahnung, ob man damit was anfangen kann.
                                  Dessen IP-Adresse 172.17.0.1 ist natürlich in meinem 192.168.192.xxx-LAN nicht erreichbar.

                                  pi@voltron:~ $ ifconfig
                                  docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
                                          inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
                                          inet6 fe80::42:e6ff:fe9b:3c5b  prefixlen 64  scopeid 0x20<link>
                                          ether 02:42:e6:9b:3c:5b  txqueuelen 0  (Ethernet)
                                          RX packets 3295954  bytes 2538688841 (2.3 GiB)
                                          RX errors 0  dropped 0  overruns 0  frame 0
                                          TX packets 3287164  bytes 4911703231 (4.5 GiB)
                                          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                                  
                                  eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
                                          ether dc:a6:32:59:af:da  txqueuelen 1000  (Ethernet)
                                          RX packets 0  bytes 0 (0.0 B)
                                          RX errors 0  dropped 0  overruns 0  frame 0
                                          TX packets 0  bytes 0 (0.0 B)
                                          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                                  
                                  lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
                                          inet 127.0.0.1  netmask 255.0.0.0
                                          inet6 ::1  prefixlen 128  scopeid 0x10<host>
                                          loop  txqueuelen 1000  (Lokale Schleife)
                                          RX packets 8740  bytes 684161 (668.1 KiB)
                                          RX errors 0  dropped 0  overruns 0  frame 0
                                          TX packets 8740  bytes 684161 (668.1 KiB)
                                          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                                  
                                  veth09f4fc4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
                                          inet 169.254.198.203  netmask 255.255.0.0  broadcast 169.254.255.255
                                          inet6 fe80::a520:6aa2:cace:e177  prefixlen 64  scopeid 0x20<link>
                                          ether 26:46:35:aa:f2:a2  txqueuelen 0  (Ethernet)
                                          RX packets 3295954  bytes 2584832197 (2.4 GiB)
                                          RX errors 0  dropped 0  overruns 0  frame 0
                                          TX packets 3288284  bytes 4912121058 (4.5 GiB)
                                          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                                  
                                  wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
                                          inet 192.168.192.26  netmask 255.255.255.0  broadcast 192.168.192.255
                                          inet6 fe80::dea6:32ff:fe59:afdb  prefixlen 64  scopeid 0x20<link>
                                          inet6 2002:5fde:1123:0:dea6:32ff:fe59:afdb  prefixlen 64  scopeid 0x0<global>
                                          ether dc:a6:32:59:af:db  txqueuelen 1000  (Ethernet)
                                          RX packets 118339  bytes 12174857 (11.6 MiB)
                                          RX errors 0  dropped 69914  overruns 0  frame 0
                                          TX packets 14616  bytes 8131441 (7.7 MiB)
                                          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                                  
                                  

                                  Nebenbei:
                                  Ich habe mich in der mqtt.1-Client-Instanz jetzt nur noch auf folgende Topics subscribed:
                                  hermes/intent/#, hermes/asr/startListening, hermes/nlu/intentNotRecognized

                                  Das reicht aus, um alle Intents, das WakeWord und Intent-Nicht-Erkannt auszuwerten

                                  Gruß
                                  Jörg

                                  tobetobeT Offline
                                  tobetobeT Offline
                                  tobetobe
                                  wrote on last edited by
                                  #229

                                  @joergeli

                                  Hallo Jörg,
                                  ich habe zwischenzeitlich weiter am Skript gearbeitet. Das sieht nun so aus:

                                  // A - Definitionen
                                  var data
                                  var intentResult = $('mqtt.1.hermes.intent.*');
                                  var intentArray = [];
                                  var intent;
                                  var siteId;
                                  var slot = [];
                                  var slotwert = [];
                                  var wertearray = []; 
                                  
                                  
                                  // B - Initialisierung und Auslesen der Intents beim MQTT-Client
                                  for(var i = 0; i < intentResult.length; i++)
                                  {
                                      log(intentResult[i]);
                                      intentArray.push(intentResult[i]);
                                  }
                                  
                                  // C - Hauptfunktion zum Auslesen der Werte aus den Intents
                                  on({id: intentArray, change: "any"}, function (obj) {
                                      log(obj.newState.val);
                                      let intentObject = JSON.parse(obj.newState.val);
                                      let anzslots = intentObject.slots.length; //Anzahl Slots ermitteln
                                      log("Anzahl Slots:" + anzslots); 
                                      intent = intentObject.intent.intentName;
                                  //    log("intent:" + intent);
                                      siteId = intentObject.siteId;
                                      log("siteID:" + siteId);   
                                   
                                      for (i = 0; i < anzslots; i++) { 
                                          let slot = intentObject.slots[i].slotName+':'+intentObject.slots[i].value.value;
                                          log("slot[" +i + "]:" + slot);
                                          slotwert  = intentObject.slots[i].value.value;
                                          wertearray.push(slotwert); // hier werden nur! die Werte der Slots in ein neues array "wertearray" geschrieben
                                          } // end of for
                                  
                                      log("Ausgabe Werte: " + wertearray[0] + wertearray[2]   + "," + wertearray[1]);
                                      log("Ausgabe Slots: " + slot[0] + slot[2]   + "," + slot[1]);
                                  
                                  
                                  // D - Aufrufen der Funktionen
                                      log("intent:" + intent);
                                      if(intent.includes("Change"))
                                          {    log("intent:" + intent);
                                              changedevice()};     
                                  
                                      if(intent.includes("Set"))
                                          {setdevice()};  
                                  
                                      if(intent.includes("Get"))
                                          {getdevice()};  
                                  
                                      if(intent.includes("Window"))
                                          {controlwindow()};
                                  })
                                  
                                  
                                  // E - Funktionen
                                  function changedevice()
                                  // Change: BlindLevel, DeviceState, DimmerLevel, Temperature
                                      {
                                      if(wertearray[0].includes("milight"))
                                          {        
                                          wertearray[2] = ".state"; 
                                          }
                                      setState(wertearray[0] + wertearray[2] , wertearray[1]);   
                                      log("Ausgabe Werte: " + wertearray[0] + wertearray[2]   + "," + wertearray[1]);  
                                      }
                                  // (weitere Funktionen nicht aufgeführt)
                                  

                                  Beim Testen habe ich festgestellt, dass die Werte nicht an die Funktionen übergeben werden können, wenn sie innerhalb von "C" nur mit "let" gesetzt werden, da sie dann nur lokal, also innerhalb der Funktion On.Id gelten. Aus diesem Grunde habe ich sie als globale Variable an den Skriptanfang gestellt. Das funktioniert auch soweit alles, mit dem kleinen Nachteil, dass die Werte von "wertearray" schon ab dem zweiten Befehl nicht mehr aktualisiert werden. Im Log sieht das dann so aus:

                                  1. Befehl:
                                  script.js.Rhasspy.mqttTest: Anzahl Slots:3
                                  script.js.Rhasspy.mqttTest: siteID:Satellite1
                                  script.js.Rhasspy.mqttTest: slot[0]:device:hm-rpc.0.ABC1234567.1
                                  script.js.Rhasspy.mqttTest: slot[1]:value:50
                                  script.js.Rhasspy.mqttTest: slot[2]:state:.LEVEL
                                  script.js.Rhasspy.mqttTest: Ausgabe Werte: hm-rpc.0.ABC1234567.1.LEVEL,50
                                  script.js.Rhasspy.mqttTest: Ausgabe Slots: undefinedundefined,undefined
                                  script.js.Rhasspy.mqttTest: intent:ChangeDimmerLevel
                                  script.js.Rhasspy.mqttTest: intent:ChangeDimmerLevel
                                  script.js.Rhasspy.mqttTest: setForeignState(id=hm-rpc.0.ABC1234567.1.LEVEL, state=50)
                                  script.js.Rhasspy.mqttTest: Ausgabe Werte: hm-rpc.0.ABC1234567.1.LEVEL,50
                                  

                                  Und nach dem zweiten Befehl:

                                  javascript.0 (30499) script.js.Rhasspy.mqttTest: Anzahl Slots:3
                                  script.js.Rhasspy.mqttTest: siteID:Satellite1
                                  script.js.Rhasspy.mqttTest: slot[0]:device:hm-rpc.0.MEQ8765432.1
                                  script.js.Rhasspy.mqttTest: slot[1]:value:100
                                  script.js.Rhasspy.mqttTest: slot[2]:state:.LEVEL
                                  script.js.Rhasspy.mqttTest: Ausgabe Werte: hm-rpc.0.ABC1234567.1.LEVEL,50
                                  script.js.Rhasspy.mqttTest: Ausgabe Slots: undefinedundefined,undefined
                                  script.js.Rhasspy.mqttTest: intent:ChangeDimmerLevel
                                  script.js.Rhasspy.mqttTest: intent:ChangeDimmerLevel
                                  script.js.Rhasspy.mqttTest: setForeignState(id=hm-rpc.0.ABC1234567.1.LEVEL, state=50)
                                  script.js.Rhasspy.mqttTest: Ausgabe Werte: hm-rpc.0.ABC1234567.1.LEVEL,50
                                  

                                  Da hilft es dann nur, das Skript neu zu starten. Hast du eine Idee, woran das liegen könnte? Wahrscheinlich wie immer ein minimales Syntax-Problem.

                                  Und dann wollte ich dich noch fragen, ob du bereits die Sprachansagen wieder lauffähig hast. Bisher liefen diese ja über die Funktion httpPost(data), müssten jetzt unter 2.5 aber doch über Hermes laufen, richtig?

                                  Beste Grüße
                                  tobetobe

                                  joergeliJ 1 Reply Last reply
                                  0
                                  • joergeliJ joergeli

                                    @tobetobe
                                    Hallo Thomas,

                                    ist es wirklich nötig, den MQTT so kompliziert aufzusetzen?

                                    Ich habe einfach wie hier HermesLEDControl install Mosquitto beschrieben, einen normalen (nicht eclipse) Mosquitto installiert. Da braucht nichts mehr extra konfiguriert werden,
                                    nur den mosquitto-service starten und gut ist.

                                    Ich finde es ebenfalls schade, daß Leif ausgestiegen ist, obwohl er eigentlich schon rel. weit war.
                                    Ich verstehe aber, daß es für einen Rhasspy-Neueinsteiger sehr unübersichtlich ist, sich durch unseren "mehr oder weniger 2er-Chat" mit momentan ca. 220 Posts durchzuwühlen.

                                    Vorschlag:
                                    Aber das veranlasst mich zu der Überlegung, ob wir nicht mal - in einem eigenen Thread ( Offline-Spracherkennung mit Rhasspy) - eine Schritt-für-Schritt-Anleitung zur Installation/Konfiguration von Rhasspy unter ioBroker erstellen sollten.
                                    Dazu sind die Einzelschritte, die @capitaenz weiter oben aufgelistet hat, schon sehr hilfreich.
                                    Darin sollte dann aber nur die reine Installation beschrieben werden.

                                    Unsere persönlichen Vorlieben bzgl. JS-Auswertung der Intents sollten m.E. aber besser in jeweils eigenen Threads behandelt werden.
                                    In etwa so: Rhasspy-Sentences/Slots vorstellen und ebenfalls das zugehörige ioBroker-JS-Auswertescript.

                                    Gruß
                                    Jörg

                                    tobetobeT Offline
                                    tobetobeT Offline
                                    tobetobe
                                    wrote on last edited by
                                    #230

                                    @joergeli said in Rhasspy Offline Sprachsteuerung:

                                    Vorschlag:

                                    Hallo Jörg,

                                    sehr guter Vorschlag. Ich hatte schon die gleiche Idee, weil es immer sehr mühsam ist, neue Interessierte an Bord zu holen, dazu in alten Posts zu kramen, aus denen man sein eigenes Wissen bezog oder dieses Wissen aus dem Gedächtnis hervorzuholen, unterstützt mit Recherchen im eigenen Filesystem, um dann letztlich das, was man schon einmal geschrieben hat, nochmal zu "Papier" zu bringen.

                                    Ich denke, dir geht es genau so???

                                    Die thematische Aufteilung finde ich gut, also zunächst die Installation, dann die Konfiguration der Sentences und Slots (schon da gibt es ja Alternativen) und dann letztlich die Verarbeitung mit JS.

                                    Ich würde vorschlagen, dass wir uns zunächst im Grundsatz zum Vorgehen abstimmen. Entwürfe per Mail austauschen und erst abgestimmte Ergebnisse posten. So sollte das Ganze dann doch einen runden Eindruck machen.

                                    Gruß
                                    Thomas

                                    Beste Grüße
                                    tobetobe

                                    1 Reply Last reply
                                    0
                                    • tobetobeT tobetobe

                                      @joergeli

                                      Hallo Jörg,
                                      ich habe zwischenzeitlich weiter am Skript gearbeitet. Das sieht nun so aus:

                                      // A - Definitionen
                                      var data
                                      var intentResult = $('mqtt.1.hermes.intent.*');
                                      var intentArray = [];
                                      var intent;
                                      var siteId;
                                      var slot = [];
                                      var slotwert = [];
                                      var wertearray = []; 
                                      
                                      
                                      // B - Initialisierung und Auslesen der Intents beim MQTT-Client
                                      for(var i = 0; i < intentResult.length; i++)
                                      {
                                          log(intentResult[i]);
                                          intentArray.push(intentResult[i]);
                                      }
                                      
                                      // C - Hauptfunktion zum Auslesen der Werte aus den Intents
                                      on({id: intentArray, change: "any"}, function (obj) {
                                          log(obj.newState.val);
                                          let intentObject = JSON.parse(obj.newState.val);
                                          let anzslots = intentObject.slots.length; //Anzahl Slots ermitteln
                                          log("Anzahl Slots:" + anzslots); 
                                          intent = intentObject.intent.intentName;
                                      //    log("intent:" + intent);
                                          siteId = intentObject.siteId;
                                          log("siteID:" + siteId);   
                                       
                                          for (i = 0; i < anzslots; i++) { 
                                              let slot = intentObject.slots[i].slotName+':'+intentObject.slots[i].value.value;
                                              log("slot[" +i + "]:" + slot);
                                              slotwert  = intentObject.slots[i].value.value;
                                              wertearray.push(slotwert); // hier werden nur! die Werte der Slots in ein neues array "wertearray" geschrieben
                                              } // end of for
                                      
                                          log("Ausgabe Werte: " + wertearray[0] + wertearray[2]   + "," + wertearray[1]);
                                          log("Ausgabe Slots: " + slot[0] + slot[2]   + "," + slot[1]);
                                      
                                      
                                      // D - Aufrufen der Funktionen
                                          log("intent:" + intent);
                                          if(intent.includes("Change"))
                                              {    log("intent:" + intent);
                                                  changedevice()};     
                                      
                                          if(intent.includes("Set"))
                                              {setdevice()};  
                                      
                                          if(intent.includes("Get"))
                                              {getdevice()};  
                                      
                                          if(intent.includes("Window"))
                                              {controlwindow()};
                                      })
                                      
                                      
                                      // E - Funktionen
                                      function changedevice()
                                      // Change: BlindLevel, DeviceState, DimmerLevel, Temperature
                                          {
                                          if(wertearray[0].includes("milight"))
                                              {        
                                              wertearray[2] = ".state"; 
                                              }
                                          setState(wertearray[0] + wertearray[2] , wertearray[1]);   
                                          log("Ausgabe Werte: " + wertearray[0] + wertearray[2]   + "," + wertearray[1]);  
                                          }
                                      // (weitere Funktionen nicht aufgeführt)
                                      

                                      Beim Testen habe ich festgestellt, dass die Werte nicht an die Funktionen übergeben werden können, wenn sie innerhalb von "C" nur mit "let" gesetzt werden, da sie dann nur lokal, also innerhalb der Funktion On.Id gelten. Aus diesem Grunde habe ich sie als globale Variable an den Skriptanfang gestellt. Das funktioniert auch soweit alles, mit dem kleinen Nachteil, dass die Werte von "wertearray" schon ab dem zweiten Befehl nicht mehr aktualisiert werden. Im Log sieht das dann so aus:

                                      1. Befehl:
                                      script.js.Rhasspy.mqttTest: Anzahl Slots:3
                                      script.js.Rhasspy.mqttTest: siteID:Satellite1
                                      script.js.Rhasspy.mqttTest: slot[0]:device:hm-rpc.0.ABC1234567.1
                                      script.js.Rhasspy.mqttTest: slot[1]:value:50
                                      script.js.Rhasspy.mqttTest: slot[2]:state:.LEVEL
                                      script.js.Rhasspy.mqttTest: Ausgabe Werte: hm-rpc.0.ABC1234567.1.LEVEL,50
                                      script.js.Rhasspy.mqttTest: Ausgabe Slots: undefinedundefined,undefined
                                      script.js.Rhasspy.mqttTest: intent:ChangeDimmerLevel
                                      script.js.Rhasspy.mqttTest: intent:ChangeDimmerLevel
                                      script.js.Rhasspy.mqttTest: setForeignState(id=hm-rpc.0.ABC1234567.1.LEVEL, state=50)
                                      script.js.Rhasspy.mqttTest: Ausgabe Werte: hm-rpc.0.ABC1234567.1.LEVEL,50
                                      

                                      Und nach dem zweiten Befehl:

                                      javascript.0 (30499) script.js.Rhasspy.mqttTest: Anzahl Slots:3
                                      script.js.Rhasspy.mqttTest: siteID:Satellite1
                                      script.js.Rhasspy.mqttTest: slot[0]:device:hm-rpc.0.MEQ8765432.1
                                      script.js.Rhasspy.mqttTest: slot[1]:value:100
                                      script.js.Rhasspy.mqttTest: slot[2]:state:.LEVEL
                                      script.js.Rhasspy.mqttTest: Ausgabe Werte: hm-rpc.0.ABC1234567.1.LEVEL,50
                                      script.js.Rhasspy.mqttTest: Ausgabe Slots: undefinedundefined,undefined
                                      script.js.Rhasspy.mqttTest: intent:ChangeDimmerLevel
                                      script.js.Rhasspy.mqttTest: intent:ChangeDimmerLevel
                                      script.js.Rhasspy.mqttTest: setForeignState(id=hm-rpc.0.ABC1234567.1.LEVEL, state=50)
                                      script.js.Rhasspy.mqttTest: Ausgabe Werte: hm-rpc.0.ABC1234567.1.LEVEL,50
                                      

                                      Da hilft es dann nur, das Skript neu zu starten. Hast du eine Idee, woran das liegen könnte? Wahrscheinlich wie immer ein minimales Syntax-Problem.

                                      Und dann wollte ich dich noch fragen, ob du bereits die Sprachansagen wieder lauffähig hast. Bisher liefen diese ja über die Funktion httpPost(data), müssten jetzt unter 2.5 aber doch über Hermes laufen, richtig?

                                      joergeliJ Online
                                      joergeliJ Online
                                      joergeli
                                      wrote on last edited by
                                      #231

                                      @tobetobe
                                      Hallo Thomas,

                                      wenn ich das richtig interpretiere, werden die slots jetzt nicht mehr aktualisiert.
                                      Ich nehme an, das hängt damit zusammen, daß Du die

                                      var slot = [];
                                      var slotwert = [];
                                      var wertearray = [];
                                      

                                      an den Anfang des Scriptes gesetzt hast, wo sie ja nur beim erstmaligen Starten des Scriptes ausgeführt werden.
                                      Diese Angaben definieren ja nicht nur die Arrays, sondern löschen innerhalb der Schleife die Inhalte der Arrays, sprich:
                                      sie machen sie leer.
                                      IMHO müssen die wieder in die Schleife.
                                      Wie die Werte dann an die Funktionen übergeben werden können, blicke ich im Moment auch noch nicht.

                                      Sprachansage funktioniert bei mir - wie bisher auch - über die Funktion httpPost(data)

                                      let http = require('http');
                                      
                                      
                                      // Für Sprachausgabe auf Rhasspy
                                      let options = {
                                          host: '192.168.192.26', //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.write(data);
                                      
                                          req.end();
                                      }
                                      
                                      //______________________________________________________________________________
                                      

                                      Beispiel-Ausgabe für WakeWord:

                                      function wakeword(){
                                          let data = "ja?" ;
                                          httpPost(data);
                                      }
                                      
                                      tobetobeT 1 Reply Last reply
                                      0
                                      • joergeliJ joergeli

                                        @tobetobe
                                        Hallo Thomas,

                                        wenn ich das richtig interpretiere, werden die slots jetzt nicht mehr aktualisiert.
                                        Ich nehme an, das hängt damit zusammen, daß Du die

                                        var slot = [];
                                        var slotwert = [];
                                        var wertearray = [];
                                        

                                        an den Anfang des Scriptes gesetzt hast, wo sie ja nur beim erstmaligen Starten des Scriptes ausgeführt werden.
                                        Diese Angaben definieren ja nicht nur die Arrays, sondern löschen innerhalb der Schleife die Inhalte der Arrays, sprich:
                                        sie machen sie leer.
                                        IMHO müssen die wieder in die Schleife.
                                        Wie die Werte dann an die Funktionen übergeben werden können, blicke ich im Moment auch noch nicht.

                                        Sprachansage funktioniert bei mir - wie bisher auch - über die Funktion httpPost(data)

                                        let http = require('http');
                                        
                                        
                                        // Für Sprachausgabe auf Rhasspy
                                        let options = {
                                            host: '192.168.192.26', //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.write(data);
                                        
                                            req.end();
                                        }
                                        
                                        //______________________________________________________________________________
                                        

                                        Beispiel-Ausgabe für WakeWord:

                                        function wakeword(){
                                            let data = "ja?" ;
                                            httpPost(data);
                                        }
                                        
                                        tobetobeT Offline
                                        tobetobeT Offline
                                        tobetobe
                                        wrote on last edited by
                                        #232

                                        @joergeli

                                        Hallo Jörg,

                                        dies ist der Datenpunkt für TTS:

                                        mqtt.1.hermes.tts.say
                                        

                                        Ich konnte dort Text hinschicken, der aber nicht am Rhasspy-Lautsprecher ausgegeben wurde. Dazu ist wohl noch eine längere Auseinandersetzung mit dem Thema erforderlich.

                                        Solange bleibte also erst einmal bei deinem Skript

                                        Gruß
                                        Thomas

                                        Beste Grüße
                                        tobetobe

                                        joergeliJ 1 Reply Last reply
                                        0
                                        • capitaenzC Offline
                                          capitaenzC Offline
                                          capitaenz
                                          wrote on last edited by capitaenz
                                          #233

                                          @joergeli

                                          Ich habe mich ausgeruht noch einmal dran gesetzt, frei nach dem Motto: so schwer/blöd kann das/man doch nicht sein.
                                          Also der Fehler war folgender:
                                          Zum Test darf der MQTT nicht auf Extern stehen, ansonsten bekommt man kein Feedback.
                                          Dann weiß ich nicht genau wie wichtig es ist folgendes abzuschalten:

                                          sudo nano /boot/config.txt // onboard Sound deaktivieren
                                          Turn dtparam=audio parameter to off: dtparam=audio=off
                                          

                                          gefolgt von einem

                                          sudo reboot -n
                                          

                                          Die eigenen Ohren (und die Katze) danken einem folgendes:

                                          sudo alsamixer
                                          
                                          sudo alsactl store
                                          

                                          Allerdings kann ich machen was ich will, nach einen Reboot ist die Laustärke wieder auf 100%

                                          Jetzt kommt aber das eigentlich Problem:
                                          MQTT

                                          Ich habe jetzt wie von dir @joergeli empfohlen folgendes ausgeführt und installiert:

                                          sudo apt update
                                          
                                          sudo apt install -y mosquitto mosquitto-clients
                                          
                                          sudo systemctl enable mosquitto.service
                                          
                                          sudo systemctl start mosquitto
                                          

                                          Wenn ich jetzt jedoch den MQTT auf Extern schalte, kommt beim ioBroker nichts an und der Lautsprecher vom Rhasspy bleibt stumm...
                                          Es muss doch möglich sein, ohne besondere Ansprüche, wie bei Snips die erkannten Worte in den ioBroker zu bekommen.

                                          Neugierig bleibe ich, weil wer weiß wie lange Snips noch macht, Stichwort Adapter...

                                          VG
                                          Leif

                                          ioBroker auf Synology DS920+ (SSD Raid / 20GB RAM) im VMM

                                          joergeliJ 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          129

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe