lokale Sprachsteuerung mit openHAB 2 und Snips.ai

Lokale Sprachsteuerung mit Snips.ai und openHAB 2

Habt ihr auch Vorbehalte gegenüber Amazon Alexa und Google Home und wolltet schon immer eine lokale Sprachsteuerung? Ich schon, denn wie ihr vielleicht wisst bin ich kein Freund von Cloud Services für die Spracherkennung.  Snips.ai bietet nun allen eine lokale Sprachsteuerung umzusetzen, die allein auf einem Raspberry Pi 3 läuft. Das Konzept finde ich sehr gut, denn ihr könnt Eure Assistenten Online konfigurieren und lokal für die lokale Sprachsteuerung im Smart Home nutzen. So können z.B. auch Verbesserungen durch andere Smart Home Nutzer in die lokale Spracherkennung einfließen.

In folgendem Video ein paar einleitende Worte und eine Demonstration.

 

Lokale Spracherkennung – benötigte Hardware

Auch wenn ihr bereits einen Raspberry Pi mit laufender Smart Home Software habt, empfehle ich einen eigenen Raspberry für die lokale Spracherkennung. Der Grund ist einfach. Falls mal etwas auf einem der Raspberry schief geht, braucht ihr nur einen Pi neu aufsetzen. So läuft euer Smart Home mit openHAB, FHEM, io Broker oder wie sie alle heißen immer noch und ihr müsst nur den Snips Raspberry neu aufsetzen.

Ich empfehle euch für die Umsetzung die folgenden Komponenten:

Last update was on: 15. Januar 2019 16:55

 

Werbung
IA0KPHNjcmlwdCBhc3luYyBzcmM9Ii8vcGFnZWFkMi5nb29nbGVzeW5kaWNhdGlvbi5jb20vcGFnZWFkL2pzL2Fkc2J5Z29vZ2xlLmpzIj48L3NjcmlwdD4NCjwhLS0gT25lU21hcnRIb21lIC0tPg0KPGlucyBjbGFzcz0iYWRzYnlnb29nbGUiDQogICAgIHN0eWxlPSJkaXNwbGF5OmJsb2NrIg0KICAgICBkYXRhLWFkLWNsaWVudD0iY2EtcHViLTY4ODcwMjQzNzgwMDQzMjEiDQogICAgIGRhdGEtYWQtc2xvdD0iNzcxMjIyOTQ0MCINCiAgICAgZGF0YS1hZC1mb3JtYXQ9ImF1dG8iPjwvaW5zPg0KPHNjcmlwdD4NCihhZHNieWdvb2dsZSA9IHdpbmRvdy5hZHNieWdvb2dsZSB8fCBbXSkucHVzaCh7fSk7DQo8L3NjcmlwdD4NCg==

Lokale Spracherkennung – Snips.ai auf Raspberry Pi 3 installieren

  1. Ladet Euch Rasbian Stretch Lite herunter
  2. Entpackt die ZIP Datei
  3. Installiert das Image auf eine mindestens 4 GB, besser 8 GB Micro SD Karte mittels Etcher.
  4. Nach dem Flash vorgang legt eine Datei „ssh“ im Boot Verzeichnis an. Dies ist wichtig, da ihr sonst nicht per SSH auf Euren Pi Zugrifen könnt.
  5. Legt die Micro SD Karte in den Raspberry Pi 3
  6. Verbindet Euren Raspberry Pi mit einem LAN Kabel
  7. Verbindet den RPi 3 mit dem Stromkabel
  8. Ihr könnt euch nun direkt per Putty (unter Windows) auf dem Pi einloggen. User pi, Passwort raspberry
  9. Nach dem einloggen gebt sudo raspi-config
  10. Wählt den ersten Punkt und ändert das Passwort
  11. Nun wählt den Punkt Inteface Options und aktiviert den SSH Server

NodeJs und NPM

Als Grundvoraussetzung  wird NPM und NodeJs benötigt. Zur Installation gebt bitte folgende Befehl nacheinander ein.

Prüft nun die Installation mit

Die Version muss mindestens Node v7.5.0 entsprechen.

