Homeserver


Aufgaben

Einbindung ins Netzwerk und Bedienung:

Wie ich bereits schon erwähnt hatte, läuft mein Homeserver auf einem Raspberry Pi mit dem aktuellen Betriebssystem Raspbian Stretch. Die nachfolgenden Punkte setzen voraus, dass ihr den Raspi fertig eingerichtet und konfiguriert habt, wie im Kapitel Konfiguration beschrieben.


Software und Einrichtung:

Der Homeserver schaltet die Geräte im Heimnetzwerk über Funksteckdosen. Das heisst, die einzelnen Komponenten sind an Funksteckdosen angeschlossen, die vom Homeserver über Sprachbefehle (alternativ auch über eine Menueoberfläche) ein und ausgeschaltet werden.

Bevor man die Sprachsteuerung installiert, sollte man sich Gedanken darüber machen, welche Funksteckdosen man verwenden will und wie man sie schaltet. Ich benutze b1 Funksteckdosen vom Toom Baumarkt mit Dip Schaltern, die exakt wie ELRO Funksteckdosen funktionieren. Angesteuert werden sie über einen 433 MHz Sender, der an die Steckerleiste des Raspi's angeschlossen wird.

Realisiert habe ich das mit dem Projekt RC-Switch. Folgt dort der Installationsanleitung. Den Punkt WiringPi installieren könnt ihr überspringen, wenn ihr Raspbian Stretch nutzt. Dort ist WiringPi schon vorinstalliert. Wenn ihr RC-Switch installiert habt, denkt daran, dass ihr den ./send Befehl im Unterverzeichnis rcswitch-pi ausführen müsst. Wollt ihr den Befehl von einem beliebigen anderen Verzeichnis aus starten (vorausgesetzt euer Benutzername ist pi) sollte der Befehl lauten wie folgt:

 sudo /home/pi/rcswitch-pi/./send

Alternativ könnt ihr auch das Raspberry Remote Projekt von xkonni installieren. Dabei wird ein Webinterface mitgeliefert, das ihr auf einem Webserver auf dem Raspi hochladen müsst. Dann könnt ihr mit eurem Webbrowser das Webinterface öffnen, mit dem man die Steckdosen schaltet. Auch hier gilt: WiringPi und diesmal auch git-core nicht installieren. Ist in Raspbian Stretch schon vorhanden.

Wenn ihr das erfolgreich installiert habt, könnt ihr euch an das Abenteuer Sprachsteuerung machen. Ich schicke voraus, dass die Installation und Konfiguration ziemlich aufwendig ist und wahrscheinlich auch nicht beim ersten Mal funktioniert. Ich habe die Sprachsteuerung auch mehrmals neu installiert, bis das Ergebnis zufriedenstellend war. Das Projekt heisst Jasper. Der Unterschied zu einer Sprachsteuerung wie z.B. Amazon Echo ist, dass die Spracherkennung nicht auf einem Server von Amazon liegt, sondern auf dem eurem Homeserver im Heimnetzwerk. Um das zu verstehen erkläre ich erst einmal wie eine Sprachsteuerung funktioniert:

Eine Sprachsteuerung besteht aus zwei Teilen:

Soviel erstmal zum Verständnis der Funktionsweise. Nun stellt sich aber die Frage, wie steuert denn die Sprachsteuerung z.B. die Funksteckdosen? Das Projekt Jasper bedient sich dabei einer Schnittstelle (API) mit der Programmiersprache Python.

Was heisst das genau?

Python ist eine objektorientierte Programmiersprache unter Linux. Schnittstelle bedeutet, dass ein gesprochener Befehl von der Spracherkennung erkannt wird, und daraufhin ein Programm-Modul ausgeführt wird, dass diesen Befehl ausführt. Im Klartext heisst das, ihr müsst für jeden Befehl, den ihr der Sprachsteuerung gebt, ein dazugehöriges Python Modul schreiben, welches genau diesen Befehl ausführt.

Ich erkläre das mal anhand eines Beispieles:

Ihr sagt z.B.: "Licht aus"
Die Spracherkennung hört das und sucht nach einem Modul, dass dem Sprachbefehl "Licht aus" zugeordnet ist.
Das entsprechende Modul heisst jetzt beispielweise licht_aus.py
In diesem Modul steht dann der Programmtext, der die entsprechende Funksteckdose mit dem ./send Befehl auschaltet.

