Blog Post

Kostengünstig & Cloud-unabhängig: Smart-Home-Sprachsteuerung mit Snips


Speaking machines don’t
Speaking machines can’t
They just howl around
Like the vultures and the crows
It’s so hard to say
It’s so hard to say
Something clever all the way

(Speaking Machines, We are Match)

Liebe Freunde – es wird euch kaum entgangen sein: Wir haben uns erst vor Kurzem mit der Sprachsteuerung im Smart-Home beschäftigt. Der erste Prototyp in diese Richtung war nicht sehr viel versprechend…

Wir geben allerdings nicht auf und verfolgen diese Spur mit dem nächsten DIY-Prototypen weiter. Die Schwiegermutter soll ja dadurch irgendwann Bauklötze staunen! Nun aber zur Sache:

HEY SNIPS! Erzähle uns über dich…

Grund-Aufbau

Die Hardware bleibt nach dem ersten Versuch unverändert:

Software

Die Software-seitige Umsetzung hat folgende Grundzüge, benötigt werden zunächst:

Snips.ai ist ein (derzeit kostenloser) Online-Service, der es mit relativ wenigen Eingaben erlaubt einen vollwertigen Sprach-Assistenten zu kreieren und ihn dann – und das ist die Krux – vollständig offline und autark, lokal zu betreiben! Mit wenigen Handgriffen lassen sich durch Definition einfacher Trainings-Satz-Formulierungen und Schlüssel-Begriffe die ersten Ergebnisse erzielen.

Die Idee der Sprach-Verarbeitung und -Steuerung ist immer-noch recht simpel gehalten – nehmen wir an, wir wollen die Beschattung im Raum/Haus auf etwa 80 % fahren:

  1. Wir aktivieren Snips mit einem (voreingestellten) Signalwort: „HEY, SNIPS!“
  2. In das Mikrofon gesprochene Sprache wird von der lokalen Snips-Instanz erkannt (STT = Speech-To-Text) [„Fahre die Beschattung im Bad auf 80 %!“]
  3. Ein Signal (JSON-String) über das ausgewertete Gesprochene wird von Snips über MQTT an Edomi übertragen [BESCHATTUNG-BAD-80 %]
  4. Edomi verarbeitet den stukturierten JSON-Payload und löst ggf. Aktionen aus [Jalousie-Aktor fährt die Beschattung auf 80 %]
  5. OPTIONAL: Snips empfängt eine Nachricht über MQTT von Edomi und gibt u. a. gesprochene Sprache aus (TTS = Text-To-Speech) [„Verstanden: Beschattung aktiviert!“]

Spracheingabe (STT) ➡ Snips Intent ➡ Edomi ➡ Snips Audioserver ➡ Sprachausgabe über Snips (TTS) und/oder (beliebige) Aktionen

Die Snips-Installation auf unserem Respeaker bringt alles Notwendige (inkl. eigenem MQTT-Broker) mit. Installiert wird dabei nach den Vorgaben der Snips-Väter/Mütter: https://docs.snips.ai/articles/other-platforms/respeaker-core-2.0.

Anschließend erstellen wir mit dem Online-Dienst (Snips Console) https://console.snips.ai unseren ersten Assistenten:

  1. Create Assistant ➡ „Edomi“
  2. Add an App, Create a new App ➡ „SetShutter“
  3. Create new Intent ➡ „SetShutterPositionIntent“
  4. Create new Slot ➡ „PositionValue“, Slot Type: snips/percentage
  5. Create new Slot ➡ „ShutterDesc“, Select: Create New Slot Type -> Gruppen/Synonyme anlegen
  6. Create new Slot ➡ „Location“, Select: Create New Slot Type -> Gruppen/Synonyme anlegen
  7. Mehrere Trainingssätze eingeben ➡ Doppelklick auf Schlüssel-Begriffe im Trainingssatz (z.B. Location „Bad“) -> Location-Slot zuordnen

Snips‘ Nomenklatur ist in wenigen Worten beschrieben: Ein „Assistant“ fasst unter einer gemeinsamen Sprache (hier „German“) und einem Spracherkennungsdienst (ASR = Automatic Speech Recognition) mehrere „Apps“ zusammen.

Eine App umfasst alle Elemente für eine bestimmtes Ziel des Nutzers; z. B. Beschattungs-Steuerung.

Die „Intents“ einer App bilden so die Absichten eines Nutzers ab: Beschattung in eine Position (80 %) fahren oder Beschattungs-Richtung (auf/ab) steuern – um nur einige Beispiele zu nennen.

