Spracherkennung, Chatbot mit Watson und Raspberry Pi

IBM stellt in seiner Bluemix Cloud-Plattform als Service (PaaS) unter anderem die Dienste von Watson Analytics zur Verfügung. Mit Hilfe der Services Speech to Text (Spracherkennung), Conversation (Chatbot) und Text to Speech (Sprachausgabe) lässt sich auf dem Raspberry Pi ein intelligentes System erschaffen. Durch die tiefere Integration der Dienste können hiermit auch Haussteuerungen oder Kundeninformationssysteme (KIS) realisiert werden.

Grundlage ist neben der Anschaffung eines Raspberry Pi (Einkaufsliste) mit allen relevanten Komponenten, die komplette Einrichtung des Systems. Darauf baut die Installation, der für Watson notwendigen Teile, auf. Zusätzlich ist ein USB Mikrofon notwendig und Lautsprecher oder ein Fernseher mit HDMI Anschluss.

HINWEIS: Die hier beschriebene Installation ist auf Deutsch. Leider sind nicht alle Watson Dienste für die deutsche Sprache erhältlich. Insbesondere die Spracherkennung funktioniert noch nicht auf Deutsch.

Mikrofon prüfen

Bei dem Raspberry Pi 3 funktioniert der Playstation Eye Treiber direkt.

$ lsusb
Bus 001 Device 006: ID 1415:2000 Nam Tai E&E Products Ltd. or OmniVision Technologies, Inc. Sony Playstation Eye

Zum Testen reicht das Aufnehmen und Abspielen einer kurzen Datei. Hierbei helfen die Advanced Linux Sound Architecture (ALSA) Tools.

$ sudo apt-get install alsa-base alsa-utils

$ arecord -D plughw:1,0 -f cd test.wav
$ aplay test.wav

Speech to Text (Spracherkennung)

Der folgende Teil basiert auf den Beispielen des TJBot welcher von IBM selber zur Verfügung gestellt wird.

Der erste Schritt besteht darin, das Node.js Repository einzubinden. Dies ermöglicht die Installation der aktuellsten Version. Danach lässt sich der Code von Github.com auschecken und die Abhängigkeiten installieren.

$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt-get install -y nodejs

$ git clone https://github.com/ibmtjbot/tjbot.git
$ cd tjbot/recipes/speech_to_text
$ npm install

Jetzt ist ein guter Zeitpunkt erreicht einen (kostenlosen) Bluemix Account anzulegen. Der Prozess ist selbsterklärend. Andernfalls gibt es ein kleines PDF dazu. Nach der Einrichtung des Accounts ist unter Services – Watson – Text to Speech ein neuer Dienst anzulegen. In der Einstellung des Services stehen unter dem Punkt Serviceberechtigungsnachweise – Berechtigungsnachweise anzeigen die Zugangsdaten. Diese sind in der config.js zu hinterlegen.

Der Beispielcode sieht das Einschalten einer mehrfarbigen LED von Adafruits vor. Ich habe diese LED nicht und war nur an der Ausgabe des Dienstes interessiert. Ich habe daher eine Kopie der Hauptdatei erstellt und den Code innerhalb der LED Steuerung auskommentiert. Nach dem Starten lauscht der Raspberry Pi auf die Sprache und wartet bis zur ersten Sprechpause. Die erkannten Sätze erscheinen dann in der Textausgabe.

$ vi config.js

$ cp stt.js stt_console.js
# Licht Code auskommentiert
$ sudo node stt_console.js

Update: Der vereinfachte Code ohne die Lichtsteuerung kann jetzt in meinem Github.com Projekt heruntergeladen werden.

$ git clone https://github.com/spech66/watson_speech_to_text.git
$ cd watson_speech_to_text
$ npm install
$ vi config.js
$ sudo node speech_to_text.js

Chatbot und Text to speech (Sprachausgabe)

