Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Off Topic
  4. Rhasspy Offline Sprachsteuerung

NEWS

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

Rhasspy Offline Sprachsteuerung

Geplant Angeheftet Gesperrt Verschoben Off Topic
403 Beiträge 30 Kommentatoren 100.5k Aufrufe 47 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • tobetobeT tobetobe

    @joergeli

    Hallo Jörg, zum Umgang von Rhasspy mit Hintergrundgeräuschen würde ich dir raten, diese Frage direkt an das Entwicklerteam bzw an die Community zu stellen. Die müssten sich doch eigentlich schon aus eigenem Interesse heraus mit dieser Thematik befassen. Vielleicht gibt es hierzu ja schon Lösungsvorschläge, wie das Verhalten optimiert werden kann. Hier nochmals der Link zur Community: https://community.rhasspy.org/

    Viele Grüße
    Thomas

    joergeliJ Online
    joergeliJ Online
    joergeli
    schrieb am zuletzt editiert von joergeli
    #21

    @tobetobe
    Hallo Thomas,
    ich habe enen Erfolg mit einem Workaround zu vermelden :expressionless:
    Ich hatte gestern meinen Raspi kpl. neu mit Rhasspy (V 2.7.!4) aufgesetzt, weil ich zwischenzeitlich schon so viel probiert/installiert habe, um die Onboard-LEDs zum Laufen zu bringen, daß ich mir gedacht habe, "alles neu macht der Mai" ;-)
    Mir sind aber in der neuen Version - zumindest vom Web-Frontend - keine Änderungen aufgefallen.

    Ich wollte aber unbedingt eine optische/akustische Rückmeldung haben, wenn Rhasspy das WakeWord erkannt hat, aber mit Kophörer ist das ja nicht das "Gelbe vom Ei".

    Also habe ich in den Objekten der MQTT-Instanz auf dem iobroker gesucht und bin auch fündig geworden:
    Es gibt dort zwei Objekte ( mqtt.0.rhasspy.de.transition.SnowboyWakeListener und mqtt.0.rhasspy.de.transition.WebrtcvadCommandListener )
    Das erste Objekt wechselt vom State "listening" auf "loaded", wenn das Snowboy-WakeWord erkannt wurde.
    Das zweite Objekt wechselt vom State "listening" auf "loaded", wenn das Sprachkommando erkannt wurde.

    Diese beiden States habe ich mir mit einem JS zu Nutze gemacht, um via PAW-Adapter eine Ansage ("Ja") auf meinem Tablet zu machen, wenn das Wakeword erkannt wurde ( Längere Ansagen, wie z.B. "zu Diensten", funktionieren nicht, da Rhasspy dann schon im Erkennungsmodus ist und das "....iensten" schon zum Sprachbefehl addiert).
    Wenn der Sprachbefehl erkannt wurde "sagt" das Tablet "OK".
    Also: Ich sage mein WakeWord "Hiwi", Tablet antwortet mit "Ja", dann sage ich den Sprachbefehl", wie z.B. "Wie spät ist es" und das Tablet antwortet mit "OK".
    Nach einem kurzem Moment sagt mir mein Tablet dann die aktuelle Uhrzeit, (die ich ebenfalls mit JS generiere).
    Anbei das "WakeWord-Script", falls es jemand gebrauchen kann:

    //###############################################
    // WakeWord-Erkennung
    const ansage =  'Ja'    // Dieser Text wird gesprochent, wenn wakeword erkannt wurde
    // Hinweis:  - Ansagetext text muss mögl. kurz sein, damit er nicht als befehl erkannt wird!
    const empf_ok = "OK"    // Dieser Text wird gesprochen, wenn befehl erkannt wurde
    const wake   = 'mqtt.0.rhasspy.de.transition.SnowboyWakeListener'      // Datenpunkt aendert sich von listening auf loaded, wenn wakeword erkannt wurde
    const befehl = 'mqtt.0.rhasspy.de.transition.WebrtcvadCommandListener' // Datenpunkt aendert sich von listening auf loaded, wenn befehl erkannt erkannt wurde
    
    on({id: wake, change: "any"},function(obj) {
        let empf_code = getState(wake).val ;
        if (empf_code== "loaded"){  wakeword();  }    
    });
    
    on({id: befehl, change: "any"},function(obj) {
        let empf_code = getState(befehl).val ;
        if (empf_code== "loaded"){  befehl_empf(); }    
    });
    
    function wakeword(){
        lautstaerke(); // Lautstaerke auf Max setzen
        sendTo("paw.0",'Tablet_Jörg',{tts: ansage  }); // Sprachausgabe "Ja" mittels PAW-Adapter auf Tablet/Smartphone
        //sendTo("paw.0",'Tablet_Jörg',{play: true});  // optional default sound anstatt sprachausgabe mittels mittels PAW-Adapter auf Tablet/Smartphone abspielen
    }
    
    function befehl_empf(){ 
        lautstaerke(); // Lautstaerke auf Max setzen
        sendTo("paw.0",'Tablet_Jörg',{tts: empf_ok  }); // Sprachausgabe "OK" mittels PAW-Adapter auf Tablet/Smartphone
        //sendTo("paw.0",'Tablet_Jörg',{play: true});   // optional default sound anstatt sprachausgabe mittels PAW-Adapter auf Tablet/Smartphone abspielen
    }
    
    // Lautstaerke von Tablet/Smartphone auf Maximum setzen
    function lautstaerke(){ 
        sendTo("paw.0",'all',{volume: 15});
    }
    
    // Ende WakeWord-ErkennungsScript
    //###############################################
    

    Mein zweites Problem mit der Geräuschunterdrückung habe ich (vor ca. 1 Std. ;-) ) endlich ebenfalls ganz gut in den Griff bekommen:
    Ich hatte/habe in den Settings bei Voice Detection die Einstellung Use webrtcvad and listen for silence gewählt, bzw. diese ist per Default vorgegeben.
    Dann habe ich in der Rhaspy-Docu im Abschnitt "Command Listener" diesen Hinweis gefunden:

    WebRTCVAD
    Listens for a voice commands using webrtcvad to detect speech and silence.
    Add to your profile:

    "command": {
      "system": "webrtcvad",
      "webrtcvad": {
        "chunk_size": 960,
        "min_sec": 2,
        "sample_rate": 16000,
        "silence_sec": 0.5,
        "speech_buffers": 5,
        "throwaway_buffers": 10,
        "timeout_sec": 30,
        "vad_mode": 0
      }
    }
    

    Das habe ich über den Advanced-Tab von Rhasspy in mein Profil eingefügt, aber den Parameter "timeout_sec": 30 auf "timeout_sec": 1 geändert.
    Was soll ich sagen, momentan dudelt im Hintergrund das Radio und Rhasspy versteht mich jetzt trotzdem :grinning: ... da kommt Freude auf !!!

    Vielen Dank auch für Deine Mühe, mir bei den LEDs zu helfen, den Link zu den Seed-Python-Scripten hatte ich auch bereits vorher gefunden, habe es aber trotzdem "nur" halb zum Laufen bekommen.
    "Halb" heißt, wenn ich den Docker-Container mit Rasspy gelöscht habe, liefen die Scripte und die LEDs drehten sich bunt im Kreis. Sowie ich den Docker-Container aber neu gestartet habe, liefen sie nicht mehr, weil die Seed 4 Mic-Karte bereits von Rhasspy belegt war.
    Egal, mit meiner jetzigen Lösung mit der akustischen WakeWord-Signalisierung per Tablet/Smartphone kann ich leben.

    Deinen Link zum Mikrofon-Vergleich finde ich sehr interessant.
    Bei Hintergrundmusik schneidet das PlayStation Eye-Micro bei der Wakeword-Erkennung am Besten ab, wobei das Respeaker-Mic bei Ruhe und weßem Rauschen die besten Ergebnisse bring, aber bei Hintergrundmusik "in den Keller" geht - wie ich ja selbst erfahren musste.

    Danke nochmals
    Jörg

    1 Antwort Letzte Antwort
    1
    • T Offline
      T Offline
      Tictactoo
      schrieb am zuletzt editiert von
      #22

      Moin moin zusammen,

      @joergeli Das mit dem Timeout werd ich mir auf jeden Fall merken und auch mal testen. Wenn das des Rätsels Lösung ist, wäre das ja klasse! Ich denke, dass ich mich diese Woche mal mit der Rückführung von Antworttexten an den Rhasspy beschäftige. Ich halte euch gern auf dem Laufenden!

      Ich habe das Skript zum generieren der Slots für meinen Intent-Handler inzwischen erweitert, so dass auch Rooms und Functions generiert werden:

      var devices = $('zigbee.0.*.available');
      
      var devicesMessage = "\"device_name\": [";
      for(var i = 0; i < devices.length; i++)
      {
         var tempObj = getObject(devices[i].replace('.available',''));
         devicesMessage += "\"" + tempObj.common.name + ":" + tempObj._id;
         
         if(i == devices.length-1)
         {
             devicesMessage += "\"";
         }
         else
         {
             devicesMessage += "\",";
         }
      }
      devicesMessage += "]"
      
      sendTo('mqtt.0', 'sendMessage2Client', {topic: '/rhasspy/slots/devices', message: devicesMessage});
      
      
      var rooms = getEnums('rooms');
      
      var roomsMessage = "\"room_name\": [";
      for(var i = 0; i < rooms.length; i++)
      {
         roomsMessage += "\"" + rooms[i].name.de + ":" + rooms[i].id;
      
         if(i == rooms.length-1)
         {
             roomsMessage += "\"";
         }
         else
         {
             roomsMessage += "\",";
         }
      }
      roomsMessage += "]"
      sendTo('mqtt.0', 'sendMessage2Client', {topic: '/rhasspy/slots/rooms', message: roomsMessage});
      
      
      var functions = getEnums('functions');
      
      var functionsMessage = "\"function_name\": [";
      for(var i = 0; i < functions.length; i++)
      {
         functionsMessage += "\"" + functions[i].name.de + ":" + functions[i].id;
      
         if(i == rooms.length-1)
         {
             functionsMessage += "\"";
         }
         else
         {
             functionsMessage += "\",";
         }
      }
      functionsMessage += "]"
      sendTo('mqtt.0', 'sendMessage2Client', {topic: '/rhasspy/slots/functions', message: functionsMessage});
      

      Wenn man das entsprechende Topic mit einem MQTT Programm abonniert, kann man zumindest mal die Slots per CP in Rhasspy einfügen, bis ich ein Skript für das automatische Schreiben geschrieben habe. Bei mir hat es im Test mit den vielen Geräten ziemlich gut funktioniert. Falls ihr die Muse habe es mal zu testen, wäre ich für euer Feedback dankbar. Solltet ihr btw noch Ideen haben, wie man den Intent-Handler sinnvoll erweitern kann, schreibt es mir gern, dann schreibe ich da mal was zusammen.

      1 Antwort Letzte Antwort
      0
      • tobetobeT Offline
        tobetobeT Offline
        tobetobe
        schrieb am zuletzt editiert von
        #23

        Hallo zusammen,
        vielen Dank für eure super Beiträge. Berufsbedingt werde ich in dieser und der nächsten Woche eure Beiträge nur lesen, aber nicht testen können. Daher kurz mein aktueller Stand der Dinge.

        @Tictactoo: Deine Slots und Sentences habe ich wie vorgeschlagen umgesetzt. Dabei bin ich sogar noch einen Schritt weiter gegangen, und habe die Sentences für Dimmer und Blinds von der Syntax her exakt so aufgebaut, wie du es für die Zustände der Lampen, die man nue ein/aussschalten kann, beschriebene hast. Allerdings mit dem Level (0..100).

        Das funktioniert im Prinzip, außer dass der Zustand "0 Prozent" nicht angenommen wird. Hier müstte ich dein Skript dahingehend anpassen, dass ich auch einfach ein/an/aus sagen könnte. Das muss ich mir noch anschauen.

        Dein Script für den Import der Devices finde ich extrem interessant. Leider keine Zeit bzw, nur ganz wenig Zeit zum Testen...

        @joergeli : Deinen Hinweis zu WebRTCVAD habe ich noch versucht zu implementieren. Leider ist diese Ergänzung im Profil bei mir immer wieder verschwunden. Ich musste auf dem Rhasspy-Raspi runter ins Directory ~/.config/rhasspy/profiles/de $ und die Datei profile.json direkt editieren. Nun habe ich keine Zeit mehr zum Testen...

        Dein Wake Word Script finde ich super cool. Auch hier gilt leider: keine Zeit bzw. ganz wenig Zeit zum Testen...

        Von daher wünsche ich weiter gutes Gelingen. Ich werde eure Beiträge verfolgen und mich, sofern ich Zeit habe, mal einklinken.

        Beste Grüße
        tobetobe

        1 Antwort Letzte Antwort
        0
        • tobetobeT Offline
          tobetobeT Offline
          tobetobe
          schrieb am zuletzt editiert von
          #24

          Nochmals hallo,

          falls ihr eure LEDs vom Mikro ansteuern wollt, gibt es hier die entsprechenden Anweisungen - und zwar passend zu Rhasspy, nichts allgemeines. Liest sich interessant, denn sowohl das ReSpeaker, wie auch mein MatrixVoic Mic werden unterstützt.

          https://community.rhasspy.org/t/hermesledcontrol/285
          https://github.com/project-alice-assistant/HermesLedControl/wiki/Intro

          Beste Grüße
          tobetobe

          joergeliJ 1 Antwort Letzte Antwort
          0
          • tobetobeT tobetobe

            Nochmals hallo,

            falls ihr eure LEDs vom Mikro ansteuern wollt, gibt es hier die entsprechenden Anweisungen - und zwar passend zu Rhasspy, nichts allgemeines. Liest sich interessant, denn sowohl das ReSpeaker, wie auch mein MatrixVoic Mic werden unterstützt.

            https://community.rhasspy.org/t/hermesledcontrol/285
            https://github.com/project-alice-assistant/HermesLedControl/wiki/Intro

            joergeliJ Online
            joergeliJ Online
            joergeli
            schrieb am zuletzt editiert von
            #25

            @tobetobe und andere Interessierte:
            ich habe mich gleich auf den HermesLedControl-Link gestürzt
            und die Installation von Hermes LED Control gestartet. Während der Installation wurde nach der gewünschten engine gefragt, die ich mit "rhasspy" angegeben habe - wurde aber bemängelt, es ging aber trotzdem weiter mit der Frage, welche Hardware verwendet wird. Habe ich mit "respeaker4" beantwortet. Danach wurde gefragt, ob die Hardware konfiguriert werden soll -> mit "Ja" beantwortet, weil es "strongly recommended", also empfohlen wurde.
            War m.E, nicht unbedingt notwendig, weil ich die Treiber ja vorher schon direkt von Seed installiert hatte.
            Aber egal, hat dann ein Weilchen gedauert, bis die Treiber (und sonstiges?) für das ReSpeaker4-Mic installiert waren.

            Nach Fertigstellung der Installation habe ich - wie beschrieben - den pathToConfig angepasst:

            sudo systemctl stop hermesledcontrol
            sudo nano /etc/systemd/system/hermesledcontrol.service
            sudo systemctl daemon-reload
            sudo systemctl start hermesledcontrol
            

            Die hermesledcontrol.service sah dann so aus:

            [Unit]
            Description=Hermes Led Control
            
            [Service]
            WorkingDirectory=/home/pi/hermesLedControl_v2.0.3
            ExecStart=/home/pi/hermesLedControl_v2.0.3/venv/bin/python3 main.py --engine=rhasspy --pathToConfig=/home/pi/.config/rhasspy/profiles/de/profile.json --hardware=respeaker4 --pattern=kiboost --mqttServer=192.168.192.29 --mqttPort=1891
            
            Restart=always
            RestartSec=5
            User=pi
            
            [Install]
            WantedBy=multi-user.target
            

            Ich habe dort zusätzlich die IP des ioBroker-Raspi, bzw. des MQTT-Brokers und den Port eingetragen (den Port hatte ich geändert, weil auf dem ioBroker-Raspi noch ein Mosquitto-Broker läuft, der den Standardport 1883 belegt)
            Nach daemon-reload und start hermesledcontrol leuchtete dann der LED-Ring mit dem kiboost-Pattern auf.
            Habe das dann auch mal den anderen Pattern (google, alexa, etc.) probiert - geht auch.

            Jetzt kommt aber das "aaaaber":
            Ich habe mit

            ./venv/bin/python3 main.py --debug=True
            

            versucht den Debug-Modus zu aktieren, was mit Fehlermeldung quittiert wurde, Screenshot:
            debug-mode.jpg

            Dann habe ich mir noch unter /home/pi/hermesLedControl_v2.0.3 das logs.log angesehen, was m.E. "ganz gut" ausgesehen hat:

            2020-01-29 22:16:26,867 [MainThread] - [INFO] - Starting Hermes Led Control v. 2.0.3
            2020-01-29 22:16:26,878 [MainThread] - [INFO] - Initializing HermesLedControl
            2020-01-29 22:16:26,907 [MainThread] - [INFO] - Initializing Rhasspy settings
            2020-01-29 22:16:26,908 [MainThread] - [INFO] - Loading configurations
            2020-01-29 22:16:26,910 [MainThread] - [INFO] - Loaded 12 hardware references
            2020-01-29 22:16:26,910 [MainThread] - [INFO] - - Mqtt server set to 192.168.192.29
            2020-01-29 22:16:26,911 [MainThread] - [INFO] - - Mqtt port set to 1891
            2020-01-29 22:16:26,912 [MainThread] - [INFO] - - Client id set to default
            2020-01-29 22:16:26,912 [MainThread] - [INFO] - - Hardware set to ReSpeaker 4
            2020-01-29 22:16:26,913 [MainThread] - [INFO] - - Using alexa as pattern with 12 leds
            2020-01-29 22:16:26,913 [MainThread] - [INFO] - Initializing leds controller
            2020-01-29 22:16:27,053 [MainThread] - [INFO] - Hermes Led Control started
            
            

            Anschließend habe ich mir noch in der iobroker mqtt-Instanz die Objekte/Topics bzgl. Hermes angesehen, die ja von Hermes LED Control genutzt werden sollen. Die wurden auch alle wie beschrieben angelegt, siehe Screenshots;
            mqtt-hermes1.jpg mqtt-hermes2.jpg
            Jetzt stehe ich aber auf dem Schlauch, wie ich damit die LEDs steuern kann.
            Ich habe ein wenig in den Settings von Rhasspy rumgespielt, z.B. unter VoiceDetection
            Use MQTT (Hermes protocol)
            Rhasspy will listen for hermes/asr/startListening und hermes/asr/stopListening

            aktiviert und anschl. in den Datenpunkten/Topics Fantasie-Werte eingetragen, in der Hoffnung, daß dann irgendwelche LEDs leuchten, aber es tut sich nichts (habe anschl. wieder auf Use webrtcvad and listen for silence zurückgestellt, weil ja sonst das Micro tot ist.)
            Nachdem ich jetzt damit 1,5 Tage herumgedoktort habe, weiß ich nicht mehr weiter.

            Falls jemand trotzdem Zeit und Muße hat, das auszuprobieren, könnt ihr ja mal berichten, wie es bei euch gelaufen ist.
            Evtl. sehe ich ja den Wald vor lauter Bäumen nicht.

            Gruß
            Jörg

            P.S.
            @tobetobe
            Das mit dem WebRTCVAD habe ich auch direkt im profile.json editiert.
            Muß aber wohl etwas zurückrudern, der Timeout bewirkt m.E nur, daß die Erkennungszeit verkürzt wird, die sonst mit Hintergrundmusik/Geräuschen ziemlich lang war.
            Meine Sprachbefehle / Intents werden meistens auch gut erkannt, aber manchmal wird auch ein kpl. anderes Intent geschaltet. Habe auch schon versucht, das mit wiederholtem trainieren der Sentences zu verbessern, es kommen aber doch noch "Fehl-Intents" rein. Bei Totenstille funktioniert das rel. gut, aber bei Hintergrundgeräuschen häufen sich die Fehler.

            1 Antwort Letzte Antwort
            0
            • tobetobeT Offline
              tobetobeT Offline
              tobetobe
              schrieb am zuletzt editiert von
              #26

              @Tictactoo
              Hallo Tictactoo, ich hatte kurz Zeit, dein Skript zum Auslesen der ENUMs zu installieren und zu testen. Den Pfad zu meinen Devices habe ich auf

              var devices = $('hm-rpc.0.*.LEVEL');
              

              gesetzt und dein nachfolgendes ".available" ebenfalls auf ".LEVEL" gesetzt. LEVEL ist bei mir der Datenpunkt von dimmbaren Lampen. STATE hingegen ist der Datenpunkt zum Ein-/Ausschalten von statischen Lampen. Das Skript wird dann mit ".LEVEL" auch korrekt gestartet. Verwende ich stattdessen jedoch STATE, stoppt das Skript mit Fehlercode 889 bei Zeile 15/37.

              Aber auch bei korrektem Start mit LEVEL werden bei mqtt.0 keine Daten erzeugt. Ich nehme an, 'sendMessage2Client' ist der mqtt-Datenpunkt über den RHasspy die ENUMs und Devices bekommt, richtig? Wurde dieser Datenpunkt bei dir automatisch generiert, oder muss er manuell angelegt werden? (Komme leider nicht mehr dazu, das selbst zu testen)

              Viele Grüße
              Thomas

              Beste Grüße
              tobetobe

              T 1 Antwort Letzte Antwort
              0
              • tobetobeT tobetobe

                @Tictactoo
                Hallo Tictactoo, ich hatte kurz Zeit, dein Skript zum Auslesen der ENUMs zu installieren und zu testen. Den Pfad zu meinen Devices habe ich auf

                var devices = $('hm-rpc.0.*.LEVEL');
                

                gesetzt und dein nachfolgendes ".available" ebenfalls auf ".LEVEL" gesetzt. LEVEL ist bei mir der Datenpunkt von dimmbaren Lampen. STATE hingegen ist der Datenpunkt zum Ein-/Ausschalten von statischen Lampen. Das Skript wird dann mit ".LEVEL" auch korrekt gestartet. Verwende ich stattdessen jedoch STATE, stoppt das Skript mit Fehlercode 889 bei Zeile 15/37.

                Aber auch bei korrektem Start mit LEVEL werden bei mqtt.0 keine Daten erzeugt. Ich nehme an, 'sendMessage2Client' ist der mqtt-Datenpunkt über den RHasspy die ENUMs und Devices bekommt, richtig? Wurde dieser Datenpunkt bei dir automatisch generiert, oder muss er manuell angelegt werden? (Komme leider nicht mehr dazu, das selbst zu testen)

                Viele Grüße
                Thomas

                T Offline
                T Offline
                Tictactoo
                schrieb am zuletzt editiert von
                #27

                @tobetobe Zu MQTT: Es ist so (ist mir aufgefallen) dass die nur erzeugt werden, wenn irgendwer die Topics von einem Broker abonniert sind.

                Zu deinem Fehler:
                Kannst du mir mal posten, welche Zeile das bei dir im Code ist, an der der Fehler kommt? Bei mir hat Zeile 15 keine 37 Zeichen^^ Deshalb ist es grade schwer da aus der Ferne was zu zu sagen. Hast du ".STATE" gemacht?

                1 Antwort Letzte Antwort
                0
                • tobetobeT Offline
                  tobetobeT Offline
                  tobetobe
                  schrieb am zuletzt editiert von
                  #28

                  @Tictactoo

                  Hallo, vielen Dank, dass du mal nachschauen möchtest. Bei meinen HomeMatic Devices habe ich natürlich eine andere Pfadlänge. Die hatte ich zwischenzeitlich noch angepasst. Leider tritt der Fehler weiterhin auf.

                  So sieht der State aus:

                  hm-rpc.0.LEQ3333333.1.STATE
                  

                  Ich habe dein Skript noch um einige Leerzeilen erleichtert. Die Fehlermeldung kommt nun aus Zeile 7, die ich gekennzeichnet habe (nur hier im Spoiler, nicht im Skript)


                  var devices = $('hm-rpc.0.*.1.STATE');
                  var devicesMessage = ""device_name": [";

                  for(var i = 0; i < devices.length; i++)
                  {
                  var tempObj = getObject(devices[i].replace('.STATE',''));
                  devicesMessage += """ + tempObj.common.name + ":" + tempObj._id; //Zeile 7

                  if(i == devices.length-1)
                  {
                  devicesMessage += """;
                  }
                  else
                  {
                  devicesMessage += "",";
                  }
                  }
                  devicesMessage += "]"
                  sendTo('mqtt.0', 'sendMessage2Client', {topic: '/rhasspy/slots/devices', message: devicesMessage});

                  var rooms = getEnums('rooms');
                  var roomsMessage = ""room_name": [";

                  for(var i = 0; i < rooms.length; i++)
                  {
                  roomsMessage += """ + rooms[i].name.de + ":" + rooms[i].id;

                  if(i == rooms.length-1)
                  

                  {
                  roomsMessage += """;
                  }

                  else
                  {
                  roomsMessage += "",";
                  }
                  }

                  roomsMessage += "]"
                  sendTo('mqtt.0', 'sendMessage2Client', {topic: '/rhasspy/slots/rooms', message: roomsMessage});

                  var functions = getEnums('functions');
                  var functionsMessage = ""function_name": [";

                  for(var i = 0; i < functions.length; i++)
                  {
                  functionsMessage += """ + functions[i].name.de + ":" + functions[i].id;

                  if(i == rooms.length-1)
                  

                  {
                  functionsMessage += """;
                  }

                  else
                  {
                  functionsMessage += "",";
                  }
                  }

                  functionsMessage += "]"
                  sendTo('mqtt.0', 'sendMessage2Client', {topic: '/rhasspy/slots/functions', message: functionsMessage});

                  So sehen meine mqtt-Objekte aus:
                  c607d5d0-aad4-4bff-9a96-334e935ff599-grafik.png

                  An welcher Stelle müsste ich deiner Meinung nach den Datenpunkt 'sendMessage2Client' anlegen?

                  Beste Grüße
                  tobetobe

                  T 1 Antwort Letzte Antwort
                  0
                  • tobetobeT tobetobe

                    @Tictactoo

                    Hallo, vielen Dank, dass du mal nachschauen möchtest. Bei meinen HomeMatic Devices habe ich natürlich eine andere Pfadlänge. Die hatte ich zwischenzeitlich noch angepasst. Leider tritt der Fehler weiterhin auf.

                    So sieht der State aus:

                    hm-rpc.0.LEQ3333333.1.STATE
                    

                    Ich habe dein Skript noch um einige Leerzeilen erleichtert. Die Fehlermeldung kommt nun aus Zeile 7, die ich gekennzeichnet habe (nur hier im Spoiler, nicht im Skript)


                    var devices = $('hm-rpc.0.*.1.STATE');
                    var devicesMessage = ""device_name": [";

                    for(var i = 0; i < devices.length; i++)
                    {
                    var tempObj = getObject(devices[i].replace('.STATE',''));
                    devicesMessage += """ + tempObj.common.name + ":" + tempObj._id; //Zeile 7

                    if(i == devices.length-1)
                    {
                    devicesMessage += """;
                    }
                    else
                    {
                    devicesMessage += "",";
                    }
                    }
                    devicesMessage += "]"
                    sendTo('mqtt.0', 'sendMessage2Client', {topic: '/rhasspy/slots/devices', message: devicesMessage});

                    var rooms = getEnums('rooms');
                    var roomsMessage = ""room_name": [";

                    for(var i = 0; i < rooms.length; i++)
                    {
                    roomsMessage += """ + rooms[i].name.de + ":" + rooms[i].id;

                    if(i == rooms.length-1)
                    

                    {
                    roomsMessage += """;
                    }

                    else
                    {
                    roomsMessage += "",";
                    }
                    }

                    roomsMessage += "]"
                    sendTo('mqtt.0', 'sendMessage2Client', {topic: '/rhasspy/slots/rooms', message: roomsMessage});

                    var functions = getEnums('functions');
                    var functionsMessage = ""function_name": [";

                    for(var i = 0; i < functions.length; i++)
                    {
                    functionsMessage += """ + functions[i].name.de + ":" + functions[i].id;

                    if(i == rooms.length-1)
                    

                    {
                    functionsMessage += """;
                    }

                    else
                    {
                    functionsMessage += "",";
                    }
                    }

                    functionsMessage += "]"
                    sendTo('mqtt.0', 'sendMessage2Client', {topic: '/rhasspy/slots/functions', message: functionsMessage});

                    So sehen meine mqtt-Objekte aus:
                    c607d5d0-aad4-4bff-9a96-334e935ff599-grafik.png

                    An welcher Stelle müsste ich deiner Meinung nach den Datenpunkt 'sendMessage2Client' anlegen?

                    T Offline
                    T Offline
                    Tictactoo
                    schrieb am zuletzt editiert von
                    #29

                    @tobetobe Zu MQQT: Du musst nix von Hand anlegen. Es muss nur einfach ein Broker (zum Beispiel auf Windows MQTTBox) das entsprechende Topic abonnieren. Dann erscheint auch der Punkt. Ersetze es doch einfach vorerst durch log();

                    Zu den States: Ist denn ".1" in jedem Gerät vorhanden? Und ist ".1" das Gerät, oder musst du evtl ".1.STATE" ersetzen. Kannst du mir von deinen Geräten auch mal einen Scrennshot anhängen aus der Baumstruktur?

                    tobetobeT 1 Antwort Letzte Antwort
                    0
                    • tobetobeT Offline
                      tobetobeT Offline
                      tobetobe
                      schrieb am zuletzt editiert von
                      #30

                      @joergeli

                      Hallo, ich konnte LEDcontrol auch noch schnell installieren und ein wenig testen. Mei Log sieht genau so aus wie deiner. Der Debug Mode geht natürlich nur, wenn der HLC nicht läuft, also mit systemctl stoppen. Dann kommt bei mir dieser Hinweis:

                      pi@rhasspy-1:~/hermesLedControl_v2.0.3 $ ./venv/bin/python3 main.py --debug=True
                      Starting Hermes Led Control v. 2.0.3
                      Initializing HermesLedControl
                      Initializing ProjectAlice settings
                      Loading configurations
                      No Project Alice config found but debug mode, allow to continue
                      

                      Ansonsten passiert jedoch nichts. Die mqtt states wurden bei mir ebenfalls wie von dir beschrieben angelegt. Werte erscheinen jedoch nicht. Ich habe den Eindruck, dass dies so auch richtig ist. Auf GitHub lässt sich der Entwickler dazu im Detail aus, was wie konfiguriert werden kann.

                      https://github.com/project-alice-assistant/HermesLedControl/wiki/Arguments-customization
                      

                      Mir scheint, dass für ein "custom-Pattern" einige Zustände bzw Betriebsmodi definiert werden müssen. In den weiteren Seiten geht es dann so richtig ins Eingemachte:

                      d1c31239-e75f-443e-b5e9-b83ad74d3269-grafik.png

                      Da werden wir uns wohl durchquälen müssen, wozu ich die Zeit nicht hatte, bzw aktuell auch nicht haben werde.

                      Zu deiner neuen Sportart (Zurückrudern) möchte ich noch etwas anmerken: Mir war dies auch recht bald aufgefallen, weil ich nur eine Sekunde Zeit hatte, das Wake Word und den Befehl zu sprechen. Das war mir persönlich zu knapp. Ich habe meinen Timer nun auf 15 sec. gesetzt.

                      Was ich jedoch in diesem Zusammenhang zur Qualität der Spracherkennung festgestellt habe, dürfte dich/euch interessieren: Ich kann reproduzierbar erkennen, dass die Auslastung meines Raspi einen signifikanten Einfluss auf die Qualität der Erkennung hat. Wenn zB der HLC läuft, wird bei mir fast kein Befehl erkannt. Schalte ich ihn aus, ist sofort alles wieder OK. Das gleiche gilt für Kaldi als Alternative zu Pocketsphinx sowie für komplexe Beziehungen zwischen Sentences und Slots!!! Also: Keep it simple.

                      Das bestätigt mich, demnächst, wenn ich wieder mehr Zeit habe, den Rhasspy auf Client/Server um zu bauen, damit alle ressourcenfressenden Prozesse, wie ZB die Erkennung, auf dem Server laufen, und sich mein alter Pi3 nur mit dem Mikro selbst befassen muss.

                      Wenn du/ihr mal in die einschlägigen Foren schaut, werdet ihr das bestätigt finden.

                      Also: Nicht aufgeben. Rhasspy steht noch ziemlich am Anfang und ich habe den Eindruck, dass da noch einiges an positiver Entwicklung zu erwarten ist.

                      Beste Grüße
                      tobetobe

                      joergeliJ 1 Antwort Letzte Antwort
                      0
                      • T Tictactoo

                        @tobetobe Zu MQQT: Du musst nix von Hand anlegen. Es muss nur einfach ein Broker (zum Beispiel auf Windows MQTTBox) das entsprechende Topic abonnieren. Dann erscheint auch der Punkt. Ersetze es doch einfach vorerst durch log();

                        Zu den States: Ist denn ".1" in jedem Gerät vorhanden? Und ist ".1" das Gerät, oder musst du evtl ".1.STATE" ersetzen. Kannst du mir von deinen Geräten auch mal einen Scrennshot anhängen aus der Baumstruktur?

                        tobetobeT Offline
                        tobetobeT Offline
                        tobetobe
                        schrieb am zuletzt editiert von
                        #31

                        @Tictactoo
                        Vielen Dank soweit. Hier siehst du den kompletten Baum eines Dimmers. Ansprechen will ich unter .1 den LEVEL. Unter .2 und .3 stehen dieselben Werte nochmals, was jedoch hier nicht von Belang ist.

                        a0555999-6115-4bea-81fd-22939429f896-grafik.png

                        Und dies ist der Baum eines einfachen Lichtschalters:

                        69e4c56c-0bde-4660-b8b2-6c19fd798785-grafik.png

                        Unter .0 finden sich wieder dieselben werte, wie auch beim Dimmer. Der zu schaltende Punkt wäre dann der .STATE.

                        Wenn es allerdings nur um die Erkennung der Devices geht, könnte man doch ggf auch einen beliebigen Punkt aus der Gruppe .0 nehmen, zB LOWBAT. Den gibt es bei jedem Device, unabhängig davon, ob das Ding eine Batterie hat oder nicht. Was meinst du?

                        (Ich weiß, du kennst HomeMatic nicht, aber du weißt, was dein Skript leisten kann)

                        Beste Grüße
                        tobetobe

                        T 1 Antwort Letzte Antwort
                        0
                        • tobetobeT tobetobe

                          @joergeli

                          Hallo, ich konnte LEDcontrol auch noch schnell installieren und ein wenig testen. Mei Log sieht genau so aus wie deiner. Der Debug Mode geht natürlich nur, wenn der HLC nicht läuft, also mit systemctl stoppen. Dann kommt bei mir dieser Hinweis:

                          pi@rhasspy-1:~/hermesLedControl_v2.0.3 $ ./venv/bin/python3 main.py --debug=True
                          Starting Hermes Led Control v. 2.0.3
                          Initializing HermesLedControl
                          Initializing ProjectAlice settings
                          Loading configurations
                          No Project Alice config found but debug mode, allow to continue
                          

                          Ansonsten passiert jedoch nichts. Die mqtt states wurden bei mir ebenfalls wie von dir beschrieben angelegt. Werte erscheinen jedoch nicht. Ich habe den Eindruck, dass dies so auch richtig ist. Auf GitHub lässt sich der Entwickler dazu im Detail aus, was wie konfiguriert werden kann.

                          https://github.com/project-alice-assistant/HermesLedControl/wiki/Arguments-customization
                          

                          Mir scheint, dass für ein "custom-Pattern" einige Zustände bzw Betriebsmodi definiert werden müssen. In den weiteren Seiten geht es dann so richtig ins Eingemachte:

                          d1c31239-e75f-443e-b5e9-b83ad74d3269-grafik.png

                          Da werden wir uns wohl durchquälen müssen, wozu ich die Zeit nicht hatte, bzw aktuell auch nicht haben werde.

                          Zu deiner neuen Sportart (Zurückrudern) möchte ich noch etwas anmerken: Mir war dies auch recht bald aufgefallen, weil ich nur eine Sekunde Zeit hatte, das Wake Word und den Befehl zu sprechen. Das war mir persönlich zu knapp. Ich habe meinen Timer nun auf 15 sec. gesetzt.

                          Was ich jedoch in diesem Zusammenhang zur Qualität der Spracherkennung festgestellt habe, dürfte dich/euch interessieren: Ich kann reproduzierbar erkennen, dass die Auslastung meines Raspi einen signifikanten Einfluss auf die Qualität der Erkennung hat. Wenn zB der HLC läuft, wird bei mir fast kein Befehl erkannt. Schalte ich ihn aus, ist sofort alles wieder OK. Das gleiche gilt für Kaldi als Alternative zu Pocketsphinx sowie für komplexe Beziehungen zwischen Sentences und Slots!!! Also: Keep it simple.

                          Das bestätigt mich, demnächst, wenn ich wieder mehr Zeit habe, den Rhasspy auf Client/Server um zu bauen, damit alle ressourcenfressenden Prozesse, wie ZB die Erkennung, auf dem Server laufen, und sich mein alter Pi3 nur mit dem Mikro selbst befassen muss.

                          Wenn du/ihr mal in die einschlägigen Foren schaut, werdet ihr das bestätigt finden.

                          Also: Nicht aufgeben. Rhasspy steht noch ziemlich am Anfang und ich habe den Eindruck, dass da noch einiges an positiver Entwicklung zu erwarten ist.

                          joergeliJ Online
                          joergeliJ Online
                          joergeli
                          schrieb am zuletzt editiert von joergeli
                          #32

                          @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                          Wenn zB der HLC läuft, wird bei mir fast kein Befehl erkannt. Schalte ich ihn aus, ist sofort alles wieder OK.

                          Das kann ich bestätigen, ist bei mir leider auch so.
                          Was meinst Du: Ob ein Raspi4 (mit 4 GByte) da Abhilfe schaffen könnte? (habe bei mir noch einen rumliegen).
                          Wahrscheinlich nicht, wenn's an der CPU und nicht am Speicher hapert.
                          ... und nein, "rumliegen" ist keine weitere Sportart von mir :grinning:

                          Ich hatte in der community.rhasspy.org mal nachgefragt, was das mit Hermes-MQTT-Topics auf sich hat und ob da was passieren sollte, wenn HLC aktiv wird.

                          Leider werde ich aus der Antwort nicht ganz schlau.
                          KiboOst schrieb, wenn ich das richtig verstehe, daß HLC mein Rhasspy-Profil ausliest und daher die IP-Adresse meines MQTT-Brokers kennt. OK, deshalb erscheinen ja dort auch die HLC-Topics.
                          Desweiteren könnte ich mit dem Parameter --mqttServer die IP-Adresse des MQTTBrokers ändern.
                          OK, will ich ja gar, ich möchte nur wissen, ob in den Topics was passieren sollte, wenn HLC aktiv ist.
                          Ich werde noch mal nachhaken.

                          Gruß
                          Jörg

                          1 Antwort Letzte Antwort
                          0
                          • tobetobeT Offline
                            tobetobeT Offline
                            tobetobe
                            schrieb am zuletzt editiert von
                            #33

                            Hallo Jörg,
                            Ich habe ioBroker mit Raspi3 begonnen und einen mittlerweile durch Raspi4 mit 4GByte ersetzt. Der Performance-Unterschied ist schon beachtlich und würde meiner Meinung nach auch bei Rhasspy einiges bringen. Schließlich hat der Raspi4 nicht nur mehr RAM, sondern insgesamt eine leistungsfähigere Architektur. Wenn du allerdings daran denken solltest, evtl mehrere Rhasspy-Satelliten zu verteilen, so nimm den jetzigen Raspi3 für den Satelliten und den Raspi4 (oder besser noch etwas leistungsfähigeres) für den Rhasspy-Server. Und noch etwas: Nimm die schnellsten Mikro-SDs, die du bekommen kannst, zB Scandisk Ultra.

                            Und sonst: Ich hoffe, du bekommst aus der Rhasspy Community noch eine brauchbare Antwort. Ich bin noch nicht dazu gekommen, mir die Antwort von KiboOst anzuschauen, werde das aber in den nächsten Tagen mal ins Auge fassen. Vielleicht erkenne ich ja noch was Brauchbares.

                            Beste Grüße
                            Thomas

                            Beste Grüße
                            tobetobe

                            joergeliJ 1 Antwort Letzte Antwort
                            0
                            • tobetobeT tobetobe

                              Hallo Jörg,
                              Ich habe ioBroker mit Raspi3 begonnen und einen mittlerweile durch Raspi4 mit 4GByte ersetzt. Der Performance-Unterschied ist schon beachtlich und würde meiner Meinung nach auch bei Rhasspy einiges bringen. Schließlich hat der Raspi4 nicht nur mehr RAM, sondern insgesamt eine leistungsfähigere Architektur. Wenn du allerdings daran denken solltest, evtl mehrere Rhasspy-Satelliten zu verteilen, so nimm den jetzigen Raspi3 für den Satelliten und den Raspi4 (oder besser noch etwas leistungsfähigeres) für den Rhasspy-Server. Und noch etwas: Nimm die schnellsten Mikro-SDs, die du bekommen kannst, zB Scandisk Ultra.

                              Und sonst: Ich hoffe, du bekommst aus der Rhasspy Community noch eine brauchbare Antwort. Ich bin noch nicht dazu gekommen, mir die Antwort von KiboOst anzuschauen, werde das aber in den nächsten Tagen mal ins Auge fassen. Vielleicht erkenne ich ja noch was Brauchbares.

                              Beste Grüße
                              Thomas

                              joergeliJ Online
                              joergeliJ Online
                              joergeli
                              schrieb am zuletzt editiert von joergeli
                              #34

                              @tobetobe
                              Hallo Thomas,
                              ich bin mit ioBroker ebenfalls von einem Raspi3 auf einen Raspi4 mit 4Gbyte umgestiegen, weil bei dem 3er das RAM knapp wurde. Es laufen in ioBroker "nur" 17 Instanzen, wobei der 3er schon mal unter 10% freies RAM ging, während jetzt beim 4er so um die 70% frei sind. Performancemäßig habe ich "gefühlt" keinen großen Unterschied festgestellt.

                              Hier jetzt auch die Antwort bzgl HLC von KiboOst aus der community.rhasspy.org :
                              Frei übersetzt:
                              Von der aktuellen Rhasspy-Version werden noch keine Hermes-Topics geplublished (was für ein Wort ;-) ).
                              HLC wird erst mit einer entspr. Rhasspy-Version funktionieren

                              ... und ich Blödmann probiere es seit 1,5 Tagen :disappointed:

                              Gruß
                              Jörg

                              tobetobeT 1 Antwort Letzte Antwort
                              0
                              • tobetobeT tobetobe

                                @Tictactoo
                                Vielen Dank soweit. Hier siehst du den kompletten Baum eines Dimmers. Ansprechen will ich unter .1 den LEVEL. Unter .2 und .3 stehen dieselben Werte nochmals, was jedoch hier nicht von Belang ist.

                                a0555999-6115-4bea-81fd-22939429f896-grafik.png

                                Und dies ist der Baum eines einfachen Lichtschalters:

                                69e4c56c-0bde-4660-b8b2-6c19fd798785-grafik.png

                                Unter .0 finden sich wieder dieselben werte, wie auch beim Dimmer. Der zu schaltende Punkt wäre dann der .STATE.

                                Wenn es allerdings nur um die Erkennung der Devices geht, könnte man doch ggf auch einen beliebigen Punkt aus der Gruppe .0 nehmen, zB LOWBAT. Den gibt es bei jedem Device, unabhängig davon, ob das Ding eine Batterie hat oder nicht. Was meinst du?

                                (Ich weiß, du kennst HomeMatic nicht, aber du weißt, was dein Skript leisten kann)

                                T Offline
                                T Offline
                                Tictactoo
                                schrieb am zuletzt editiert von
                                #35

                                @tobetobe Versuch es mal mit einem State, den alle deine Homatic-Geräte haben und mach bei replace dann auch den ".0" oder ".1" mit weg. Da er den Namen rausfinden will, muss es der erste Knoten des Geräts sein.

                                Außerdem müsstest du dann sinvollerweise bei dir, je nach State den du schalten willst "state:.1.STATE" in den Sentense mit einbauen, damit er da richtig schaltet. Bei Zigbee (für das ich das bei mir gemacht hab) sind alle States unter einem Knoten, daher geht es da so.

                                tobetobeT 1 Antwort Letzte Antwort
                                0
                                • T Tictactoo

                                  @tobetobe Versuch es mal mit einem State, den alle deine Homatic-Geräte haben und mach bei replace dann auch den ".0" oder ".1" mit weg. Da er den Namen rausfinden will, muss es der erste Knoten des Geräts sein.

                                  Außerdem müsstest du dann sinvollerweise bei dir, je nach State den du schalten willst "state:.1.STATE" in den Sentense mit einbauen, damit er da richtig schaltet. Bei Zigbee (für das ich das bei mir gemacht hab) sind alle States unter einem Knoten, daher geht es da so.

                                  tobetobeT Offline
                                  tobetobeT Offline
                                  tobetobe
                                  schrieb am zuletzt editiert von
                                  #36

                                  @Tictactoo
                                  Hi, vielen Dank. Vor nächstem Wochenende habe ich keinen Zugang zum Rhasspy, kann also nicht testen und auch nicht antworten

                                  Beste Grüße
                                  tobetobe

                                  1 Antwort Letzte Antwort
                                  0
                                  • joergeliJ joergeli

                                    @tobetobe
                                    Hallo Thomas,
                                    ich bin mit ioBroker ebenfalls von einem Raspi3 auf einen Raspi4 mit 4Gbyte umgestiegen, weil bei dem 3er das RAM knapp wurde. Es laufen in ioBroker "nur" 17 Instanzen, wobei der 3er schon mal unter 10% freies RAM ging, während jetzt beim 4er so um die 70% frei sind. Performancemäßig habe ich "gefühlt" keinen großen Unterschied festgestellt.

                                    Hier jetzt auch die Antwort bzgl HLC von KiboOst aus der community.rhasspy.org :
                                    Frei übersetzt:
                                    Von der aktuellen Rhasspy-Version werden noch keine Hermes-Topics geplublished (was für ein Wort ;-) ).
                                    HLC wird erst mit einer entspr. Rhasspy-Version funktionieren

                                    ... und ich Blödmann probiere es seit 1,5 Tagen :disappointed:

                                    Gruß
                                    Jörg

                                    tobetobeT Offline
                                    tobetobeT Offline
                                    tobetobe
                                    schrieb am zuletzt editiert von
                                    #37

                                    @joergeli
                                    Hi Jörg
                                    Das habe ich anders verstanden. Es fehlen noch einige Hermes Features. Wenn auf dem Rhasspy jedoch mosquito läuft, können LED Konfigurationen in Abhängigkeit vom jeweiligen Sprachbefehl ausgelöst werden. Leider kann ich dich aktuell nicht unterstützen, indem ich selbst teste.

                                    Bitte Lies nochmals im Rhasspy Forum unter Hermes Support nach. Ich melde mich, sobald ich selbst wieder testen kann

                                    Beste Grüße
                                    tobetobe

                                    joergeliJ 1 Antwort Letzte Antwort
                                    0
                                    • tobetobeT tobetobe

                                      @joergeli
                                      Hi Jörg
                                      Das habe ich anders verstanden. Es fehlen noch einige Hermes Features. Wenn auf dem Rhasspy jedoch mosquito läuft, können LED Konfigurationen in Abhängigkeit vom jeweiligen Sprachbefehl ausgelöst werden. Leider kann ich dich aktuell nicht unterstützen, indem ich selbst teste.

                                      Bitte Lies nochmals im Rhasspy Forum unter Hermes Support nach. Ich melde mich, sobald ich selbst wieder testen kann

                                      joergeliJ Online
                                      joergeliJ Online
                                      joergeli
                                      schrieb am zuletzt editiert von joergeli
                                      #38

                                      @tobetobe
                                      Hallo Thomas,

                                      aus der Antwort von KiboOst:

                                      Nothing have to be sent to have the led on when service starts.
                                      HLC doesn’t send anything on mqtt, it just listen on some topics to give a visual feedback
                                      

                                      Also horcht HLC auf bestimmte Topics.

                                      And once more, actual version of rhasspy doesn’t publish every hermes topics so it doesn’t work actually.
                                      

                                      Aktuelle Rhasspy-Version sendet (published) nicht alle Hermes-Topics.
                                      Wie ich - und Du wahrscheinlich auch - festegestellt habe, werden bei der Installation von HLC zwar die entspr. Topics in ioBroker mqtt.0 angelegt, diese aber nicht von der aktuellen Rhasspy-Version (bei mr 2.4.17) "gefüttert".

                                      Ich habe aber einen Workaround von H3adcra5h gefunden, der ein Python-Script geschrieben hat, das zumindest auf einige Topics horcht und dann entspr. LED-Reaktionen auslöst.

                                      Das Script ist für ein ReSpeaker 6 Mic gedacht, funktioniert aber auch mit meinem ReSpeaker 4.
                                      Die LED-Ringe der ReSpeaker Mics werden über SPI des Raspis angesteuert.
                                      Ob es auch mit Deinem Matrix Voice funktioniert, kann ich nich sagen.

                                      Ich musste das Script aber etwas anpassen, um es zum Laufen zu bringen.
                                      Zusätzlich musste ich die pixel-ring-Library mit pip install pixel_ring installieren.

                                      import logging
                                      import time
                                      
                                      import paho.mqtt.client as mqtt
                                      from gpiozero import LED
                                      from pixel_ring import pixel_ring
                                      
                                      MQTT_IP = '192.168.192.29'
                                      MQTT_PORT = 1891
                                      
                                      def on_message(client, userdata, message):
                                          if 'hermes/nlu/intentNotRecognized' == message.topic:
                                              logging.info('intent not recognized')
                                              pixel_ring.think()
                                              time.sleep(0.5)
                                              pixel_ring.off()
                                      
                                          if 'rhasspy/de/transition/SnowboyWakeListener' == message.topic:
                                              if 'loaded' == str(message.payload.decode("utf-8")):
                                                  logging.info('### Snowboy-Wake-Listener: listen')
                                                  pixel_ring.listen()
                                                  time.sleep(0.5)
                                                  pixel_ring.off()
                                      
                                          if 'rhasspy/de/transition/WebrtcvadCommandListener' == message.topic:
                                              if 'loaded' == str(message.payload.decode("utf-8")):
                                                  logging.info('### WebCard: listen')
                                                  pixel_ring.think()
                                                  time.sleep(2.5)
                                                  pixel_ring.off()
                                      
                                          if 'rhasspy/speech-to-text/transcription' == message.topic:
                                              if 'loaded' != str(message.payload.decode("utf-8")):
                                                  logging.info('### Text: listen')
                                                  pixel_ring.speak()
                                                  time.sleep(2.5)
                                                  pixel_ring.off()
                                      
                                          if message.topic.startswith('hermes/intent/'):
                                              logging.info('intent ' + message.topic.rpartition('/')[-1])
                                      
                                      if __name__ == '__main__':
                                      #    logging.basicConfig(filename='test.log', level=logging.INFO)
                                          power = LED(5)
                                          power.on()
                                      
                                          pixel_ring.set_brightness(20)
                                          pixel_ring.change_pattern('echo')
                                      
                                          client = mqtt.Client('spracherkenner')
                                          client.connect(MQTT_IP, port=MQTT_PORT)
                                          client.on_message = on_message
                                          client.loop_start()
                                          client.subscribe('hermes/nlu/intentNotRecognized')
                                          client.subscribe('rhasspy/de/transition/SnowboyWakeListener')
                                          client.subscribe('rhasspy/de/transition/WebrtcvadCommandListener')
                                          client.subscribe('rhasspy/speech-to-text/transcription')
                                          client.subscribe('hermes/intent/#')
                                          client.subscribe('rhasspy/de/transition/MaryTTSSentenceSpeaker')
                                          logging.info('starting pixels')
                                      
                                          while True:
                                              try:
                                                  time.sleep(3)
                                              except KeyboardInterrupt:
                                                  client.loop_stop()
                                                  break
                                      
                                          pixel_ring.off()
                                          power.off()
                                          time.sleep(1)
                                      

                                      Ich habe die MQTT-Adresse und MQTT-Port auf meine mqtt.0-Instanz von ioBroker umgebogen.

                                      Zu erwähnen wären noch die beiden Zeilen:

                                          power = LED(5)
                                          power.on()
                                      

                                      .GPIO5 wird auf HIGH gesetzt und damit wird beim Respeaker der LED-Ring aktiviert
                                      Dadurch leuchtet aber noch nichts, der LED-Ring befindet sich lediglich in "Bereitschaft".

                                      Die folgenden 4 if-Abfragen horchen auf bestimmte Topics und lösen dann bestimmte LED-Sequenzen aus (abhängig vom voreingestellten Pattern).:
                                      pixel_ring.think() : alle LEDS drehen sich blau/grün
                                      pixel_ring.listen() : alle LEDs leuchten konstant blau
                                      pixel_ring.speak(): alle LEDs blinken blau/grün

                                      anschließend bleiben diese Sequenzen für eine bestimmte Zeit aktiv, dann wird der LED-Ring ausgeschaltet:
                                      time.sleep(x.x)
                                      pixel_ring.off()

                                      Ein Workaround ist das Ganze deshalb, weil momentan nur ein paar Topics von Rhasspy unterstützt werden und das Abschalten der LEDs einfach durch einen Timeout (sleep) realisiert wird.
                                      Wenn alle Hermes-Topics von Rhasspy unterstützt werden, wird das Abschalten aber wohl durch die entspr. Topics gesteuert. Für mich ist das so aber erst mal vollkommen ausreichend.

                                      Ach ja, der HLC-service muss vor dem Starten des Scriptes mit sudo systemctl stop hermesledcontrol gestoppt werden!.

                                      Hier ein Foto meiner Konstruktion (Gehäuse habe ich nach einer Vorlage von Thingiverse auf meinem 3D-Drucker ausgedruckt):
                                      led-ring.jpg
                                      Gruß
                                      Jörg

                                      tobetobeT 2 Antworten Letzte Antwort
                                      0
                                      • joergeliJ joergeli

                                        @tobetobe
                                        Hallo Thomas,

                                        aus der Antwort von KiboOst:

                                        Nothing have to be sent to have the led on when service starts.
                                        HLC doesn’t send anything on mqtt, it just listen on some topics to give a visual feedback
                                        

                                        Also horcht HLC auf bestimmte Topics.

                                        And once more, actual version of rhasspy doesn’t publish every hermes topics so it doesn’t work actually.
                                        

                                        Aktuelle Rhasspy-Version sendet (published) nicht alle Hermes-Topics.
                                        Wie ich - und Du wahrscheinlich auch - festegestellt habe, werden bei der Installation von HLC zwar die entspr. Topics in ioBroker mqtt.0 angelegt, diese aber nicht von der aktuellen Rhasspy-Version (bei mr 2.4.17) "gefüttert".

                                        Ich habe aber einen Workaround von H3adcra5h gefunden, der ein Python-Script geschrieben hat, das zumindest auf einige Topics horcht und dann entspr. LED-Reaktionen auslöst.

                                        Das Script ist für ein ReSpeaker 6 Mic gedacht, funktioniert aber auch mit meinem ReSpeaker 4.
                                        Die LED-Ringe der ReSpeaker Mics werden über SPI des Raspis angesteuert.
                                        Ob es auch mit Deinem Matrix Voice funktioniert, kann ich nich sagen.

                                        Ich musste das Script aber etwas anpassen, um es zum Laufen zu bringen.
                                        Zusätzlich musste ich die pixel-ring-Library mit pip install pixel_ring installieren.

                                        import logging
                                        import time
                                        
                                        import paho.mqtt.client as mqtt
                                        from gpiozero import LED
                                        from pixel_ring import pixel_ring
                                        
                                        MQTT_IP = '192.168.192.29'
                                        MQTT_PORT = 1891
                                        
                                        def on_message(client, userdata, message):
                                            if 'hermes/nlu/intentNotRecognized' == message.topic:
                                                logging.info('intent not recognized')
                                                pixel_ring.think()
                                                time.sleep(0.5)
                                                pixel_ring.off()
                                        
                                            if 'rhasspy/de/transition/SnowboyWakeListener' == message.topic:
                                                if 'loaded' == str(message.payload.decode("utf-8")):
                                                    logging.info('### Snowboy-Wake-Listener: listen')
                                                    pixel_ring.listen()
                                                    time.sleep(0.5)
                                                    pixel_ring.off()
                                        
                                            if 'rhasspy/de/transition/WebrtcvadCommandListener' == message.topic:
                                                if 'loaded' == str(message.payload.decode("utf-8")):
                                                    logging.info('### WebCard: listen')
                                                    pixel_ring.think()
                                                    time.sleep(2.5)
                                                    pixel_ring.off()
                                        
                                            if 'rhasspy/speech-to-text/transcription' == message.topic:
                                                if 'loaded' != str(message.payload.decode("utf-8")):
                                                    logging.info('### Text: listen')
                                                    pixel_ring.speak()
                                                    time.sleep(2.5)
                                                    pixel_ring.off()
                                        
                                            if message.topic.startswith('hermes/intent/'):
                                                logging.info('intent ' + message.topic.rpartition('/')[-1])
                                        
                                        if __name__ == '__main__':
                                        #    logging.basicConfig(filename='test.log', level=logging.INFO)
                                            power = LED(5)
                                            power.on()
                                        
                                            pixel_ring.set_brightness(20)
                                            pixel_ring.change_pattern('echo')
                                        
                                            client = mqtt.Client('spracherkenner')
                                            client.connect(MQTT_IP, port=MQTT_PORT)
                                            client.on_message = on_message
                                            client.loop_start()
                                            client.subscribe('hermes/nlu/intentNotRecognized')
                                            client.subscribe('rhasspy/de/transition/SnowboyWakeListener')
                                            client.subscribe('rhasspy/de/transition/WebrtcvadCommandListener')
                                            client.subscribe('rhasspy/speech-to-text/transcription')
                                            client.subscribe('hermes/intent/#')
                                            client.subscribe('rhasspy/de/transition/MaryTTSSentenceSpeaker')
                                            logging.info('starting pixels')
                                        
                                            while True:
                                                try:
                                                    time.sleep(3)
                                                except KeyboardInterrupt:
                                                    client.loop_stop()
                                                    break
                                        
                                            pixel_ring.off()
                                            power.off()
                                            time.sleep(1)
                                        

                                        Ich habe die MQTT-Adresse und MQTT-Port auf meine mqtt.0-Instanz von ioBroker umgebogen.

                                        Zu erwähnen wären noch die beiden Zeilen:

                                            power = LED(5)
                                            power.on()
                                        

                                        .GPIO5 wird auf HIGH gesetzt und damit wird beim Respeaker der LED-Ring aktiviert
                                        Dadurch leuchtet aber noch nichts, der LED-Ring befindet sich lediglich in "Bereitschaft".

                                        Die folgenden 4 if-Abfragen horchen auf bestimmte Topics und lösen dann bestimmte LED-Sequenzen aus (abhängig vom voreingestellten Pattern).:
                                        pixel_ring.think() : alle LEDS drehen sich blau/grün
                                        pixel_ring.listen() : alle LEDs leuchten konstant blau
                                        pixel_ring.speak(): alle LEDs blinken blau/grün

                                        anschließend bleiben diese Sequenzen für eine bestimmte Zeit aktiv, dann wird der LED-Ring ausgeschaltet:
                                        time.sleep(x.x)
                                        pixel_ring.off()

                                        Ein Workaround ist das Ganze deshalb, weil momentan nur ein paar Topics von Rhasspy unterstützt werden und das Abschalten der LEDs einfach durch einen Timeout (sleep) realisiert wird.
                                        Wenn alle Hermes-Topics von Rhasspy unterstützt werden, wird das Abschalten aber wohl durch die entspr. Topics gesteuert. Für mich ist das so aber erst mal vollkommen ausreichend.

                                        Ach ja, der HLC-service muss vor dem Starten des Scriptes mit sudo systemctl stop hermesledcontrol gestoppt werden!.

                                        Hier ein Foto meiner Konstruktion (Gehäuse habe ich nach einer Vorlage von Thingiverse auf meinem 3D-Drucker ausgedruckt):
                                        led-ring.jpg
                                        Gruß
                                        Jörg

                                        tobetobeT Offline
                                        tobetobeT Offline
                                        tobetobe
                                        schrieb am zuletzt editiert von
                                        #39

                                        @joergeli
                                        Hallo Jörg,
                                        Zunächst einmal Glückwunsch, du bist da ja schon recht weit gekommen.

                                        Es war auch mein Verständnis, dass HLC auf bestimmte Topics reagieren kann, was ja auch durch das Skript bestätigt wird.

                                        Ich hoffe, diese LED Steuerung beansprucht den Raspi nicht zu sehr, sodass es wieder zu Problemen bei der Erkennung der Intents kommt.

                                        Auf alle Fälle jedenfalls ein riesiger Schritt nach vorne. Ich komme leider erst am nächsten Wochenende wieder zum Testen.

                                        Beste Grüße
                                        tobetobe

                                        joergeliJ 1 Antwort Letzte Antwort
                                        0
                                        • tobetobeT tobetobe

                                          @joergeli
                                          Hallo Jörg,
                                          Zunächst einmal Glückwunsch, du bist da ja schon recht weit gekommen.

                                          Es war auch mein Verständnis, dass HLC auf bestimmte Topics reagieren kann, was ja auch durch das Skript bestätigt wird.

                                          Ich hoffe, diese LED Steuerung beansprucht den Raspi nicht zu sehr, sodass es wieder zu Problemen bei der Erkennung der Intents kommt.

                                          Auf alle Fälle jedenfalls ein riesiger Schritt nach vorne. Ich komme leider erst am nächsten Wochenende wieder zum Testen.

                                          joergeliJ Online
                                          joergeliJ Online
                                          joergeli
                                          schrieb am zuletzt editiert von
                                          #40

                                          @tobetobe
                                          Hallo Thomas,

                                          ich konnte bislang keine Auslastungsprobleme durch die LED-Steuerung feststellen.

                                          mal was anderes: Was hast Du in Rhasspy unter Intent Recognition aktiviert?

                                          Ich bin von "Do intent recognition with fuzzywuzzy on this device" auf
                                          "Do intent recognition with OpenFST on this device" , bzw. "fsticuffs" gewechselt und habe
                                          zusätzlich das "Fuzzy text matching" ausgeschaltet.

                                          Warum?:
                                          Nun, ich hatte doch einige Fehlerkennungen meiner Sätze, worauf dann nicht das gewünschte Intent, sondern ein anderes ausgelöst wurde.
                                          Ich verstehe das mit OpenFST so, daß hier nur die trainierten Sätze erkannt werden und nicht versucht wird, mit "fuzzy text matching" Unbekanntes zu erkennen.

                                          Der Nachteil ist zwar, daß wirklich nur auf die exakt trainierten sentences reagiert wird, aber andererseits keine Fehlinterpretionen mehr vorkommen können. Bei Nichterkennung wird dann halt kein Intent ausgelöst.

                                          Kannst ja nächstes Wochenende mal berichten, wie sich das bei Dir mit Fehlerkennungen verhält.

                                          Gruß
                                          Jörg

                                          tobetobeT 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          981

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe