NEWS
Rhasspy Offline Sprachsteuerung
-
Hallo zusammen,
ich verfolge schon seit ein paar Tagen euer Topic und will nun endlich selber in das Thema einsteigen. Ich bin allerdings absoluter Neuling. (Sowohl Raspberry Pi als auch mit ioBroker)
Habe mir folgende Hardware geholt:
Raspberry Pi 4 mit 2GB Ram
Respeaker 4 Mic ArrayMeine erste Frage ist nun wie ich sowohl den Respeaker (welcher ja an die GPIO angeschlossen wird) und einen aktiven Lüfter betreiben kann? Bisher habe ich nur Infos gefunden wie der Lüfter direkt an die GPIO angeschlossen wird.
Der Respeaker hat ebenfalls noch "Ausgangsklemmen" GPIO12. Kann ich diese für den Lüfter verwenden? Oder gibt es einen alternativen Anschluss am Pi damit mir evtl. auch nicht die Spannung einbricht?
Hoffe ihr habt da vielleicht einen Tipp für mich.
Schöne Grüße
Mario -
@Mario89
Ich habe nur einen Lüfter am ioBroker-Raspi 4, der direkt mit PIN4 = +5V verbunden ist.
Der läuft somit im Dauerbetrieb und CPU-Temp liegt so um die 40 °C
Ob überhaupt ein Lüfter unbedingt erforderlich ist, kann ich nicht sagen, denke aber, daß es der Lebensdauer durchaus zuträglich ist.
Für ioBroker würde ich aber einen Raspi 4 mit 4GByte RAM empfehlen.Am Rhasspy-Raspi 4 (also den für die Spracherkennung) habe ich keinen Lüfter und der läuft ebenfalls problemlos.
Deshalb habe ich mich auch noch nicht mit den GPIOS beschäftigt.
Ich weiß nur, daß GPIO5 für die den LED-Ring (APA102 RGB LEDs) benötigt wird.
Mehr Info's zum Respeaker 4 findest Du hier.Wenn Du Newbie in Puncto ioBroker bist, wird der Einstieg gleich mit Rhasspy wohl nicht so einfach sein, weil dazu der ioBroker-MQTT-Adapter benötigt wird und auch ein wenig JavaScript-Kenntnisse vorhanden sein sollten.
Man sollte auch das Prinzip mit den ioBroker-Datenpunkten (Objekten) verstanden haben.
Ich habe auch erst mit ein paar Sensoren angefangen und ich mich dann nach und nach weiter eingearbeitet.
Aber da wird Dir hier im Forum Unterstützung angeboten. -
@Mario89
Hallo und willkommen,Wie du sicher gelesen hast, setze ich selbst keinen ReSpeaker, sondern Matrix Voic ein. Insofern muss ich in Punkto praktischer Erfahrung leider passen. Auf die Schnelle konnte ich zwei Quellen zur Pin-Belegung des ReSpeaker 4-mic Arrays ausfindig machen:
Schaltplan auf GitHub
Schaltplan komplettGPIO12 und 13 sind in der Tat frei. Leider habe ich keine Zeit mehr gehabt noch zu schauen, was man damit nun anfangen kann.
Von daher kann ich zu deinen Ausführungen nur zwei Anmerkungen machen:
-
Ich kann nicht erkennen, ob du den Raspi sowohl für ioBroker, wie auch für Rhasspy verwenden möchtest. Es hört sich ein wenig danach an. Davon würde ich dir aus Performance-Gründen ganz klar abraten. Mach hier lieber einen sauberen Schnitt und setze zwei Raspis ein.
-
So, wie ich bisher den Einsatz von Raspis habe verfolgen können, werden diese im Großen und Ganzen ohne Lüfter betrieben. Die Kühlung über Kühlkörper reicht im Normalfall vollkommen aus. Auf die Kühlkörper kannst und darfst du übrigens auch dann nicht verzichten, wenn du den Raspi mit einem Lüfter ausstattest.
-
Solltest du darüber hinaus daran denken, den Raspi, der deinen ReSpeker versorgt, mit einem Kühler auszustatten, würde ich dirauch hierzu ganz klar abraten. Du musst zwangsläufig einen kleinen Lüfter einsetzen, der viel Geräusch und auch Vibration verursacht. Diese Störquelle wird sich dann axtrem nah beim Mic-Array befinden und somit einen hohen Störpegel verursachen. Dies wird sich negativ auf das Erkennen des WakeWords und die Befehle auswirken.
Damit wäre dann auch die relaitv komplexe Frage zur Verwendbarkeit der PINs geklärt.
Und wenn du partout nicht auf einen Lüfter verzichten möchtest, dann such dir einen rechtwinkligen USB-Stecker und zapf die 5V an einem der USB-Ausgänge ab. Dies hätte auch den Vorteil, dass die Spannung mit dem Einschalten des Raspis zur Verfügung steht. GPIO-Pins hingegen müssten noch per Software aktiviert werden, also ein kleiner Programmieraufwand.
Ich hoffe, dies hat dir einen guten Überblick ermöglicht.
Gruß
Thomas -
-
@tobetobe sagte in Rhasspy Offline Sprachsteuerung:
Die Kühlung über Kühlkörper reicht im Normalfall vollkommen aus
N'abend Thomas,
ich will hier keine Grundsatzdiskussion lostreten, habe aber schon gelesen, daß Kühlkörper für den Raspi (zumindest den 3er) nicht notwendig sein sollen und nur ein wenig mehr Umsatz für die Händler bringen.
Ich habe sogar schon lesen müssen, daß Kühlköper sogar kontraproduktiv sein können, weil dadurch mehr Hitzestau an den Übergängen Die<->Wärmeleitpaste<->Kühlkörper entstehen soll.Der Raspi4 soll ja mehr Wärme erzeugen, deshalb hatte ich dem ioBroker-Raspi seinerzeit einen Lüfter (ohne Kühlkörper) verpasst, aber wie gesagt, mein Rhasspy-Raspi läuft kpl. ohne Kühlkörper/Lüfter - wie lange wird sich zeigen
-
Hallo Jörg,
da hast du Recht. Ich kenne diese Überlegungen ebenfalls. Den endgültigen Beweis, was nun besser ist, habe ich allerdings noch nicht gefunden. Zu einem Lüfter am ioBroker-Raspi würde ich auch gar nichts sagen. Dort habe ich natürlich auch einen. Nur in Verbindung mit Rhasspy würde ich aus den genannten Gründen abraten. Auch, weil man ja (oder Frau?) eine solche Geräuschquelle nicht im Wohnbereich haben möchte. Und dort wird sich der Rhasspy ja voraussichtlich bzw in den meisten Fällen befinden.
Aber - wie schon so oft - ist das sicher auch ein Stück weit Geschmackssache
-
Hallo Thomas,
sehr langlebig und leise sind die Lüfter von Noctua, allerdings ein wenig teurer.
Ich habe den hier (ca. 15,-€) am ioBroker-Raspi, ist nur leise hörbar, wenn man das Ohr ca. 20 cm vor den Lüfter hält.
Aber ich schweife ab ... -
Vielen lieben Dank für die ganzen Infos.
Ich wollte das ganze Projekt erstmal von der Hardware so klein wie möglich halten. Sehe aber natürlich ganz klar die Vorteile von zwei getrennten Systemen. (IoBroker- Pi und Rhasspy-Pi) Werde ich mir wohl nochmal überlegen müssen bzw. Einen zweiten Pi kaufen.@joergeli Danke für die klare Aussage, dass es eine größere Herausforderung wird und natürlich für die restlichen Infos. Will das hier auch Step by Step angehen. Meine Überlegung ist erst mich auf die Verarbeitung und Ausgabe zu konzentrieren, wenn das läuft will ich die Eingabe (sprich via Rhasspy) umsetzen.
Damit ich dann aber nicht alles nochmal umstricken muss, wollte ich mich direkt so Aufbauen wie ihr es gemacht habt.@tobetobe Ja das mit den Störgeräuschen des Lüfters an das Mikrofon habe ich auch schon überlegt.
Wollte hier die beiden Komponenten räumlich mehr trennen. Sprich die GPIOs mit einem Kabel verlängern und somit das Mikrofon weiter von dem Rest entfernt montieren.
Vielen Dank für den Hinweis und die ganzen Infos. Damit ist mir schon sehr geholfen.Gruß Mario
-
Guten Morgen,
@joergeli said in Rhasspy Offline Sprachsteuerung:
Aber ich schweife ab ...
Finde ich gar nicht. Dieser Hinweis kommt für mich gerade zur rechten Zeit, da ich meinen Lüfter gern gegen einen wirklich leisen ersetzen möchte.
Ich habe mir soeben den leisesten 92mm-Lüfter bestellt.
Danke & Gruß
Thomas -
@tobetobe & all
Wie's der Teufel will, hat wohl gestern nacht der Corona-Virus meinen ioBroker-Raspi erwischt
Heute morgen wollte ich gewohnheitsmäßig das ioBroker-Log kontrollieren --> ioBroker war nicht erreichbar.
Mit Putty konnte ich mich aber auf den Raspi aufschalten, aber er war irgendwie "zäh", Average load um die 6.5/min (normalerweise ca. 0.1 - 0.3/min).
Mir schwante übles, also ioBroker neu gestartet, kam auch wieder hoch, aber alles seeehr langsam, Scripte ließen sich nicht mehr speichern, etc.
Dann Raspi rebootet, danach ebenfalls keine Besserung.Gott sei Dank hatte ich noch ein kpl. ioBroker-SD-Image vom 10.01.20 auf meinem NAS liegen.
Also neue SD-Karte mit diesem Image beschrieben.
Nach dem Booten mit der neuen SD-Karte sah es schon wieder besser aus.
Es kamen zwar einige Fehlermeldungen in ioBroker, das lag aber daran, weil ich seit Januar einige neue JavaScripte geschrieben habe, bzw. Änderungen an bestehenden JS vorgenommen hatte.
Aber glücklicherweise hatte ich gerade gestern mit ioBroker->Scripte->"Exportieren Sie alle Scripte" ein Backup erzeugt (mache ich immer, wenn ich erfolgreich ein neues Script gestrickt habe).
Mit ioBroker->Scripte->Scripts importieren konnte ich die entspr. Zip-Datei importieren und somit alle meine JS wiederherstellen.Dann musste ich noch die Adapter, die seit Januar Updates bekommen hatten, auf die aktuellen Versionen updaten und jetzt ist wieder "alles Paletti".
ioBroker läuft jetzt seit ca. 1/2 Tag wieder einwandfrei und ich habe gerade eben noch mal ein aktuelles SD-Image erzeugt und auf meinem NAS gespeichert.
Fazit:
Auch ein Lüfter verhindert einen SD-Karten-Tod nicht.
Ein rel. aktuelles SD-Image (z.B. mit Win32 Disk Imager erstellt) vereinfacht/beschleunigt die Wiederherstellung, als wenn man "nur" ein ioBroker-Backup hat.
Klar, ein ioBroker-Backup ist zwar ruckzuck erstellt, aber die anschl. Wiederherstellung dauert recht lang, weil alle Adapter neu installiert werden.Deshalb mein Tipp:
Ruhig mal ca. 1 Std. Zeit nehmen, ioBroker-Raspi runterfahren, SD-Image (auf Festplatte, NAS, o.ä) erstellen und ioBroker-Raspi wieder starten.
Im Falle eines Falles (und einer neuen SD-Karte), läuft ioBroker dann in ca. 2,5 Std. wieder.Gruß
Jörg -
@joergeli
Autsch... den Fall hatte ich zum Glück noch nicht. Ist aber einer der Gründe, warum ich bei meinem ioBroker Master von Pi4 auf Odroid gegangen bin. Da habe ich wenigstens eine SSD. Jaaaaa, die sind auch nicht ausfallsicher.Dennoch, Backup ist wichtig. Denn: Entweder man hat ein Backup oder man hat bald ein Backup. Mit dd und cron auf ein NAS zu sichern, ist ja nun auch kein Hexenwerk.
Soeben kam mein neuer Lüfter: Eine Wohltat für die Ohren. Danke nochmals für den Tipp. Ich hatte schon einen Papst im Einsatz. Wenn ich den jedoch mit dem noctua vergleiche, muss ich einfach sagen, dass der noctua das bessere Gesamtkonzept hat.
Gruß, Thomas
-
Hallo Thomas,
ja, ich bin auch froh, daß der SD-Crash rel. glimpflich verlaufen ist@tobetobe sagte in Rhasspy Offline Sprachsteuerung:
Eine Wohltat für die Ohren. Danke nochmals für den Tipp. Ich hatte schon einen Papst im Einsatz. Wenn ich den jedoch mit dem noctua vergleiche, muss ich einfach sagen, dass der noctua das bessere Gesamtkonzept hat.
Ich hatte mich vorher auch belesen, ob überhaupt ein Lüfter und wenn ja, welcher.
Da war halt die überwiegende Mehrheit von Noctua überzeugt.
Daß aber Noctua sogar noch besser ist, als seine Heiligkeit (der Papst) wußte ich noch nichtGruß
Jörg -
Hallo Jörg,
@joergeli said in Rhasspy Offline Sprachsteuerung:
Anbei meine Scripte für Zeit, Datum/Wochentag:
ich stehe vor einem Rätsel. Dein Script habe ich bei mir eingebaut und es funktioniert soweit auch sehr gut. Lediglich im Zusammenspiel mit deinem anderen Script zur Ansage der Wakeword-Erkennung (Ja?) und zur Ansage der Quittung (OK) tritt ein merkwürdiger Effekt auf. So sieht mein Script aus. Das Script für Ja? und OK ist auskommentiert.
Auskommentiert funktioniert alles und ich bekomme - je nach Frage - die Zeit oder das Datum angesagt. Wenn ich diesen Teil jedoch wieder aktiviere, findet keine Ansage statt.
Und das, obwohl die Funktion "function httpPost(data)" im Consolelog die richtige Ansage auswirft. Sie nachfolgenden Auszug aus dem LOG:
In meinem Skript reagiere ich ja auch noch auf andere MQTT-Ereignisse, zB auf Temperaturabfragen oder auf Eingaben in meine Einkaufsliste. Die funktionieren jeweils mit den Quittungen und den anschließenden Ansagen.Ich vermute ein Problem im Zusammenhang mit der Definition von Variablen, also ob lokal oder global. In dem Sinne habe ich auch schon einiges ausprobiert, komme nun aber nicht mehr weiter.
Hättest du eine Idee?
Herzlichen Dank schon einmal.
Gruß, Thomas -
Hallo Thomas,
eins vorweg:
Laß das mal mit den Spoilern, der Code wird dann irgendwie zerstückelt, besser kpl. als Code posten.Ich habe die "Stückelei" mal zusammengesetzt:
// Skript zur Sprach-Ausgabe über TTS an Rhasspy //_________________________________________________________ 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', } }; //______________________________________________________________________________ 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(); } //______________________________________________________________________________ //WakeWord-/Befehls-Erkennung const wake = 'mqtt.0.rhasspy.de.transition.SnowboyWakeListener' // Datenpunkt aendert sich von listening auf loaded, wenn wakeword erkannt wurde const befehl = 'mqtt.0.rhasspy.de.transition.WebrtcvadCommandListener' // Datenpunkt aendert sich von listening auf loaded, wenn befehl erkannt erkannt wurde const ansage = 'Ja?' // Ansage, wenn wakeword erkannt wurde. Hinweis: - Ansagetext mögl. kurz, damit er nicht als Befehl erkannt wird! const empf_ok = "OK" // Dieser Text wird gesprochen, wenn befehl erkannt wurde on({id: wake, change: "any"},function(obj) { let empf_code = getState(wake).val ; if (empf_code== "loaded"){ wakeword(); } }); on({id: befehl, change: "any"},function(obj) { let empf_code = getState(befehl).val ; if (empf_code== "loaded"){ befehl_empf(); } }); function wakeword(){ httpPost(ansage); } function befehl_empf(){ httpPost(empf_ok); } //______________________________________________________________________________ function formatTwoDigits(n) { return n < 10 ? '0' + n : n; } function wochentag(i){ var tage = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag']; var tag = (typeof(i) == 'object') ? i.getDay() : i ; return tage[tag]; } //__________________________________________________ //####################################################################### //Dieser Abschnitt wird m.E. nur einmalig!!! beim Starten des Skriptes ausgeführt //####################################################################### var intentResult = $('mqtt.0.rhasspy.intent.GetTime'); var intentArray = []; for(var i = 0; i < intentResult.length; i++) { log(intentResult[i]); intentArray.push(intentResult[i]); } //####################################################################### //####################################################################### // on({id: intentArray, change: "any"} wird niemals getriggert !!! //####################################################################### on({id: intentArray, change: "any"}, function (obj) { log(obj.newState.val); let intentObject = JSON.parse(obj.newState.val); if(intentObject.hasOwnProperty('state')) { var state = intentObject.state; if(state === "time"){ log("nach Zeit gefragt"); var now = new Date(); var hours = formatTwoDigits(now.getHours()); var minutes = formatTwoDigits(now.getMinutes()); var seconds = formatTwoDigits(now.getSeconds()); let TimeString = "Es ist jetzt " + hours + ":" + minutes + ":" + seconds; log(TimeString); let data = TimeString; httpPost(data) }; if(state === "date"){ log("nach Datum gefragt"); var datum = new Date(); var tag = datum.getDay(); var wotag = wochentag(tag); log(wotag); var now = new Date(); var dd = now.getDate(); var dd_string = String(dd); var tagi ="" if (dd_string == "1") { tagi = "ers";} else if (dd_string == "3") { tagi = "drit";} else { tagi = dd_string ;} var mm = now.getMonth()+1; var monat =""; if (mm == 1) { monat = "Januar";} else if (mm == 2) { monat = "Februar";} else if (mm == 3) { monat = "März";} else if (mm == 4) { monat = "April";} else if (mm == 5) { monat = "Mai";} else if (mm == 6) { monat = "Juni";} else if (mm == 7) { monat = "Juli";} else if (mm == 8) { monat = "August";} else if (mm == 9) { monat = "September";} else if (mm == 10) { monat = "Oktober";} else if (mm == 11) { monat = "November";} else if (mm == 12) { monat = "Dezember";} var yyyy = now.getFullYear(); var DateString = 'Heute ist ' + wotag + ' der ' + tagi + '. ' + monat + ' ' + yyyy; log(DateString); let data = DateString; httpPost(data)}}; });
Ich kann das Problem bei mir leider nicht nachvollziehen, da ich für meine verschiedenen Intents (Temperatur, Lampen, Zeit, etc.) jeweils einen eigenen Datenpunkt verwende - diesen Datenpunkt prüfe ich dann auf Änderung und triggere dann entspr. die Ausgabe, bzw. Sprachansage.
So wie ich das sehe, werden Deine Intents in ein Array geschrieben?
Dieses Array willst Du dann auf Änderung prüfen und entspr. Ansagen generieren?Etwas ist mir aber in Deinem Skript aufgefallen:
Ich glaube, die Variable var intentResult = $('mqtt.0.rhasspy.intent.GetTime');, bzw. das intentArray wird nur einmalig bei Scriptstart abgefragt, bzw. gefüllt.
Somit wird auch on({id: intentArray, change: "any"}..... niemals bei Arrayänderung getriggert, d.h. es können keine Sprachausgaben erfolgen.
Ich habe die Stelle im Script mal mit //######################## markiert.Ich würde testweise mal versuchen, diesen Abschnitt in die function befehl_empf() zu verlagern.
Dann müsste theoretisch jedes Mal, nachdem ein Befehl empfangen wurde, das Array gefüllt werden.
Anschließend könnte dann auf die Änderung des Arrays getriggert werden und mit den entspr. if-Abfragen, die entspr. Sprachansagen ausgegeben werden.Ich kenne mich zu wenig in JS aus, um zu beurteilen, ob überhaupt mit einer Array-Änderung getriggert werden kann.
Zur Not müsste man sich ein "Hilfsobjekt", bzw. "Hilfs-State" erstellen, wie z.B. "javascript.0.Arrayaenderung" und auf Änderung desselben triggern.
Mit anderen Worten: Wenn sich das Array ändert, wird ebenfalls mit z.B. setState ('javascript.0.Arrayaenderung', true); gesetzt.
Mit dieser Änderung des Datenpunktes Arrayaenderung kann dann getriggert werden.Ich glaube übrigens nicht, daß das Problem mit globalen/lokalen Variablen zusammenhängt.
Ich hoffe, mein Geschwafel hilft Dir trotzdem weiter.
Gruß
Jörg -
Guten Morgen Jörg,
tut mir leid, dass ich dir mit dem Spoiler unnötigen Aufwand verursacht habe. Beim letzten Mal dachte ich, mir wäre ein Fehler beim Hineinkopieren unterlaufen. Darauf habe ich diesmal besonders geachtet. Im Editor sieht das dann auch immer richtig gut aus, solange man "Submit" nicht auslöst. Großes Versprechen: Mache ich nie wieder!
Zurück zum Thema: Das Skript selbst habe ich von @Tictactoo übernommen und setze es zum Auslesen aller MQTT-states ein. Wie gesagt, funktioniert es tadellos. Die onIDs werden immer sauber getriggert, was ja auch grundsätzlich bei GetTime der Fall ist. Wie und warum das mit den Arrays funktioniert, weiß ich ehrlich gesagt nicht.
@joergeli said in Rhasspy Offline Sprachsteuerung:
Ich würde testweise mal versuchen, diesen Abschnitt in die function befehl_empf() zu verlagern.
Deinen Tipp werde ich mal befolgen und ausprobieren, ggf mit Hilfsobjekten, falls erforderlich
@joergeli said in Rhasspy Offline Sprachsteuerung:
Ich hoffe, mein Geschwafel hilft Dir trotzdem weiter.
Ich halte deine Ausführungen nie für Geschwafel. Im Gegenteil: Ich schätze deine Meinung ganz außerordentlich. Vielen herzlichen Dank für deine Hilfe.
Gruß
Thomas -
@joergeli
Hallo Jörg,wie ich sehe, hast du dich weiterhin mit Rhasspy Version 2.5 befasst. Mal abgesehen von deinem spezifischen Problem: Ist diese Version aus deiner Sicht schon alltagstauglich oder generell noch zu fehlerbehaftet? Abhängig von deiner Empfehlung würde ich dann entweder auch migrieren oder ggf noch warten.
Einen schönen Sonntag noch
Thomas -
Hallo Thomas,
für mich ist die V 2.5-pre nicht lauffähig, so lange sie nicht mit dem ioBroker MQTT-Adapter und dem Nicht-Standard-Port 1891 funktioniert.
Wenn Du vielleicht meine Beiträge im Rhasspy-Forum gelesen hast, funktionieren weder WakeWord (snowboyumdl) noch Wake-Up-Button, wenn ein externer, Nicht-Standard-MQTT-Port in Rhasspy aktiviert wird.
Mit der V 2.4.19 funktioniert das einwandfrei.Übrigens: Kaldi installiert sich bloß mit dem englischen Profil.
Bei deutschem Profil kommt: Not compatible.Von einer Migration Deinerseits würde ich momentan abraten.
Wenn, dann würde ich höchstens eine Parallel-Installation, oder noch besser, eine autarke Installation auf einem anderen Raspi probieren.Wenn Du magst, kannst Du dann ja auch mal probieren, ob es bei Dir dann auch das Problem mit einem Nicht-Standard-MQTT-Port gibt, bzw. mit Port 1883 funktioniert.
Im Rhasspy-Forum nutzen wohl alle nur den Standard-Port 1883.
Wenn das Problem nicht gelöst wird, werde ich bei der V 2.4.19 bleiben.Nebenbei: Bist Du mit Deinem Script weiter gekommen?
Gruß
Jörg -
Hallo Jörg,
das ist ja mal ne klare Ansage. Ich lasse mir etwas einfallen, wie ich die Migration hinbekommen kann. Ich habe ja eine Master/Satellite-Konfiguration. Den Master könnte ich auf einer virtuellen Linux-Maschine installieren und für den Satelliten habe ich noch einen alten PI3 und eine USB-Kamera mit Mikrofon. MGTT läuft bei mir als ioBroker Adapter. Der Port lässt sich dort einstellen. So könnte ich versuchen, dein Problem nachzustellen.
Ein absolutes Muss ist natürlich, dass Kaldi im deutschen Profil unterstützt wird. Aber auch das kann ich mal für dich testen. Ich entsinne mich, dass du die Fehlermeldung "Not compatible" in einer früheren Version auch bereits geschildert hattest. Vielleicht finde ich so also auch heraus, ob das ein individuelles Problem deiner Installation ist, oder ob es sich um einen generellen Mangel der 2.5 handelt.
Hört sich so an, wie wenn auch die nächste Woche nicht langweilig würde...
@joergeli said in Rhasspy Offline Sprachsteuerung:
Nebenbei: Bist Du mit Deinem Script weiter gekommen?
Nein, das habe ich zunächst mal an die Seite geschoben. Mein aktueller Workaround ist ein zweites Skript, in dem nur die Abfragen für Datum und Zeit gehandelt werden. Hier muss ich dann bis eine Lösunge gefunden ist, auf die Ansage Ja/OK verzichten. Hauptsache, das Ergebnis selbst wird angesagt. In meinem Hauptskript alle anderen Intents mit Ansage Ja/OK.
Für diesen Weg habe ich mich entschieden, weil ich die Zeit lieber in das design eines Gehäuses stecken wollte. Mit meine ersten Schritten mit FreeCAD bin ich soweit ganz zufrieden. Nun stoße ich jedoch auf einige Hindernisse, von denen ich noch nicht weiß, ob sie zwischen meinen Ohren oder in der Software liegen. Version 0.17 ist ja auch noch keine richtige Release. Die fangen ja üblicherweise erst mit 1.x an. Und einiges scheint mir durchaus noch buggy zu sein.
Gruß
Thomas -
@tobetobe
Hallo Thomas,
nur das wir uns nicht falsch verstehen:
Im ioBroker-Log sehe ich schon, das Rhasspy V 2.5-pre sich auf Topics im MQTT-Broker subscribed, nur reagiert Rhasspy danach weder auf WakeWord, noch auf Wake-Up-Button - mit anderen Worten: Er hört einfach nicht mehr.Stelle ich auf den internen MQTT-Port zurück, funktioniert wieder alles, aber natürlich kommen dann keine Intents mehr in ioBroker an.
Kaldi:
Ja, Du hast Recht, ich hatte auch in der alten Rhasspy-Version Probleme mit Kaldi.
Dort habe ich Kaldi dann manuell installiert und irgendwie hingefummelt, daß es mit Rhasspy zusammenspielt.Andererseits habe ich bei jeder meiner 2.5er Installationen zuerst den Docker-Container gestoppt/gelöscht (docker stop <container-id>, docker rm <container-id>) und danach auch noch das Image gelöscht (docker rmi <image-id>).
Also nicht nur docker pull xyz.
Somit sollte der Raspi bzgl. Rhasspy dann vor jeder Neuinstallation jungfräulich gewesen sein.
Bei erneuter Installation via Docker, konnte man dann auch sehen, daß er sich alle Dateien neu heruntergeladen hat.Wie gesagt, mit englischem Profil installiert sich Kaldi "out of the box" und mit deutschem Profil würde ich es wahrscheinlich wieder "hingefummelt" bekommen.
Wenn sich Kaldi bei Dir auch nicht mit deutschem Profil installiert, weise doch bitte im Rhasspy-Forum darauf hin.
Ich möchte da z. Zt. nicht noch eine Baustelle aufmachen ( gerade gesehen: Du hast dort ja schon nachgefragt )Übrigens: Das Kopieren der sentences.ini, bzw. custom_words.txt aus dem alten Profil in das neue Profil funktioniert.
Es wird u.U. angemeckert, das die Pronounciation (Aussprache) einiger Worte nicht erkannt wird, daß kann man aber per Button-Klick bestätigen und sich evtl. später um nicht korrekte Aussprachen kümmern.Allgemein:
Ich sehe momentan - bis auf die geänderte WEB-GUI - keine großen Unterschiede der 2.5-pre gegenüber der V 2.4.19, kann aber nicht beurteilen, was sich alles "unter der Haube" geändert/verbessert hat.@tobetobe sagte in Rhasspy Offline Sprachsteuerung:
Nein, das habe ich zunächst mal an die Seite geschoben. Mein aktueller Workaround ist ein zweites Skript, in dem nur die Abfragen für Datum und Zeit gehandelt werden. Hier muss ich dann bis eine Lösunge gefunden ist, auf die Ansage Ja/OK verzichten. Hauptsache, das Ergebnis selbst wird angesagt. In meinem Hauptskript alle anderen Intents mit Ansage Ja/OK.
Hmmm, das liest sich für mich so, als ob nur Datum/Zeit Probleme machen, sprich: wenn innerhalb des Scriptes weitere JS-Subroutinen abgearbeitet werden.
Bei Deinen anderen Intents greifst Du ja direkt auf die Rückmeldungen von Rhasspy zu, ohne erst manuelle JS-Ansagen zu generieren?Nebenbei: Ich lasse bei mir anstatt "OK" --> "Moment bitte" sagen, da es ja einen Moment dauert, bis Rhasspy antwortet.
Somit weiß der geneigte "Fragesteller", daß Rhasspy noch beschäftigt ist.FreeCad:
@tobetobe sagte in Rhasspy Offline Sprachsteuerung:Version 0.17 ist ja auch noch keine richtige Release
Nun ja, FreeCAD ist aber doch schon recht lange "auf dem Markt".
Ich habe bei mir die FreeCad V 0.18.
Dort konstruiere ich am Liebsten in der Part-Engine.
Ich ziehe mir dort Quader, Zylinder, etc. in die Arbeitsfläche und bemaße diese dann.
Wenn ich z.B. einen L-Winkel haben möchte, nehme ich 2 Quader, bemaße sie und drehe dann einen der Quader um 90 ° .
Dann einen Quader in den anderen schieben, anschl. beide Quader markieren und verschmelzen (vereinige mehrere Formen).
Der umgekehrte Weg, wie z.B. ein rundes Loch in einen Quader "bohren" funktioniert genauso:
Quader und Zylinder auf die Arbeitsfläche ziehen, bemaßen, dann ggf. den Zylinder drehen/kippen und in den Quader schieben, dann beide Formen (Zylinder und Quader) markieren und Zylinder vom Quader subtrahieren (schneidet zwei Formen).
So kann ich mir dann nach "Origami-Art" beliebige Körper zusammensetzen.
Für mich geht das einfacher/schneller, als mit der Sketcher-Eingine. -
Hallo,
mal eine frage zwischen durch, ich bin selber auf der suche nach einer offline sprachsteuerung.
iobroker läuft bei mir auf einem Ubuntu System.
Mein ziel wäre es 10 Räume mit mic und lautsprecher auszustatten (vieleicht über 10 usb Soundkarten).
Wäre das mit Rhasspy realisierbar, kann man hier mehrere räume einrichten ? -
@System-9
Hi,
da kennt sich bestimmt Thomas besser aus.
Soweit ich das beurteilen kann, sollte es mit einem Master Rhasspy und 9 Satelliten ( evtl. reichen da Raspi Zero aus) funktionieren.
Wobei dann jeder Satellit ein Micro und Lautsprecher haben muss.
Sprachausgabe könnte über USB-Soundkarte funktionieren.
Wie gesagt, warte mal ab, ob Thomas da mehr zu sagen kann, oder google mal nach "Rhasspy Community" und schau im dortigen Forum, ob Du da fündig wirst.