Snips Installieren per Sam Assistant Manager (SAM)

Der Snips Assistant Manager (SAM) erleichtert euch die Installation, da so lange Befehl abgekürzt werden. SAM wird durch folgenden Befehl installiert.

Verbindet nun SAM mit euren Raspberry Pi. Wenn ihr den Hostname geändert habt, ändert bitte raspberrypi.local entsprechend ab.

Ihr könnt nun bereits den Status  mit folgendem Kommando prüfen

Installiert nun Snips mit folgendem Befehl.

smart-home-openhab-2-snips-lokale-sprachsteuerung-SAM-installieren

Steckt einen Lautsprecher mit 3,5″ Klinke in den RPi. Kopfhörer tun es zur Not auch. Weiterhin steckt die PS3 Eye Kamera in einen USB Port. Im Anschluss könnt ihr das Audio Setup vornehmen und gebt den Befehl ein.

Die Frage nach dem Maker Kit mit n beantworten. Die Kamera sollte als CameraB409241 [USB Camera-B4.09.24.1], device 0: USB Audio [USB Audio] oder ähnliches erkannt werden.  Falls mehr als ein Gerät für die Audio Ausgabe gefunden wurde. Wählt den Eintrag ohne HDMI mittels der Pfeiltasten auf der Tastatur.

Im Anschluss sollte folgende Meldung erscheinen

Testet mit folgenden Befehl den Lautsprecher.

Die Ansage könnt ihr mit STRG + C unterbrechen

Nun testet das Mikro mit dem Befehl.

Wartet einen Augenblick bis die folgende Zeile erscheint

Sagt was und drückt eine Taste. Der Lautsprecher sollte nun genau das gesagte ausgeben.

Falls ihr eine Audiofeedback wünscht, gebt folgenden Befehl ein. Dies installiert auch den Mosquitto client.

Snips Assistenten installieren

Falls ihr noch kein Snips Account habt, legt diesen unter folgender Adressse an.

Im Anschluss legt den ersten Assistenten an und wählt die App Lichtsteuerung.

smart-home-openhab-2-snips-app-installieren-1

Nun geht wieder in euren SSH Client und gebt den folgenden Befehl ein.

Gebt entsprechend User und Passwort ein. Nach erfolgreichem Login gebt den folgenden Befehl ein

Falls ihr mehrere Assistenten haben solltet, wählt den entsprechenden Assistenten. Bei einem sollte es direkt losgehen. Es dauert nun eine Weile. Gerade der Punkt ASR training wird einige Zeit in Anspruch nehmen. Auch die nachfolgende Installation der packages wird etwas dauern. Wenn alles durch ist, solltet ihr folgendes Ergebnis sehen.

Im Anschluss könnt ihr nun mit mit „Hey Snips, mach Licht im Klo an“ die Spracherkennung starten. Wollt ihr parallel beobachten was sich in Snips tut, führt den folgenden Befehl aus.

Das Ergebnis ist eine JSONPath Zeichenkette:

 

Um auf diese Werte in eurem Smart Home zuzugreifen wird nun eine Plattform benötigt, die sich mit MQTT auf den Snips Raspberry Pi verbinden kann. Wie ich das mit openHAB 2 mache, lest ihr im folgenden Kapitel.

Lokale Sprachsteuerung – Snips mit openHAB 2 verbinden

Für die lokale Sprachsteuerung braucht ihr nun natürlich noch ein System, welches die Inhalte des MQTT Topic aus Snips entgegennimmt und die Steuerung übernimmt. Hierfür könnt ihr wie ich  openHAB 2 oder Home Assistant nutzen. Es geht sicher auch mit Systemen wie FHEM oder ioBroker. So lange ihr die Möglichkeit habt MQTT auf euer System zu bringen und einen JSON Path String zerlegen könnt, steht der lokalen Sprachsteuerung nichts mehr im Wege.

Snips mit openHAB 2 verbinden – MQTT Binding 1 nutzen

Da inzwischen das MQTT 2 Binding veröffentlich wurde, findet ihr das MQTT 1 Binding nicht mehr unter den Bindings. Ihr müsst hierfür über folgenden Weg die Legacy Bindings aktivieren. Ruft System (1) auf, schaltet die Integration der 1er Bindings an (2) und speichert (3).