Mit den beiden zusätzlichen Services ist das Erstellen von interaktiven Systemen sehr einfach. In dem oben bereits ausgecheckten Code findet sich das Verzeichnis conversations. Hier lauscht der Raspberry Pi auf ein Aktivierungswort (Watson als Default) und schickt den Satz nach dem Schlüsselwort an den Conversations Dienst, dieser ermittelt eine sinnvolle Antwort und schickt den Text zurück. Der Text kann dann durch den Sprachausgabedienst in eine Audiodatei umgewandelt werden, die sich dann abspielen lässt. Zuerst die Services Text to Speech und Conversation aktivieren. Danach sind in beiden Services wieder die Zugangsdaten hinterlegt. Diese gehören in die config.js Datei.

$ cd ~/crmcopter/tjbot/recipes/conversation
$ vi config.js

Damit eine sinnvolle Konversation entstehen kann muss noch ein Dialog angelegt werden. In dem Service Conversatin gibt es den Button „Launch Tool“, hier gelangt man zum eigentlich Designer. Nach dem Anlegen eines Workspaces kann unter der Übersicht – Workspaces – View Details die Workspace ID kopiert werden.

Intents

Mit den Intents sind Schlüsselwörter und Sätze für den folgenden Dialog zu definieren. Für das Beispiel sollten mindestens zwei Intents („Hello“ und „Goodbye“) erstellt werden. Jeder Intent erhält dazu eine Reihe von möglichen Alternativen Worten und Sätzen (siehe Bild unten).

Dialoge

Dialoge verknüpfen Intents zu einer Verknüpfung von Aktionen und Reaktionen. Mit der Hilfe von If Abfragen können die Intents ermittelt werden (siehe Bild). Die Reaktion definiert die Rückgabe des Textes des Service.

Starten

    sudo node conversation.js

WATSON und TEXT sagen

IBM Watson Dialog
IBM Watson Dialog
IBM Watson Intents
IBM Watson Intents
IBM Bluemix Watson Raspberry Pi
IBM Bluemix Watson Raspberry Pi

Terrarium steuern mit Raspberry Pi – Teil 2 – pimatic

Nach dem Abschluß der pimatic Installation erfolgt die Montage der Technik und die Konfiguration des Tools. Alle Sensoren und Aktoren sind zu verkabeln und nach erfolgreichem Test anzulegen. Eine sinnvolle Konfiguration und die relevanten Regeln sind im Folgenden vorgestellt.

Hardware vorbereiten

Die eigentliche Steuerung erfolgt über Funksteckdosen. Hierzu muss lediglich ein Sender an den Raspberry Pi angeschlossen sein. Die zur Ansteuerung benötigten Module lassen sich später in pimatic aktivieren. Das Ermitteln der korrekten Konfiguration setzt einen Empfänger voraus oder gute Kenntnisse über die verbauten Funksteckdosen.

Initiale Konfiguration

Zentrale Datei für die Konfiguration von pimatic ist die config.json welche einerseits über die Kommandozeile bearbeitet werden kann, andererseits auch direkt über die Weboberfläche. Initial muss das Passwort des admin Benutzers geändert werden. In der Datei oder über die Menüpunkt Plugins lassen sich weitere Funktionen aktivieren.

Plugins auswählen

In dem Installationsumfang von pimatic sind viele Plugins enthalten. Die von mir genutzten oder für sinnvoll erachteten sind im Folgenden kurz beschrieben.

PluginBeschreibung
DHT SensorsEinbindung der Temperatur- und Feuchtigkeitssensoren DHT11, AM2302 und DHT22.
DS18B20Einbindung der One-Wire Temperatursensoren DS18B20.
HomeduinoSteuerung eines arduino für den Funkempfang.
MailMailversand.
OpenweatherErmittlung des aktuellen Wetters in verschiedenen Ländern. Bei den Terrarien ist das aktuelle Wetter in den Heimatregionen angezeigt.
Pusshbullet, PushoverVersand von Push Nachrichten an Smartphones.
Shell executeAusführen von Skripten auf dem System.

