Benutzer-Werkzeuge

Webseiten-Werkzeuge


rhasspy

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
rhasspy [2022/12/08 22:57] varnholtrhasspy [2024/01/17 18:54] (aktuell) varnholt
Zeile 136: Zeile 136:
 Datei unter /home/pi/.config/rhasspy/profiles/de/porcupine heisst: "hey-snips.ppn" Datei unter /home/pi/.config/rhasspy/profiles/de/porcupine heisst: "hey-snips.ppn"
 in Datei nano /home/pi/rhasspy/rhasspy-wake-porcupine-hermes/rhasspywake_porcupine_hermes/__init__.py in Datei nano /home/pi/rhasspy/rhasspy-wake-porcupine-hermes/rhasspywake_porcupine_hermes/__init__.py
-<code> + 
-site_info.porcupine = pvporcupine.create( +wenn irgend ein Aufruf im Create nicht geht, kommt ein VALUE ERROR oder ein MEMORY ERROR.
-  keyword_paths=['/home/pi/.config/rhasspy/profiles/de/porcupine/hey-snips.ppn'], +
-  access_key='hier der key', +
-  keywords=['hey snips'], +
-  sensitivities=self.sensitivities, +
-+
-</code> +
-profile.json braucht man nicht zu ändern und in der Weboberfläche bitte auch nichtssonst geht es wieder nicht und es kommt eine VALUE ERROR oder ein MEMORY ERROR.+
 <code> <code>
     "wake": {     "wake": {
         "porcupine": {         "porcupine": {
-            "access_key": "hier der access key",+            "access_key": "MQ...==", 
 +            "keyword_path": "/home/pi/.config/rhasspy/profiles/de/porcupine/hey-snips.ppn", 
 +            "keywords": ["hey snips"]
         },         },
         "system": "porcupine"         "system": "porcupine"
Zeile 154: Zeile 149:
 </code> </code>
  
 +Nachdem 'hey snips' ja wohl eher englisch ist, habe ich es auf der Website in Englisch trainiert. Das hat den Vorteil, dass man eine bestimmte Datei nicht ersetzen muss. Ist aber auf der Website und auch in dem Blog beschrieben.
 +
 +Ach: Hurra, es geht :)
 +
 +==== ReSpeaker 2-Mics Pi HAT ====
 +
 +https://wiki.seeedstudio.com/ReSpeaker_2_Mics_Pi_HAT_Raspberry/
 +
 +<code>
 +sudo apt-get update
 +git clone https://github.com/Seeed-Projects/seeed-voicecard.git
 +cd seeed-voicecard
 +sudo ./install.sh
 +sudo reboot now
 +</code>
 +
 +Tonausgabe geht nur noch mit "aplay -D sysdefault:CARD=Headphones test.wav", aber Aufnehmen geht mit "arecord -D "plughw:2,0" -f S16_LE -r 16000 -d 5 -t wav test.wav". Auch der speaker-test geht nur mit "speaker-test -D sysdefault:CARD=Headphones"
 +
 +Aber Rhasspy erkennt es wohl sofort, also alles gut, ich habe wohl nen Lauf ;-)
 +
 +==== Exchangelib ====
 +
 +Beim Umzug der Exchangelib-Aufrufe kam es zu Problemen, da die cryptography lib jetzt Rust braucht. Dann nehmen wir eben die Letzte, die noch kein Tust brauchte: Version 3.3.2 da aber die im pip-cache genommen wird, muss man den erst löschen. Ach, und dann kam noch der Fehler "ImportError: libxslt.so.1: cannot open shared object file: No such file or directory". Es geht dann mit den Aufrufen:
 +<code>
 +sudo apt-get install libxml2-dev libxslt-dev
 +pip cache purge
 +pip install cryptography==3.3.2
 +pip install exchangelib
 +</code> 
 +
 +==== Wetter ====
 +
 +Mit Snips hatte ich ein schönes Wettermodul. Wie ziehe ich das am besten um? Kopieren der wichtigsten Dateien: action-searchWeatherForecast-Wetter.py, weather_logic.py, weather.py und config.ini
 +
 +Da das ganze im Unterordner wetter liegt, findet skills.py es nicht. Dazu in den Unterordner eine leere Datei __init__.py und in skills.py 'from wetter.weather import Weather'
 +
 +Alles mit Hermes und snips auskommentieren. Mit 'sudo raspi-config' locale auf de_DE.utf8 setzen, den default aber sicherheitshalber auf en lassen. Testen mit 'locale -a'
 +
 +
 +In parse_intent_message 'intent = ForecastType.FULL' setzen und nur den letzten request lassen 'requests.append(WeatherRequest(DateType.FIXED, Grain.DAY, datetime.date.today(), intent, self.detail))'
 +
 +Probleme machen die Grain.DAY und so weiter. Dazu jeweils drei Zeilen an den Anfang.
 +<code>
 +from types import SimpleNamespace
 +d = {'DAY': 'day', 'key2': 'value2'}
 +Grain = SimpleNamespace(**d)
 +</code>
 +Nachdem jetzt aber Grain nicht mehr vom Type Grain, sondern vom Type sting ist, muss man auch die Zeile auskommentieren
 +<code>
 +    def grain(self, val):
 +        #if type(val) is Grain:
 +        self.__grain = val
 +</code>
 +Es gab Probleme, dass manchmal 'weather_for_interval' None war (irgendwas mit switch in der Fehlermeldung). Liegt möglicherweise an Uhrzeit oder Local oder was auch immer, denn erst fragt er bis 20:59 ab, aber findet dann erst was um 21:00 Uhr. Habe da einfach eingebaut
 +<code>
 +        if weather_for_interval == None:
 +            return None
 +</code>
 +Nächstes Problem, den richtigen tag zu übergeben, da snips das im Intent anders übergeben hat. Den nächsten Tag bekommt man, indem man 
 +<code>
 +dertag = datetime.date.today() + datetime.timedelta(days=1)
 +</code>
rhasspy.1670540234.txt.gz · Zuletzt geändert: 2022/12/08 22:57 von varnholt