Raspberry Pi Homeautomatisierung

Stand: 08.10.2014 
Status: -in Überarbeitung -

Homeautomatisierung mit dem Raspberry Pi

Einleitung

Die Ideen zur Verwendung des Raspberry Pi kamen mir, als der Bau einer Entlüftungsanalge für ein Badezimmer geplant wurde. Im Ursprung wurde eine einfache Entlüftung für ein Badezimmer geplant um die vorhandene Feuchtigkeit abzutransportieren. Nach der Anfangsplanung kam mir der Gedanke, der abgeführten Luft die Wärme zu entnehmen und diese der zugeführten Frischluft wieder zuzufügen. Das Projekt der Realisierung der Lüftungsanlage werde ich später auch hier veröffentlichen.

Da durch gegebene Faktoren (Feuchtegehalt und Temperatur, innen sowie außen) eine Steuerung hermusste, fiel nach kurzer Recherche im Internet die Wahl auf den Raspberry Pi. Begeistert hatte mich vor allem, dass es sich um einen kompletten Computer handelte. CPU, RAM und sogar SD-Kartenleser, LAN- und USB-Anschluss. Am wichtigsten aber die Tatsache der vorhandenen IO-Schnittstellen und eines DEBIAN-basierten Linux. Da kannte ich mich schon aus!

Zunächst aber musste ein Weg ermittelt werden. Wie soll das nachher aussehen? Um den richtigen Einstieg zu finden, hatte ich mich Entschieden, erst einmal eine einfache Lichtsteuerung zu erstellen. Diese sollte dann mit dem Smartphone, Tablet und auch einem normalen Webbrowser zu bedienen sein. Also HTML oder App. Mit HTML und PHP hatte ich bereits ein wenig Erfahrung sammeln können. Eine App für das Smartphone zu entwickeln ist für mich Neuland aber durchaus spannend. Im Laufe der Ermittlungen, bin ich auf den http://ai2.appinventor.mit.edu/ gestoßen, mit dem ich meine erste App gebaut hatte.

 

Voraussetzung

Die einzelnen Schrite detailliert auszuschmücken macht hier wenig Sinn. Vielmehr werde ich versuchen, allgemeine Informationen zu verlinken oder weise auf die Suchmaschinen hin. Die Suchbegriffe appinventor, raspberry pi oder Hinweise zu HTML, PHP oder PERL führen zu mengen von guten Ergebnissen.

Die hier aufgezeigten Lösungen beinhalten u.a. folgende Komponenten:raspi

Hardware

  • Raspberry Pi – als zentrale Einheit.
  • SD-Karte – hier 16GB (geht auch weniger) für Betriebs- und Dateisystem
  • Relaisplatine – gibt’s sehr günstig passend zum Raspberry Pi.
  • Temperatur- und Feuchtesensoren
  • Gehäuse – HENSEL-Kasten, damit das ganze auch robust unterzubringen ist.
  • diverse Elektroartikel – Klemmen, Sicherung etc.
Software
  • Debian-Linux – wheezy als SD-Kartenimage
  • apache – dient der Kommunikation zu Endgeräten
  • xml-rpc – kann, muss aber nicht
  • ADAFRUIT_DHT.c – zum auslesen der Temperaur- und Feuchtesensoren
  • wiringPi – komfortable Steuerung der IO-Pins des Raspi
verwendete Beschreibungs- und Programmiersprachen

  • HTML – z.Teil auch HTML5-Elemente, geht aber auch ohne
  • CSS – Stylesheet
  • PHP – Kopplung von Webbasierter Kommunikation zum Betriebssystem
  • perl – Hintergrundprozesse (Schalten der Relais)
sonstiges
  • Appinventor – zur Erstellung von Android-Apps
  • Startskript in /etc/init.d – damit die nötigen Programme auch nach einem Systemstart automatisch geladen werden.

Implementierung

Debian-wheezy

http://www.raspiprojekt.de/anleitungen/betriebssysteme/1-raspbian-installieren-und-einrichten.html

Apache

->   cd /etc/apache2/conf-enabled
->  ln –s ../conf-available/piinfo.conf
  • Apache2 neustarten -> /etc/init.d/apache2 restart
Der Zugriff wird hier durch eine Pin-Eingabe auf der Einstiegseite gewährleistet. Die richtige PIN führt zu einer gültigen Browser-Session und verhindert einen unautorisierten Zugriff auf die Webseite. Alternativ kann auch der Mechanismus über .htaccess erfolgen. Dies ist beim Apache-Webserver möglich, andere Server unterstützen diese Funktion aber nicht.

skripte

Webseite:

Die Dateistruktur für die Webseiten sieht so aus:
/usr/share/piinfo/site -> Einstiegsordner des Webservers
|_ form_m.php, sensoren_V2.php,Bad.php
/usr/share/piinfo/site/css  -> Stylesheets
|_ default.css
/usr/share/piinfo/site/images -> Bilder
|_ Hintergrundbild nach Geschmack
/usr/share/piinfo/hidden -> hier versteckt sich die Parameterdatei (ist per Web nicht direkt Erreichbar)
|_ parameter.php

