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.8k

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

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

Rhasspy Offline Sprachsteuerung

Geplant Angeheftet Gesperrt Verschoben Off Topic
403 Beiträge 30 Kommentatoren 100.6k 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.
  • joergeliJ joergeli

    @Tom10web
    Hallo,
    "hermesledcontrol" habe ich kpl. deaktiviert ( sudo systemctl stop hermesledcontrol) weil es sonst wohl in Konflikt zu meinem Workaround kommt.

    Nochmals meine einzelnen Schritte:
    1.) Datei rhasspy_led_ring.py im Ordner /home/pi/4mics_hat mit folgendem Inhalt anlegen:

    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 'hermes/asr/textCaptured' == message.topic:
            logging.info('text recognized')
            pixel_ring.speak()
            time.sleep(2.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(1.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 'rhasspy/de/transition/MaryTTSSentenceSpeaker' == message.topic:
    #        state = str(message.payload.decode("utf-8"))
    #        if 'speaking' == state:
    #            logging.info('speaking')
    #            pixel_ring.speak()
    #       elif 'ready' == state:
    #            logging.info('speaking done')
    #            pixel_ring.off()
    
    
    if __name__ == '__main__':
    #    logging.basicConfig(filename='test.log', level=logging.INFO)
        power = LED(5)
        power.on()
    
        pixel_ring.set_brightness(10)
        pixel_ring.change_pattern('echo')
    
        client = mqtt.Client('Rhasspy')
        client.connect(MQTT_IP, port=MQTT_PORT)
        client.on_message = on_message
        client.loop_start()
        client.subscribe('hermes/nlu/intentNotRecognized')
        client.subscribe('hermes/asr/textCaptured')
        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)
    
    

    Im Script musst Du MQTT_IP und MQTT_PORT natürlich auf Deine eigenen Gegebenheiten anpassen

    Dieses Python-Script reagiert auf die entspr. Rhasspy-Topics ( Befehl not recognized, Text recognized, Wakeword erkannt, etc.) und steuert dann den 4 Mics-Hat LED-Ring mit verschiedenen Mustern an.

    2.)
    Damit das Ganze automatisch, d.h. nach dem Booten funktioniert, habe ich folgende Zeile am Ende der Datei /home/pi/.profile ( sudo nano /home/pi/.profile) angehängt:

    (cd /home/pi/4mics_hat; echo "4Mic:Hat"; source /home/pi/env/bin/activate; echo "Virtuelle Umgebung gestartet"; python rhasspy_led_ring.py)&
    
    

    Wichtig ist das & am Ende der Zeile!

    Nach einem Reboot des Raspi sollte dann der LED-Ring bei Rhasspy-Sprachkommandos reagieren.
    Das läuft bei mir soweit, ich werde diesbzgl. aber erst weitermachen, wenn Rhasspy 2.5 verfügbar ist.

    Gruß
    Jörg

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

    @joergeli said in Rhasspy Offline Sprachsteuerung:

    Nochmals meine einzelnen Schritte:

    Hallo Jörg,

    ich habe dein Skript noch immer nicht zum Laufen bekommen ;-((
    Allerdings habe ich auf GitHub passend zu meinem Matrix Voice ein Skript zur Ansteuerung der LEDs über Rhasspy, also über Sprachkommando gefunden, welches auch funktioniert. Meine ersten Versuche, Code-Schnipsel aus deinem Skript bei mir einzubauen, waren erfolglos. Sos sieht das von mir verwendete Skript aus:

    import websocket
    import requests
    import json
    import logging
    import time
    import paho.mqtt.client as mqtt
    from matrix_lite import led
    #from pixel_ring import pixel_ring

    MQTT_IP = '192.168.13.152'
    MQTT_PORT = 1883

    def say(text):
    url = "http://localhost:12101/api/text-to-speech"
    requests.post(url, text)

    Intents are passed through here

    def on_message(ws, message):

    data = json.loads(message)
    print("**Captured New Intent**")
    print(data)
    
    
    if ("Led" == data["intent"]["name"]):
        led.set(data["slots"]["color"])
        say("Matrix ist jetzt: " + data["slots"]["color"])
    

    Zum Testen:

    def on_message(client, userdata, message):

    if 'hermes/nlu/intentNotRecognized' == message.topic:
        led.set(data["slots"]["red"])
        say("Matrix ist jetzt: " + data["slots"]["color"])
    

    Ende Test

    def on_error(ws, error):
    print(error)

    def on_close(ws):
    print("\nDisconnected\n")

    def on_open(ws):
    print("\nConnected\n")

    Start web socket client

    if name == "main":
    ws = websocket.WebSocketApp("ws://localhost:12101/api/events/intent",
    on_message = on_message,
    on_error = on_error,
    on_close = on_close)
    ws.on_open = on_open
    ws.run_forever()

    Wie du siehst, findet mit diesem Skript auch eine Sprachausgabe auf dem Rhasspy statt. In diesem Zusammenhang habe ich mit den Settings gespielt, weil mir die Ausgabe mit eSpeak überhaupt nicht gefiel. In den Settings habe ich daher auf PicoTTS umgestellt und unter "Advanced" das Profil folgendermaßen ergänzt:

    "text_to_speech": {
      "system": "picotts",
      "picotts": {
        "language": "de-DE"
      }
    }
    

    Die Aussprache finde ich, ist völlig akzentfrei und die Stimme sehr angenehm.

    Ich dachte, das könnte dich ggf auch interessieren.

    Bis zum nächsten Mal
    Thomas

    Beste Grüße
    tobetobe

    joergeliJ 1 Antwort Letzte Antwort
    0
    • tobetobeT tobetobe

      @joergeli said in Rhasspy Offline Sprachsteuerung:

      Nochmals meine einzelnen Schritte:

      Hallo Jörg,

      ich habe dein Skript noch immer nicht zum Laufen bekommen ;-((
      Allerdings habe ich auf GitHub passend zu meinem Matrix Voice ein Skript zur Ansteuerung der LEDs über Rhasspy, also über Sprachkommando gefunden, welches auch funktioniert. Meine ersten Versuche, Code-Schnipsel aus deinem Skript bei mir einzubauen, waren erfolglos. Sos sieht das von mir verwendete Skript aus:

      import websocket
      import requests
      import json
      import logging
      import time
      import paho.mqtt.client as mqtt
      from matrix_lite import led
      #from pixel_ring import pixel_ring

      MQTT_IP = '192.168.13.152'
      MQTT_PORT = 1883

      def say(text):
      url = "http://localhost:12101/api/text-to-speech"
      requests.post(url, text)

      Intents are passed through here

      def on_message(ws, message):

      data = json.loads(message)
      print("**Captured New Intent**")
      print(data)
      
      
      if ("Led" == data["intent"]["name"]):
          led.set(data["slots"]["color"])
          say("Matrix ist jetzt: " + data["slots"]["color"])
      

      Zum Testen:

      def on_message(client, userdata, message):

      if 'hermes/nlu/intentNotRecognized' == message.topic:
          led.set(data["slots"]["red"])
          say("Matrix ist jetzt: " + data["slots"]["color"])
      

      Ende Test

      def on_error(ws, error):
      print(error)

      def on_close(ws):
      print("\nDisconnected\n")

      def on_open(ws):
      print("\nConnected\n")

      Start web socket client

      if name == "main":
      ws = websocket.WebSocketApp("ws://localhost:12101/api/events/intent",
      on_message = on_message,
      on_error = on_error,
      on_close = on_close)
      ws.on_open = on_open
      ws.run_forever()

      Wie du siehst, findet mit diesem Skript auch eine Sprachausgabe auf dem Rhasspy statt. In diesem Zusammenhang habe ich mit den Settings gespielt, weil mir die Ausgabe mit eSpeak überhaupt nicht gefiel. In den Settings habe ich daher auf PicoTTS umgestellt und unter "Advanced" das Profil folgendermaßen ergänzt:

      "text_to_speech": {
        "system": "picotts",
        "picotts": {
          "language": "de-DE"
        }
      }
      

      Die Aussprache finde ich, ist völlig akzentfrei und die Stimme sehr angenehm.

      Ich dachte, das könnte dich ggf auch interessieren.

      Bis zum nächsten Mal
      Thomas

      joergeliJ Offline
      joergeliJ Offline
      joergeli
      schrieb am zuletzt editiert von
      #89

      @tobetobe
      Hallo Thomas,
      wie gesagt, ich hatte ja geschrieben, daß ich nicht weiß, ob das Script mit Deinem Matrix-Voice funktioniert, weil da einige Sachen drin sind, die wohl speziell nur für das Respeaker Mic-Array zutreffen.

      Sprachausgabe direkt auf dem Rhasspy interessiert mich natürlich, muss aber erst noch meinen Mini-NF-Verstärker mit dem Rhasspy verbinden.
      Ich nehme an, das "Herzstück" in Deinem Script ist die Zeile url = "http://localhost:12101/api/text-to-speech", wo die API angezapft wird?

      Kannst Du mal ein paar Beispiel-Sprachausgaben posten, weil ich mir momentan unter "say("Matrix ist jetzt: " + data["slots"]["color"])" nichts rechtes vorstellen kann.
      Wird da sowas wie "Matrix ist jetzt Wohnzimmerlampe grün" gesprochen?

      Gruß
      Jörg

      tobetobeT 1 Antwort Letzte Antwort
      0
      • joergeliJ joergeli

        @tobetobe
        Hallo Thomas,
        wie gesagt, ich hatte ja geschrieben, daß ich nicht weiß, ob das Script mit Deinem Matrix-Voice funktioniert, weil da einige Sachen drin sind, die wohl speziell nur für das Respeaker Mic-Array zutreffen.

        Sprachausgabe direkt auf dem Rhasspy interessiert mich natürlich, muss aber erst noch meinen Mini-NF-Verstärker mit dem Rhasspy verbinden.
        Ich nehme an, das "Herzstück" in Deinem Script ist die Zeile url = "http://localhost:12101/api/text-to-speech", wo die API angezapft wird?

        Kannst Du mal ein paar Beispiel-Sprachausgaben posten, weil ich mir momentan unter "say("Matrix ist jetzt: " + data["slots"]["color"])" nichts rechtes vorstellen kann.
        Wird da sowas wie "Matrix ist jetzt Wohnzimmerlampe grün" gesprochen?

        Gruß
        Jörg

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

        @joergeli

        Hallo Jörg,

        zunächst mal sorry, dass der Text im Spoiler so schlecht formatiert ist. Das ist mir beim Hineinkopieren gar nicht aufgefallen. Das ist von der ersten bis zur letzten Zeile im Spoiler der komplette Skript-Inhalt. Für die Sprachausgabe sind wahrscheinlich alle Zeilen mit der url "localhost" sowie mit dem Kommando "say" relevant. In der Sentences.ini steht bei mir:

        [Led]
        ($synonyms_change_command) [(die | das | den)] device [auf] (red | green | blue | purple | yellow | black){color}
        

        wobei "$synonyms_change_command" bei mir nur auf den Slot mit den Kommandos (Setze, stelle, mache, etc) verweist. Ansonsten gibt es in den Slots keine weiteren Informationen. Ich muss also per Sprachbefehl lediglich "Setze das Device auf green" eingeben. (Bei den Farben habe ich es der Einfachheit halber erst einmal bei den englischen Begriffen belassen).

        So wie es für mich aussieht, müsste es für dein Mikrofon doch möglich sein, nicht nur die LEDs anzusteuern, sondern auch eine Sprachansage vorzunehmen. Wenn man das irgendwie hinbekommt, wäre das für mich der nächste Schritt, um auch Ansagen über Datum, Zeit, Wetter etc am Rhasspy ausgeben zu können. Die halte ich persönlich für interessanter, als eine zur LED-Anzeige redundante Statusinformation per Sprachausgabe.

        Mich interessiert deine Meinung. Siehst du das auch so?

        Gruß Thomas

        Beste Grüße
        tobetobe

        joergeliJ 1 Antwort Letzte Antwort
        0
        • tobetobeT tobetobe

          @joergeli

          Hallo Jörg,

          zunächst mal sorry, dass der Text im Spoiler so schlecht formatiert ist. Das ist mir beim Hineinkopieren gar nicht aufgefallen. Das ist von der ersten bis zur letzten Zeile im Spoiler der komplette Skript-Inhalt. Für die Sprachausgabe sind wahrscheinlich alle Zeilen mit der url "localhost" sowie mit dem Kommando "say" relevant. In der Sentences.ini steht bei mir:

          [Led]
          ($synonyms_change_command) [(die | das | den)] device [auf] (red | green | blue | purple | yellow | black){color}
          

          wobei "$synonyms_change_command" bei mir nur auf den Slot mit den Kommandos (Setze, stelle, mache, etc) verweist. Ansonsten gibt es in den Slots keine weiteren Informationen. Ich muss also per Sprachbefehl lediglich "Setze das Device auf green" eingeben. (Bei den Farben habe ich es der Einfachheit halber erst einmal bei den englischen Begriffen belassen).

          So wie es für mich aussieht, müsste es für dein Mikrofon doch möglich sein, nicht nur die LEDs anzusteuern, sondern auch eine Sprachansage vorzunehmen. Wenn man das irgendwie hinbekommt, wäre das für mich der nächste Schritt, um auch Ansagen über Datum, Zeit, Wetter etc am Rhasspy ausgeben zu können. Die halte ich persönlich für interessanter, als eine zur LED-Anzeige redundante Statusinformation per Sprachausgabe.

          Mich interessiert deine Meinung. Siehst du das auch so?

          Gruß Thomas

          joergeliJ Offline
          joergeliJ Offline
          joergeli
          schrieb am zuletzt editiert von
          #91

          @tobetobe
          Hallo Thomas,
          ja klar, "aussagekräftige" Sprachausgaben sind natürlich wünschenswert.
          Die sind aber m.E. nur auf dem Rhasspy allein nicht realisierbar ( zumindest wenn man sich -wie ich- mit Python nicht auskennt).
          Somit müssen sie an anderer Stelle, sprich: mit ioBroker erzeugt werden.

          Wie Du weißt, reagiere "ich" ja schon jetzt auf Rhasspy-Intents per JavaScript.
          vereinfachtes Beispiel:
          Frage an Rhasspy: Hat es heute geregnet?
          -> Rhasspy sendet Intent mit Inhalt "geregnet" an ioBroker.
          -> JavaScript reagiert auf "geregnet".
          -> JavaScript generiert Antwort aus den vorhandenen Datenpunkten:
          Regenmenge = 0 -> Antwort:"Nein, bisher war es trocken"
          Regenmenge = 0 und Regendauer > 0 -> Antwort: "Ja, aber es gab nur geringen Niederschlag."
          Regenmenge > 0 -> Antwort: "Ja, es hat heute xx Liter pro Quadratmeter geregnet."
          -> entspr. Antwort wird mittels PAW-Adapter an Tablet gesendet und dort per Sprache ausgegeben.

          Wenn es - wie in Deinem Python-Script beschrieben - ausreicht, diese Antwort an die API von Rhasspy zu senden, dann sollte es mit say(antwort) möglich sein, die Antwort auf den Rhasspy-Lautsprecher(n) auszugeben.

          Im Prinzip stelle ich mir das so vor:
          -> Intent von Rhasspy wird in ioBroker empfangen.
          -> ioBroker generiert per JavaScript die entspr. Antwort.
          .> ioBroker schreibt die Antwort in einen eigenen Datenpunkt.
          -> bei jeder Änderung dieses Datenpunktes wird der Inhalt des Datenpunktes ( = Antworttext) an Rhasspy gesendet.
          -> Rhasspy reagiert mittels Python-Script auf diese Antwort und erzeugt mittels TexttoSpeech-engine die akustische Ausgabe.
          Somit sollte es möglich sein, je nach Intent, beliebige Sprachausgaben auf dem Rhasspy zu erzeugen.
          Der Nachteil dabei ist, daß man alle zutreffenden Antworten mittels JavaScript manuell erzeugen, d.h. selbst proggen muß.

          Ich werde am Wochenende mal probieren, ob mir das gelingt, momentan habe ich von der "Regierung" andere Prioritäten gesetzt bekommen :relieved:

          tobetobeT 1 Antwort Letzte Antwort
          0
          • joergeliJ joergeli

            @tobetobe
            Hallo Thomas,
            ja klar, "aussagekräftige" Sprachausgaben sind natürlich wünschenswert.
            Die sind aber m.E. nur auf dem Rhasspy allein nicht realisierbar ( zumindest wenn man sich -wie ich- mit Python nicht auskennt).
            Somit müssen sie an anderer Stelle, sprich: mit ioBroker erzeugt werden.

            Wie Du weißt, reagiere "ich" ja schon jetzt auf Rhasspy-Intents per JavaScript.
            vereinfachtes Beispiel:
            Frage an Rhasspy: Hat es heute geregnet?
            -> Rhasspy sendet Intent mit Inhalt "geregnet" an ioBroker.
            -> JavaScript reagiert auf "geregnet".
            -> JavaScript generiert Antwort aus den vorhandenen Datenpunkten:
            Regenmenge = 0 -> Antwort:"Nein, bisher war es trocken"
            Regenmenge = 0 und Regendauer > 0 -> Antwort: "Ja, aber es gab nur geringen Niederschlag."
            Regenmenge > 0 -> Antwort: "Ja, es hat heute xx Liter pro Quadratmeter geregnet."
            -> entspr. Antwort wird mittels PAW-Adapter an Tablet gesendet und dort per Sprache ausgegeben.

            Wenn es - wie in Deinem Python-Script beschrieben - ausreicht, diese Antwort an die API von Rhasspy zu senden, dann sollte es mit say(antwort) möglich sein, die Antwort auf den Rhasspy-Lautsprecher(n) auszugeben.

            Im Prinzip stelle ich mir das so vor:
            -> Intent von Rhasspy wird in ioBroker empfangen.
            -> ioBroker generiert per JavaScript die entspr. Antwort.
            .> ioBroker schreibt die Antwort in einen eigenen Datenpunkt.
            -> bei jeder Änderung dieses Datenpunktes wird der Inhalt des Datenpunktes ( = Antworttext) an Rhasspy gesendet.
            -> Rhasspy reagiert mittels Python-Script auf diese Antwort und erzeugt mittels TexttoSpeech-engine die akustische Ausgabe.
            Somit sollte es möglich sein, je nach Intent, beliebige Sprachausgaben auf dem Rhasspy zu erzeugen.
            Der Nachteil dabei ist, daß man alle zutreffenden Antworten mittels JavaScript manuell erzeugen, d.h. selbst proggen muß.

            Ich werde am Wochenende mal probieren, ob mir das gelingt, momentan habe ich von der "Regierung" andere Prioritäten gesetzt bekommen :relieved:

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

            @joergeli said in Rhasspy Offline Sprachsteuerung:

            ( zumindest wenn man sich -wie ich- mit Python nicht auskennt).

            das ist leider auch mein Problem

            @joergeli said in Rhasspy Offline Sprachsteuerung:

            Wenn es - wie in Deinem Python-Script beschrieben - ausreicht, diese Antwort an die API von Rhasspy zu senden, dann sollte es mit say(antwort) möglich sein, die Antwort auf den Rhasspy-Lautsprecher(n) auszugeben.
            genau das wäre zu verifizieren, denn es wäre ja unabhängig vom verwendten Mikrofon

            @joergeli said in Rhasspy Offline Sprachsteuerung:

            Im Prinzip stelle ich mir das so vor:

            Dieser Überlegung zu einem Vorgehen würde ich mich zu 10% anschließen

            @joergeli said in Rhasspy Offline Sprachsteuerung:

            momentan habe ich von der "Regierung" andere Prioritäten gesetzt bekommen

            ich schätze deine Meinung, möchte dich jedoch keinesfalls zu irgendetwas drängen. Auch habe ich überhaupt keine "Forderungen". Insofern fühl dich bitte vollkommen frei, so zu verfahren, wie du möchtest.

            Beste Grüße
            tobetobe

            joergeliJ 1 Antwort Letzte Antwort
            0
            • tobetobeT tobetobe

              @joergeli said in Rhasspy Offline Sprachsteuerung:

              ( zumindest wenn man sich -wie ich- mit Python nicht auskennt).

              das ist leider auch mein Problem

              @joergeli said in Rhasspy Offline Sprachsteuerung:

              Wenn es - wie in Deinem Python-Script beschrieben - ausreicht, diese Antwort an die API von Rhasspy zu senden, dann sollte es mit say(antwort) möglich sein, die Antwort auf den Rhasspy-Lautsprecher(n) auszugeben.
              genau das wäre zu verifizieren, denn es wäre ja unabhängig vom verwendten Mikrofon

              @joergeli said in Rhasspy Offline Sprachsteuerung:

              Im Prinzip stelle ich mir das so vor:

              Dieser Überlegung zu einem Vorgehen würde ich mich zu 10% anschließen

              @joergeli said in Rhasspy Offline Sprachsteuerung:

              momentan habe ich von der "Regierung" andere Prioritäten gesetzt bekommen

              ich schätze deine Meinung, möchte dich jedoch keinesfalls zu irgendetwas drängen. Auch habe ich überhaupt keine "Forderungen". Insofern fühl dich bitte vollkommen frei, so zu verfahren, wie du möchtest.

              joergeliJ Offline
              joergeliJ Offline
              joergeli
              schrieb am zuletzt editiert von
              #93

              @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

              Dieser Überlegung zu einem Vorgehen würde ich mich zu 10% anschließen

              ... und bei den restlichen 90% hast Du Bedenken? :grin: :grin: :grin:

              @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

              ich schätze deine Meinung, möchte dich jedoch keinesfalls zu irgendetwas drängen. Auch habe ich überhaupt keine "Forderungen". Insofern fühl dich bitte vollkommen frei, so zu verfahren, wie du möchtest.

              Habe ich auch nicht so aufgefasst, mich juckt es ja selbst in den Fingern das zu testen

              tobetobeT 1 Antwort Letzte Antwort
              0
              • joergeliJ joergeli

                @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                Dieser Überlegung zu einem Vorgehen würde ich mich zu 10% anschließen

                ... und bei den restlichen 90% hast Du Bedenken? :grin: :grin: :grin:

                @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                ich schätze deine Meinung, möchte dich jedoch keinesfalls zu irgendetwas drängen. Auch habe ich überhaupt keine "Forderungen". Insofern fühl dich bitte vollkommen frei, so zu verfahren, wie du möchtest.

                Habe ich auch nicht so aufgefasst, mich juckt es ja selbst in den Fingern das zu testen

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

                @joergeli said in Rhasspy Offline Sprachsteuerung:

                ... und bei den restlichen 90% hast Du Bedenken?

                Erwischt!!! Ein Tipfehler...

                Ich habe mich heute auch noch einmal intensiv mit dem Thema beschäftigt. Zunächst gibt es einen ganz einfachen Weg, Sprachausgaben auf dem Rhasspy mit dem jeweils aktivierten TTS-Modul (bei mir PicoTTS) zu testen. Hierzu in der Rhasspy-Oberfläche einfach auf das Feld mit der Versionsnummer klicken. Man erhält dann direkten Zugang zur API. Weiter unten gibt es dann die Möglichkeit, einen eigenen Text an den Rhasspy zu schicken, der dann über die Lautsprecherbuchse ausgegeben wird. Alternativ kann man die Seite auch durch Aufruf im Browser finden:

                http://<IP>:12101/api/#/default/post_api_text_to_speech
                

                Die Beschreibung zur API hier:

                https://rhasspy.readthedocs.io/en/latest/reference/#http-api
                

                Nun habe ich versucht, mithilfe vorhandener Skripts, Befehle an diese API-Schnittstelle zu senden. Zum Einen mit dem Befehl "send", zum Anderen mit "request" bzw. XMLHttpRequest. Für Letzteres mus "xmlhttprequest" als zusätzliches Modul im JS-Adapter eingetragen sein.

                Hier meine beiden Skripte:

                1. Mit send:
                // Skript zur Abfrage von Temperaturen
                var intentResult = $('mqtt.0.rhasspy.intent.*Temperature');
                var intentArray = [];
                var url = "http://<IP>:12101/api/text-to-speech?repeat=false&play=true";
                var method = "POST";
                var shouldBeAsync = true;
                
                
                 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);
                       if(intentObject.hasOwnProperty('device'))
                    {
                        var deviceID = intentObject.device;
                        var state = intentObject.state;
                        var value = getState(deviceID + state);
                        var postData = value.val;
                        log(value.val); 
                        sendTo('http://<IP>:12101/api/text-to-speech?repeat=false&play=true', 'send', 'value.val + "Grad Celsius"');
                    }
                });
                

                Dieses gibt im Log die Temperatur richtig aus, sendet die Daten jedoch nicht an Rhasspy.

                Bei dem Skript mit "request" bekomme ich schon Fehlermeldungen zu Zeile 8. Offensichtlich wird xmlhttprequest trotz im JS-Adapter installiertem Zusatzmodul nicht erkannt.

                //Skript zur Abfrage von Temperaturen
                var intentResult = $('mqtt.0.rhasspy.intent.*Temperature');
                var intentArray = [];
                var url = "http://192.168.13.157:12101/api/text-to-speech";
                var method = "POST";
                var shouldBeAsync = true;
                
                var request = new XMLHttpRequest();
                
                
                 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);
                       if(intentObject.hasOwnProperty('device'))
                    {
                        var deviceID = intentObject.device;
                        var state = intentObject.state;
                        var value = getState(deviceID + state);
                        var postData = value.val;
                
                        request.open(method, url, shouldBeAsync);
                        request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
                        request.push(postData);
                // ggf. letzten Befehl alternativ mit .send statt mit .push        
                        log(postData);            
                    }
                });
                
                

                Die dritte Möglichkeit wäre über jQuery, mit der ich mich jedoch noch nicht befasst habe. Hier mal ein Code-Fetzen:

                /*
                            jQuery.ajax({
                            method: "POST",
                            url: "save.php",
                            data: { image: canvasToDataURLString }
                            });
                */
                

                Dies soweit nur zu deiner Info. Ich wende mich mal an andere Forenmitglieder, die sich schon mit ähnlichen Aufgabenstellungen befasst haben.

                Gruß
                Thomas

                Beste Grüße
                tobetobe

                joergeliJ 1 Antwort Letzte Antwort
                0
                • tobetobeT tobetobe

                  @joergeli said in Rhasspy Offline Sprachsteuerung:

                  ... und bei den restlichen 90% hast Du Bedenken?

                  Erwischt!!! Ein Tipfehler...

                  Ich habe mich heute auch noch einmal intensiv mit dem Thema beschäftigt. Zunächst gibt es einen ganz einfachen Weg, Sprachausgaben auf dem Rhasspy mit dem jeweils aktivierten TTS-Modul (bei mir PicoTTS) zu testen. Hierzu in der Rhasspy-Oberfläche einfach auf das Feld mit der Versionsnummer klicken. Man erhält dann direkten Zugang zur API. Weiter unten gibt es dann die Möglichkeit, einen eigenen Text an den Rhasspy zu schicken, der dann über die Lautsprecherbuchse ausgegeben wird. Alternativ kann man die Seite auch durch Aufruf im Browser finden:

                  http://<IP>:12101/api/#/default/post_api_text_to_speech
                  

                  Die Beschreibung zur API hier:

                  https://rhasspy.readthedocs.io/en/latest/reference/#http-api
                  

                  Nun habe ich versucht, mithilfe vorhandener Skripts, Befehle an diese API-Schnittstelle zu senden. Zum Einen mit dem Befehl "send", zum Anderen mit "request" bzw. XMLHttpRequest. Für Letzteres mus "xmlhttprequest" als zusätzliches Modul im JS-Adapter eingetragen sein.

                  Hier meine beiden Skripte:

                  1. Mit send:
                  // Skript zur Abfrage von Temperaturen
                  var intentResult = $('mqtt.0.rhasspy.intent.*Temperature');
                  var intentArray = [];
                  var url = "http://<IP>:12101/api/text-to-speech?repeat=false&play=true";
                  var method = "POST";
                  var shouldBeAsync = true;
                  
                  
                   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);
                         if(intentObject.hasOwnProperty('device'))
                      {
                          var deviceID = intentObject.device;
                          var state = intentObject.state;
                          var value = getState(deviceID + state);
                          var postData = value.val;
                          log(value.val); 
                          sendTo('http://<IP>:12101/api/text-to-speech?repeat=false&play=true', 'send', 'value.val + "Grad Celsius"');
                      }
                  });
                  

                  Dieses gibt im Log die Temperatur richtig aus, sendet die Daten jedoch nicht an Rhasspy.

                  Bei dem Skript mit "request" bekomme ich schon Fehlermeldungen zu Zeile 8. Offensichtlich wird xmlhttprequest trotz im JS-Adapter installiertem Zusatzmodul nicht erkannt.

                  //Skript zur Abfrage von Temperaturen
                  var intentResult = $('mqtt.0.rhasspy.intent.*Temperature');
                  var intentArray = [];
                  var url = "http://192.168.13.157:12101/api/text-to-speech";
                  var method = "POST";
                  var shouldBeAsync = true;
                  
                  var request = new XMLHttpRequest();
                  
                  
                   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);
                         if(intentObject.hasOwnProperty('device'))
                      {
                          var deviceID = intentObject.device;
                          var state = intentObject.state;
                          var value = getState(deviceID + state);
                          var postData = value.val;
                  
                          request.open(method, url, shouldBeAsync);
                          request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
                          request.push(postData);
                  // ggf. letzten Befehl alternativ mit .send statt mit .push        
                          log(postData);            
                      }
                  });
                  
                  

                  Die dritte Möglichkeit wäre über jQuery, mit der ich mich jedoch noch nicht befasst habe. Hier mal ein Code-Fetzen:

                  /*
                              jQuery.ajax({
                              method: "POST",
                              url: "save.php",
                              data: { image: canvasToDataURLString }
                              });
                  */
                  

                  Dies soweit nur zu deiner Info. Ich wende mich mal an andere Forenmitglieder, die sich schon mit ähnlichen Aufgabenstellungen befasst haben.

                  Gruß
                  Thomas

                  joergeliJ Offline
                  joergeliJ Offline
                  joergeli
                  schrieb am zuletzt editiert von joergeli
                  #95

                  @tobetobe
                  Hallo Thomas,
                  so, wieder Zeit zum Spielen gehabt:
                  Rhasspy-Sprachausgabe läuft via pico-tts bei mir mit folgender JavaScript-Funktion:

                  
                  //#########################################
                  // Rhasspy - Text to Speech
                  //#########################################
                  
                  let http = require('http');
                  const temp  = 'hm-rpc.2.CUX0100001.1.TEMPERATURE'      // Datenpunkt Aussen-Temperatur
                  
                  // Für Rhasspy-TTS:
                  let options = {
                      host: '192.168.192.24', //Rhasspy IP-Adresse
                      port: 12101,            //Rhasspy Port
                      path: "/api/text-to-speech",
                      method: 'POST',
                      headers: {
                          'User-Agent' : 'ioBroker',
                          'Content-Type': 'text/plain',
                         // 'Content-Length': data.length
                      }
                  };
                  
                  //______________________________________________________________________________
                  
                  function httpPost(data) {
                      let req = http.request(options, function(res) {
                      console.log("http Status: " + res.statusCode);
                      // Header (Rückmeldung vom Webserver)
                      console.log('HEADERS: ' + JSON.stringify(res.headers), (res.statusCode != 200 ? "warn" : "info"));
                      });
                  
                      // Fehler abfangen
                      req.on('error', function(e) { 
                          console.log('ERROR: ' + e.message,"warn");
                      });
                  
                      // write data to request body
                      console.log("Data to request body: " + data);
                      (data ? req.write(data) : console.log("Daten: keine Daten vorhanden"));
                      req.end();
                  }
                  
                  //______________________________________________________________________________
                  
                  // Beispiel-Sprachausgabe auf Rhasspy bei Temperaturänderung
                  on({id: temp, change: "any"},function(obj) {
                      let aussentemp_wert = getState(temp).val;
                      let data = 'Es sind momentan ' + aussentemp_wert + ' Grad Celsius draussen';
                      //console.log("data: " + data);
                      httpPost(data);
                  });
                  //______________________________________________________________________________
                  
                  

                  Das funktioniert bei mir einwandfrei, zwar immer noch über Kopfhörer, da ich noch nicht dazu gekommen bin, den Mini-NF-Verstärker am Rhasspy anzuschließen.

                  Mir ist dabei im Rhasspy-Log aufgefallen, daß anscheinend bei jeder Sprachausgabe eine xxxxxxxx.wav-Datei in den /tmp-Ordner geschrieben wird:

                  [INFO:10688731] quart.serving: 192.168.192.29:38380 POST /api/text-to-speech 1.1 200 43 4624186
                  [DEBUG:10688718] InboxActor:  -> stopped
                  [DEBUG:10688713] SnowboyWakeListener: paused -> listening
                  [DEBUG:10688711] PicoTTSSentenceSpeaker: speaking -> ready
                  [DEBUG:10684307] APlayAudioPlayer: ['aplay', '-q']
                  [DEBUG:10684305] SnowboyWakeListener: listening -> paused
                  [DEBUG:10684305] PicoTTSSentenceSpeaker: ready -> speaking
                  [DEBUG:10684112] PicoTTSSentenceSpeaker: ['pico2wave', '-w', '/tmp/tmpxk8vw7cj.wav', '-l', 'de-DE', 'Es sind momentan 23.5 Grad Celsius draussen']
                  [INFO:10674234] quart.serving: 192.168.192.29:38296 POST /api/text-to-speech 1.1 200 40 3331912
                  [DEBUG:10674218] InboxActor:  -> stopped
                  [DEBUG:10674213] SnowboyWakeListener: paused -> listening
                  [DEBUG:10674211] PicoTTSSentenceSpeaker: speaking -> ready
                  [DEBUG:10671065] APlayAudioPlayer: ['aplay', '-q']
                  [DEBUG:10671064] SnowboyWakeListener: listening -> paused
                  [DEBUG:10671063] PicoTTSSentenceSpeaker: ready -> speaking
                  [DEBUG:10670907] PicoTTSSentenceSpeaker: ['pico2wave', '-w', '/tmp/tmpzlb4_9pn.wav', '-l', 'de-DE', 'Es sind momentan 8 Grad Celsius draussen']
                  

                  Ich bin mir nicht sicher, ob die dann gleich nach der Sprachausgabe wieder gelöscht wird, jedenfalls sind via SSH keine wav-Dateien im /tmp-Ordner zu finden.

                  Übrigens:
                  @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                  Bei dem Skript mit "request" bekomme ich schon Fehlermeldungen zu Zeile 8. Offensichtlich wird xmlhttprequest trotz im JS-Adapter installiertem Zusatzmodul nicht erkannt.

                  Falls Du damit die rote Wellenlinie unter request im JS-Editor meinst:
                  Einfach ignorieren, ist ein Problem des JS-Editors, Script sollte trotzdem funktionieren.

                  Gruß
                  Jörg

                  tobetobeT 2 Antworten Letzte Antwort
                  0
                  • joergeliJ joergeli

                    @tobetobe
                    Hallo Thomas,
                    so, wieder Zeit zum Spielen gehabt:
                    Rhasspy-Sprachausgabe läuft via pico-tts bei mir mit folgender JavaScript-Funktion:

                    
                    //#########################################
                    // Rhasspy - Text to Speech
                    //#########################################
                    
                    let http = require('http');
                    const temp  = 'hm-rpc.2.CUX0100001.1.TEMPERATURE'      // Datenpunkt Aussen-Temperatur
                    
                    // Für Rhasspy-TTS:
                    let options = {
                        host: '192.168.192.24', //Rhasspy IP-Adresse
                        port: 12101,            //Rhasspy Port
                        path: "/api/text-to-speech",
                        method: 'POST',
                        headers: {
                            'User-Agent' : 'ioBroker',
                            'Content-Type': 'text/plain',
                           // 'Content-Length': data.length
                        }
                    };
                    
                    //______________________________________________________________________________
                    
                    function httpPost(data) {
                        let req = http.request(options, function(res) {
                        console.log("http Status: " + res.statusCode);
                        // Header (Rückmeldung vom Webserver)
                        console.log('HEADERS: ' + JSON.stringify(res.headers), (res.statusCode != 200 ? "warn" : "info"));
                        });
                    
                        // Fehler abfangen
                        req.on('error', function(e) { 
                            console.log('ERROR: ' + e.message,"warn");
                        });
                    
                        // write data to request body
                        console.log("Data to request body: " + data);
                        (data ? req.write(data) : console.log("Daten: keine Daten vorhanden"));
                        req.end();
                    }
                    
                    //______________________________________________________________________________
                    
                    // Beispiel-Sprachausgabe auf Rhasspy bei Temperaturänderung
                    on({id: temp, change: "any"},function(obj) {
                        let aussentemp_wert = getState(temp).val;
                        let data = 'Es sind momentan ' + aussentemp_wert + ' Grad Celsius draussen';
                        //console.log("data: " + data);
                        httpPost(data);
                    });
                    //______________________________________________________________________________
                    
                    

                    Das funktioniert bei mir einwandfrei, zwar immer noch über Kopfhörer, da ich noch nicht dazu gekommen bin, den Mini-NF-Verstärker am Rhasspy anzuschließen.

                    Mir ist dabei im Rhasspy-Log aufgefallen, daß anscheinend bei jeder Sprachausgabe eine xxxxxxxx.wav-Datei in den /tmp-Ordner geschrieben wird:

                    [INFO:10688731] quart.serving: 192.168.192.29:38380 POST /api/text-to-speech 1.1 200 43 4624186
                    [DEBUG:10688718] InboxActor:  -> stopped
                    [DEBUG:10688713] SnowboyWakeListener: paused -> listening
                    [DEBUG:10688711] PicoTTSSentenceSpeaker: speaking -> ready
                    [DEBUG:10684307] APlayAudioPlayer: ['aplay', '-q']
                    [DEBUG:10684305] SnowboyWakeListener: listening -> paused
                    [DEBUG:10684305] PicoTTSSentenceSpeaker: ready -> speaking
                    [DEBUG:10684112] PicoTTSSentenceSpeaker: ['pico2wave', '-w', '/tmp/tmpxk8vw7cj.wav', '-l', 'de-DE', 'Es sind momentan 23.5 Grad Celsius draussen']
                    [INFO:10674234] quart.serving: 192.168.192.29:38296 POST /api/text-to-speech 1.1 200 40 3331912
                    [DEBUG:10674218] InboxActor:  -> stopped
                    [DEBUG:10674213] SnowboyWakeListener: paused -> listening
                    [DEBUG:10674211] PicoTTSSentenceSpeaker: speaking -> ready
                    [DEBUG:10671065] APlayAudioPlayer: ['aplay', '-q']
                    [DEBUG:10671064] SnowboyWakeListener: listening -> paused
                    [DEBUG:10671063] PicoTTSSentenceSpeaker: ready -> speaking
                    [DEBUG:10670907] PicoTTSSentenceSpeaker: ['pico2wave', '-w', '/tmp/tmpzlb4_9pn.wav', '-l', 'de-DE', 'Es sind momentan 8 Grad Celsius draussen']
                    

                    Ich bin mir nicht sicher, ob die dann gleich nach der Sprachausgabe wieder gelöscht wird, jedenfalls sind via SSH keine wav-Dateien im /tmp-Ordner zu finden.

                    Übrigens:
                    @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                    Bei dem Skript mit "request" bekomme ich schon Fehlermeldungen zu Zeile 8. Offensichtlich wird xmlhttprequest trotz im JS-Adapter installiertem Zusatzmodul nicht erkannt.

                    Falls Du damit die rote Wellenlinie unter request im JS-Editor meinst:
                    Einfach ignorieren, ist ein Problem des JS-Editors, Script sollte trotzdem funktionieren.

                    Gruß
                    Jörg

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

                    @joergeli

                    Hallo Jörg,

                    wirklich super! Damit ist die Aufgabenstellung, Sprachausgaben an den Rhasspy zu schicken, ja prinzipiell gelöst. Nun muss ich dein Skript mal in meines hineinbasteln, damit ich über Rhasspy die Temperatur in allen Räumen und auch draußen abfragen kann. Und dann muss der abgefragte Raum noch wieder zum Bestandteil der Antwort werden. Heute wird das wohl nichts mehr. Ich halte dich natürlich auf dem Laufenden...

                    Ein anderes Thema: Hast du dir mal ODAS angeschaut? Damit kann man sich die Performance von Mikrofon Arrays anzeigen lassen und diese auch optimieren. Es gibt Config Files für Matrix und ReSpeaker.

                    Schau mal hier:

                    ODAS Frontend für Desktop und hier:
                    ODAS Core für Rhasspy-Raspi

                    Bin selbst noch dabei, es zum Laufen zu bringen.

                    Gruß, Thomas

                    Beste Grüße
                    tobetobe

                    1 Antwort Letzte Antwort
                    0
                    • joergeliJ joergeli

                      @tobetobe
                      Hallo Thomas,
                      so, wieder Zeit zum Spielen gehabt:
                      Rhasspy-Sprachausgabe läuft via pico-tts bei mir mit folgender JavaScript-Funktion:

                      
                      //#########################################
                      // Rhasspy - Text to Speech
                      //#########################################
                      
                      let http = require('http');
                      const temp  = 'hm-rpc.2.CUX0100001.1.TEMPERATURE'      // Datenpunkt Aussen-Temperatur
                      
                      // Für Rhasspy-TTS:
                      let options = {
                          host: '192.168.192.24', //Rhasspy IP-Adresse
                          port: 12101,            //Rhasspy Port
                          path: "/api/text-to-speech",
                          method: 'POST',
                          headers: {
                              'User-Agent' : 'ioBroker',
                              'Content-Type': 'text/plain',
                             // 'Content-Length': data.length
                          }
                      };
                      
                      //______________________________________________________________________________
                      
                      function httpPost(data) {
                          let req = http.request(options, function(res) {
                          console.log("http Status: " + res.statusCode);
                          // Header (Rückmeldung vom Webserver)
                          console.log('HEADERS: ' + JSON.stringify(res.headers), (res.statusCode != 200 ? "warn" : "info"));
                          });
                      
                          // Fehler abfangen
                          req.on('error', function(e) { 
                              console.log('ERROR: ' + e.message,"warn");
                          });
                      
                          // write data to request body
                          console.log("Data to request body: " + data);
                          (data ? req.write(data) : console.log("Daten: keine Daten vorhanden"));
                          req.end();
                      }
                      
                      //______________________________________________________________________________
                      
                      // Beispiel-Sprachausgabe auf Rhasspy bei Temperaturänderung
                      on({id: temp, change: "any"},function(obj) {
                          let aussentemp_wert = getState(temp).val;
                          let data = 'Es sind momentan ' + aussentemp_wert + ' Grad Celsius draussen';
                          //console.log("data: " + data);
                          httpPost(data);
                      });
                      //______________________________________________________________________________
                      
                      

                      Das funktioniert bei mir einwandfrei, zwar immer noch über Kopfhörer, da ich noch nicht dazu gekommen bin, den Mini-NF-Verstärker am Rhasspy anzuschließen.

                      Mir ist dabei im Rhasspy-Log aufgefallen, daß anscheinend bei jeder Sprachausgabe eine xxxxxxxx.wav-Datei in den /tmp-Ordner geschrieben wird:

                      [INFO:10688731] quart.serving: 192.168.192.29:38380 POST /api/text-to-speech 1.1 200 43 4624186
                      [DEBUG:10688718] InboxActor:  -> stopped
                      [DEBUG:10688713] SnowboyWakeListener: paused -> listening
                      [DEBUG:10688711] PicoTTSSentenceSpeaker: speaking -> ready
                      [DEBUG:10684307] APlayAudioPlayer: ['aplay', '-q']
                      [DEBUG:10684305] SnowboyWakeListener: listening -> paused
                      [DEBUG:10684305] PicoTTSSentenceSpeaker: ready -> speaking
                      [DEBUG:10684112] PicoTTSSentenceSpeaker: ['pico2wave', '-w', '/tmp/tmpxk8vw7cj.wav', '-l', 'de-DE', 'Es sind momentan 23.5 Grad Celsius draussen']
                      [INFO:10674234] quart.serving: 192.168.192.29:38296 POST /api/text-to-speech 1.1 200 40 3331912
                      [DEBUG:10674218] InboxActor:  -> stopped
                      [DEBUG:10674213] SnowboyWakeListener: paused -> listening
                      [DEBUG:10674211] PicoTTSSentenceSpeaker: speaking -> ready
                      [DEBUG:10671065] APlayAudioPlayer: ['aplay', '-q']
                      [DEBUG:10671064] SnowboyWakeListener: listening -> paused
                      [DEBUG:10671063] PicoTTSSentenceSpeaker: ready -> speaking
                      [DEBUG:10670907] PicoTTSSentenceSpeaker: ['pico2wave', '-w', '/tmp/tmpzlb4_9pn.wav', '-l', 'de-DE', 'Es sind momentan 8 Grad Celsius draussen']
                      

                      Ich bin mir nicht sicher, ob die dann gleich nach der Sprachausgabe wieder gelöscht wird, jedenfalls sind via SSH keine wav-Dateien im /tmp-Ordner zu finden.

                      Übrigens:
                      @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                      Bei dem Skript mit "request" bekomme ich schon Fehlermeldungen zu Zeile 8. Offensichtlich wird xmlhttprequest trotz im JS-Adapter installiertem Zusatzmodul nicht erkannt.

                      Falls Du damit die rote Wellenlinie unter request im JS-Editor meinst:
                      Einfach ignorieren, ist ein Problem des JS-Editors, Script sollte trotzdem funktionieren.

                      Gruß
                      Jörg

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

                      @joergeli said in Rhasspy Offline Sprachsteuerung:

                      Rhasspy-Sprachausgabe läuft via pico-tts

                      Hallo Jörg,

                      Kompliment: Das war eine super Arbeit von dir. Ich habe dein Skript angepasst und in meines eingebaut. Dies sieht nun so aus:

                      //Skript zur Abfrage von Temperaturen
                      
                      // Variablen für MQTT
                      var intentResult = $('mqtt.0.rhasspy.intent.*Temperature');
                      var intentArray = [];
                      
                      // Für Rhasspy-TTS:
                      let http = require('http');
                      let options = {
                          host: '192.168.13.157', //Rhasspy IP-Adresse
                          port: 12101,            //Rhasspy Port
                          path: "/api/text-to-speech",
                          method: 'POST',
                          headers: {
                              'User-Agent' : 'ioBroker',
                              'Content-Type': 'text/plain',
                             // 'Content-Length': data.length
                          }
                      };
                      
                      //______________________________________________________________________________
                      function httpPost(data) {
                          let req = http.request(options, function(res) {
                          console.log("http Status: " + res.statusCode);
                          // Header (Rückmeldung vom Webserver)
                          console.log('HEADERS: ' + JSON.stringify(res.headers), (res.statusCode != 200 ? "warn" : "info"));
                          });
                      
                           // Fehler abfangen
                              req.on('error', function(e) { 
                              console.log('ERROR: ' + e.message,"warn");
                          });
                      
                           // write data to request body
                          console.log("Data to request body: " + data);
                          (data ? req.write(data) : console.log("Daten: keine Daten vorhanden"));
                          req.end();
                      }
                      
                      
                      // Abfrage des MQTT-Inhaltes bei Status-Änderung
                      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);
                             if(intentObject.hasOwnProperty('device'))
                          {
                              var deviceID = intentObject.device;
                              var state = intentObject.state;
                              var value = getState(deviceID + state);
                      
                              let data = 'Es sind momentan ' + value.val + ' Grad Celsius';
                              console.log("data: " + data);
                              log(value.val);
                              httpPost(data);
                          }
                      });
                      

                      Zusammen mit diesem Sentence:

                      [GetTemperature]
                      (sag mir | wie | wieviel | was | welche) [(ist die | ist der | ist das | ist es | sind es)] ($synonyms_temperature){value} [(es ist | ist es | haben wir | sind es)][im] ($device_name_thermostat){device}(:) {state:.ACTUAL_TEMPERATURE}
                      

                      und diesem Slot:

                      "device_name_thermostat": [
                              "(schlafzimmer):hm-rpc.0.LEQ9876543.4",
                              "(bad | badezimmer):hm-rpc.0.OEQ0111111.2",
                              "(balkon | draussen):hm-rpc.0.OEQ2666666.1",
                              "(wohnzimmer | büro | esszimmer):hm-rpc.0.LEQ1777777.2",
                              "(gästezimmer | schrankzimmer| ankleidezimmer | umkleidezimmer):hm-rpc.0.LEQ1234567.4"
                          ],
                      

                      kann ich mir nun die Temperatur von jedem Raum und von draußen ansagen lassen. Anfangs hatte ich den merkwürdigen Effekt, dass mir eine falsche IP mit Fehler zurückgemeldet wurde. Nach mehrfachem Ändern und Speichern war dieser dann jedoch unerklärlicherweise verschwunden.

                      Also: Super - wieder ein Stück weiter. Vielen herzlichen Dank für deine Hilfe.

                      Ich wünsche noch einen schönen Sonntag
                      Thomas

                      Beste Grüße
                      tobetobe

                      joergeliJ 1 Antwort Letzte Antwort
                      0
                      • tobetobeT tobetobe

                        @joergeli said in Rhasspy Offline Sprachsteuerung:

                        Rhasspy-Sprachausgabe läuft via pico-tts

                        Hallo Jörg,

                        Kompliment: Das war eine super Arbeit von dir. Ich habe dein Skript angepasst und in meines eingebaut. Dies sieht nun so aus:

                        //Skript zur Abfrage von Temperaturen
                        
                        // Variablen für MQTT
                        var intentResult = $('mqtt.0.rhasspy.intent.*Temperature');
                        var intentArray = [];
                        
                        // Für Rhasspy-TTS:
                        let http = require('http');
                        let options = {
                            host: '192.168.13.157', //Rhasspy IP-Adresse
                            port: 12101,            //Rhasspy Port
                            path: "/api/text-to-speech",
                            method: 'POST',
                            headers: {
                                'User-Agent' : 'ioBroker',
                                'Content-Type': 'text/plain',
                               // 'Content-Length': data.length
                            }
                        };
                        
                        //______________________________________________________________________________
                        function httpPost(data) {
                            let req = http.request(options, function(res) {
                            console.log("http Status: " + res.statusCode);
                            // Header (Rückmeldung vom Webserver)
                            console.log('HEADERS: ' + JSON.stringify(res.headers), (res.statusCode != 200 ? "warn" : "info"));
                            });
                        
                             // Fehler abfangen
                                req.on('error', function(e) { 
                                console.log('ERROR: ' + e.message,"warn");
                            });
                        
                             // write data to request body
                            console.log("Data to request body: " + data);
                            (data ? req.write(data) : console.log("Daten: keine Daten vorhanden"));
                            req.end();
                        }
                        
                        
                        // Abfrage des MQTT-Inhaltes bei Status-Änderung
                        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);
                               if(intentObject.hasOwnProperty('device'))
                            {
                                var deviceID = intentObject.device;
                                var state = intentObject.state;
                                var value = getState(deviceID + state);
                        
                                let data = 'Es sind momentan ' + value.val + ' Grad Celsius';
                                console.log("data: " + data);
                                log(value.val);
                                httpPost(data);
                            }
                        });
                        

                        Zusammen mit diesem Sentence:

                        [GetTemperature]
                        (sag mir | wie | wieviel | was | welche) [(ist die | ist der | ist das | ist es | sind es)] ($synonyms_temperature){value} [(es ist | ist es | haben wir | sind es)][im] ($device_name_thermostat){device}(:) {state:.ACTUAL_TEMPERATURE}
                        

                        und diesem Slot:

                        "device_name_thermostat": [
                                "(schlafzimmer):hm-rpc.0.LEQ9876543.4",
                                "(bad | badezimmer):hm-rpc.0.OEQ0111111.2",
                                "(balkon | draussen):hm-rpc.0.OEQ2666666.1",
                                "(wohnzimmer | büro | esszimmer):hm-rpc.0.LEQ1777777.2",
                                "(gästezimmer | schrankzimmer| ankleidezimmer | umkleidezimmer):hm-rpc.0.LEQ1234567.4"
                            ],
                        

                        kann ich mir nun die Temperatur von jedem Raum und von draußen ansagen lassen. Anfangs hatte ich den merkwürdigen Effekt, dass mir eine falsche IP mit Fehler zurückgemeldet wurde. Nach mehrfachem Ändern und Speichern war dieser dann jedoch unerklärlicherweise verschwunden.

                        Also: Super - wieder ein Stück weiter. Vielen herzlichen Dank für deine Hilfe.

                        Ich wünsche noch einen schönen Sonntag
                        Thomas

                        joergeliJ Offline
                        joergeliJ Offline
                        joergeli
                        schrieb am zuletzt editiert von
                        #98

                        Hallo Thomas,

                        @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                        Kompliment: Das war eine super Arbeit von dir

                        Zu viel des Lobes, ist nicht allein auf meinem Mist gewachsen, ich habe mir nur die Code-Schnipsel hier aus dem Forum zusammengesucht. :kissing_closed_eyes:

                        @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                        Ein anderes Thema: Hast du dir mal ODAS angeschaut? Damit kann man sich die Performance von Mikrofon Arrays anzeigen lassen und diese auch optimieren.

                        Ich habe zwar ODAS hier ReSpeaker_4_Mic_Array_for_Raspberry_Pi im Abschnitt "Realtime Sound Source Localization and Tracking" (ziemlich weit unten auf der Seite) gesehen, mich damit aber nicht weiter beschäftigt.
                        Dort ist auch eine Installationsanleitung aufgeführt. Evtl. kannst Du die gebrauchen, wobei ich nicht weiß, ob sie speziell für das Respeaker Mic-Array gilt.

                        Gruß
                        Jörg

                        tobetobeT 1 Antwort Letzte Antwort
                        0
                        • joergeliJ joergeli

                          Hallo Thomas,

                          @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                          Kompliment: Das war eine super Arbeit von dir

                          Zu viel des Lobes, ist nicht allein auf meinem Mist gewachsen, ich habe mir nur die Code-Schnipsel hier aus dem Forum zusammengesucht. :kissing_closed_eyes:

                          @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                          Ein anderes Thema: Hast du dir mal ODAS angeschaut? Damit kann man sich die Performance von Mikrofon Arrays anzeigen lassen und diese auch optimieren.

                          Ich habe zwar ODAS hier ReSpeaker_4_Mic_Array_for_Raspberry_Pi im Abschnitt "Realtime Sound Source Localization and Tracking" (ziemlich weit unten auf der Seite) gesehen, mich damit aber nicht weiter beschäftigt.
                          Dort ist auch eine Installationsanleitung aufgeführt. Evtl. kannst Du die gebrauchen, wobei ich nicht weiß, ob sie speziell für das Respeaker Mic-Array gilt.

                          Gruß
                          Jörg

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

                          @joergeli
                          Hallo Jörg,
                          nun habe ich auch dein Wakeword-Skript zum Laufen gebracht. PAW hat mir ja nicht genutzt, weil ich ja die Ansage am Rhasspy haben wollte. Mit deinem Skript zu Ansage über httPost geht dies nun. Statt deine Zeilen für PAW ist lediglich:

                          function wakeword(){
                              httpPost(ansage);
                              }
                          
                          bzw.
                          
                          function befehl_empf(){ 
                              httpPost(empf_ok);
                          }
                          

                          Beste Grüße
                          tobetobe

                          tobetobeT joergeliJ 2 Antworten Letzte Antwort
                          0
                          • tobetobeT tobetobe

                            @joergeli
                            Hallo Jörg,
                            nun habe ich auch dein Wakeword-Skript zum Laufen gebracht. PAW hat mir ja nicht genutzt, weil ich ja die Ansage am Rhasspy haben wollte. Mit deinem Skript zu Ansage über httPost geht dies nun. Statt deine Zeilen für PAW ist lediglich:

                            function wakeword(){
                                httpPost(ansage);
                                }
                            
                            bzw.
                            
                            function befehl_empf(){ 
                                httpPost(empf_ok);
                            }
                            
                            tobetobeT Offline
                            tobetobeT Offline
                            tobetobe
                            schrieb am zuletzt editiert von
                            #100

                            @joergeli
                            erforderlich, wollte ich noch sagen.

                            Ich bleibe dabei: Wirklich super. Übrigens: schreibe mal statt

                            const ansage =  'Ja'
                            const ansage =  'Ja?'
                            

                            Gestern Abend habe ich noch einen anderen Beitrag gepostet, der dich evtl auch interessieren könnte:
                            Bring!-Adapter mit Rhasspy steuern

                            Gruß, Thomas

                            Beste Grüße
                            tobetobe

                            joergeliJ 1 Antwort Letzte Antwort
                            0
                            • tobetobeT tobetobe

                              @joergeli
                              Hallo Jörg,
                              nun habe ich auch dein Wakeword-Skript zum Laufen gebracht. PAW hat mir ja nicht genutzt, weil ich ja die Ansage am Rhasspy haben wollte. Mit deinem Skript zu Ansage über httPost geht dies nun. Statt deine Zeilen für PAW ist lediglich:

                              function wakeword(){
                                  httpPost(ansage);
                                  }
                              
                              bzw.
                              
                              function befehl_empf(){ 
                                  httpPost(empf_ok);
                              }
                              
                              joergeliJ Offline
                              joergeliJ Offline
                              joergeli
                              schrieb am zuletzt editiert von
                              #101

                              @tobetobe
                              Hallo Thomas,
                              freut mich, daß jetzt alles funzt.
                              Ich hatte zwischenzeitlich die Sprachausgabe über meinen Mini-NF-Verstärker direkt am Rhasspy getestet: funktioniert ebenfalls.

                              Momentan kämpfe ich auf einem anderen Raspi mit dem Rhasspy Pre-Release 2.5 (Voltron), siehe:
                              Documentation Preview for 2.5

                              Installation hat soweit geklappt, allerdings gab es bis gestern noch ein Problem mit der Aktivierung eines externen MQTT-brokers. Ich habe darufhin im o.a. Link mein Problem geschildert, was dann auch prompt von synesthesiam gefixed wurde.

                              Ich habe gerade eben das neue Image mit docker pull rhasspy/rhasspy:2.5.0-pre geholt und mit

                              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
                              

                              gestartet.
                              Verbindung zum MQTT-broker funkioniert jetzt, allerdings tut sich sonst nichts mehr (Wakeword, Text to Speech, etc.) was gestern noch funktioniert hat.
                              Naja, ist ja noch Pre-Release - ich werde heute noch ein wenig damit experimentieren.

                              Noch was:
                              Gestern hat das Pre-Release auch auf snowboy.umdl (dem universellen Wakeword) reagiert, was mir mit Rhasspy V2.4.18 nie gelungen ist.
                              Ich hoffe, mit der V2.5 damit auch endlich meine Probleme mit den false/positive Wakeword-Erkennungen lösen zu können.

                              Gruß
                              Jörg

                              tobetobeT 1 Antwort Letzte Antwort
                              0
                              • tobetobeT tobetobe

                                @joergeli
                                erforderlich, wollte ich noch sagen.

                                Ich bleibe dabei: Wirklich super. Übrigens: schreibe mal statt

                                const ansage =  'Ja'
                                const ansage =  'Ja?'
                                

                                Gestern Abend habe ich noch einen anderen Beitrag gepostet, der dich evtl auch interessieren könnte:
                                Bring!-Adapter mit Rhasspy steuern

                                Gruß, Thomas

                                joergeliJ Offline
                                joergeliJ Offline
                                joergeli
                                schrieb am zuletzt editiert von joergeli
                                #102

                                @tobetobe
                                Ja/Ja? --> Betonung ist anders.
                                Wobei ich dazu sagen muß, daß das wohl abhängig von der verwendeten Sprach-Engine ist.
                                Je nach dem, ob ich Texte via PAW auf meinem Tablet mit Google-Sprach-Engine, oder via PAW auf Samsung Smartphone mit Samsung-Sprach-Engine, oder aber über picoTTS direkt am Rhasspy ausgebe, die Aussprache erfolgt jeweils unterschiedlich.

                                @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                                Gestern Abend habe ich noch einen anderen Beitrag gepostet, der dich evtl auch interessieren könnte:
                                Bring!-Adapter mit Rhasspy steuern

                                Habe ich gesehen, BRING! lasse ich aber lieber, nicht daß Frau noch auf die Idee kommt, "bring" wörtlich zu nehmen und mich zum Einkaufen verdonnert :laughing:
                                Nee im Ernst, im Prinzip kann man jetzt mit Rhasspy und JS sehr viel realisieren.

                                Gruß
                                Jörg

                                1 Antwort Letzte Antwort
                                0
                                • joergeliJ joergeli

                                  @tobetobe
                                  Hallo Thomas,
                                  freut mich, daß jetzt alles funzt.
                                  Ich hatte zwischenzeitlich die Sprachausgabe über meinen Mini-NF-Verstärker direkt am Rhasspy getestet: funktioniert ebenfalls.

                                  Momentan kämpfe ich auf einem anderen Raspi mit dem Rhasspy Pre-Release 2.5 (Voltron), siehe:
                                  Documentation Preview for 2.5

                                  Installation hat soweit geklappt, allerdings gab es bis gestern noch ein Problem mit der Aktivierung eines externen MQTT-brokers. Ich habe darufhin im o.a. Link mein Problem geschildert, was dann auch prompt von synesthesiam gefixed wurde.

                                  Ich habe gerade eben das neue Image mit docker pull rhasspy/rhasspy:2.5.0-pre geholt und mit

                                  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
                                  

                                  gestartet.
                                  Verbindung zum MQTT-broker funkioniert jetzt, allerdings tut sich sonst nichts mehr (Wakeword, Text to Speech, etc.) was gestern noch funktioniert hat.
                                  Naja, ist ja noch Pre-Release - ich werde heute noch ein wenig damit experimentieren.

                                  Noch was:
                                  Gestern hat das Pre-Release auch auf snowboy.umdl (dem universellen Wakeword) reagiert, was mir mit Rhasspy V2.4.18 nie gelungen ist.
                                  Ich hoffe, mit der V2.5 damit auch endlich meine Probleme mit den false/positive Wakeword-Erkennungen lösen zu können.

                                  Gruß
                                  Jörg

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

                                  @joergeli
                                  Hallo Jörg,
                                  schön, dass es bei dir auch weitergeht. Deinen Beitrag zur 2.5 hatte ich bereits gestern mit Interesse verfolgt und mir auch gedacht, dass du dahinter steckst (Vorname und Kompass). Die 2.5 zu testen, reizt mich nun auch. Es müsste ja möglich sein, einen zweiten Docker parallel zur 2.4.19 (!!!) zu installieren und dann jeweils die gewünschte Instanz zu starten. Das schaue ich mir an.

                                  Dass bei dir auf 2.4.18 das Standard Wakeword nicht lief, kann ich gar nicht nachvollziehen, da ich dieses ja ebenfalls verwende. Jedenfalls bin ich mit dem Ergebnissen von Snowboy sehr zufrieden und habe den Wunsch nach einem eigenen WW zu Gunsten der guten Funktionalität nach hinten gestellt.

                                  Alles andere kommt mit der Zeit...

                                  Gruß, Thomas

                                  Beste Grüße
                                  tobetobe

                                  joergeliJ 1 Antwort Letzte Antwort
                                  0
                                  • tobetobeT tobetobe

                                    @joergeli
                                    Hallo Jörg,
                                    schön, dass es bei dir auch weitergeht. Deinen Beitrag zur 2.5 hatte ich bereits gestern mit Interesse verfolgt und mir auch gedacht, dass du dahinter steckst (Vorname und Kompass). Die 2.5 zu testen, reizt mich nun auch. Es müsste ja möglich sein, einen zweiten Docker parallel zur 2.4.19 (!!!) zu installieren und dann jeweils die gewünschte Instanz zu starten. Das schaue ich mir an.

                                    Dass bei dir auf 2.4.18 das Standard Wakeword nicht lief, kann ich gar nicht nachvollziehen, da ich dieses ja ebenfalls verwende. Jedenfalls bin ich mit dem Ergebnissen von Snowboy sehr zufrieden und habe den Wunsch nach einem eigenen WW zu Gunsten der guten Funktionalität nach hinten gestellt.

                                    Alles andere kommt mit der Zeit...

                                    Gruß, Thomas

                                    joergeliJ Offline
                                    joergeliJ Offline
                                    joergeli
                                    schrieb am zuletzt editiert von
                                    #104

                                    Hallo Thomas,
                                    @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                                    Die 2.5 zu testen, reizt mich nun auch

                                    Meine Empfehlung: Warte besser damit, bis die finale V 2.5 released ist.

                                    Grund:
                                    Ich habe heute den "Voltron"-Raspi kpl. neu aufgesetzt.
                                    Anschließend das gestern gefixte 2.5 Pre-Release installiert.
                                    Verbindung zum externen (ioBroker-) MQTT-broker funktioniert nun, aber dann scheint Rhasspy "tot" zu sein.
                                    Stelle ich Rhasspy wieder auf "internal MQTT-broker" zurück, funktionieren sowohl Wake-Up-Button, als auch Wakeword "snowboy" wieder. Siehe dazu auch meinen Kommentar im Rhasspy-Forum.

                                    Gruß
                                    Jörg

                                    tobetobeT 1 Antwort Letzte Antwort
                                    0
                                    • joergeliJ joergeli

                                      Hallo Thomas,
                                      @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                                      Die 2.5 zu testen, reizt mich nun auch

                                      Meine Empfehlung: Warte besser damit, bis die finale V 2.5 released ist.

                                      Grund:
                                      Ich habe heute den "Voltron"-Raspi kpl. neu aufgesetzt.
                                      Anschließend das gestern gefixte 2.5 Pre-Release installiert.
                                      Verbindung zum externen (ioBroker-) MQTT-broker funktioniert nun, aber dann scheint Rhasspy "tot" zu sein.
                                      Stelle ich Rhasspy wieder auf "internal MQTT-broker" zurück, funktionieren sowohl Wake-Up-Button, als auch Wakeword "snowboy" wieder. Siehe dazu auch meinen Kommentar im Rhasspy-Forum.

                                      Gruß
                                      Jörg

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

                                      @joergeli said in Rhasspy Offline Sprachsteuerung:

                                      Meine Empfehlung: Warte besser damit, bis die finale V 2.5 released ist.

                                      Hallo Jörg,
                                      danke für den Tipp, den ich beachten werde. Ich habe den kompletten Nachmittag damit verbracht, Rhasspy überhaupt wieder zum Laufen zu bringen, nachdem ein Problem auftrat im Zusammenhang mit meiner Steuerung des BRING!-Adapters. Manchmal treten bei Rhasspy nicht erklärbare Effekte auf. Du hattest davon ja auch schon berichtet. Heute ging bei mir garnichts mehr! Zum Glück hatte ich ein mehrere Wochen altes Backup vom Verzeichnis bzw. vom Ordner

                                      ~/.config/rhasspy/profiles/de/
                                      

                                      und offline Kopien von Slots und Sentences. Dadurch war ich - nachdem das Problem endlich eingekreist war - in relativ kurzer Zeit wieder eine lauffähige Version herstellen.

                                      Ich habe mir angewöhnt, Backups immer dann anzulegen, wenn ich entweder die Konfiguration änder, oder wenn ich die Sentences und die Slots ergänze. Falls dann das Trainieren fehlschlägt, kann ich leicht wieder zum vorherigen Stand zurückkehren. Das Backup von .../de/ kann direkt daneben abgelegt werden.

                                      Kurzum: Nach der Aktion habe ich keinen Bedarf mehr, meine Installation mit nicht unbedingt notwendigen Spielereien zu riskieren.

                                      Also nochmals: Danke für den Tipp. Und von mir der Tipp: Leg dir besser auch ein backup an, wenn du es nicht eh schon machst. In dem Punkte ist man ja vom ioBroker richtig verwöhnt...

                                      Wünsche noch einen schönen Abend
                                      Thomas

                                      Beste Grüße
                                      tobetobe

                                      joergeliJ 1 Antwort Letzte Antwort
                                      0
                                      • tobetobeT tobetobe

                                        @joergeli said in Rhasspy Offline Sprachsteuerung:

                                        Meine Empfehlung: Warte besser damit, bis die finale V 2.5 released ist.

                                        Hallo Jörg,
                                        danke für den Tipp, den ich beachten werde. Ich habe den kompletten Nachmittag damit verbracht, Rhasspy überhaupt wieder zum Laufen zu bringen, nachdem ein Problem auftrat im Zusammenhang mit meiner Steuerung des BRING!-Adapters. Manchmal treten bei Rhasspy nicht erklärbare Effekte auf. Du hattest davon ja auch schon berichtet. Heute ging bei mir garnichts mehr! Zum Glück hatte ich ein mehrere Wochen altes Backup vom Verzeichnis bzw. vom Ordner

                                        ~/.config/rhasspy/profiles/de/
                                        

                                        und offline Kopien von Slots und Sentences. Dadurch war ich - nachdem das Problem endlich eingekreist war - in relativ kurzer Zeit wieder eine lauffähige Version herstellen.

                                        Ich habe mir angewöhnt, Backups immer dann anzulegen, wenn ich entweder die Konfiguration änder, oder wenn ich die Sentences und die Slots ergänze. Falls dann das Trainieren fehlschlägt, kann ich leicht wieder zum vorherigen Stand zurückkehren. Das Backup von .../de/ kann direkt daneben abgelegt werden.

                                        Kurzum: Nach der Aktion habe ich keinen Bedarf mehr, meine Installation mit nicht unbedingt notwendigen Spielereien zu riskieren.

                                        Also nochmals: Danke für den Tipp. Und von mir der Tipp: Leg dir besser auch ein backup an, wenn du es nicht eh schon machst. In dem Punkte ist man ja vom ioBroker richtig verwöhnt...

                                        Wünsche noch einen schönen Abend
                                        Thomas

                                        joergeliJ Offline
                                        joergeliJ Offline
                                        joergeli
                                        schrieb am zuletzt editiert von joergeli
                                        #106

                                        Hallo Thomas,

                                        was glaubst Du wohl, warum ich das Pre-Release auf einem zweiten Raspi teste :innocent:

                                        @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

                                        Ich habe mir angewöhnt, Backups immer dann anzulegen, wenn ich entweder die Konfiguration änder

                                        Wohl wahr, denn wie heißt es so schön: "Kein Backup -> kein Mitleid" :smiling_imp:

                                        Ich habe dazu auf einem WIn7-PC ein Verzeichnis freigegeben, welches ich dann automatisch auf dem Raspi einhänge (mounte).
                                        Dazu auf dem Raspi folgende Zeile in der Datei /etc/fstab anhängen:

                                        //192.168.192.102/BURNI /home/pi/BURNI cifs username=xxxxxx,password=,uid=pi,gid=pi,x-systemd.automount 0 0
                                        

                                        //192.168.192.102/BURNI ist bei mir der freigegebene Ordner auf dem WIN7-Rechner.
                                        /home/pi/BURNI ist der Ordner auf dem Raspi, in den der WIN7-Ordner gemounted wird.
                                        Username und ggf. Passwort der Freigabe auf WIN7 müssen entspr. eingetragen werden. Ich habe bei mir kein Passwort auf der Freigabe.

                                        Wenn das Laufwerk gemounted ist, braucht es nur 2 manuelle Befehle, um z.B. den kpl. Inhalt von .config/rhasspy/profiles/de
                                        auf das Laufwerk zu kopieren:

                                        cd ~/.config/rhasspy/profiles/de
                                        sudo cp -r * ~/burni/Rhasspy-Backup/rhasspy/profiles/de
                                        

                                        OK, könnte man auch in ein Shell-Script packen, dann wäre es nur 1 Befehl.

                                        Noch ein Beispiel für den Ordner /home/pi/4mics_hat

                                        cd ~/4mic*
                                        sudo cp -r * ~/burni/Rhasspy-Backup/home/pi/4mics_hat
                                        

                                        Gruß
                                        Jörg

                                        1 Antwort Letzte Antwort
                                        0
                                        • M Offline
                                          M Offline
                                          manu96
                                          schrieb am zuletzt editiert von
                                          #107

                                          Hallo zusammen,

                                          ich klinke mich hier mal ein. Habe ebenfalls bereits ein Rhasspy Setup am laufen. Bei mir ist es allerdings so das ich ein "Server" habe der die Anfragen bearbeitet und es mehrere "Clients" geben soll. Aktuell erst einmal testweise nur mit einem Client. Wollte mir jetzt das ReSpeaker 4-Mic Array bestellen und bin am überlegen wie ich die Sprachausgabe am Client direkt umsetze.

                                          Geplant ist die Clients über Raspberry Pi Zero W laufen zu lassen um Platz zu sparen. Wollte mir eine ähnliches Layout wie die Echo Dots aufbauen. Daher nun meine Frage habt Ihr bereits ein Lautsprecher den ich ggf. mit dem ReSpeaker Modul kuppeln könnte gekauft oder in Aussicht?

                                          Des weiteren muss ich mich noch mit der Sprachausgabe beschäftigen. @joergeli vielen Dank erstmal für dein Skript mit der Sprachausgabe. Da ich ja nun mehrere Clients haben könnte stellt sich mir noch die Frage wie ich erkenne welcher Client die Anfrage gestellt hat mit MQTT. Habt Ihr da eine Idee?

                                          Trotzdem danke erstmal an alle die hier mitwirken für die vielen Scripte und Infos rundum Sprachsteuerung. Bin schon auf das Ergebnis des fertigen Projektes gespannt.

                                          Gruß,
                                          Manuel

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          894

                                          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