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

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

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

Rhasspy Offline Sprachsteuerung

Geplant Angeheftet Gesperrt Verschoben Off Topic
403 Beiträge 30 Kommentatoren 100.2k 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.
  • D Offline
    D Offline
    DerT
    Forum Testing
    schrieb am zuletzt editiert von
    #208

    Hi Leute,

    ich hab zwar von oben angefangen zu lesen aber ca bei Beitrag 40 von über 200 aufgegeben.
    Finde es erstaunlich was hier bis jetzt geleistet wurde und denke es ist das wonach ich suche.

    Könnt ihr mir vielleicht einen kurzen Abriss zu dem Thema geben und mir sagen ob ich damit mein Vorhaben umsetzen kann?

    Aber erstmal meine Situation und wo ich hin will.
    Ich habe einen Homeserver auf dem Proxmox als Hypervisor läuft und darauf mehrere VMs und LXC Container. Darunter auch ioBroker.
    Sämtliche Lichter sind über Shellys Smart gemacht worden.
    Zusätzlich habe ich mehrere Echo Dot 2.
    Diese möchte ich nun gegen eine Lösung austauschen bei der ich die Kontrolle habe wo die Daten landen.
    Dabei wurde ich auf dieses Thema aufmerksam gemacht.

    Hauptsächlich nutze ich Alexa für folgende Funktionen:

    • Lampen schalten
    • Rollos bedienen
    • Timer
    • Bring Einkaufsliste
    • Musik über Radio und Spotify

    Am liebsten wäre mir hier ein Client-Server Konstrukt.
    Also ein Server der die Logik übernimmt und auf meinem Homeserver läuft und mehrere Clients zur Kommunikation.
    Als Client habe ich mir einen PI Zero mit Mikrofon und Lautsprecher vorgestellt.

    Mir ist durchaus bewusst, dass dies Bastelei bedeutet. Ich möchte nur wissen ob das hier der richtige Ansatz ist oder ich weiter suchen muss.

    Danke und Gruß
    T

    tobetobeT 1 Antwort Letzte Antwort
    0
    • D DerT

      Hi Leute,

      ich hab zwar von oben angefangen zu lesen aber ca bei Beitrag 40 von über 200 aufgegeben.
      Finde es erstaunlich was hier bis jetzt geleistet wurde und denke es ist das wonach ich suche.

      Könnt ihr mir vielleicht einen kurzen Abriss zu dem Thema geben und mir sagen ob ich damit mein Vorhaben umsetzen kann?

      Aber erstmal meine Situation und wo ich hin will.
      Ich habe einen Homeserver auf dem Proxmox als Hypervisor läuft und darauf mehrere VMs und LXC Container. Darunter auch ioBroker.
      Sämtliche Lichter sind über Shellys Smart gemacht worden.
      Zusätzlich habe ich mehrere Echo Dot 2.
      Diese möchte ich nun gegen eine Lösung austauschen bei der ich die Kontrolle habe wo die Daten landen.
      Dabei wurde ich auf dieses Thema aufmerksam gemacht.

      Hauptsächlich nutze ich Alexa für folgende Funktionen:

      • Lampen schalten
      • Rollos bedienen
      • Timer
      • Bring Einkaufsliste
      • Musik über Radio und Spotify

      Am liebsten wäre mir hier ein Client-Server Konstrukt.
      Also ein Server der die Logik übernimmt und auf meinem Homeserver läuft und mehrere Clients zur Kommunikation.
      Als Client habe ich mir einen PI Zero mit Mikrofon und Lautsprecher vorgestellt.

      Mir ist durchaus bewusst, dass dies Bastelei bedeutet. Ich möchte nur wissen ob das hier der richtige Ansatz ist oder ich weiter suchen muss.

      Danke und Gruß
      T

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

      @DerT

      Hallo und willkommen in dieser Runde,

      in der Tat haben wir hier schon einiges zusammengetragen und erarbeitet. Um es kurz zu machen: Alles, was du dir vorstellst, kannst du auch so mit Rhasspy realisieren. Das System unterstützt deine Vorstellung: Server nennt sich bei Rhasspy Master und Client nennt sich Satellit. Davon kann es mehrere geben. Deine Überlegungen zur Hardware sind in Ordnung. Pi Zero ist so ziemlich die Unterkannte, aber (wohl) i.O., wie man im Rhasspy-Forum lesen kann. Zum Mikrofon: Das ist das Schlüsselelement überhaupt. Wir setzen auf Mikrofon-Arrays, entweder von Matrix Voice oder von Seed/ReSpeaker. Für die Tonausgabe brauchst du einen kleinen Verstärker, falls dieser nicht bereits im Mikrofion mit enthalten ist. Das Zusammenspiel mit ioBroker ist im Prinzip kein Problem. Du musst halt wissen, dass du für die Verarbeitung der gesprochenen Befehle noch irgend welche Skripte benötigst. Ob Javascript oder Node-Red oder Blockly ist egal. Mittlerweile haben wir aber bereits einen guten Fundus an Skripten verfügbar, also mach dir keine Gedanken.

      Deine Funktionen

      @DerT said in Rhasspy Offline Sprachsteuerung:

      Lampen schalten
      Rollos bedienen
      Timer
      Bring Einkaufsliste
      Musik über Radio und Spotify

      sind alle machbar. Lampen kann ich schalten und dimmen. Rollos steuern (wie Dimmer mit zB 50% Verschluss). Timer habe ich auf der Rhasspy-Seite implementiert. Hier fehlt mir im ioBroker noch das Skript, um nach Ablauf ein Signal an den Satelliten zurückzuspielen. Ist aber kein Problem. Bring! habe ich vollständig implementiert mit drei verschiedenen Listen, Artikel setzen, Artikel löschen. Musik ist noch eine offene Baustelle. Dafür gibt es aber auch schon Lösungen von anderen Usern.

      Aktuell hängen wir ein wenig: Seit kurzem gibt es eine neue Rhaspy-Version 2.5-pre, die zwar einige Vorteile beinhaltet, auf der anderen Seite aber mit einem neuen Datenmodell daherkommt, sodass zumindest ich meine Skripte an die neue Struktur anpassen muss. Das dauert aber auch nur noch wenige Tage. Der Sprung von der letzten 2.4.19 auf 2.5-pre war durchaus beträchtlich. Langfristig ist 2.5 natürlich die Basis für alle weiteren Funktionalitäten. Im Moment ist diese Version allerdings noch eine Beta-Version, auf die sich aber die gesamte (Rhasspy-) Community gestürzt hat.

      Ich persönlich mache jetzt mit 2.5 weiter. @joergeli ist da noch ein wenig zurückhaltender. Aber dazu äußert er sich lieber selbst.

      Wie du einsteigst, musst du selbst entscheiden. Wir können dir hier auf alle Fälle bei vielen Fragen weiterhelfen.

      Beste Grüße
      tobetobe

      1 Antwort Letzte Antwort
      0
      • tobetobeT tobetobe

        @joergeli

        Hallo Jörg,

        vielen Dank nochmals für deinen Hinweis auf deinen sauber strukturierten JSON-String. Der war wirklich hilfreich:+1:

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

        Außerdem habe ich festgestellt, dass evtl interessant sein könnte, nicht nur den Inhalt eines Slots zu kennen, sondern auch dessen Namen, so wie er von Rhasspy mitgeschickt wird. Dann können nämlich die Befehlssequenzen intelligent für den jeweiligen Anwendungsfall zusammengebaut werden.

        Ich weiß noch nicht, ob ich da wirklich ankommen werde. Aber meine Zielvorstellung wäre, dass ich im Idealfall nur noch ein Skript für alle Anwendungen hätte - oder zumindest sehr wenige.

        Und genau mit dieser Optimierung habe ich nun meinen exMitarbeiter beauftragt.

        Mein zweiter Wunsch wäre nämlich, dass wir beide dann mit unseren bereits mühsam gesammelten Erfahrungen eine funktionierende Rhasspy-Lösung hier im ioBroker Forum anbieten können, in der Hoffnung, dass dann doch noch weiteer Interessierte aufspringen, die uns dann ggf auch mal etwas (neue Ideen) zurückgeben können.

        Selbstverständlich halte ich dich auf dem Laufenden.

        Viele Grüße
        Thomas

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

        Hallo Thomas,

        @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

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

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

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

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

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

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

        Gruß
        Jörg

        tobetobeT 2 Antworten Letzte Antwort
        0
        • tobetobeT tobetobe

          @joergeli

          Hallo Jörg,

          vielen Dank nochmals für deinen Hinweis auf deinen sauber strukturierten JSON-String. Der war wirklich hilfreich:+1:

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

          Außerdem habe ich festgestellt, dass evtl interessant sein könnte, nicht nur den Inhalt eines Slots zu kennen, sondern auch dessen Namen, so wie er von Rhasspy mitgeschickt wird. Dann können nämlich die Befehlssequenzen intelligent für den jeweiligen Anwendungsfall zusammengebaut werden.

          Ich weiß noch nicht, ob ich da wirklich ankommen werde. Aber meine Zielvorstellung wäre, dass ich im Idealfall nur noch ein Skript für alle Anwendungen hätte - oder zumindest sehr wenige.

          Und genau mit dieser Optimierung habe ich nun meinen exMitarbeiter beauftragt.

          Mein zweiter Wunsch wäre nämlich, dass wir beide dann mit unseren bereits mühsam gesammelten Erfahrungen eine funktionierende Rhasspy-Lösung hier im ioBroker Forum anbieten können, in der Hoffnung, dass dann doch noch weiteer Interessierte aufspringen, die uns dann ggf auch mal etwas (neue Ideen) zurückgeben können.

          Selbstverständlich halte ich dich auf dem Laufenden.

          Viele Grüße
          Thomas

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

          @tobetobe
          Hallo Thomas,

          auch bei mir ein Lichtblick:
          Ich habe HLC (Hermes LED Control) unter Rhasspy 2.5-pre zum Laufen bekommen.

          Im Setup von HLC ist wohl ein kleiner Fehler bei der Abfrage des Parameters pathToConfig:
          Es wird als Beispiel angegeben: /.config/rhasspy/profiles/fr/profile.json.
          Das habe ich 1:1 übernommen, allerdings mit "de"-Profil, hat aber nicht funktioniert.

          Es muss dort aber der kpl. Pfad angegeben werden, also so:
          pathToConfig=/home/pi/.config/rhasspy/profiles/de/profile.json

          Hier ist es allerdings richtig beschrieben.

          ich habe die Datei /etc/systemd/system/hermesledcontrol.service editiert und sie sieht jetzt so aus:

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

          Somit kannst Du jetzt wahrscheinlich auch bei Deinem Matrix Voice die LEDs zum Leuchten bringen.

          Gruß
          Jörg

          1 Antwort Letzte Antwort
          0
          • joergeliJ joergeli

            Hallo Thomas,

            @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

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

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

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

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

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

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

            Gruß
            Jörg

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

            Hallo Jörg,

            irgendwie lässt dich die 2.5 ja wohl doch nicht los....

            Vielen Dank jedenfalls für deine tollen Beiträge, die mal wieder sehr hilfreich sind.

            @joergeli said in Rhasspy Offline Sprachsteuerung:

            Ich habe mal ein wenig mit dem JS experimentiert, welches @Tictactoo am 23. Jan. 2020, 20:52 vorgestellt hatte.

            Genau auf der Basis hatte ich alle meine Skripte aufgebaut, die ja auch bis zum Umstieg auf 2.5 alle wunderbar liefen. Aber das ist ja nun ein echter Lichtblick. Du hattest natürlich mit einer deiner damaligen Bemerkungen Recht: Die erste Schleife zu Auslesen der Intents wird nur beim Starten des Skriptes einmalig durchlaufen, danach nicht mehr. D.h., wenn man auf der Rhasspy-Seite neue Intents hinzufügt, werden diese zunächst einmal nicht automatisch erkannt, weil es dafür noch keinen Trigger gibt.Das Problem sollte jedoch leicht lösbar sein.

            Zum Testen deines Vorschlags bin ich noch nicht gekommen. Vielleicht schaffe ich das heute Nachmittag noch.

            Dass du eine Lösung für die LEDs gefunden hast, ist ja auch eine hervorragende Sache. Das Fass mach ich aber erst wieder auf, sobald alle meine Skripte wieder wie gewünscht laufen.

            Übrigens habe ich mir diese Woche noch ein zweites Mic-Array kommen lassen. Somit habe ich jetzt bereits zwei Satelliten, die ich auf die Räume verteilen kann.
            telliten, die ich auf die Räume verteilen kann.

            Wünsche dir noch einen schönen Sonntag
            Thomas

            Beste Grüße
            tobetobe

            1 Antwort Letzte Antwort
            0
            • capitaenzC Offline
              capitaenzC Offline
              capitaenz
              schrieb am zuletzt editiert von capitaenz
              #213

              Hallo zusammen,

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

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

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

              VG
              Leif

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

              tobetobeT 1 Antwort Letzte Antwort
              0
              • joergeliJ joergeli

                Hallo Thomas,

                @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

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

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

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

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

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

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

                Gruß
                Jörg

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

                @joergeli said in Rhasspy Offline Sprachsteuerung:

                Hallo Jörg,

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

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

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

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

                setState(deviceId.state, value)
                

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

                Soweit mein Zwischenstand.

                Viele Grüße
                Thomas

                Beste Grüße
                tobetobe

                joergeliJ 1 Antwort Letzte Antwort
                0
                • capitaenzC capitaenz

                  Hallo zusammen,

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

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

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

                  VG
                  Leif

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

                  @capitaenz

                  Hallo und willkommen in unserer Rhasspy-Runde,

                  ich gehe mal kurz auf deine Fragen ein:

                  @capitaenz said in Rhasspy Offline Sprachsteuerung:

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

                  Das ist doch schon mal gut.

                  @capitaenz said in Rhasspy Offline Sprachsteuerung:

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

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

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

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

                  Dann ziehst du dir noch das neueste Image:

                  sudo docker pull rhasspy/rhasspy:2.5.0-pre
                  

                  Und setzt danach das Kommando zu Starten ab:

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

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

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

                  Gutes Gelingen!

                  Beste Grüße
                  tobetobe

                  1 Antwort Letzte Antwort
                  0
                  • tobetobeT tobetobe

                    @joergeli said in Rhasspy Offline Sprachsteuerung:

                    Hallo Jörg,

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

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

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

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

                    setState(deviceId.state, value)
                    

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

                    Soweit mein Zwischenstand.

                    Viele Grüße
                    Thomas

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

                    Hallo Thomas,
                    @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

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

                    Versuche es mal so:

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

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

                    Gruß
                    Jörg

                    tobetobeT 1 Antwort Letzte Antwort
                    0
                    • capitaenzC Offline
                      capitaenzC Offline
                      capitaenz
                      schrieb am zuletzt editiert von
                      #217

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

                      Ich fasse einmal zusammen was ich gemacht habe:

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

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

                      Danke und VG
                      Leif

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

                      joergeliJ tobetobeT 2 Antworten Letzte Antwort
                      0
                      • capitaenzC capitaenz

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

                        Ich fasse einmal zusammen was ich gemacht habe:

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

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

                        Danke und VG
                        Leif

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

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

                        siehe HermesLedControl
                        und hier: Installation & update

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

                        Gruß
                        Jörg

                        1 Antwort Letzte Antwort
                        0
                        • joergeliJ joergeli

                          Hallo Thomas,
                          @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

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

                          Versuche es mal so:

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

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

                          Gruß
                          Jörg

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

                          @joergeli said in Rhasspy Offline Sprachsteuerung:

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

                          Hallo Jörg,

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

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

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

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

                          Beste Grüße
                          tobetobe

                          joergeliJ 1 Antwort Letzte Antwort
                          0
                          • capitaenzC capitaenz

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

                            Ich fasse einmal zusammen was ich gemacht habe:

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

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

                            Danke und VG
                            Leif

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

                            @capitaenz

                            Gut soweit! Bei Fragen meldest du dich.

                            Beste Grüße
                            tobetobe

                            1 Antwort Letzte Antwort
                            0
                            • tobetobeT tobetobe

                              @joergeli said in Rhasspy Offline Sprachsteuerung:

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

                              Hallo Jörg,

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

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

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

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

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

                              Hallo Thomas,

                              @tobetobe sagte in Rhasspy Offline Sprachsteuerung:

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

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

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

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

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

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

                              Gruß
                              Jörg

                              tobetobeT 1 Antwort Letzte Antwort
                              0
                              • capitaenzC Offline
                                capitaenzC Offline
                                capitaenz
                                schrieb am zuletzt editiert von capitaenz
                                #222

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

                                • Image Flashen mit Win32 DiskImager (Raspian Buster lite)

                                • ssh und wpa_supplicant.conf auf SD-Karte anlegen

                                • sudo apt update

                                • sudo apt full-upgrade

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

                                • sudo usermod -aG docker pi

                                • sudo reboot -n

                                • sudo docker pull rhasspy/rhasspy:2.5.0-pre

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

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

                                • sudo chmod +x hlc_download.sh

                                • sudo ./hlc_download.sh

                                Abfragen:

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

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

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

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

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

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

                                • sudo reboot -n

                                • 192.168.0.93:12101 -> Webinterface aufrufen

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

                                • Save + Restart Rhasspy

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

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

                                default.JPG

                                Kann mir bitte noch jemand den entscheidenden Hinweis geben?

                                Danke und VG
                                Leif

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

                                joergeliJ tobetobeT 3 Antworten Letzte Antwort
                                0
                                • capitaenzC capitaenz

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

                                  • Image Flashen mit Win32 DiskImager (Raspian Buster lite)

                                  • ssh und wpa_supplicant.conf auf SD-Karte anlegen

                                  • sudo apt update

                                  • sudo apt full-upgrade

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

                                  • sudo usermod -aG docker pi

                                  • sudo reboot -n

                                  • sudo docker pull rhasspy/rhasspy:2.5.0-pre

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

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

                                  • sudo chmod +x hlc_download.sh

                                  • sudo ./hlc_download.sh

                                  Abfragen:

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

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

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

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

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

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

                                  • sudo reboot -n

                                  • 192.168.0.93:12101 -> Webinterface aufrufen

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

                                  • Save + Restart Rhasspy

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

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

                                  default.JPG

                                  Kann mir bitte noch jemand den entscheidenden Hinweis geben?

                                  Danke und VG
                                  Leif

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

                                  Hallo Leif,

                                  das sieht m.E. soweit gut aus.

                                  @capitaenz sagte in Rhasspy Offline Sprachsteuerung:

                                  sudo docker pull rhasspy/rhasspy:2.5.0-pre

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

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

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

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

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

                                  Gruß
                                  Jörg

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

                                  1 Antwort Letzte Antwort
                                  0
                                  • capitaenzC capitaenz

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

                                    • Image Flashen mit Win32 DiskImager (Raspian Buster lite)

                                    • ssh und wpa_supplicant.conf auf SD-Karte anlegen

                                    • sudo apt update

                                    • sudo apt full-upgrade

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

                                    • sudo usermod -aG docker pi

                                    • sudo reboot -n

                                    • sudo docker pull rhasspy/rhasspy:2.5.0-pre

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

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

                                    • sudo chmod +x hlc_download.sh

                                    • sudo ./hlc_download.sh

                                    Abfragen:

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

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

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

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

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

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

                                    • sudo reboot -n

                                    • 192.168.0.93:12101 -> Webinterface aufrufen

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

                                    • Save + Restart Rhasspy

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

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

                                    default.JPG

                                    Kann mir bitte noch jemand den entscheidenden Hinweis geben?

                                    Danke und VG
                                    Leif

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

                                    @capitaenz
                                    Hallo,

                                    das sieht ja alles schon ganz gut aus.

                                    @capitaenz said in Rhasspy Offline Sprachsteuerung:

                                    Jetzt muss noch MQTT aktiviert werden

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

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

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

                                    sudo apt update
                                    docker pull eclipse-mosquitto
                                    

                                    Eine Anleitung findest du hier:

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

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

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

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

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

                                    Beste Grüße
                                    tobetobe

                                    1 Antwort Letzte Antwort
                                    0
                                    • capitaenzC Offline
                                      capitaenzC Offline
                                      capitaenz
                                      schrieb am zuletzt editiert von capitaenz
                                      #225

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

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

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

                                      tobetobeT 1 Antwort Letzte Antwort
                                      0
                                      • capitaenzC capitaenz

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

                                        • Image Flashen mit Win32 DiskImager (Raspian Buster lite)

                                        • ssh und wpa_supplicant.conf auf SD-Karte anlegen

                                        • sudo apt update

                                        • sudo apt full-upgrade

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

                                        • sudo usermod -aG docker pi

                                        • sudo reboot -n

                                        • sudo docker pull rhasspy/rhasspy:2.5.0-pre

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

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

                                        • sudo chmod +x hlc_download.sh

                                        • sudo ./hlc_download.sh

                                        Abfragen:

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

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

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

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

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

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

                                        • sudo reboot -n

                                        • 192.168.0.93:12101 -> Webinterface aufrufen

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

                                        • Save + Restart Rhasspy

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

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

                                        default.JPG

                                        Kann mir bitte noch jemand den entscheidenden Hinweis geben?

                                        Danke und VG
                                        Leif

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

                                        @capitaenz

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

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

                                        • die Datei mosquitto.conf

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

                                        • und das leere Verzeichnis pwfile

                                        Die docker-compose.yml sollte folgenden Inhalt haben:

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

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

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

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

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

                                        Damit läuft dein Broker.

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

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

                                        Beste Grüße
                                        tobetobe

                                        joergeliJ 1 Antwort Letzte Antwort
                                        0
                                        • capitaenzC capitaenz

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

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

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

                                          Hallo Leif,

                                          schade, aber natürlich kein Problem.

                                          @capitaenz said in Rhasspy Offline Sprachsteuerung:

                                          das Ganze ist mir noch zu unausgereift.

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

                                          @capitaenz said in Rhasspy Offline Sprachsteuerung:

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

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

                                          Beste Grüße
                                          tobetobe

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          358

                                          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