snips-mqtt-binding-1

Nun findet ihr unter Add-ons (1) unter Binding Suche (2) auch das MQTT 1 Binding und könnt dies installieren (3).snips-mqtt-binding-2

Ein Beitrag zu MQTT 2 ist geplant, wird aufgrund von Vereinsarbeit für barrierefreies SmartHome geschoben.

 

Snips mit openHAB 2 verbinden – MQTT Binding installieren und Item erstellen

Installiert über die Paper UI das MQTT Binding und tragt in die mqtt.cfg folgendes ein. hostname müsst ihr dabei durch euren Hostnamen ersetzen.

Nun legt eine Items Datei snips.items an.

Snips mit openHAB 2 verbinden – Snips MQTT Topic per Regel verarbeiten

Damit ihr nun die unterschiedlichen Sprachansagen in eurem Smart Home Server verarbeiten könnt, müsst ihr das Topic bei jeder Änderung abgreifen. In openHAB 2 geht dies wie folgt. Hier wird weiterhin der Inhalt im Logviewer ausgegeben. Dies ist sehr sinnvoll um die Logik zu analysieren.

Snips mit openHAB 2 verbinden – MQTT Topic per JSONPath Transformation aufteilen

Nun installiert noch die JSON Path Transformation über die Paper UI. Die Regel könnt ihr nun so erweitern, dass ihr den Inhalt des MQTT Topic aufteilt.

Die folgende Regel bewirkt folgendes:

  • Das Intent wird aufgeteilt und in pureIntent steht der Name des Intent ohne den Nutzernamen. Für unsere App oben steht also LampenAusSchalten, LampenEinSchalten, LampenDimmen usw in dieser Variable.
  • In der Variable device_val übergeben wir den Wert aus dem ersten Slot. In unserem Beispiel steht dort Toilette.
  • Über eine globale Variable oh2ONOFF belegen wir anhand des Intent Namen den Zustand vor. ON oder OFF
  • Als letztes fragen wir den vorher abgegriffenen Wert der Variable device_val ab. Steht hier Toilette, schalten wir das entsprechende Item mit der globalen Variable an oder aus.

Lokale Sprachsteuerung – Online Kurs zum weiteren Ausbau

Für alle, die die Sprachsteuerung wesentlich ausbauen möchten, habe ich einen Online Kurs entwickelt.

 

Zum aktuellen Zeitpunkt umfasst der Kurs 2 Stunden und bietet folgendene Inhalte:

  • Installation von Raspian
  • Konfiguration von Raspian
  • Installation von Snips
  • Konfiguration von Snips (Mikrofon und Lautsprecher)
  • Erstellung eines eigenen Assistenten in Snips.ai
  • Erstellung einer generischen Regel in openHAB 2

Der Kurs zur lokalen Sprachsteuerung kann entweder einzeln für 25 € oder in Kombination mit dem openHAB 2 Kurs gebucht werden. Dies kann ich allen interessierten empfehlen, für die openHAB 2 komplettes Neuland ist. Ihr erhaltet nach Buchung des openHAB 2 Kurses einen Gutschein für den Kurs zur lokalen Sprachsteuerung.

Ihr könnt euch natürlich auch durch die einleitenden Beiträge  openHAB 2 Installation und openHAB 2 Konfiguration lesen. Fragen stellt ihr dann hier auf dem Blog.

Und nun wünsche ich euch viel Spaß mit eurer lokalen Sprachsteuerung.