Der „Slot (Type)“ eines Intents hilft bei der Unterscheidung bestimmter Schlüssel-Begriffe. Der Slot „Location“ in unserem Beispiel hilft uns einen bestimmen Raum/Lokalität eindeutig zu bestimmen und anschließend anzusteuern. Die Synonyme innerhalb des Slots bestimmen hierbei die möglichen Ausprägungen („Bad“, „Badezimmer“, „Master-Bad“, usw.). Slot Types können auch wiederverwendet werden und so App-übergreifend eingesetzt werden.

Ist der Assistent fertig definiert – kann er nun lokal heruntergeladen und installiert (deployed) werden – dies wird gemäß Anleitung wie folgt erreicht:

sudo apt-get install unzip (optional, falls unzip fehlt)
sudo rm -rf /usr/share/snips/assistant/
sudo unzip {assistant.zip} -d /usr/share/snips/ ({assistant.zip} = Name der Datei)
sudo systemctl restart 'snips-*'

Somit ist Snips lokal einsatzbereit und veröffentlicht ab sofort über seinen MQTT-Broker die Ergebnisse der eigenen Spracherkennung und -Interpretation.

Die Auswertung in Edomi ist trivial: Der MQTT-JSON-Payload wird zerpflückt und mit wenigen Logik-Bausteinen verarbeitet. Der entsprechende Snips-Intent wird hierbei über ein MQTT-LBS abboniert. Der JSON-Inhalt liefert alle erkannten Slots, in unserem Fall zum Beispiel:

Location: Bad
ShutterDesc: Rollladen
PositionValue: 80 %

Die (Rück-)Meldung an Snips zur Sprachausgabe wird ebenfalls über eine JSON-MQTT-Nachricht abgewickelt:

Und so kann es ablaufen:

Fazit

Pro:
Kostengünstig!
Schnelle Ergebnisse!
Vollständig offline bzw. autark!
Gute Erkennungs-Qualität!
Weitreichend konfigurierbar (TTS, Hotword, etc.)!
Empfangs-Gerät/Instanz nicht auf einen einzigen Raum beschränkt, jeder weitere Raum kann über einen sog. „Satellite“ angebunden werden!

Contra:
Standard-TTS (picotts) ist zwar brauchbar, aber stark verbesserungswürdig…
Verarbeitungslogik muss mühsam für alle möglichen Gewerke/Lokationen usw. manuell aufgebaut werden.
Software teilweise zu stark allein auf den Raspberry Pi ausgerichtet
Abhängigkeit zum Online-Dienst (Console) bei der Assistent-Erstellung/Anpassung.

Das macht Lust auf mehr! Unser bescheidener Aufbau muss sich kaum hinter den teuren, kommerziellen Lösungen verstecken. Während die käuflich erwerbbaren Produkten nur auf wenige, starre, fest definierte Funktionen (Licht, Beschattung, Heizung, Szenen) beschränkt sind, sind uns mit der Bastel-Lösung kaum Grenzen gesetzt!

Weitere Ausbau-Schritte

Welche Schritte planen wir also als Nächstes?

Steuerung:

  • Steuerung (gedimmtes) Licht (+ evtl. Lichtfarbe)
  • Steuerung Beschattungs-Richtung (Ab/Auf/Stop)
  • Steuerung Tür-Entriegelung
  • Steuerung Automatiken (Status, Start/Stop)