Seiten anlegen

Für die Strukturierung der Terrarienanlage bietet sich das Anlegen von Seiten je Terrarium an. Unter einer Seite können alle Sensoren und Aktoren zu Gruppen vereint werden. Auf einer „Global“ genannten Seite sind die wichtigsten Daten aus allen Bereich erfasst und ein Button für die Notfallabschaltung.

Geräte erstellen

Für jeden Sensor wurde ein entsprechendes Device erfasst. Exemplarisch sind hier die unterschiedlichen Geräte genannt. Grundsätzlich können alle Werte der InputDevices auch mittels Variable intern gespeichert werden ohne ein Input Element. Die Eingabefelder vereinfachen jedoch die manuelle Änderung erheblich.

DHT22 Sensoren

{
  "type": 22,
  "pin": 3,
  "interval": 300000,
  "xAttributeOptions": [],
  "id": "schlangen-dht22",
  "name": "Schlangen DHT22",
  "class": "DHTSensor"
 }

Alle 5 Minuten die Daten von dem Sensor ermitteln.

DS18B20 Sensor

{
  "hardwareId": "28-0316613cc1ff",
  "id": "schlangen-temperatur-oben",
  "name": "Schlangen Temperatur Oben/Rechts",
  "class": "DS18B20Sensor",
  "interval": 300000
}

Alle 5 Minuten einen der One Wire Sensoren auslesen.

Input für Temperatur

{
  "variable": "ts-temp-tag",
  "type": "number",
  "min": 0,
  "max": 60,
  "id": "schlangen-temperatur-tag",
  "name": "Schlangen Temperatur Tag",
  "class": "VariableInputDevice"
}

Eingabe für den Wert zwischen 0 und 60 Grad.

Input für eine Zeit

{
  "variable": "ts-tag",
  "id": "schlangen-tag",
  "name": "Schlangen Tag",
  "class": "VariableTimeInputDevice"
}

Erfassung des Tagesanfangs.

Schalter für Aktiv, Notaus, …

{
  "id": "schlangen-aktiv",
  "name": "Schlangen Aktiv",
  "class": "DummySwitch"
},
{
  "xConfirm": true,
  "id": "notaus",
  "name": "Notaus",
  "class": "DummySwitch"
}

An- und Ausschalter.

Schalter für die Funksteckdosen

{
  "protocols": [
    {
      "name": "switch2",
      "options": {
        "houseCode": 28,
        "unitCode": 16
      },
      "send": true,
      "receive": true
    }
  ],
  "id": "schlangen-schalter-licht",
  "name": "Schlangen Schalter Licht",
  "class": "HomeduinoRFSwitch"
}

Sonnenaufgang und Sonnenuntergang

{
  "attributes": [
    {
      "name": "sunrise",
      "label": "Sunrise"
    },
    {
      "name": "sunset",
      "label": "Sunset"
    }
  ],
  "id": "sonnenaufgang",
  "name": "Sonnenaufgang",
  "class": "SunriseDevice",
  "latitude": xx.xxxxxxxx,
  "longitude": y.yyyyyyyy
}

Wetter

{
  "location": "",
  "cityId": "2077895",
  "lang": "de",
  "blacklist": [],
  "xAttributeOptions": [],
  "id": "wetter-alicesprings",
  "name": "Wetter Alice Springs",
  "class": "OpenWeatherDevice"
}

Das aktuelle Wetter in Australien.

Regeln definieren

Sind alle Sensoren, Aktoren und Variables definiert kommt das Kernelement von pimatic zum Einsatz. Mit Hilfe der Regeln lassen sich mächtige Schaltungen erzeugen.

Licht steuern

