Inhalt
Download
nicht mehr unterstützte Version für veraltete LoxBerry Version:
LB 0.2.3 https://github.com/andweber/loxberry-plugin-kalliope/archive/v0.3.0.zip
Entwicklung, neuster Entwicklungsstand:
LB 1.0https://github.com/andweber/loxberry-plugin-kalliope/archive/v0.5.1.zip
Quellcode: https://github.com/andweber/loxberry-plugin-kalliope/
Hinweis zur Benutzung
In der Standardkonfiguration sendet Kalliope aufgezeichnete Sprache/Geräusche zur Spracherkennung an einen Cloud-Anbieter (siehe Erklärungen unter "Funktion des Plugins"). Eine Audioaufzeichnung zur Spracherkennung erfolgt nur nach dem Schlagwort <Kalliope>. Da die Schlagworterkennung im Deutschen jedoch noch fehleranfällig ist, können auch andere Mitschnitte erstellt werden.
Soll das Plugin nur zur Sprachausgabe für den Miniserver verwendet werden, dann am Besten kein Mikrofon anstecken, dann erfolgt auch keine Aufnahme. Ein deaktivieren der Spracherkennung im Webfrontend ist bisher nicht möglich.
Installation
Kalliope benötigt ein an den LoxBerry angeschlossenen Lautsprecher (HDMI oder Analog) und ein Mikrofon. Für die Einstellung von Mikrofon und Lautsprecher hilft das Plugin: ALSA Tools.
Die Spracherkennung erfolgt über Cloud-Anbieter es ist daher eine Verbindung zum Internet notwendig.
Das Plugin unterstützt in der derzeitigen Version noch kein Upgrade. Die Einstellungen gehen damit bei einer Neuinstallation verloren. Den LoxBerry nach der Neuinstallation neu starten.
Konfigurationsoptionen
Das Webfrontend erlaubt einen Test der Hardware (Mikrofon und Lautsprecher), die Anpassung der Einstellungen und einen Test der Funktion.
Das Plugin installiert bereits eine Auswahl an Zusatzmodulen und Verknüpfungen, darunter ein Modul für die Steuerung eines Miniservers. In der Kalliope Dokumentation befindet sich eine ausführliche Erklärung der verschiedenen Optionen.
Funktion des Plugins
Das Plugin stellt zunächst eine Standardinstallation von Kalliope auf dem LoxBerry zur Verfügung. Diese kann individuell angepasst und auch ohne Miniserver genutzt werden. Die Spracherkennung erfolgt über einen Cloud-Anbieter. Der Could-Anbieter kann konfiguriert werden. Dazu muss ein eigener Schlüssel erstellt werden. Kalliope unterstützt auch eine lokale Spracherkennung - allerdings ist dazu für deutsch Konfigurationsaufwand und ein manuelles Training notwendig. Kalliope lauscht permanent über das Mikrofon auf den Aufruf "Kalliope". Diese Erkennung erfolgt lokal auf dem LoxBerry. Kalliope fordert dann auf einen Sprachbefehl zu nennen. Dieser Teil wird aufgenommen und an einen Cloud-Anbieter zur Erkennung geschickt. Kalliope erhält den Sprachbefehl in Textform zurück und reagiert entsprechend der individualisierbaren Konfiguration. Ein Video unter https://kalliope-project.github.io/ zeigt die Funktionsweise.
Steuerung des Miniservers
Das Plugin installiert zudem eine Erweiterung von Kalliope, welche es erlaubt den Miniserver über Sprachbefehle zu steuern. Insbesondere diese Erweiterung ist experimentell. Sie erlaubt mit Version 0.1.0 aber bereits eine primitive Sprachsteuerung.
Sprachbefehl:
Kalliope <auf Aufforderung warten> Schalte das <Name> an/aus
<Name> ist dabei die Eigenschaft "Beschreibung" eines Bausteins in der Loxone Config (also z.B. eines Tasters für Licht).
Welche Elemente zur Verfügung stehen, wird automatisch vom Miniserver abgefragt. Die Abfrage erfolgt jedoch derzeit noch bei jedem Sprachbefehl und erzeugt damit ggf. eine spürbare Belastung des Miniservers. Bei mehreren Miniservern wird derzeit nur der in der LoxBerry-Config hinterlegte 1. Miniserver verwendet.
Steuerung von anderen Geräten
Kalliope ist in der Lage beliebige Geräte über Web-Aufrufe zu steuern. Eine Konfiguration ist derzeit nur manuell möglich. Dabei müssen die Konfigurationsdateien auf dem LoxBerry unter:
/LoxBerry/config/plugins/kalliope_loxscontrol/brains
angepasst werden. Eine Erklärung gibt die Kalliope Dokumentation, derzeit nur in Englisch. Auf diese Weise ist auch eine individuelle Steuerung des Miniservers möglich.
Sprachausgabe
Das Plugin kann als Sprachausgabe (TTS) für den Miniserver fungieren. Feste vordefinierte Ansagen können wie folgt ausgegeben werden:
Virtuellen Ausgang anlegen mit: http://admin:secret@<IP-des-Loxberry>:5000
Virtueller Ausgang Befehl:
Befehl bei ein: /synapses/start/order
HTTP-Methode bei EIN: POST
HTTP-Erweiterung: Content-Type: application/json
HTTP-POST-Befehl: {"order":"loxberry-install-finished"}
Der Zugang (admin:secret) und der Port (hier 5000) kann über das Webfrontend konfiguriert werden. Anstelle von "loxberry-install-finished" kann ein beliebiger Befehl aufgerufen werden. Die Definition ist bisher nicht über das Webfrontend möglich.
Auf dem Loxberry unter config/plugins/kalliope_loxscontrol/brains liegen die entsprechenden Definitionen. Das obige Beispiel befindet sich in der Datei: de_loxberry_install.yml. Weitere Erklärungen gibt die Kalliope Dokumentation derzeit nur in Englisch.
Über:
HTTP-POST-Befehl: {"order":"api-repeat-cmd Dies ist eine Beispielansage"}
lässt sich ein beliebiger Text ansagen (ab Version 0.3.1).
Anpassung
Über Zusatzmodule (genannt Neuronen) und eine individualisierbare Verknüpfung von Sprachbefehlen mit Aktionen (genannt Synapsen), kann Kalliope angepasst werden. Im "Config"-Ordner des Plugins befindet sich der sogenannte "brain" von Kalliope und kann individuell angepasst werden.
Einrichtung in der Loxone Config Software
Für die Steuerung des Miniservers sind keine Anpassungen in der Loxone Config notwendig. Das Plugin lädt selbstständig die Konfiguration des Miniservers.
Soll das Plugin als Sprachausgabe verwendet werden, so erfolgt dies über entsprechende Virtuelle Ausgangsbefehle.
Roadmap
Eine aktuelle Liste ist auf https://github.com/andweber/loxberry-plugin-kalliope/ zu finden. Geplant sind:
- Die Konfiguration über das Webfrontend des LoxBerry
- Eine Erweiterung der Funktionalität der Sprachsteuerung
Fragen stellen und Fehler melden
Für Themen die das Plugin betreffen: https://github.com/andweber/loxberry-plugin-kalliope/
Für Themen, welche die Sprachsteuerung des Miniservers mit Kalliope betreffen: https://github.com/andweber/kalliope_neuron_loxscontrol
7 Comments
L. Fischnaller
Könntest du ein Beispiel für einen simplen TTS Rest-API Aufruf (um einen simplen String vorlesen lassen zu können) veröffentlichen? Ich war leider nicht im Stande dies zusammen zu bekommen.
Andreas Weber
also die Theorie für ein einfaches Beispiel geht wie folgt:
Virtuellen Ausgang definieren. Adresse nach dem Schema:
(das Webfrontend bietet Beispiele mit korrekten Werten - nur noch nicht den gesamten Befehl -das korrigiere ich noch)
Ausgangsbefehl definieren
Befehl: /synapses/start/id/loxberry-install-finished
HTTP-Methode bei EIN: POST
Mein Loxone 7.4.4 sendet ein GET statt ein POST und scheitert damit? Ich habe noch nicht geprüft, ob dies ein bekannter Bug ist, bzw. wie dies bei neuen Versionen aussieht.
Das Beispiel ruft einen vordefinierten Text auf. Man müßte aber auch direkt eine Order aufrufen können, das sollte wie folgt funktionieren:
Befehl: /synapses/start/order
HTTP-Methode bei EIN: POST
HTTP-Erweiterung: Content-Type: application/json
HTTP-POST-Befehl: {"order":"my order"}
Es gibt dann ein Neuron https://github.com/bacardi55/kalliope-repeat welches ein Text wiederholt. Damit könnte man direkt einen Ausgangsbefehl erstellen, welcher Text ansagen läßt.
Wie gesagt soviel zu Theorie - in der Praxis scheitere ich auch bereits am GET. Aber es würde mich freuen, wenn wir das zum Laufen bekommen.
L. Fischnaller
Okay, dabei kann ich behilflich sein. Habe es geschafft das Equivalent des Bash Befehls
von Loxone aus zu triggern.
Die Einstellungen sind wiefolgt:
Virtueller Ausgang
Adresse: http://admin:secret@<IP-des-Loxberrys>:5000 ← Port 5000 scheint der Standardport von Kalliope zu sein.
Virtueller Ausgang Befehl
Befehl bei ein: /synapses/start/id/loxberry-install-finished ← ist ein Get, darf aber anscheinend nicht leer sein, ansonsten passiert gar nix (Debug Log)
HTTP Erweiterung bei Ein: Content-Type: application/json
HTTP-Post-Befehl bei Ein: /synapses/start/id/loxberry-install-finished
HTTP-Methode bei Ein: POST
Und siehe da Kalliope spricht, ABER nur ein mal. Erst nach einem Neustart des Loxberrys funktioniert es wieder. Dieses Verhalten zeigt sich auch beim curl-Befehl. Kann es sein, dass sie auf eine Spracheingabe wartet und vorher keine weiteren Anfragen mehr annimmt. Ich war nämlich auch nicht immer in der Lage die Testbefehle im Webinterface abzuspielen. Der Loxberry wurde neu installiert und auf die aktuellste Version gebracht, anschließen nur die ALSA Tools und Kalliope drauf geladen. Miniserverversion ist bei mir die aktuellste drauf. Eventuell kannst du die o.g. Einstellungen mal in deine 7er Version übernehmen, vielleicht klappt es da ja auch.
Toll wäre dann halt am Ende auch, wenn man dem Befehl Werte mitgeben könnte, sodass Kalliope diese Werte ausspricht.
Andreas Weber
ah super, da habe ich zu früh aufgegeben. Ich habe oben im Text jetzt die bessere Variante eingefügt. Werde dies auch im Webfrontend ergänzen. Damit ist der Aufruf eines Befehls möglich.
Ich werde mal das repeat neuron mit installieren, damit sollten beliebige Werte möglich sein.
Der Rest vielleicht besser auf GitHub.
Andreas Weber
Das sollte jetzt mit der aktuellen Github-Version möglich sein. Erklärung oben im Text. Achtung Upgrade funktioniert nicht gut, nach der Neuinstallation des Plugins, am Besten den Loxberry neu starten.
Ich würde erwarten, dass man mit <v> auch Werte oder Text in das HTTP-POST-Befehl Feld in den Virtuellen Ausgangsbefehl übergeben kann. Bisher nicht getestet.
Thomas Kinzelmann
Bei mir bricht die Installation mit folgender Fehlermeldung ab:
CRITICAL: VirtualEnv was not created.
CRITICAL: Fehler während der Script-Installation, die Installation wurde beendet.
Verwendete Hardware: Raspberry Pi 3 B+
Loxberry-Version: 1.2.5.1
Stefan Ganahl
Ich würde gerne mit meinen Schülern ein Projekt mit dem Loxberry eine "Alexa offline" starten. Jetzt bin ich bei der Suche auf deinen Beitrag gestoßen. Dieser Beitrag ist schon ein wenig älter ... jetzt wollte ich nach dem Stand nachfragen. DANKE für Ihre Rückantwort.