Werbung
16 Comments
  1. Ist es möglich das Audio von Snips immer über einen Sonos auszugeben und den Sonos zusätzlich über OpenHab zu steuern?

    • Hallo,

      sollte möglich sein Sonos als Audio Ausgabe zu nutzen. Habe selbst kein Sonos aber ein wenig googeln zeigt, dass es geht. Die Regel musst du dir entsprechend anpassen mit eigenen Texten oder nimmst die Infos aus dem MQTT Text.

      Beste Grüße
      Thomas

  2. Moin Thomas,

    danke erstmal für die ganze Mühe, die du in deine Tutorials steckst. Ich ziehe außerdem meinen Hut vor eurer ehrenamtlichen Arbeit mit eingeschränkten Menschen. Großen Respekt!

    Persönlich verzweifel aber langsam an dem Thema Snips. Der Assistent ist eingerichtet und läuft. Ein persönliches Hotword habe ich eingerichtet und mein „Jarvis“ spricht bereits mit mir… dank der passenden Addons ist er in der Lage, Uhrzeit und Datum zu nennen, zu rechnen, etc.
    Auch mein SqueezePlayer im Wohnzimmer kann er ansteuern (den in der Küche nicht – vermutlich, weil dieser aufgrund der fehlenden Umlautunterstützung mit „Kueche“ benannt ist). Lange Rede, kurzer Sinn: nur die MQTT-Kommunikation kriege ich nicht auf die Reihe.

    Das Binding ist installiert, die .cfg mit den von dir empfohlenen Einträgen erweitert. Auch bei der .items Datei habe ich mich an dir orientiert. Sowohl HostName als auch die IP-Adresse habe ich zum ansteuern getestet, laut „sam watch“ ist der Port definitiv 1883. Trotzdem klappte trotz Log-Rule keine Kommunikation.
    Auch habe ich versucht, die Intents nach einem anderen Tutorial über

    String Snips_Intent „Snips Intent“ { mqtt=“<[snipsmqtt:hermes/nlu/intentParsed:state:default]" }
    Switch Snips_Listening "Snips Listening" { mqtt="<[snipsmqtt:hermes/asr/toggleOn:state:ON],<[snipsmqtt:hermes/asr/toggleOff:state:OFF]" }

    auszulesen.
    Die .rules Datei habe ich ebenfalls nach deiner Anleitung eingerichtet – sowohl nach der ersten, kurzen wie auch der zweiten, langen Version. Leider taucht bei mir im Logviewer nichts auf, wenn ich mit "Jarvis" rede.

    Hast du irgendeine Idee, was ich noch versuchen könnte?

    Viele Grüße
    M.

    • Moin,

      Starte mal openhab 2 neu und schau dir die logs an. Wird die Verbindung überhaupt hergestellt?

      Beste Grüße
      Thomas

      • Guten Morgen.

        Danke erstmal für die Antwort. Ich habe die Lösung. Vielleicht hilft das auch anderen:

        Zuerst habe ich an meinem PC per MQTT.fx getestet, ob der Broker von Snips überhaupt arbeitet – das tat er.

        Nach einiger Recherche im OH Forum stieß ich dann darauf, dass irgendwo im Cache eine alte, von mir nicht richtig konfigurierte Version der mqtt.cfg gespeichert gewesen sein muss.

        Also per SSH in den RasPi mit Snips und per „sudo systemctl stop openhab2.service“ OpenHAB gestoppt. Danach die mqtt.cfg Datei über SSH gelöscht und OpenHAB mit „sudo systemctl restart openhab2.service“ neugestartet. So erstellte OH2 wohl eine neue mqtt.cfg mit der letzten gespeicherten (und eigentlich richtigen) Config. Seit dem funktioniert es und ich kann endlich anfangen, Regeln zu schreiben.

        Viele Grüße

        • Thomas Schwarz 1. Dezember 2018 at 7:04

          Guten Morgen,

          super, danke für die Rückmeldung und weiterhin viel Erfolg mit deinem smart home.

          Beste Grüße
          Thomas

  3. Moin,
    vielen vielen Dank für die Anleitung, bin fast mit den Installation durch.
    Du hast oben in deiner Anleitung 2 mal „sam init“ geschrieben, das erste sollte aber wohl „sam status“ heißen oder?

  4. Hi Thomas,

    tolle Anleitung. Echt klasse….
    Kennst du dich denn mit Home Assistant aus? Gibts dafür auch eine Anleitung ?

    Schöne Grüße
    Alex

  5. Hallo Thomas,

    vielen Dank für diese Anleitung, der ich 1:1 gefolgt bin!

    Leider komme ich über „sam test speaker“ nicht hinaus, denn es wird dort einfach kein Ton ausgegeben. Ich verwende die empfohlene Hardware und habe für das Gerät den Eintrag ohne HDMI ausgewählt. Außerdem habe ich neben dem definitiv funktionierenden Lautsprecher auch noch 2 verschiedene Kopfhörer getest. Trotz der Ausgabe „Playing sound on your speaker. Press Enter to stop…“ kommt offenbar kein Ton heraus. Weißt Du eventuell Rat? Könnte der Audioausgang kaputt sein?

    Vielen Dank und viele Grüße,
    Michael

    • Hallo Michael,

      das hört sich danach an. Wenn selbst Kopfhörer nichts ausgeben, ist das schon merkwürdig. Du kannst den Pi ja noch mal per HDMI an deinen Fernseher anschließen und dann den HDMI Ausgang wählen. Wenn dann etwas kommt, bist Du Dir sicher.

      Beste Grüße
      Thomas

      • Vielen Dank für Deine Antwort und den Tipp!

        Mittlerweile war ich etwas weiter gekommen. Über „sudo rasp-config“ hatte ich die Audioausgabe auf den Kopfhörerausgang gestellt, was überraschend funktionierte, denn die Einstellung „Auto“ tat es offenbar nicht. Jedenfalls bin ich so weitergekommen. 🙂

        Viele Grüße,
        Michael

    • Ergänzung: Meine /etc/asound.conf sieht so aus:

      pcm.!default {
      type asym
      playback.pcm {
      type plug
      slave.pcm „hw:0,0“
      }
      capture.pcm {
      type plug
      slave.pcm „hw:1,0“
      }

  6. Ergänzung 2: Bei „sam devices“ behauptet Snips, dass es auf einem anderen RPi (Pihole-Installation) installiert ist und zeigt dessen IP-Adresse an, obwohl beide unterschiedliche Hostnamen haben (ungleich „raspberry“) und die Installation definitiv auf dem richtigen RPi stattfand.

  7. Hallo Thomas,

    nachdem bei mir nun die Soundausgabe über den Lautsprecher gelingt und Snips an sich auch bestens funktioniert, bin ich ab der Sektion „Lokale Sprachsteuerung – Snips mit openHAB 2 verbinden“ etwas verwirrt, was die Installation von MQTT angeht. Es gibt da inzwischen 3 Bindings, nämlich
    https://www.openhab.org/addons/bindings/mqtt1/ ,
    https://www.openhab.org/addons/bindings/mqtt/ und zusätzlich noch
    https://www.openhab.org/addons/bindings/mqtt.generic/
    wobei sich Deine Anleitung offenbar auf die inzwischen obsolete Version 1.x zu beziehen scheint, denn die Datei mqtt.cfg wird da nicht installiert und die Einbindung in openHAB inzwischen anders umgesetzt wird. Liege ich da richtig?

    Falls dem so ist, würde ich mich über eine Aktualisierung Deines feinen Tutorials freuen!

    Viele Grüße,
    Michael

    • Hallo Michael,

      vielen Dank für deine Rückmeldungen zum Thema mit dem Lautsprecher. Das Problem hatte bisher noch keiner der Teilnehmer. Aber falls doch, weiß ich nun Bescheid.

      Das neue MQTT Binding muss ich unbedingt einbauen und werde es auch tun. Du kannst das Binding weiterhin als Legacy Binding installieren. Wenn Du aktuell nur Snips nutzt, ist die Umstellung später auch kein großes Thema. Ich mach dazu eine Aktualisierung. Allerdings bin ich momentan an einem Thema für myfreehome.de, welches ich bis Ende Januar zugesagt habe. Mehr kriege ich neben dem normalen Job nicht hin.

      Melde mich, sobald das Update erfolgt ist.

      Beste Grüße
      Thomas

    Hinterlasse einen Kommentar

    openHAB 2 Schritt für Schritt installieren

    Spare dir stundenlange Suche

    WERBUNG

    openHAB Videotraining

    10,5  Stunden Videotraining 

    4,4 von 5 Sternen