{
  "id": "schlangen-licht-an",
  "name": "Schlangen Licht An",
  "rule": "when its after $ts-tag and its before $ts-nacht and state of schlangen-aktiv is equal to on then turn Schlangen Schalter Licht on after 10 seconds and turn schlangen-schalter-spot on after 15 seconds and turn echsen-schalter-spot on after 25 seconds",
  "active": true,
  "logging": true
}

Schaltet alle Lichtquellen für den Tag ein wenn die manuelle Steuerung nicht aktiv ist. WICHTIG: Es müssen alle Funksteckdosen mit einer Pause nacheinander geschaltet werden. Andernfalls überlagern sich die Funksignale und kein korrektes Signal erreicht die Steckdosen.

Temperatur steuern

{
  "id": "schlangen-temperatur-tag-an",
  "name": "Schlangen Temperatur Tag An",
  "rule": "when its after $ts-tag and its before $ts-nacht and $schlangen-dht22.temperature <= $ts-temp-tag - $global-tempdiff and state of schlangen-aktiv is equal to on then turn Schlangen Schalter Heatpanel on",
  "active": true,
  "logging": true
}

Aktiviert das Heatpanel falls es tagsüber zu kalt ist und die manuelle Steuerung nicht aktiv ist.

Notaus

{
  "id": "notaus",
  "name": "Notaus",
  "rule": "when notaus is turned on then switch off schlangen-aktiv and switch Schlangen Schalter Heatpanel off and switch Schlangen Schalter Licht off and switch Schlangen Schalter Spot off",
  "active": true,
  "logging": true
}

Der Notaus Schalter deaktiviert die automatisch Steuerung und schaltet alle Aktoren aus.

Nachrichten

{
  "id": "nachricht-schlangen-temperatur-nacht-zu-kalt",
  "name": "Nachricht Schlangen Temperatur Nacht Zu Kalt",
  "rule": "when [its before $ts-tag or its after $ts-nacht] and $schlangen-dht22.temperature <= $ts-temp-nacht - $global-alarmdelta then log "Schlangen - Es ist ZU KALT: $schlangen-dht22.temperature ist unter $ts-temp-nacht - $global-alarmdelta"",
  "active": true,
  "logging": true
}

Nachrichten für Sonderfälle (Zu warm/kalt, …) können in das Log geschrieben, per Mail versendet oder als Push Nachricht verschickt werden.

Arduino Anzeige
Arduino Anzeige
Weboberfläche von TerraPiPy
Weboberfläche von TerraPiPy
Pimatic
Pimatic

Terrarium steuern mit Raspberry Pi – Teil 1

Ein Terrarium, Vivarium oder Aquarium ist im Prinzip nichts anderes als ein kleines Haus und eignet sich somit hervorragend für die Hausautomatisierung. Dort sind zusätzlich noch lebende Tiere aktiv, so dass auf Ausfallsicherheit und Notfallsteuerung ein besonderes Augenmerk gelegt werden muss. Grundlage für die Steuerung wird diesmal nicht FHEM sondern pimatic sein.

pimatic

Bei pimatic handelt es sich um ein Framework zur Automatisierung auf Basis von node.js. In pimatic lassen sich Sensoren und Aktoren erstellen und diese mittels einfacher „WENN … DANN“ Regeln steuern. Beispielsweise kann jeden Tag um 8 Uhr die Beleuchtung eingeschaltet werden. Benachrichtigungen an ein Smartphone lassen sich bei Überschreitung einer vorgegebenen Temperatur verschicken. Zusätzliche Plugins ermöglichen weitere Funktionen. Beispielsweise das Einbinden von Zeiten zu Sonnenaufgang und Sonnenuntergang, cron, Temperatursensoren und Funkschalter. Die Installation ist sehr einfach und am Ende dieses Beitrags kurz beschrieben.

Vorüberlegungen