Wenn ihr die Steuerung der Steckdosen, oder anderer Funktionen mit Jasper steuern wollt, kommt ihr nicht an Python vorbei. Wenn man sich mal etwas mit Python befasst, merkt man recht schnell, dass es eigentlich nicht so schwer ist, diese Sprache zu erlernen ist. Anfängern empfehle ich, mal einen Blick in diesen Python Kurs zu werfen.

Noch ein kleiner Tipp zur Programmierung. Es ist recht einfach ein Programm zu schreiben, welches die Steckdosen an, bzw. ausschaltet. Bei einer Lampe oder einem DVD-Player ist das auch unkritisch, wenn die Steckdose versehentlich ausgeschaltet wird. Der Raspberry Pi ist aber ein Computer. Bevor man ihn ausschaltet, sollte man ihn ordnungsgemäss herunter fahren. Bedenkt das beim Programmieren. Es immer sinnvoll bei einem Schaltbefehl, vorher eine Netzwerkabfrage (z.B. mit nmap) zu machen, um zu überprüfen, ob der Raspi noch aktiv ist, bevor man ihn abschaltet. Weiterhin sollte man sich überlegen für die einzelnen Geräte Schaltdateien zu hinterlegen. Das sind eine einfache Textdateien in der eine 1 steht für Gerät an und eine 0 für Gerät aus. Wenn ich den Inhalt der Dateien bei einem Programmaufruf abfrage, weiss das Programm welchen Zustand das Gerät hat, und kann dann entweder ein oder ausschalten.

Standardmodule:

In der Rubrik Developer API (Entwickler Programmierschnittstelle) von Jasper, wird anhand eines Beispielmodules erklärt, wie man ein Standard Modul schreibt. Hier könnt ihr auch sehen, wie ihr mit der Sprachsteuerung kommuniziert.

Bevor ihr nun mit der Installation beginnt, möchte ich noch ein paar Dinge ansprechen, die euch wahrscheinlich weiter helfen werden.

Hardware:

Installation:

Konfiguration:

Damit ihr wisst, wie man die deutsche Sprachausgabe einstellt, zeige ich euch hier den Inhalt der profile.yml Datei:

 carrier: ''
 first_name: euer Name
 gmail_password: ''
 phone_number: ''
 prefers_email: false
 stt_engine: sphinx
 tts_engine: pico-tts
 pico-tts:
   language: 'de-DE'

Funktion:

So, jetzt wünsche ich euch gutes Gelingen bei der Installation, und denkt daran, diese Installation ist eine echte Geduldsprobe.

Parallel zur Sprachsteuerung kann ich die Funksteckdosen auch über eine Benutzeroberfläche steuern. Das Projekt von xkonni habt ihr euch vielleicht schon angeschaut. Was mir daran nicht gefällt, ist die Optik. Deshalb habe ich mein eigenes Webinterface in PHP geschrieben, das auf einem Webserver auf dem Homeserver läuft. Optimiert habe ich das ganze für das Handy, damit die Oberfläche dort gut bedienbar ist. Wie das ganze aussieht, seht ihr hier:


Oberfläche Handy


Die dritte Variante ist der Zugriff über SSH. Auch dort kann ich auf ein Menue zugreifen. Mit dem Programm Dialog kann man sich für das Terminal einfache Auswahlmenues erstellen. DIe Ansteuerung der Funksteckdosen programmiert man mit Bash-Skripting. Das ist vergleichbar mit Batch-Dateien unter Windows. Das sieht dann so aus:


Auswahlmenue

Auswahlmenue

Statusmenue



Als letztes Feature betreibe ich auf dem Homeserver meinen eigenen Kalenderserver. Was mich gestört hat ist, dass der Kalender unter Android immer mit dem Google-Konto synchronisiert wird. Das wollte ich mit meinem eigenen Server machen. Dazu muss man lediglich in seinem Google Konto die Synchronisierung des Kalenders abschalten.

Realisiert habe ich den Server mit Radicale. Das ist ein CALDAV Server, der auf dem Raspi läuft. Zur Nutzung von Radicale benötigt man Thunderbird. Das ist ein eMail Programm, welches über die Erweiterung Lightning auf den CALDAV Server zugreift. Über diese Erweiterung werden dann die Termine vom Server mit dem PC synchronisiert und können dort bearbeitet werden. Die Synchronisierung des Handys mit dem Server erfolgt mit der App DAVDroid.

Die Termine werden vom Homeserver überwacht, d.h. ich kann über die Sprachsteuerung nachfragen, welche Termine am aktuellen Tag anstehen.



Hier geht es zurück zum Inhalt.