NEWS
Rhasspy Offline Sprachsteuerung
-
@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. -
@System-9
Hallo,
seit wenigen Tagen gibt es ja nun eine neue Pre-Release 2.5. Ich habe sie selbst noch nicht installiert, aber mich mit den verfübaren Beschreibungen bereits intensiv auseinandergesetzt. Grundsätzlich ist Rhasspy ja heute bereits fähig, über einen zentralen Master mehrere periphere Satelliten zu versorgen. Mit Version 2.5 wird diese Fähigkeit nochmals weiter ausgebaut, und wie ich es bisher sehen konnte, auch optimiert. Insofern würde ich deine Frage mit einem klaren JA beantworten.Du sprichst von einem Ubuntu System für deinen ioBroker. Ubuntu ist absolut OK. Die wesentliche Frage ist natürlich, ob deine Hardware, auf der Ubuntu läuft, leistungsfähig genug ist, ioBroker und Rhasspy Master für bis zu 10 Satelliten zu unterstützen.
Ich selbst mache das auch so: Odroid H2 mit 16 GB RAM als gemeinsamer Server für ioBroker und Rhasspy Master. Das läuft tadellos und ich habe auch noch reichlich Reserven. Wenn du allerdings Ubuntu auf einem Raspi 3 oder 4 laufen hast, würde ich dir eher davon abraten, beide Systeme (ioBroker und Rhasspy) auf dieses eine Stück Hardware zu packen. Führe dir immer vor Augen, dass ioBroker stabil laufen muss, und nicht durch ein nettes Gimmick gefährdet werden sollte.
Dies noch als zusätzliche Hinweise. Aber wie gesagt: Ja, ich halte Rhasspy für dein Vorhaben für eine sehr gut geeignete Plattform.
Bevor du anfängst Hardware zu kaufen: Überlege dir genau, was die Satelliten in Punkto Spracheingabe und Audio-Ausgabe leisten sollen. Auch dazu können wir dir hier glaube ich schon ganz gut Hilfestellung geben.
Bei Fragen: Fragen!
Gruß
Thomas -
@tobetobe sagte in Rhasspy Offline Sprachsteuerung:
Der Port lässt sich dort einstellen. So könnte ich versuchen, dein Problem nachzustellen.
Ich bin anscheinend nicht allein mit dem MQTT-Problem:
Rhasspy-Voltron/issuesNachtrag 24.03.2020:
@synesthesiam hat es jetzt als BUG deklariert. -
@joergeli
Hallo Jörg,
ja ich habe das Thema auch verfolgt. Auch darin, dass Synthesiam auf deinen Post noch nicht geantwortet hat, sehe ich eine Bestätigung, dass hier tatsächlich noch ein Fehlverhalten vorliegt.Noch befinde ich mich ja im theoretischen Bereich zur 2.5. Ich habe mir diese Anleitung
https://rhasspy.github.io/rhasspy-voltron/tutorials.html#getting-started-guide
bereits mehrfach angeschaut. Ohne parallel zu testen, ist zwar vieles verständlich, aber nicht nachvollziehbar. Und so frage ich mich, ob die Hinweise zu einem externen MQTT-Broker nicht eine Bedeutung auch für das von dir geschilderte Problem haben könnten. Morgen muss ich mich um einige berufliche Angelegenheiten kümmern (und meine Frau wurde ebenfalls verdonnert, im Home Office zu arbeiten). Von daher wird es wahrscheinlich nicht so schnell gehen, bis ich zum Testen der 2.5 komme. Steht für mich aber jetzt auf Prio 1.
Gruß und Gute Nacht
Thomas -
@tobetobe
Hallo Thomas,
nur kein Stress
Ich habe nur langsam an mir selbst gezweifelt, da im Forum immer nur unisono zu lesen war, daß es bei anderen (mit dem externen MQTT-broker funktioniert (allerdings immer mit dem Standard-Port 1883).Mach Deine Tests aber bitte nicht nur wegen mir, nicht daß Deine bisherige Installation über den Jordan geht!
Kaldi:
Das ist auch wieder so eine Sache:
Im Forum heißt es, Kaldi funktioniert unter V2.5-pre mit deutschem Profil.Kann ich aber nur eingeschränkt bestätigen:
Ich habe gerade eben die V 2.5 nochmals kpl. mit englischem Profil installiert --> Kaldi auswählbar.
Anschließend habe ich den "englischen Container" gestoppt und das deutsche Profil installiert.
Jetzt ist Kaldi auch im deutschen Profil aktivierbar und die entspr. Kaldi-Dateien werden heruntergeladen.Zu diesem Umstand, also erst englisches Profil installieren, anschl. deutsches Profil, meine ich im Forum auch schon bei V2.4.18/V2.4.19 gelesen zu haben.
Ich bin nur froh, daß ich einen zweiten Raspi zum Testen habe.
Den ersten mit der V2.4.19 fasse ich nach Möglichkeit gar nicht mehr an, bzw. nur mit Samthandschuhen, damit ich ihn mir nicht zerschieße.Gruß und bis demnächst
Jörg -
@tobetobe
Vielen Dank für die Antwort.
Um den master mache ich mir keine sorgen, läuft auf virtuell auf einem Server (24core 100gb Ram).
was würdest du als Hardware für die Satelliten empfehlen. Ich habe hier schon an Richtmikrofone gedacht, da die dinger in der Decke verschwinden sollen, mein Problem bis jetzt war, das ich auch deckenlautsprecher benötige und diese dann einen kleinen Verstärker.
Und als Herausforderung, solllen die lautsprecher natürlich dann über iobroker noch spotify abspielen können -
@System-9
Guten Morgen@System-9 said in Rhasspy Offline Sprachsteuerung:
Um den master mache ich mir keine sorgen, läuft auf virtuell auf einem Server (24core 100gb Ram).
Das ist zwar etwas knapp, dürfte aber notfalls gehen
Nun aber im Ernst. Ich greife mal einige Stichworte von dir auf.
- Richtmikrofone. Da muss ich dich natürlich erst einmal fragen, was du darunter verstehst. Echte Richtmikrofone weisen üblicherweise einen sehr schmalen Empfangswinkel auf. Außerhalb dieses Winkels sinkt die Empfindlichkeit rapide ab. Das ist im Zusammenhang mit Spracherkennung eigentlich genau das, was man nicht will.
Im Allgemeinen - und da sind die Profis wie Alexa etc sicher die besten Beispiele, haben sich nicht Richtmikrofone, sondern Mikrofon-Arrays durchgesetzt, die dank spezieller Eigenschaften "rundum" empfangen, aber dennoch für größere Distanzen (mehrere Meter) geeignet sind.
Die am meisten verwendeten Arrays stammen von ReSpeaker oder von Matrix.
- Unterbringung in der Decke: Dies spricht für eine geringe Baugröße, steht aber zugleich im Widerspruch zu deinem Wunsch, Musik über Lautsprecher abspielen zu wollen. Beides gleichzeitig geht nicht ohne entsprechenden Raum zu spendieren, und zwar für Mikrofon, Prozessor, HiFi-Verstärker, Lautsprecher (ggf mehrere?, dann mit Frequenzweiche), Stromversorgung
Ich hoffe, du bist dir darüber im Klaren. Bzw. hier musst du dich entscheiden.
a) wenn es wirklich ganz klein ausfallen soll, dann ohne großen Audio-Teil. Hierfür gibt es zwei Möglichkeiten: Entweder die "einfachen" Mikrofon Arrays mit einem externen Prozessor. Hier reicht wohl schon ein Pi Zero (habe ich selbst noch nicht getestet) oder ein Pi3/4 mit 1 bis 2 GByte RAM. Oder man nimmt die Core Varianten der Mikrofone, die bereits einen Linux-Kern beinhalten und ohne weiteren Prozessor auskommen. Beide Mikrofon Varianten (mit und ohne Core) gibt es von beiden Herstellern.
b) wenn es der maximale Funktionsumfang sein soll: Dann das volle Programm wie unter 2 beschrieben, als Prozessor Pi4 mit 2 bis 4GByte RAMMaßgeblich müsste deine Vorstellung zu den Lautsprechern und zur "Power" den Platzbedarf bestimmen. Mikrofon und Prozessor sind im Verhältnis nur Kleinkram. Persönlich könnte ich mir auch zu b) durchaus vorstellen, das alles in einem Deckenraum unterzubringen. Eines solltest du dann aber noch wissen: Selbstverständlich gibt es für dein Vorhaben kein Standardgehäuse. Da müsstest du dir auch selbst etwas bauen...
Und eines solltest du dir auch noch überlegen: Wenn du volle Möhre Musik hörst, die aus Lautsprechern kommt, die sich unmittelbar neben dem Mikrofon befinden, wie willst du dann noch einen neuen Sprachbefehl fehlerfrei erkennen lassen?
Was ich damit sagen will: Erst drüber nachdenken, was du wirklich willst, und dann die Ärmel hochkrempeln, ist besser, als einfach loslegen, Geld ausgeben und dann frustriert aufgeben, weil die eigene Vorstellung die Möglichkeiten überschreitet.
Soweit in Kürze.
Gruß
Thomas -
@tobetobe
Zum Thema Platz, da gibt es jetzt auch noch keine Probleme, da dies gerade im bau ist, und die ganze Decke abgehangen ist (10cm) und noch offen ist, hier ist nur die Frage welche kabel da rein kommen, aber so wie ich das sehe werde ich auf die Variante mit dem Mikrofon-Array gehen. ->Richtmikrofon hab ich mir erst bestellt, konnte ich selber noch nicht testen (bin selber am tüfftelt was am besten ist), aber wenn das so ist, mit dem empfangswinkel, hat sich das schon erledigt.
Aus den Deckenlautsprechern (gerne in einer anderen Ecke des Raumes) soll nur "normal" musik laufen, für alles andere gibt es die HiFi Anlage.
Das mit Musik und Sprachbefehl -> hier werd ich wohl in den Saurenapfel beißen müssen, wenn Musik gespielt wird, die Sprachbefehle nicht funktionieren -> Möglichkeit über ein Taster/Panel die Musik zu deaktivieren.
-
@System-9
Das ist ja prima, dass du noch so viele Freiheitsgrade hast. Dann würde ich dir zur Verkabelung in der abgehängten Decke folgendes empfehlen:- Am Ort des Mikrofons: 1 - 2 Steckdosen für 230V und ich würde LAN vorsehen, damit du vom WLAN unabhängig bist
- Zwischen Lautprecher und Mikrofon: Lautsprecherkabel
Ob, oder besser wie gut, Sprachbefehle erkannt werden, kann man jetzt noch nicht so sagen. Du solltest wissen, das dies maßgeblich vom sogenannten Signal/Stör-Abstand abhängt, der wiederum von den räumlichen Distanzen und Lautstärkepegeln bestimmt wird. Also: Wie laut kommt die Musik am Mikrofon an und wie laut die Sprache. Befindet sich der Mensch nahe beim Mikro und die Lautsprecher weiter weg, wird es günstiger, umgekehrt ungünstiger. Das gleiche gilt für die Lautstärke: Je Lauter die Musik am Ort des Mikros im Verhältnis der Lautstärke der Sprache am Ort des Mikros, um so ungünstiger, je leiser die Musik, umso günstiger.
Von daher: Mikro vielleicht am besten über dem Tisch / über der Sitzgruppe und die Lautsprecher entsprechend abgesetzt. Meistens geht man da ja Richtung Wand.
Noch eins: Du sprachst in Summe von ca. 10 Mikros, die du verteilen möchtest. Wenn du nicht sicherstellen kannst, dass du überall gutes WLAN hast, leg LAN-Kabel hin.
Ich hatte bei mir leider nicht die Möglichkeit, da schon alles fertig war, und bedaure fast täglich die fehlenden Anschlüsse.
Gruß
Thomas