Die Hardware soll leicht zu beschaffen und einfach einzurichten sein. Außerdem müssen mehrere Funktionen unterstützt werden.

  • Weboberfläche
  • Wetter und Forecast (auch aus dem Heimatland der Tiere)
  • Sonnenaufgang und Sonnenuntergang
  • Beleuchtungssteuerung
  • Luftfeuchte-, Lichtstärke- und Lufttemperaturmessung
  • Dimmer für Strahler und Leuchten
  • Zeitschaltuhr und Steckdosensteuerung
  • Benachrichtigungen (Push, E-Mail) und Erinnerungen (Futter, …)
  • Diagramme und Auswertungen
  • Notaus
  • Manuelle Übersteuerung

Insbesondere die Alarmierung und Überwachung für das System ist wichtig, damit jederzeit ein kurzfristiges Eingreifen möglich ist.

Sensoren

Pimatic unterstützt eine Vielzahl von Sensoren. Die meiner Meinung nach relevanten Sensoren sind im Folgenden beschrieben.

Der DS18B20 ist ein wasserdichter Sensor zur Temperaturmessung. Durch den einfachen Einbau und den geringen Kosten ist dieser sehr gut zu nutzen. Der Sensor unterstützt das 1-Wire-Protokoll, damit können mehrere hundert Sensoren an einem Anschluss des Raspberry Pi angeschlossen werden.

Die Sensoren DHT22 und AM2302 sind sehr präzise Sensoren zur Messung von Temperatur und Luftfeuchtigkeit. Letzterer ist die verkabelte Version des DHT22.

Ein Tür oder Fenster Kontakt Magnetschalter ermöglicht die Anfrage, ob das Terrarium korrekt verschlossen ist.

Aktoren

Die Aktoren für ein Terrarium sind sehr überschaubar. Es müssen „nur“ die Lampen und Heizungen gesteuert werden. Hierzu gibt es verschiedene Möglichkeiten.

Meine präferierte Variante sind die beliebten Funksteckdosen. Hier kann zum einen mehrfach das Signal zum Einschalten oder Ausschalten gesendet werden, zum anderen lassen sich diese im Notfall durch einen zweiten Raspberry Pi oder den Fernsteuerungen einfach abschalten.

Als Alternative zu den Funksteckdosen gibt es Steckdosenleisten die sich über die USB Schnittstelle (genauer SIS-PM und dem Tool sispmctl) steuern lassen. Hierzu bietet pimatic ebenfalls einen Plugin.

Ein Einsatz von Funkdimmern bietet die Möglichkeit die Helligkeit oder Temperatur angeschlossener Leuchtmittel zu steuern. Hierbei muss unbedingt darauf geachtet werden, dass sich nur bestimmte Leuchtmittel dimmen lassen. Alle Lampen mit Vorschaltgerät sind ausgeschlossen. Mit dem Dimmer konnte ich bisher noch keine eignen Erfahrungen sammeln.

pimatic und Raspberry Pi installieren

Die Einkaufsliste für den Raspberry Pi enthält alle relevanten Komponenten. Die Einrichtung ist ebenfalls in einem anderen Blogeintrag beschrieben.

Die Installation und Einrichtung für das Terrarium erfolgt im zweiten Teil.

XServer, Xfce4 und RDP Zugriff auf dem Raspberry Pi

Diverse Windowmanager, XServer und Remote Desktop Programme (RDP) stehen für den Raspberry Pi bereit. Eine schnelle Installation der am Meisten genutzten Komponenten gibt es hier.

X.Org-Server installieren

Der X.Org-Server hat sich als das Standard X-Window-System unter Linux etabliert. Die Installation ist schnell erledigt.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install xserver-xorg
$ sudo apt-get install xinit

Xfce4

Ohne einen Windowmanager macht das grafische Arbeiten wenig Spaß. Hier steht auch eine Reihe von Windowmanagern zur Verfügung. Auf dem Raspberry Pi hat sich der Xfce als einer von vielen etabliert. Alternativ gibt es mit fluxbox, kde, gnome, usw. weitere Varianten.

$ sudo apt-get install Xfce4
$ sudo apt-get install xfce4-goodies