Dateien für die weitere Verarbeitung

/home/pi/script

codeschnipsel1

|_ Ablage der Log-dateien für die Zustände und Werte der Schalter und Sensoren
|_ read.pl => Leseprogramm für die Sensoren
|_ switch.pl => Programm zum setzten der Schaltausgänge

Startskript

/etc/init.d/
|_ switch.pl => Skript zum starten des switch.pl als Hintergrundjob

Dateien der Webseite

  • form_m.phpStart
Die Datei stellt in einem Browser Schaltknöpfe dar. Bei erstmaligem Aufruf nach Browserstart, wird eine PIN abgefragt und eine gültige Session angelegt. Damit kann verhindert werden, dass unautorisierte Personen, Manipulationen vornehmen können. Die Weiterleitung von Kommandos wird über die Methode POST realisiert.
Die, über die Webseite, übermittelten Werte, werden in Dateien gespeichert. Die Scripte greifen dann auf die Inhalte dieser Dateien zu. Die Aufgabe des schaltens der Relais übernimmt ein perl-script, dass im Hintergrund abgearbeitet wird. Auf diese Weise ist es möglich, die jeweiligen Zustände unabhängig voneinander zu verarbeiten. Auch ist es von Vorteil, dass nach  einem Systemneustart, ein konsistenter Zustand vorliegt – die Werte werden ja in Dateien gespeichert!
  • sensoren_V2.phpTemperatur

Darstellung der Temperatur- und Feuchtedaten in Tabellarischer Form. Ist der verwendete Browser auch HTML5 -fähig, gibt es eine zusätzliche grafische Ausgabe. Der Aufruf dieser Seite ist bewusst nicht PIN-geschützt.

  • css/default.css

Stylesheet zur Darstellung verschiedener Bereiche. So werden hier z.B. die Knöpfe in Abhängikeit des Schalterzustandes grafisch veränder (grün/gelb/rot).

  • ../Bad.phpLuft

Es können verschiedene Betriebsmodi für die Badentlüftung ausgewählt werden. Der Abluftmotor verfügt über zwei Geschwindigkeitsstufen, die hier eingeschaltet werden können. Ebenso kann der Lüfter deaktiviert oder auf automatischen Betrieb umgestellt werden.

  • ../hidden/parameter.php
Um die Parameter-Datei im Browser nicht direkt anzusprechen, liegt diese in einem Verzeichis außerhalb des DocumentRoot. Hier ist auch die PIN eingetragen die für die Authentifizierung nötig ist.
  • rpc.php
Für die Verwendung der Android-App ist diese Datei vorgesehen. Dort werden Daten per Methode POST aus der App entgegengenommen, Einträge in die Dateien der Scalter-Zustände vorgenommen und der aktuelle Status als XML-Text an die App zurückgegeben.

 

Android-App

Der „MIT Appinventor 2“ hat bisher gute Dienste geleistet. Es ist zwar nur eine BETA-Version verfügbar aber dennoch können damit auch komplexe Apps erstellt werden. Besonderheiten des AppInventors sind neben der ONLINE-Verwendbarkeit auch die Tatsache, dass der Programmcode mit grafischen elementen zusammengesetzt wird. So ist es möglich, auch ohne spezielle Kenntnisse von bestimmten Programmiersprachen, CODE zu erzeugen.

Auf der Einstiegseite sind acht Tasten angeordnet, die jeweils ein Relais des Raspi schalten. Die Tastenbeschriftungen werden vom Server gelesen und sind in der Datei parameter.php hinterlegt. Damit können die Beschriftungstexte also zentral gepflegt werden. Bei jedem Tastendruck wird der Zustand, per Methode POST, an die rpc.php gesendet. Auf dem Server erfolgt dann ein Eintrag in eine Datei und es wird ein XML-formatierter Text an die App zurückgegeben. Dieser Text enthält die Zustände aller Tasten und wird auseinandergefriemelt (geparst). Die Tasten erscheinen dann entsprechend dem Schalterzustand in verschiedenen Farben.

Im zweiten Screen können Einstellungen vorgenommen werden.

      1. URL der rpc.php => Damit die RPC-Schnittstelle gefunden wird
      2. URL der sensoren.php => HTML-Seite zur Darstellung der Sensorendaten
Der dritte Screen ist dann der Darstellung der Sensordaten vorbehalten.

 

Schlusswort

Mittlerweile habe ich den Weg über html weiter verfolgt. Das erstellen einer App hat mir zwar Freude bereitet aber die Abhängigkeit zu verschiedenen Gerätetypen und Displaygrößen hat mich dazu gebracht, nur noch Browser zu bedienen. Eine Plattform unabhängige Darstellung begünstigt einen universellen Einsatz.  Wegen der Elemente von HTML5 ergibt sich hier eine erhebliche Vereinfachung in der Erstellung von Webseiten.

Schreibe einen Kommentar