Auskunft:

  • Zeit/Datum („Wie spät ist es? ➡ Es ist 17 Uhr 35.“)
  • Wetter („Wie ist das Wetter? ➡ Sonnenschein mit 25° C.“)
  • Nachrichten („Was gibt es Neues? ➡ Im Westen nichts Neues.“)
  • Zugfahrplan, inkl. Verspätungs-Ansage („Wann fährt der nächste Zug nach Buxtehude? ➡ Der nächste Zug nach Buxtehude geht um 12:45 Uhr, mit 7 Minuten Verspätung.“)
  • Geo-Position („Wo ist Walter? ➡ „Walter war vor 11 Minuten in Holzweg 47, 12345 Buxtehude.“
  • Termine („Nenne mir meine Termine heute! ➡ 12 Uhr 30: Zahnarzt!“)
  • Abfall-Termine („Wann wird der Bio-Abfall geholt? ➡ Der Bio-Abfall wird – in 7 Tagen – am Donnerstag, den 7. November abgeholt.“)
  • etc.

Szenen:

  • TV-Szene (Licht aus, Beschattung ab, Kodi an, usw.)
  • Aufwachen-Szene (Rollladen auf, Licht gedimmt, gedämpfte Musik, usw.)
  • etc.

Musik-Steuerung:

  • Sonos
  • Spotify
  • etc.

Weitere Überlegungen (Zukunftsmusik):

Ein ansehnliches Gehäuse (inklusive Lautsprecher) für die Hardware wird gesucht.
Optische Rückmeldung bei der Verarbeitung über die eingebauten LEDs des Respeaker Core V2 wären ganz nett.
Satelliten-Setup für weitere Räume im Gebäude sollten eingerichtet werden.

Testen eines alternativen/angenehmeren TTS: Mycroft AI (mimic)scheint eine gute Option zu sein.

Nicht schlecht, oder! Dann baue es nach! Oder sprich uns auf’s Band… 🎤

*Beitragsbild: Cristian Cristian

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Elektrischer Türöffner im Heimnetzwerk

Nicht selten hat man (in einem Smart-Home) den Wunsch sich selbst oder einem Gast…

Die Sprachsteuerung des „Kleinen Mannes“ (Respeaker Core V2 + Kalliope + Edomi)

Liebe Freunde der Sonne! Ihr habt ein Smart Home mit erlesensten Technik-Spielereien vom Feinsten,…

(Fast) Jedes Haushaltsgerät ins (KNX-)Smart-Home direkt einbinden!

Leider kann man im Leben zum Einen nicht alles vorplanen und berücksichtigen, zum Anderen…

„Visu Porn“: Visualisierung in unserem Smart-Home

Ich schaue mir gerne förmlich recht voyeuristisch andere Visus an. Eine sehr gute Inspirationsquelle…

Magic Mirror im KNX-Smart-Home

Wenn es eine Sache im Internet gibt, die das Pornografie-Angebot übersteigt, dann sind es…

KNX Visualisierung – Erste Gehversuche

Liebe Freunde der optischen Leckerlies – das hier könnte hässlich werden… Denn heute geht…

Heim-LAN: Netzwerkschrank, Switch, Patchpanel & Co.

Das Netzwerk-Thema ist doch größer, als man es anfangs einschätzt: Nachdem wir die Netzwerkverkabelung…

KNX: ETS-Gruppenadressen – Die geordnete Struktur im Einfamilienhaus

Jedes ernsthaft betriebene KNX-Projekt benötigt eine geordnete Gruppenadressen-Struktur. Es sei denn ihr setzt die…

KNX: „ETS Inside“ – Heilsbringer oder Mogelpackung?

Wir wollen uns heute in aller Kürze mit dem neuen KNX Inbetriebnahme-Tool ETS Inside…

ETS5 Professional (fast) kostenlos? KNX kostengünstig konfigurieren

Liebe KNX-Freunde, ich muss es euch eigentlich nicht erklären: Jede KNX-Installation benötigt zur (initialen)…

Netzwerkleitung verlegen: Schritt-für-Schritt-Anleitung

Letzes Mal sprachen wir über die theoretischen Grundlagen der Netzwerk-Vekabelung (LAN). Wie versprochen beschäftigen…

Taster ohne Abdeckung
Taster-Konzept: Praktischer Versuchsaufbau (Hands-On)

So, Freunde der Sonne: Wir haben ja bereits vor langer Zeit versprochen das Taster-Konzept…

Intelligenter Briefkasten: Version 2.0 – „Arduino-Edition“

Wer unseren bescheidenen Blog verfolgt, kennt unser Lieblings-Projekt: Den „Intelligenten Briefkasten“. Wir haben schon…

Berührungslos Schalten – Kapazitive Sensoren

Liebe Freunde der beeindruckenden Features, heute haben etwas Bemerkenswertes für euch, das nicht jeder…

KNX-Testaufbau (Mini-Testboard) mit Raspberry Pi und knxd

Verwandte Themen

Wie ihr vielleicht in einem früheren Beitrag schon gelesen habt, haben wir uns für…

Raspberry Pi: Internet-Geschwindigkeit-Tests automatisieren (kurz & gut)

Der kostengünstige Einplatinen-Rechner Raspberry Pi lässt sich für viele Dinge (miss-)brauchen. Mitunter messen wir…

Smarter Briefkasten
Intelligenter Briefkasten: Version 1.5 – „RED-Edition“

Liebe Freunde und verehrte Briefträger, gebt es zu: Gibt es etwas schöneres als eine…

Smart E-Mailbox
Schatz, du hast Post! Intelligenter Briefkasten 1.0 [TEIL 2/2]

Bereits im ersten Teil des Posts haben wir den ersten Prototypen des Smarten Briefkastens…

Smart Mail Box
Schatz, du hast Post! Intelligenter Briefkasten 1.0 [TEIL 1/2]

Heute gibt es eine Weltpremiere! Wir stellen heute einen vernetzten Briefkasten vor, der selbständig…