RDP

Wer von seinem Windows PC auf einen Linux XServer zugreifen möchte (warum eigentlich?), kann das mittels xrdp realisieren. Der xrdp Dienst stellt den benötigten RDP Server auf dem Linux System zur Verfügung und ermöglicht den Login.

$ sudo apt-get install xrdp

In Windows muss unter dem Punkt „Programme > Zubehör > Remote Desktop Verbindung“ der RDP Client installiert werden. Mittels Start „Remotedesktopverbindung“ oder durch das Ausführen von „mstsc.exe“ ist der Client zu öffnen. Nach der Eingabe der IP bzw. des Namens des Raspberry Pi führt das Modul „sesman-XVNC“ in die gewünschte Umgebung.

Raspberry Pi 3 und VNC

Die aktuelleren Modelle unterstützen VNC direkt. In der Konfiguration kann der Dienst aktiviert werden. Der Zugriff erfolgt beispielsweise über RealVNC Viewer.

$ sudo raspi-config
5 Interfacing Options
P3 VNC         Enable/Disable graphical remote access to your Pi using RealVNC
Kali Linux auf dem Raspberry Pi

Mit Kali Linux steht eine der beliebtesten Linux Distributionen für das Penetration Testing, Netzwerkanalyse, Sniffing, Exploiting und weitere Sicherheitsanalysen für den Raspberry Pi zur Verfügung. Dank der Größe des Einplatinencomputers kann die Installation in die Rechenzentren an unterschiedlichen Standorten oder für die Vor-Ort-Analyse von Netzwerken mitgenommen werden.

Kali Linux installieren und nutzen

Kali.org stellt unter Installation von Kali ARM auf einem Raspberry Pi einen kleinen Artikel zur Installation bereit. Dort wird jedoch auf einem bestehenden Linux System als Basis aufgesetzt. Die Installation aus Windows heraus ist jedoch ebenso einfach.

Die Artikel auf meiner Einkaufsliste sind wieder eine gute Basis für den Einkauf der Komponenten für den Raspberry Pi 3.

Die Kali Linux Images für ARM Prozessoren sind auf der Download Seite zu finden.

Mit Hilfe des Win32DiskImager kann das Image auf die SD Karte kopiert werden. Die Software muss mittels Rechtsklick auf „Als Administrator ausführen“ gestartet werden. Danach wählt man das heruntergeladene ISO Image aus, gibt den korrekten!!! Laufwerksbuchstaben der SD Karte an und klickt auf „write“.

Nach dem Schreiben des Images auf die Karte ist die „Installation“ von Kali Linux erledigt. Die SD Karte muss nur noch in den Raspberry Pi gesteckt werden. Nach dem Anbringen der Stromversorgung sollte das System booten. Mit einem SSH Tool auf die IP Adresse erscheint die Anmeldemaske. Die Zugangsdaten lauten „root / toor“.

Notwendige Änderungen

Sowohl das Passwort als auch der SSH Host Schlüssel sind standardmäßig auf allen Systemen identisch. Diese müssen daher beide geändert werden! Der erste Schritt ist bereits in dem verlinkten Artikel beschrieben.

root@kali:~ rm /etc/ssh/ssh_host_*
root@kali:~ dpkg-reconfigure openssh-server
root@kali:~ service ssh restart

Die Änderung des Passwortes erfolgt mit dem bekannten passwd (Wenn passwd nicht bekannt ist sollte die SD Karte möglicherweise gleich wieder in den Müll wandern ;-)).

Wie es weiter geht

Mit der Linux Distribution sind nun eine Reihe von Programme für Analysen, Exploits und Penetration Tests installiert. In dem Artikel Securitysoftware und Scanner sind viele der Programme vorgestellt.

 

Bildquelle: KALI LINUX ™ is a trademark of Offensive Security.

Kali Linux Meme
Kali Linux Meme
Kali Linux
Kali Linux