NEWS
Rhasspy Offline Sprachsteuerung
-
@tobetobe Also bei meinen ersten kleinen Tests hat's funktioniert. Aber das es sich auf jeden Fall anwenden lässt, kann ich dir net versprechen. Hier ist mal das komplette Skript.
Als erstes würde ich mir überlegen, was du unbedingt in der sentense.ini brauchst und was besser in die Slots sollte. Dann solltest du das passend über führen und mit den jeweiligen IDs bestücken. Da ich leider noch kein Skript hab, dass die Devices und Enums umwandelt, müsste man das alles in Kleinstarbeit von Hand machen. Hier im folgenden ist mal ein Beispiel, wie ich es zum Testen gemacht hab:
Das ist noch alles andere als ideal, aber dann haste mal ne grobe Vorstellung davon, wie es aussehen sollte. Bei den Devices ist wichtig, immer Rufname des Geräts und dann mit : die ID aus ioBroker dahinter.
Dann wäre am sinnvollsten deine sentense.ini komplett an die Slots anzupassen, damit die Struktur mit meinem Beispielen übereinstimmt und immer die entsprechenden Sachen in der JSON mitgegeben werden.
Aktuell sieht mein Skript noch nicht vor, dass mehr als ein Gerät gesteuert wird, wobei ich im Idealfall gern hätte, dass es geht, weil es mir bei Alexa ziemlich annervt. Solange ich da noch nichts anderes geschrieben habe, würde ich es über ein virtuelles Gerät, ne Gruppe oder ne Szene lösen. Die dann einfach als eigenes Gerät in die Slots hinzufügen, wie die anderen Geräte.
Um deine Rollos mit meinem Intent-Handler zu steuern müsstest du deinen Sentense wie folgt umstellen. Das gleiche lässt sich dann auch auf das Dimmen der Lichter übertragen. Ich hab hier jetzt mal die rules dringelassen, würde generell aber auch hier die Namen in die Slots überführen, damit die sentense.ini schlank und übersichtlich bleibt.
Hoffe, dass dir das soweit mal geholfen hat.
-
@Tictactoo
Hi,
bzgl. Javascript und sentences führen wohl viele Wege nach Rom.
Dein Ansatz ist definitiv besser als meiner, aber ich bin auch nicht der JS-Crack und hab's "quick & dirty" gemacht.Bevor ich mich aber damit weiter beschäftige, muß ich erst mal Rhasspy "vernünftig" zum Laufen bekommen.
Es gibt bei mir Probleme mit der Geräuschkulisse (Fernseher, Radio).
Wenn davon ein Gerät eingeschaltet ist, kann zwar (meistens) WakeWord und Befehl erkannt werden, der Befehl wird aber erst abgesetzt, wenn einen kurzen Moment Ruhe ist.Ich habe das hier im Bastelzimmer mit einem Radio getestet:
1.) Radio aus: alles Paletti, WakeWord und Befehl werden erkannt und abgesetzt.
2.) Radio an: WakeWord wird meist erkannt, Befehl (glaube ich zumindest) ebenfalls.
Der Befehl wird aber erst abgesetzt, wenn ich das Radio leiser drehe.
(Das erkenne ich daran, wann sich der entspr. Objekt-Status in ioBroker ändert.)
Rhasspy braucht wohl einen kurzen Moment Stille, um fortzufahren.Somit ist Rhasspy für mich wohl unbrauchbar, weil ich den Raspi im Wohnzimmer betreiben will, um damit Szenen, wie z.B. "Fernseh gucken", oder "Schlafen gehen" schalten will (div. Lampen, TV, Sat-Receiver schalten)
"Fernseh gucken" geht, aber "Schlafen gehen nicht", weil im Hintergrund der Fernseher läuft.
Srelle ich den Fernseher manuell via FB auf "mute", wird auch die Szene "Schlafen gehen" weiter abgearbeitet.
Aber das ist ja nicht Sinn der Sache, vorher händisch einzugreifen.Du hast Alexa erwähnt, wie verhält es sich denn damit?
Funktioniert die einwandfrei, wenn im Hintergrund Fernseher, oder Radio läuft?
(Wobei Alexa, Siri, etc. für mich nicht in Frage kommen, wegen Online-Erkennung)Gruß
Jörg -
Hallo Thomas,
Wake Word::
Damit habe ich eigentlich keine Probleme, seit ich Snowboy installiert habe und das WakeWord online (von einem Windows-PC mit anderem Mikrofon) generiert habe.
Sowohl das originale WakeWord "Snowboy", als auch mein eigenes "Hiwi" werden gut erkannt.@tobetobe sagte in Rhasspy Offline Sprachsteuerung:
Zu den Szenen: Ich verwende für meine Mediengeräte (TV etc.) eine Harmony Fernbedienung mit Harmony Hub. Dort heißen Szenen Aktivitäten. Wisst ihr, wie man diese Aktivitäten aus ioBroker starten kann? Dann könnte ich nämlich als Szenen "Fernsehen", "Radio hören", "DVD abspielen" etc einrichten.
Zu Harmony-Szenen kann ich leider nichts beitragen, da ich selbst einen Broadlink RM+ (der kann RF und IR senden) mit entspr. Broadlink-Adapter in ioBroker verwende. Da werden die Szenen direkt im Broadlink-Adapter eingetragen.
Es gibt ja auch einen eigenen Szenen-Adapter für ioBroker, evtl. hilft der Dir weiter?RGB-LEDs von MatrixVoice:
Ich weiß noch nicht, ob mir das hilft, da ich ja ein ReSpeaker 4-Mic Array habe.
Das Matrix Voice gibt's wohl auch nicht mehr zu kaufen ( bei den üblichen verdächtigen e..y und a.....n) ?Zumindest habe ich es schon geschafft, mit den Demo-Scripten (python) von Seed die LEDs zum Leben zu erwecken.
Mit dem DOA-Script leuchtet z.B. der LED-Ring grün auf und im Ring zeigt eine einzelne blaue LED an, aus welcher Richtung der Schall empfangen wurde.
Ich habe aber keinen Plan, wie ich den LED-Ring auf das WakWord reagieren lassen kann
Evtl. mit Python-Script, wenn ich wüsste, wo ich in Rhasspy eine Variable, Event, Prozess, o.ä abgreifen könnte, wenn das WakeWord erkannt wurde
Ist aber auch erst mal nicht so wichtig, da - wie schon geschrieben - das für mich größte Problem die Umgebungsgeräusche vom TV sind (siehe auch meine Antwort an @Tictactoo )Zur Mikrofen-Empfindlichkeit:
Das reicht bei mir aus, schätzungsweise ~4m
In meinem Fall (Umgebungsgeräusche) wäre es aber IMHO kontraproduktiv, die Empfindlichkeit höher zu drehen, weil ja dann wohl auch die Umgebungsgeräusche "lauter" empfangen werden,?
Das Matrix Voice hat - soweit ich es im Internet gelesen habe - eine extra "Noise Reduction", was auch immer darunter zu verstehen ist.Gruß
Jörg -
Hallo zusammen,
@Tictactoo: Vielen Dank für deine Unterstützung. Heute habe ich keine Zeit mehr. Ich werde mich morgen damit befassen, deine Hinweise abzubilden und zu testen. Das finde ich übrigens ein sehr starkes Feature von Rhasspy: Einfach die Konfigdateien kopieren, in einer text-Datei sichern, andere Konfig reinkopieren und das ganze ggf wieder rückgängig machen.@joergeli: Um deine LEDs am Respeaker steuern zu können, habe ich folgende schöne Anleitung gefunden: http://wiki.seeedstudio.com/ReSpeaker_4_Mic_Array_for_Raspberry_Pi/
Mangels eigener Hardware kann ich dir dabei leider nicht weiterhelfen. Ich finde die Anleitung aber sehr verständlich und glaube, dass du das hinbekommst.
Dann nochmals zur Mikrophonthematik insgesamt:
Ein gutes Mikrofon besteht immer aus einem Array (also mehreren MICs) und erfordert eine lokale und leistungsfähige Verarbeitungsinstanz, die die verschiedenen Betriebsmodi (Beamforming, AGC, etc) unterstützt. Besonders wichtig ist dabei auch der Parameter Signal/Noise. Je niedriger dieser bei fehlerfreie Erkennung ist, umso besser werden Signale auch bei Störgeräuschen verstanden. Ansonsten liegt es natürlich in der Natur der Dinge, dass die Erkennung bei zunehmendem Störgeräusch und bei zunehmender Distanz abnimmt.
Bei meinem MatrixVoice ist das leider nicht der Fall. Zwar gibt es einen entsprechenden Prozessor, es fehlt aber an der Software-Unterstützung. Dadurch wird nicht durch Auswertung der Signale aus den sieben MIC-Eingängen ein optimiertes Signal generiert. Vielmehr werden die sieben Signale, die ja alle mit unterschiedlichem Pegel, verschiedenenen Phasenlagen und mit Laufzeitunterschieden eintreffen zu einem Summensignal aufaddiert. Das gibt natürlich einen ziemlichen Brei. In der Matrix Community habe ich hierzu einen vernichtenden Beitrag von jemandem gefunden, der selbst Mikrofone für professionelle Anwendungen entwickelt. Keine Antwort von Matrix!
Das ReSpeker Array schneidet da mit nur vier MICs deutlich besser ab.
Hier habe ich einen interessanten Test von der Snips-Community gefunden:
https://medium.com/snips-ai/benchmarking-microphone-arrays-respeaker-conexant-microsemi-acuedge-matrix-creator-minidsp-950de8876fdaDas beste Mikrofon Array überhaupt ist das für Alexa, was nicht verwundert. Leider ist dieses für Amazon exklusive entwickelt worden und für Endverbraucher nicht verfügbar.
Mein Fazit momentan: Rhasspy selbst macht auf mich einen immer besseren Eindruck. Die Mikrofon-Thematik blende ich für mich momentan mal aus und verfolge lieber eine saubere Konfiguration bzw Funktionalität. Danach schaue ich nach einem alternativen Mikrofon, um die akustischen Verhältnisse zu optimieren.
Euch noch ein schönes Wochenende
Thomas -
Hallo Jörg, zum Umgang von Rhasspy mit Hintergrundgeräuschen würde ich dir raten, diese Frage direkt an das Entwicklerteam bzw an die Community zu stellen. Die müssten sich doch eigentlich schon aus eigenem Interesse heraus mit dieser Thematik befassen. Vielleicht gibt es hierzu ja schon Lösungsvorschläge, wie das Verhalten optimiert werden kann. Hier nochmals der Link zur Community: https://community.rhasspy.org/
Viele Grüße
Thomas -
Hallo zusammen,
soeben habe ich hier https://community.rhasspy.org/ gesehen, dass es eine neue Version 2.4.17 gibt. Neu ist, dass der jeweils letzte Sprachbefehl gespeichert wird und abgespielt werden kann, um Optimierungen vornehmen zu können.
Habt ihr die Beschreibung, wie ein Update korrekt ausgeführt wird?
Falls nicht, kann ich diese ja gleich noch einmal hier posten.
-
Hallo,
ich habe gerade bei mir das Update auf 2.4.17 vorgenommen. So geht es:
docker ps (zeigt CONTAINER ID an, diese kopieren)
docker stop CONTAINER ID
docker rm CONTAINER ID
docker pull synesthesiam/rhasspy-server:latestdocker 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
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 deBrowser aktualisieren, ggf. Cache löschen mit F5 oder Strg F5, falls die neue Version nicht angezeigt wird.
Gutes Gelingen
-
Hallöchen,
ich war heute auch etwas tätig und hab ein Skript geschrieben, um die Device-Liste für die Slots auszulesen:
var devices = $('zigbee.0.*.available'); var devicesMessage = "\"device_name\": ["; for(var i = 0; i < devices.length; i++) { var tempObj = getObject(devices[i].replace('.available','')); devicesMessage += "\"" + tempObj.common.name + ":" + tempObj._id; if(i == devices.length-1) { devicesMessage += "\""; } else { devicesMessage += "\","; } } devicesMessage += "]" sendTo('mqtt.0', 'sendMessage2Client', {topic: '/rhasspy/slots/rooms', message: devicesMessage});
Da ich nur Zigbee-Devices hab, habe ich zum auslesen jetzt einfach mal den "zigbee.0..available" State mit *-Wildcard benutzt. Das müsstet ihr bei euch natürlich entsprechend anpassen. Leider hab ich es mit einem "zigbee.0.*"-Selektor nicht hinbekommen. Blicke bei dem ganzen Selektor-Ding noch net so ganz durch.
-
@tobetobe
Hallo Thomas,
ich habe enen Erfolg mit einem Workaround zu vermelden
Ich hatte gestern meinen Raspi kpl. neu mit Rhasspy (V 2.7.!4) aufgesetzt, weil ich zwischenzeitlich schon so viel probiert/installiert habe, um die Onboard-LEDs zum Laufen zu bringen, daß ich mir gedacht habe, "alles neu macht der Mai"
Mir sind aber in der neuen Version - zumindest vom Web-Frontend - keine Änderungen aufgefallen.Ich wollte aber unbedingt eine optische/akustische Rückmeldung haben, wenn Rhasspy das WakeWord erkannt hat, aber mit Kophörer ist das ja nicht das "Gelbe vom Ei".
Also habe ich in den Objekten der MQTT-Instanz auf dem iobroker gesucht und bin auch fündig geworden:
Es gibt dort zwei Objekte ( mqtt.0.rhasspy.de.transition.SnowboyWakeListener und mqtt.0.rhasspy.de.transition.WebrtcvadCommandListener )
Das erste Objekt wechselt vom State "listening" auf "loaded", wenn das Snowboy-WakeWord erkannt wurde.
Das zweite Objekt wechselt vom State "listening" auf "loaded", wenn das Sprachkommando erkannt wurde.Diese beiden States habe ich mir mit einem JS zu Nutze gemacht, um via PAW-Adapter eine Ansage ("Ja") auf meinem Tablet zu machen, wenn das Wakeword erkannt wurde ( Längere Ansagen, wie z.B. "zu Diensten", funktionieren nicht, da Rhasspy dann schon im Erkennungsmodus ist und das "....iensten" schon zum Sprachbefehl addiert).
Wenn der Sprachbefehl erkannt wurde "sagt" das Tablet "OK".
Also: Ich sage mein WakeWord "Hiwi", Tablet antwortet mit "Ja", dann sage ich den Sprachbefehl", wie z.B. "Wie spät ist es" und das Tablet antwortet mit "OK".
Nach einem kurzem Moment sagt mir mein Tablet dann die aktuelle Uhrzeit, (die ich ebenfalls mit JS generiere).
Anbei das "WakeWord-Script", falls es jemand gebrauchen kann://############################################### // WakeWord-Erkennung const ansage = 'Ja' // Dieser Text wird gesprochent, wenn wakeword erkannt wurde // Hinweis: - Ansagetext text muss mögl. kurz sein, damit er nicht als befehl erkannt wird! const empf_ok = "OK" // Dieser Text wird gesprochen, wenn befehl erkannt wurde const wake = 'mqtt.0.rhasspy.de.transition.SnowboyWakeListener' // Datenpunkt aendert sich von listening auf loaded, wenn wakeword erkannt wurde const befehl = 'mqtt.0.rhasspy.de.transition.WebrtcvadCommandListener' // Datenpunkt aendert sich von listening auf loaded, wenn befehl erkannt erkannt wurde on({id: wake, change: "any"},function(obj) { let empf_code = getState(wake).val ; if (empf_code== "loaded"){ wakeword(); } }); on({id: befehl, change: "any"},function(obj) { let empf_code = getState(befehl).val ; if (empf_code== "loaded"){ befehl_empf(); } }); function wakeword(){ lautstaerke(); // Lautstaerke auf Max setzen sendTo("paw.0",'Tablet_Jörg',{tts: ansage }); // Sprachausgabe "Ja" mittels PAW-Adapter auf Tablet/Smartphone //sendTo("paw.0",'Tablet_Jörg',{play: true}); // optional default sound anstatt sprachausgabe mittels mittels PAW-Adapter auf Tablet/Smartphone abspielen } function befehl_empf(){ lautstaerke(); // Lautstaerke auf Max setzen sendTo("paw.0",'Tablet_Jörg',{tts: empf_ok }); // Sprachausgabe "OK" mittels PAW-Adapter auf Tablet/Smartphone //sendTo("paw.0",'Tablet_Jörg',{play: true}); // optional default sound anstatt sprachausgabe mittels PAW-Adapter auf Tablet/Smartphone abspielen } // Lautstaerke von Tablet/Smartphone auf Maximum setzen function lautstaerke(){ sendTo("paw.0",'all',{volume: 15}); } // Ende WakeWord-ErkennungsScript //###############################################
Mein zweites Problem mit der Geräuschunterdrückung habe ich (vor ca. 1 Std. ) endlich ebenfalls ganz gut in den Griff bekommen:
Ich hatte/habe in den Settings bei Voice Detection die Einstellung Use webrtcvad and listen for silence gewählt, bzw. diese ist per Default vorgegeben.
Dann habe ich in der Rhaspy-Docu im Abschnitt "Command Listener" diesen Hinweis gefunden:WebRTCVAD
Listens for a voice commands using webrtcvad to detect speech and silence.
Add to your profile:"command": { "system": "webrtcvad", "webrtcvad": { "chunk_size": 960, "min_sec": 2, "sample_rate": 16000, "silence_sec": 0.5, "speech_buffers": 5, "throwaway_buffers": 10, "timeout_sec": 30, "vad_mode": 0 } }
Das habe ich über den Advanced-Tab von Rhasspy in mein Profil eingefügt, aber den Parameter "timeout_sec": 30 auf "timeout_sec": 1 geändert.
Was soll ich sagen, momentan dudelt im Hintergrund das Radio und Rhasspy versteht mich jetzt trotzdem ... da kommt Freude auf !!!Vielen Dank auch für Deine Mühe, mir bei den LEDs zu helfen, den Link zu den Seed-Python-Scripten hatte ich auch bereits vorher gefunden, habe es aber trotzdem "nur" halb zum Laufen bekommen.
"Halb" heißt, wenn ich den Docker-Container mit Rasspy gelöscht habe, liefen die Scripte und die LEDs drehten sich bunt im Kreis. Sowie ich den Docker-Container aber neu gestartet habe, liefen sie nicht mehr, weil die Seed 4 Mic-Karte bereits von Rhasspy belegt war.
Egal, mit meiner jetzigen Lösung mit der akustischen WakeWord-Signalisierung per Tablet/Smartphone kann ich leben.Deinen Link zum Mikrofon-Vergleich finde ich sehr interessant.
Bei Hintergrundmusik schneidet das PlayStation Eye-Micro bei der Wakeword-Erkennung am Besten ab, wobei das Respeaker-Mic bei Ruhe und weßem Rauschen die besten Ergebnisse bring, aber bei Hintergrundmusik "in den Keller" geht - wie ich ja selbst erfahren musste.Danke nochmals
Jörg -
Moin moin zusammen,
@joergeli Das mit dem Timeout werd ich mir auf jeden Fall merken und auch mal testen. Wenn das des Rätsels Lösung ist, wäre das ja klasse! Ich denke, dass ich mich diese Woche mal mit der Rückführung von Antworttexten an den Rhasspy beschäftige. Ich halte euch gern auf dem Laufenden!
Ich habe das Skript zum generieren der Slots für meinen Intent-Handler inzwischen erweitert, so dass auch Rooms und Functions generiert werden:
Wenn man das entsprechende Topic mit einem MQTT Programm abonniert, kann man zumindest mal die Slots per CP in Rhasspy einfügen, bis ich ein Skript für das automatische Schreiben geschrieben habe. Bei mir hat es im Test mit den vielen Geräten ziemlich gut funktioniert. Falls ihr die Muse habe es mal zu testen, wäre ich für euer Feedback dankbar. Solltet ihr btw noch Ideen haben, wie man den Intent-Handler sinnvoll erweitern kann, schreibt es mir gern, dann schreibe ich da mal was zusammen.
-
Hallo zusammen,
vielen Dank für eure super Beiträge. Berufsbedingt werde ich in dieser und der nächsten Woche eure Beiträge nur lesen, aber nicht testen können. Daher kurz mein aktueller Stand der Dinge.@Tictactoo: Deine Slots und Sentences habe ich wie vorgeschlagen umgesetzt. Dabei bin ich sogar noch einen Schritt weiter gegangen, und habe die Sentences für Dimmer und Blinds von der Syntax her exakt so aufgebaut, wie du es für die Zustände der Lampen, die man nue ein/aussschalten kann, beschriebene hast. Allerdings mit dem Level (0..100).
Das funktioniert im Prinzip, außer dass der Zustand "0 Prozent" nicht angenommen wird. Hier müstte ich dein Skript dahingehend anpassen, dass ich auch einfach ein/an/aus sagen könnte. Das muss ich mir noch anschauen.
Dein Script für den Import der Devices finde ich extrem interessant. Leider keine Zeit bzw, nur ganz wenig Zeit zum Testen...
@joergeli : Deinen Hinweis zu WebRTCVAD habe ich noch versucht zu implementieren. Leider ist diese Ergänzung im Profil bei mir immer wieder verschwunden. Ich musste auf dem Rhasspy-Raspi runter ins Directory ~/.config/rhasspy/profiles/de $ und die Datei profile.json direkt editieren. Nun habe ich keine Zeit mehr zum Testen...
Dein Wake Word Script finde ich super cool. Auch hier gilt leider: keine Zeit bzw. ganz wenig Zeit zum Testen...
Von daher wünsche ich weiter gutes Gelingen. Ich werde eure Beiträge verfolgen und mich, sofern ich Zeit habe, mal einklinken.
-
Nochmals hallo,
falls ihr eure LEDs vom Mikro ansteuern wollt, gibt es hier die entsprechenden Anweisungen - und zwar passend zu Rhasspy, nichts allgemeines. Liest sich interessant, denn sowohl das ReSpeaker, wie auch mein MatrixVoic Mic werden unterstützt.
https://community.rhasspy.org/t/hermesledcontrol/285
https://github.com/project-alice-assistant/HermesLedControl/wiki/Intro -
@tobetobe und andere Interessierte:
ich habe mich gleich auf den HermesLedControl-Link gestürzt
und die Installation von Hermes LED Control gestartet. Während der Installation wurde nach der gewünschten engine gefragt, die ich mit "rhasspy" angegeben habe - wurde aber bemängelt, es ging aber trotzdem weiter mit der Frage, welche Hardware verwendet wird. Habe ich mit "respeaker4" beantwortet. Danach wurde gefragt, ob die Hardware konfiguriert werden soll -> mit "Ja" beantwortet, weil es "strongly recommended", also empfohlen wurde.
War m.E, nicht unbedingt notwendig, weil ich die Treiber ja vorher schon direkt von Seed installiert hatte.
Aber egal, hat dann ein Weilchen gedauert, bis die Treiber (und sonstiges?) für das ReSpeaker4-Mic installiert waren.Nach Fertigstellung der Installation habe ich - wie beschrieben - den pathToConfig angepasst:
sudo systemctl stop hermesledcontrol sudo nano /etc/systemd/system/hermesledcontrol.service sudo systemctl daemon-reload sudo systemctl start hermesledcontrol
Die hermesledcontrol.service sah dann so aus:
[Unit] Description=Hermes Led Control [Service] WorkingDirectory=/home/pi/hermesLedControl_v2.0.3 ExecStart=/home/pi/hermesLedControl_v2.0.3/venv/bin/python3 main.py --engine=rhasspy --pathToConfig=/home/pi/.config/rhasspy/profiles/de/profile.json --hardware=respeaker4 --pattern=kiboost --mqttServer=192.168.192.29 --mqttPort=1891 Restart=always RestartSec=5 User=pi [Install] WantedBy=multi-user.target
Ich habe dort zusätzlich die IP des ioBroker-Raspi, bzw. des MQTT-Brokers und den Port eingetragen (den Port hatte ich geändert, weil auf dem ioBroker-Raspi noch ein Mosquitto-Broker läuft, der den Standardport 1883 belegt)
Nach daemon-reload und start hermesledcontrol leuchtete dann der LED-Ring mit dem kiboost-Pattern auf.
Habe das dann auch mal den anderen Pattern (google, alexa, etc.) probiert - geht auch.Jetzt kommt aber das "aaaaber":
Ich habe mit./venv/bin/python3 main.py --debug=True
versucht den Debug-Modus zu aktieren, was mit Fehlermeldung quittiert wurde, Screenshot:
Dann habe ich mir noch unter /home/pi/hermesLedControl_v2.0.3 das logs.log angesehen, was m.E. "ganz gut" ausgesehen hat:
2020-01-29 22:16:26,867 [MainThread] - [INFO] - Starting Hermes Led Control v. 2.0.3 2020-01-29 22:16:26,878 [MainThread] - [INFO] - Initializing HermesLedControl 2020-01-29 22:16:26,907 [MainThread] - [INFO] - Initializing Rhasspy settings 2020-01-29 22:16:26,908 [MainThread] - [INFO] - Loading configurations 2020-01-29 22:16:26,910 [MainThread] - [INFO] - Loaded 12 hardware references 2020-01-29 22:16:26,910 [MainThread] - [INFO] - - Mqtt server set to 192.168.192.29 2020-01-29 22:16:26,911 [MainThread] - [INFO] - - Mqtt port set to 1891 2020-01-29 22:16:26,912 [MainThread] - [INFO] - - Client id set to default 2020-01-29 22:16:26,912 [MainThread] - [INFO] - - Hardware set to ReSpeaker 4 2020-01-29 22:16:26,913 [MainThread] - [INFO] - - Using alexa as pattern with 12 leds 2020-01-29 22:16:26,913 [MainThread] - [INFO] - Initializing leds controller 2020-01-29 22:16:27,053 [MainThread] - [INFO] - Hermes Led Control started
Anschließend habe ich mir noch in der iobroker mqtt-Instanz die Objekte/Topics bzgl. Hermes angesehen, die ja von Hermes LED Control genutzt werden sollen. Die wurden auch alle wie beschrieben angelegt, siehe Screenshots;
Jetzt stehe ich aber auf dem Schlauch, wie ich damit die LEDs steuern kann.
Ich habe ein wenig in den Settings von Rhasspy rumgespielt, z.B. unter VoiceDetection
Use MQTT (Hermes protocol)
Rhasspy will listen for hermes/asr/startListening und hermes/asr/stopListening
aktiviert und anschl. in den Datenpunkten/Topics Fantasie-Werte eingetragen, in der Hoffnung, daß dann irgendwelche LEDs leuchten, aber es tut sich nichts (habe anschl. wieder auf Use webrtcvad and listen for silence zurückgestellt, weil ja sonst das Micro tot ist.)
Nachdem ich jetzt damit 1,5 Tage herumgedoktort habe, weiß ich nicht mehr weiter.Falls jemand trotzdem Zeit und Muße hat, das auszuprobieren, könnt ihr ja mal berichten, wie es bei euch gelaufen ist.
Evtl. sehe ich ja den Wald vor lauter Bäumen nicht.Gruß
JörgP.S.
@tobetobe
Das mit dem WebRTCVAD habe ich auch direkt im profile.json editiert.
Muß aber wohl etwas zurückrudern, der Timeout bewirkt m.E nur, daß die Erkennungszeit verkürzt wird, die sonst mit Hintergrundmusik/Geräuschen ziemlich lang war.
Meine Sprachbefehle / Intents werden meistens auch gut erkannt, aber manchmal wird auch ein kpl. anderes Intent geschaltet. Habe auch schon versucht, das mit wiederholtem trainieren der Sentences zu verbessern, es kommen aber doch noch "Fehl-Intents" rein. Bei Totenstille funktioniert das rel. gut, aber bei Hintergrundgeräuschen häufen sich die Fehler. -
@Tictactoo
Hallo Tictactoo, ich hatte kurz Zeit, dein Skript zum Auslesen der ENUMs zu installieren und zu testen. Den Pfad zu meinen Devices habe ich aufvar devices = $('hm-rpc.0.*.LEVEL');
gesetzt und dein nachfolgendes ".available" ebenfalls auf ".LEVEL" gesetzt. LEVEL ist bei mir der Datenpunkt von dimmbaren Lampen. STATE hingegen ist der Datenpunkt zum Ein-/Ausschalten von statischen Lampen. Das Skript wird dann mit ".LEVEL" auch korrekt gestartet. Verwende ich stattdessen jedoch STATE, stoppt das Skript mit Fehlercode 889 bei Zeile 15/37.
Aber auch bei korrektem Start mit LEVEL werden bei mqtt.0 keine Daten erzeugt. Ich nehme an, 'sendMessage2Client' ist der mqtt-Datenpunkt über den RHasspy die ENUMs und Devices bekommt, richtig? Wurde dieser Datenpunkt bei dir automatisch generiert, oder muss er manuell angelegt werden? (Komme leider nicht mehr dazu, das selbst zu testen)
Viele Grüße
Thomas -
@tobetobe Zu MQTT: Es ist so (ist mir aufgefallen) dass die nur erzeugt werden, wenn irgendwer die Topics von einem Broker abonniert sind.
Zu deinem Fehler:
Kannst du mir mal posten, welche Zeile das bei dir im Code ist, an der der Fehler kommt? Bei mir hat Zeile 15 keine 37 Zeichen^^ Deshalb ist es grade schwer da aus der Ferne was zu zu sagen. Hast du ".STATE" gemacht? -
Hallo, vielen Dank, dass du mal nachschauen möchtest. Bei meinen HomeMatic Devices habe ich natürlich eine andere Pfadlänge. Die hatte ich zwischenzeitlich noch angepasst. Leider tritt der Fehler weiterhin auf.
So sieht der State aus:
hm-rpc.0.LEQ3333333.1.STATE
Ich habe dein Skript noch um einige Leerzeilen erleichtert. Die Fehlermeldung kommt nun aus Zeile 7, die ich gekennzeichnet habe (nur hier im Spoiler, nicht im Skript)
So sehen meine mqtt-Objekte aus:
An welcher Stelle müsste ich deiner Meinung nach den Datenpunkt 'sendMessage2Client' anlegen?
-
@tobetobe Zu MQQT: Du musst nix von Hand anlegen. Es muss nur einfach ein Broker (zum Beispiel auf Windows MQTTBox) das entsprechende Topic abonnieren. Dann erscheint auch der Punkt. Ersetze es doch einfach vorerst durch log();
Zu den States: Ist denn ".1" in jedem Gerät vorhanden? Und ist ".1" das Gerät, oder musst du evtl ".1.STATE" ersetzen. Kannst du mir von deinen Geräten auch mal einen Scrennshot anhängen aus der Baumstruktur?
-
Hallo, ich konnte LEDcontrol auch noch schnell installieren und ein wenig testen. Mei Log sieht genau so aus wie deiner. Der Debug Mode geht natürlich nur, wenn der HLC nicht läuft, also mit systemctl stoppen. Dann kommt bei mir dieser Hinweis:
pi@rhasspy-1:~/hermesLedControl_v2.0.3 $ ./venv/bin/python3 main.py --debug=True Starting Hermes Led Control v. 2.0.3 Initializing HermesLedControl Initializing ProjectAlice settings Loading configurations No Project Alice config found but debug mode, allow to continue
Ansonsten passiert jedoch nichts. Die mqtt states wurden bei mir ebenfalls wie von dir beschrieben angelegt. Werte erscheinen jedoch nicht. Ich habe den Eindruck, dass dies so auch richtig ist. Auf GitHub lässt sich der Entwickler dazu im Detail aus, was wie konfiguriert werden kann.
https://github.com/project-alice-assistant/HermesLedControl/wiki/Arguments-customization
Mir scheint, dass für ein "custom-Pattern" einige Zustände bzw Betriebsmodi definiert werden müssen. In den weiteren Seiten geht es dann so richtig ins Eingemachte:
Da werden wir uns wohl durchquälen müssen, wozu ich die Zeit nicht hatte, bzw aktuell auch nicht haben werde.
Zu deiner neuen Sportart (Zurückrudern) möchte ich noch etwas anmerken: Mir war dies auch recht bald aufgefallen, weil ich nur eine Sekunde Zeit hatte, das Wake Word und den Befehl zu sprechen. Das war mir persönlich zu knapp. Ich habe meinen Timer nun auf 15 sec. gesetzt.
Was ich jedoch in diesem Zusammenhang zur Qualität der Spracherkennung festgestellt habe, dürfte dich/euch interessieren: Ich kann reproduzierbar erkennen, dass die Auslastung meines Raspi einen signifikanten Einfluss auf die Qualität der Erkennung hat. Wenn zB der HLC läuft, wird bei mir fast kein Befehl erkannt. Schalte ich ihn aus, ist sofort alles wieder OK. Das gleiche gilt für Kaldi als Alternative zu Pocketsphinx sowie für komplexe Beziehungen zwischen Sentences und Slots!!! Also: Keep it simple.
Das bestätigt mich, demnächst, wenn ich wieder mehr Zeit habe, den Rhasspy auf Client/Server um zu bauen, damit alle ressourcenfressenden Prozesse, wie ZB die Erkennung, auf dem Server laufen, und sich mein alter Pi3 nur mit dem Mikro selbst befassen muss.
Wenn du/ihr mal in die einschlägigen Foren schaut, werdet ihr das bestätigt finden.
Also: Nicht aufgeben. Rhasspy steht noch ziemlich am Anfang und ich habe den Eindruck, dass da noch einiges an positiver Entwicklung zu erwarten ist.
-
@Tictactoo
Vielen Dank soweit. Hier siehst du den kompletten Baum eines Dimmers. Ansprechen will ich unter .1 den LEVEL. Unter .2 und .3 stehen dieselben Werte nochmals, was jedoch hier nicht von Belang ist.Und dies ist der Baum eines einfachen Lichtschalters:
Unter .0 finden sich wieder dieselben werte, wie auch beim Dimmer. Der zu schaltende Punkt wäre dann der .STATE.
Wenn es allerdings nur um die Erkennung der Devices geht, könnte man doch ggf auch einen beliebigen Punkt aus der Gruppe .0 nehmen, zB LOWBAT. Den gibt es bei jedem Device, unabhängig davon, ob das Ding eine Batterie hat oder nicht. Was meinst du?
(Ich weiß, du kennst HomeMatic nicht, aber du weißt, was dein Skript leisten kann)
-
@tobetobe sagte in Rhasspy Offline Sprachsteuerung:
Wenn zB der HLC läuft, wird bei mir fast kein Befehl erkannt. Schalte ich ihn aus, ist sofort alles wieder OK.
Das kann ich bestätigen, ist bei mir leider auch so.
Was meinst Du: Ob ein Raspi4 (mit 4 GByte) da Abhilfe schaffen könnte? (habe bei mir noch einen rumliegen).
Wahrscheinlich nicht, wenn's an der CPU und nicht am Speicher hapert.
... und nein, "rumliegen" ist keine weitere Sportart von mirIch hatte in der community.rhasspy.org mal nachgefragt, was das mit Hermes-MQTT-Topics auf sich hat und ob da was passieren sollte, wenn HLC aktiv wird.
Leider werde ich aus der Antwort nicht ganz schlau.
KiboOst schrieb, wenn ich das richtig verstehe, daß HLC mein Rhasspy-Profil ausliest und daher die IP-Adresse meines MQTT-Brokers kennt. OK, deshalb erscheinen ja dort auch die HLC-Topics.
Desweiteren könnte ich mit dem Parameter --mqttServer die IP-Adresse des MQTTBrokers ändern.
OK, will ich ja gar, ich möchte nur wissen, ob in den Topics was passieren sollte, wenn HLC aktiv ist.
Ich werde noch mal nachhaken.Gruß
Jörg