Zur Verbindung von Rhasspy, einem Sprachassistenten, und openHAB, habe ich ein kleines Python-Programm geschrieben, was die erkannten Befehle von Rhasspy verarbeitet und mit Hilfe von openHAB auswertet. Das Programm läuft in einem Docker-Container.
Das Tool kann auf github heruntergeladen werden: https://github.com/vanseforge/rhino
Hier noch die Beschreibung von github auf Deutsch:
RHINO (RHASSPY INTENT HANDLER FOR OPENHAB) ist ein einfacher Intent-Handler für Rhasspy mit einer Verbindung zu openHAB. Einige Skills sind bereits eingebaut und es ist auch möglich, eigene Skills zu schreiben (Ordner „ext_modules“).
Verfügbare Skills:
Licht an/ausschalten
Erzählen eines Witzes
Gaming-Modus aktivieren
"Tagesschau in 100 s" abspielen
Außentemperatur abfragen
Wetter abfragen
Uhrzeit/Tag abfragen
Würfeln
Hallo, Guten Morgen, Gute Nacht, Danke sagen
Einen Timer starten
Installation und Konfiguration
Installation
Klone diese Repository:
git clone https://github.com/vanseforge/rhino
Navigiere zu dem geklonten Verzeichnis, in dem sich die Dockerdatei befindet.
Docker-Befehlszeile:
docker image build -t rhino .
docker run -d -v dein_ordner/settings.yml:/usr/app/rhino/rhino/settings.yml,dein_ordner/ext_modules:/usr/app/rhino/rhino/ext_modules --name rhino rhino
Die Datei settings.yml sollte auf die eigene Einstellungsdatei verweisen. Der Ordner ext_modules sollte auf einen Ordner mit den eigenen Skills verweisen (optional).
In Rhasspy müssen die Sätze für die verwendeten Intents geschreiben werden. Ein Beispiel befindet sich im Ordner rhasspy_sentences. Die Übersetzung der Licht-Namen in die openHAB-Items muss im „sentence file“ in Rhasspy vorgenommen werden.
Konfiguration
Die Einstellungen in der Datei settings.yml anpassen.
Beispiel für settings.yml:
general:
timezone: 'Europe/Berlin'
locale: 'de_DE.UTF-8'
language: 'de'
alarm_sound: 'alarm.wav'
openHAB:
http_url: 'http://10.0.0.3:8080'
items:
outside_temperature: 'HeatPump_Temperature_1'
weather_condition: 'Weather_OWM_Condition'
gaming: 'Gaming'
rhasspy:
http_url: 'http://10.0.0.2:12101'
websocket_url: 'ws://10.0.0.2:12101'
Wie man eigene Skills (Fähigkeiten) schreibt
Es muss nur eine Funktion erstellt werden, die den Namen des Intenss trägt und zwei Parameter hat (Daten von Rhasspy und die Site-ID). Die Daten von Rhasspy sind der JSON-String von Rhasspy und die Site-ID ist die ID des Rhasspy-Satelliten.
Beispiel
def Test(data, siteId):
text = "Ich bin eine Testfunktion für ein Benutzermodul"
print("TEST!")
speak(text, siteId)