Uncategorized

Was ist ein Raspberry Pi?

Sollte man auf diesen Blog gestoßen sein, hat man in der Regel schon eine gewisse Ahnung was ein Raspberry Pi (RPi, Abbildung 1) überhaupt ist. Sei es durch Erzählungen von Freunden, das lesen von Blogs oder durch andere Quellen wie z.B. Youtube. Schaue ich mir meine Statistiken zum Blog an, so kommen 99% der Besucher von einer einschlägigen Suchmaschine, d.h. es wurde bereits aktiv nach RPi oder verwandten Themen gesucht. Dennoch möchte ich hier in aller Kürze den RPi, seine Bestandteile sowie den Einsatzzweck vorstellen.

IMG_20180303_074738

Abbildung 1: Raspberry Pi Revision 1 Modell B

Der RPi wird häufig als sogenannter Einplatinen-Computer oder auch als embedded system (Eingebettetes System) bezeichnet. Die zweite Bezeichnung unterscheidet sich allerdings grundlegend von dem was die erste Bezeichnung suggeriert.

Als embedded system werden „Computer“ bezeichnet welche in einem Gesamtsystem eingebettet sind und – häufig unbemerkt vom Nutzer – ihren Dienst verrichten. Beispielsweise wird heute in den meisten Waschmaschinen das Waschprogramm von einem embedded system abgearbeitet. Das embedded system nimmt in diesem Beispiel  von der Nutzerschnittstelle „Wahlschalter“ den Befehl zur Ausführung des jeweiligen Programms entgegen und führt dieses aus. Für solch einen Einsatzzweck reicht eine einzelne Anwendung, das Steuerungsprogramm. Auf ein Betriebssystem, welches höhere Anforderungen an die Hardware und somit höhere Kosten bedeuten würde wird meist vollständig verzichtet[1].

Die Bezeichnung als Einplatinen-Computer suggeriert, dass der RPi als „normaler“ Computer genutzt werden kann. Also etwas mit Bildschirm, Tatsatur, Maus und einem Betriebssystem, welches Befehle in Form von Klicks oder Texteingaben entgegen nimmt und mehrere unterschiedliche Anwendungen gleichzeitig ausführen kann.

Der RPi vereint quasi beide Welten in einem System. Das und der sehr geringe Preis haben dem RPi zu seinem momentanen Erfolg verholfen. Der RPi wird von verschiedenen Betriebssystemen unterstützt, bietet aber auch Anschlüsse welche es ermöglichen direkt elektronische Komponenten anzuschließen und zu steuern. Aufgrund der damit einhergehenden Flexibilität ist der RPi für viele Einsatzgebiete geeignet. Daher auch das doppeldeutige Motto dieses Blogs „(Egal was du vor hast) Raspberry Pi tut’s“ 😉

Komponenten/Funktionen des RPi

Wie bei einem normalen Computer üblich, besitzt auch der RPi viele Anschluss- bzw. Verbindungsmöglichkeiten. Dazu zählen (je nach Modell)

  • Ethernet
  • WLAN
  • Bluetooth
  • USB2.0
  • HDMI + digital Audio
  • Analog Audio (Klinke)
  • Analog VideoOut (Chinch)
  • GPIOs

Bis auf den Punkt GPIOs sollten die genannten Anschlüsse allgemein Bekannt sein. Das Akronym GPIO steht für General Purpose Input Output, also frei übersetzt Beliebig nutzbare Ein- und Ausgabe. Bei dem in Abbildung 1 zu sehenden RPi sind die GPIOs in Form einer Pinnleiste (siehe oben Links) ausgeführt. Die Pinnleiste bzw. die GPIOs können genutzt werden um elektrische Schaltungen anzusteuern, Daten zu übertragen oder sogenannte RPi-Hats anzuschließen.

Die Möglichkeit elektrische Schaltungen anzusteuern ermöglicht in Kombination mit einer Netzwerkeinbindung (Ethernet, WLAN) sehr viele Anwendungsgebiete für den RPi. Dazu aber in einem zukünftigen Blogeintrag mehr.

 

Gibt es noch Fragen? Dann ab damit in die Kommentare 😉

[1]: Aufgrund sinkender Hardwarekosten könnte sich der Trend zukünftig umkehren

Warum Raspberry Pi?

Das doppeldeutige Motto dieses Blogs lautet zwar „(Egal was du vor hast) Raspberry Pi tut’s“ aber dennoch sollte vor der Anschaffung eines Raspberry Pi (RPi) überlegt werden ob das gegebene Problem überhaupt durch ein RPi gelöst werden kann oder ob es bessere Alternativen gibt. Außerdem sollte man jeden Hype – zu welchem der RPi eindeutig zählt – immer hinterfragen und nicht einfach unreflektiert das tun oder nutzen, was die Mehrheit gerade gut findet.

Darum nun hier in kürze ein Überblick über die generellen Nach- und Vorteile des RPi und dessen Funktionen sowie einen Überblick über andere Bastler-Platinen.

Nachteile

Zu den Nachteilen zählt Vorrangig das eigentliche Herzstück des RPi – der als System on a Chip (SOC) bezeichnete Prozessorkern. Anders als bei herkömmlichen PC’s, welche eine CPU mit x86 Mikroprozessorarchitektur benutzen, besitzt der RPi einen ARM-SOC mit ARM-Architektur. Da binäre Programme für den Befehlssatz einer Architektur gebaut werden, können diese nicht auf anderen Architekturen ausgeführt werden. Das ist auch der Grund weshalb das Betriebssystem Windows nicht für den RPi verfügbar ist. Auch unter dem hauptsächlich auf dem RPi verwendeten Betriebssystem Linux muss diese Tatsache im Hinterkopf behalten werden, da nicht einfach jedes Linux-Programm aus dem Internet heruntergeladen und auf dem RPi ausgeführt werden kann. Auf weitere Details zwischen diesen Beiden Architekturen wird an dieser Stelle nicht weiter eingegangen.

Auch wenn ein RPi problemlos als PC-Ersatz dienen kann, ist ein weiterer Nachteil die fehlende Erweiterbarkeit. Bei den meisten der herkömmlichen PC’s kann beispielsweise der Arbeitsspeicher erweitert werden, die Grafikkarte oder sogar die CPU ausgetauscht werden. Der RPi ist zwar sehr gut mittels USB oder der sogenannten GPIO-Pinleiste erweiterbar, aber grundlegende Systemressourcen können nicht erweitert / ausgetauscht werden. Vergleicht man dies heutzutage mit manchen Notebooks, wird man aber evtl. bezüglich der Erweiterbarkeit keinen großen Unterschied feststellen 😉

In die selbe Kerbe schlagen fehlende essenzielle Anschlüsse wie beispielsweise SATA oder PCI. Möchte man beispielsweise im lokalen Netzwerk Festplattenspeicherplatz zur Verfügung stellen (den RPi als sog. NAS nutzen) ist das zwar funktional problemlos möglich, allerdings müssen aufgrund der fehlenden Anschlüsse Abstriche bei der Performance gemacht werden (z.B. langsame Zugriffszeiten, geringer Datendurchsatz bei Dateioperationen). Dies ist dem Umstand geschuldet, dass Festplatten und andere Speichermedien (aufgrund fehlenden SATA’s) nur via USB angebunden werden können, alle RPi Modelle aber maximal USB2.0 unterstützen. Zusätzlich wird bei allen verfügbaren RPi Modellen der Netzwerkanschluss mit maximal 100Mbit/s bedient, was zu weiteren Abstrichen bei der Gesamtperformance führt.

Und hier nochmal alle Nachteile in Kurzform:

  • ARM-SOC, PC-Programme nicht ausführbar
  • Hardware-Ressourcen können nicht erweitert werden (RAM, Grafik, CPU)
  • Essenzielle Anschlüsse wie SATA oder PCI fehlen
  • Existierende Anschlüsse teilw. nicht mehr Zeitgemäß (100Mbit/s Netzwerk, USB2.0)

Vorteile

Zu den Vorteilen zählt hauptsächlich die umfangreiche Unterstützung. Damit ist sowohl die Hardware- als auch Software-Unterstützung aber auch Hilfestellungen in Form einer großen Community, Magazinen und Zeitschriften sowie Büchern gemeint.

Unterstützung in Form der Hardware zeigt sich beispielsweise in der Verfügbarkeit von Erweiterungsplatinen (auch HAT genannt), welche auf den RPi aufgesteckt werden und diesen z.B. um eine bessere Soundkarte oder Anschlüsse zum schalten von elektronischen Komponenten erweitern. Aber auch andere Hardwarekomponenten wie Touchscreens oder Kameras werden von verschiedenen Herstellern angeboten. Ein Touchscreen und eine Kamera werden sogar direkt vom offiziellen Entwickler / Hersteller des RPi – der Raspberry Pi Foundation – vermarktet. Von den scheinbar unendlichen Möglichkeiten das RPi in einem Gehäuse zu verpacken möchten wir an dieser Stelle gar nicht erst Sprechen.

Mit umfangreicher Softwareunterstützung ist die Verfügbarkeit unterschiedlicher Betriebssysteme bzw. Distributionen sowie die damit einhergehende Vielfalt an Anwendungen und Services gemeint. Als Betriebssystem sind neben dem mehr oder weniger berühmten Linux auch z.B. RiscOs oder Windows 10 IOT Core (!kein reguläres Windows!) verfügbar. Von Linux sind unterschiedliche sogenannte Distributionen (Zusammenstellungen aus Linux-Kern und weiterer Software) wie z.B. Raspbian, Ubuntu, LibreELEC oder NixOS nutzbar. Mit einem Betriebssystem alleine ist es aber noch nicht getan. Einige Hardwarekomponenten benötigen spezielle Software oder Treiber um genutzt werden zu können z.B. der Grafikchip. Um solche Hardware effizient nutzen zu können muss also die Software diese Komponenten unterstützen bzw. an diese angepasst werden. Da die Community des RPi sehr groß ist, fanden sich genug Entwickler um die Software sehr gut an die Hardware anzupassen. Auch wuchs durch die große Community der Druck auf die Hardware-Hersteller die Dokumentation frei zu geben um damit bessere Softwareunterstützung des RPi zu ermöglichen.

Die Community ist damit ein weiterer Vorteil des RPi. Sie zeichnet sich weiterhin auch durch ein Einsteiger freundliches Klima und hohe Hilfsbereitschaft aus. An dieser Stelle muss aber erwähnt werden, dass die Community größtenteils nicht nur aus RPi-Anhängern besteht. Da auf einem RPi hauptsächlich das offene Betriebssystem Linux eingesetzt wird, und sehr viele Themen Hardware-unabhängig sind, muss ein sehr großer Anteil der Community eigentlich als Anhänger der OpenSource Bewegung angesehen werden. Die Installation und Konfiguration beispielsweise eines Webservers ist überall ähnlich, egal ob auf deinem Server, einem normalen PC oder einem RPi. Der RPi ist dabei vielmehr als verbindendes Element bzw. als Einstieg in die Communitiy bzw. die verteilte, globale Arbeitsweise zu betrachten.

Zuletzt der Vorteil welcher dem RPi ursprünglich zu seinem Erfolg verholfen hat. Der Preis bzw. die Kosten. Als der RPi im Jahre 2012 erschien, gab es noch nicht viel vergleichbares, vor allem zu diesem Preis. Es war sozusagen der erste erschwingliche Einplatinencomputer mit einen Einstiegspreis von damals, wie heute, etwa 30€. Und nicht nur der Einstiegspreis ist überzeugend, sondern auch die Betriebskosten, welche je nach Modell, Netzteil und Strompreis 12€ Jährlich nicht übersteigen sollten.

Nochmal alle Vorteile (und noch mehr) in Kurzform:

  • Sehr guter Hardwaresupport (z.B. HATs, Gehäuse, Bildschirme)
  • Sehr guter Softwaresupport (versch. Betriebssyteme/Distributionen, Treiber)
  • Große OpenSource und RPi Community mit übergreifender Hilfe
  • Geringer Anschaffungspreis
  • Geringe Betriebskosten (max. ca. 1€ pro Monat)
  • Verschiedene Modelle verfügbar
  • Großer second hand Markt, da große Verbreitung

Warum RPi und nicht Platine xyz?

Aufgrund der Berühmtheit, der großen Community sowie der Hardware- und Software-Unterstützung kann der RPi als Definitivstandard betrachtet werden. Das bedeutet aber nicht, dass  für ein Problem keine besser geeignete Alternative existiert. Seit dem großen Erfolg des RPi sind weitere Boards – welche teilweise kompatibel zum RPi sind –  auf dem Markt erschienen. Man sollte allerdings nicht vergessen, dass häufig eine Einarbeitungszeit in das jeweilige Ökosystem von Nöten ist. Auch sollte auf die Softwareunterstützung geachtet werden sowie ob bereits bestehende Hardware kompatibel ist. Im Einzelfall sollte man daher immer Abwägen und die Auswahl anhand der eigenen Kenntnisse und der Bereitschaft neues zu Lernen treffen.

Um einige alternativen zu nennen, hier eine kleine Übersicht:

Auf alle genannten Alternativen wird an dieser Stelle nicht weiter eingegangen, da ein Vergleich den Rahmen sprengen würde. Bei Interesse können unter den hinterlegten Links weitere Informationen abgerufen werden. Nur eines sollte an dieser Stelle erwähnt werden. Alle unter Mikrocontroller gelisteten Alternativen sind nicht direkt für die Nutzung mit einem Betriebssystem ausgelegt. Um diese nutzen zu können sind Programmierkenntnisse sowie häufig Kenntnisse über die zugrundeliegende Hardware nötig. Die Einsteigerfreundlichkeit ist somit nicht gegeben.

Schlusswort

Es wurden die Nach- und Vorteile des RPi aufgezeigt sowie einige Alternativen aufgezählt. Prinzipiell gilt dass man für das gegebene Problem die passendste Lösung wählen sollte. Wenn man jedoch bereits einige Erfahrungen mit dem einsteigerfreundlichen RPi und dessen Ökosystem gesammelt hat, und keine Zeit hat sich in neue Ökosysteme einzuarbeiten, spricht nichts dagegen einen RPi auch einzusetzen wenn es eine bessere Alternative gibt.

Wurden alle Nach-/Vorteile genannt oder fehlen welche? Fehlt ein alternativer Einplatinencomputer? Gibt es noch Fragen? Dann ab damit in die Kommentare 😉

Konfiguration der Visu KnxWeb2 via LinKNX für KNX

Vorwort

Die nachfolgenden Befehle und Möglichkeiten existieren nur, wenn zuvor wie hier beschrieben die benötigten Komponenten installiert wurden. Weiterhin sollte das Raspberry Pi bereits mit dem entsprechenden FT1.2-Adapter für die Busankopplung ausgestattet sein und das Schalten von KNX-Aktoren wie hier beschrieben funktionieren.

Diese Anleitung zeigt die Konfiguration von Bus-Komponenten mithilfe des KnxWeb2-Webinterface für die Logik-Ebene LinKNX. Weiterhin wird gezeigt, wie auf einfache Weise eine Übersichtsseite mit einigen Bedienelementen zur Steuerung von KNX-Aktoren erstellt werden kann.

Diese Anleitung ist bewusst sehr kurz und wenig detailliert, da in einem anderen Blog-Eintrag eine (subjektiv) bessere Kombination aus Logik-Ebene und Visualisierung vorgestellt wird. Die Anleitung dient in erster Linie dazu, überprüfen zu können, ob die eigenen Ideen umsetzbar sind und zum erleichterten lernen der Wechselwirkungen zwischen Logik-Ebene und Visualisierung.

Für das gesamte Beispiel wird ein Rollladen-Aktor mit folgenden Kanälen angenommen:

  • Rollo_move, 0/0/1 (1 herauffahren, 0 herunterfahren)
  • Rollo_stop, 0/0/2 (1/0 stoppe das fahren)

Erstkonfiguration von KnxWeb2

Um zur Konfiguration der Bus-Komponenten zu gelangen, muss zunächst der Raspberry Pi per Browser angesteuert werden. Die nachfolgende Abbildung zeigt einen Raspberry Pi mit IP-Adresse 192.168.20.

Uebersichtsseite-LinKNX_KnxWeb2

Anschließend kann durch einen Klick auf den markierten Link die Konfiguration beginnen. Beim Erststart wird dabei zunächst ein kurzer Konfigurations-Dialog gestartet, welcher folgendermaßen aussieht:

KnxWeb_Erststart_Check

Sollte dabei bei einem Punkt ein rot eingefärbtes NotOk erscheinen, so bietet es sich im allgemeinen an das Raspberry Pi neu zu starten. Sollte sich das Problem dabei nicht lösen, bietet es sich an die komplette Installation zu wiederholen.

Nach einen Klick auf Next erscheinen die eigentlichen Konfigurationsmöglichkeiten. Dabei sollte in jedem Fall die Sprache (Language) auf Deutsch eingestellt werden. Zusätzlich kann der Titel der späteren Übersichtsseite (Title of HTML page of Knxweb) sowie ein alternatives Aussehen (UI Theme) festgelegt werden. Ein Klick auf Check zeigt weitere (optionale) Funktionen die bereitgestellt werden können. Sollte dort ein rotes NotOK zu finden sein, ist dies meist nicht weiter schlimm.

KnxWeb_Erststart_Konfiguration

Abschließend kann per Klick auf Next der Erstkonfigurationsassistent beendet werden. Im letzten Reiter Done sollte auf click here to configure knxweb geklickt werden.

Hinweis: Der Erstkonfigurationsassistent kann jederzeit durch durch Eingabe von

http://[IP/Computername]/knxweb2/check_install.php

erneut aufgerufen werden. So kann z.B. jederzeit die Sprache oder das Theme von KnxWeb2 geändert werden.

Nun landet man bei der eigentlichen Konfiguration von LinKNX und KnxWeb2.

Konfiguration von Bus-Komponenten via LinKNX

Die nun zu sehende Übersicht kann nun dazu genutzt werden KNX-Komponenten (sogenannte Objekte) anzulegen und die Übersichtsseite mit Bedienelementen zu versehen.

KnxWeb_Konfiguration_Übersicht

Für das Beispiel eines Rolladen-Aktors müssen zunächst zwei Objekte angelegt werden. Dazu muss im Haupt-Menü links zunächst auf den Eintrag Objekte geklickt werden. Nach einer kurzen Ladezeit muss nun auf den Eintrag Ein Objekt hinzufügen (grünes +-Icon) im Haupt-Menü geklickt werden.

KnxWeb_Konfiguration_Objekterstellung

In der nun erscheinenden Maske muss eine ID, der Name der KNX-Typ (mehr dazu z.B. hier) die Gruppenadresse (auch Kanaladresse) und spezielle Schalter (flags) gesetzt werden. Die ID und Name können dabei beliebig gewählt werden, sollten aber der physikalischen Verteilung der KNX-Komponenten entsprechen (z.B. Rollo_Wohnzimmer_Links). Der KNX-Typ sowie die Gruppenadresse sind zwingend so einzustellen, wie die jeweilige KNX-Komponente konfiguriert/programmiert wurde. Die Funktionsweise der Schalter sind aufgrund fehlender Dokumentation unbekannt, es wird jedoch auf die standardmäßige Verwendung von cwtu hingewiesen.

Der zusätzlich gesetzte Schalter f (force) dient dazu dass ein Signal für die KNX-Komponente in jedem Fall gesendet wird. Da der KNX-Datentyp 1.001 (EIS1) ein ein/aus Datentyp ist, welcher im Normalfall von Lichtschaltern o.Ä. genutzt wird, speichert die Logik-Ebene LinKNX den zuletzt übertragenen Wert, z.B. ein. Wird dann nochmals eingeschaltet, so sendet LinKNX kein weiteres Signal, da „das Licht ja schon brennt„. Dieser Sachverhalt führt aber bei dem vorgestellten Beispiel eines Rollladens zu Problemen, da somit z.B. ein zweimalig hintereinander ausgeführtes Hochfahren mit zwischenzeitlichem Stop nicht möglich wäre, weil sich LinKNX beim ersten Hochfahren merken würde „ich bin bereits hochgefahren, nun sollte nur noch heruntergefahren werden„. Mittels Schalter f ist aber ein mehrmaliges hochfahren möglich.

Durch ein Klick auf Speichern kann das Objekt abgespeichert werden. Es sollte nun in der Objektübersicht aufgelistet sein. Die nachfolgende Übersicht zeigt die zwei erstellten Objekte zur Ansteuerung eines Rolladen-Aktors.

KnxWeb_Konfiguration_ObjektübersichtDie für das Beispiel benötigten Objekte sind damit vollständig.

 

KnxWeb2 Bedienelemente definieren

Damit nun die jeweiligen KNX-Komponenten mithilfe eines Web-Interface angesteuert werden können, müssen anschließend Bedienelemente auf einer Übersichtsseite untergebracht werden. Dazu muss zunächst der Punkt Design bearbeiten im Haupt-Menü ausgewählt werden. Anschließend sollte zunächst ein neues Design mit dem Namen default mithilfe des Haupt-Menü-Eintrags Neues Design angelegt werden. Zusätzlich muss eine neue Zone mit beliebigen Namen angelegt werden.

Nun sollten für einen Rolladen drei Knöpfe (Buttons) angelegt werden. Dazu in der Auswahlliste (Drop-Down) des Haupt-Menü-Eintrags Widget einfügen unter Basic widgets den Eintrag Button auswählen. Ein neuer Knopf wird dann auf der Übersichtsseite erscheinen.

KnxWeb_Konfiguration_Design_Button

Die wichtigsten Einstellungsbereiche für einen Knopf in unserem Beispiel sind folgende:

  1. Einstellungen für Größe und Position auf der Übersichtsseite
  2. Bild für den Knopf
  3. Beschriftung/Name des Knopfes
  4. Festlegung der auszuführenden Aktion bei Aktivierung des Knopfes
  5. Festlegung der auszuführenden Aktion bei Deaktivierung des Knopfes

Die Punkte 4 und 5 stellen dabei die Verknüpfung eines Knopfes mit den vorher konfigurierten Objekten dar. Gleichzeitig unterliegen sie einer verwirrenden Nutzerführung. Aufgrund der Beschriftung Goto zone ist zunächst unklar das die beiden Punkte zur Festlegung von Aktionen eines Knopfes genutzt werden können. Um eine Aktion auf einen Knopf zu legen, sollte die Auswahlliste auf dem Element Aktion ausführen stehen gelassen werden und anschließend Edit gewählt werden.

Hinweis: Bei umfangreicheren Konfigurationen kann durch Auswahl einer entsprechenden Zone aus der Auswahlliste zwischen unterschiedlichen Übersichten gewechselt werden. Der Aufbau entspricht dann am ehesten derer von Links zwischen Webseiten. Wobei der Knopf einem Link entspricht.

In der nun erscheinenden Maske muss als Aktion der Eintrag Wert setzen gewählt werden.

KnxWeb_Konfiguration_Design_Button_Action_Übersicht

Anschließend muss das Objekt und der Wert angegeben werden, der bei Betätigung des Knopfes an die KNX-Komponente geschrieben werden soll.

KnxWeb_Konfiguration_Design_Button_Action_Objektauswahl

Dies sollte für die Punkte 4 und 5 auf gleiche Art konfiguriert werden, damit sowohl beim einschalten als auch beim ausschalten immer hochfahren an das Rollo gesendet wird.

Nach Konfiguration von drei Knöpfen zur Ansteuerung eines Rollos ist dabei die nachfolgende Übersichtsseite entstanden.

KnxWeb_Konfiguration_Design_Fertig

Der obere Knopf steuert dabei Rollo_move mit on an, er untere Steuert Rollo_move mit off an und der mittlere steuert Rollo_stop mit wahlweise on oder off an. Ist die Konfiguration abgeschlossen, so kann die Ansteuerung entweder über Design ausprobieren im Haupt-Menü ausprobiert werden oder das Design wird mittels Speichern im Haupt-Menü gespeichert und anschließend von der Übersichtsseite angesteuert. Dazu muss man zunächst wieder zurück zur Übersichtsseite (z.B. durch eingabe der IP/Computername des Raspberry Pi) und wählt dort anschließend den Link zur LinKNX home view.

Uebersichtsseite_HomeView

Die Ansteuerung des Rolladens sollte nun via Web-Interface funktionieren.

KnxWeb_Fertig

Steuerung von KNX-Aktoren mit der Kommandozeile

Vorwort

Die nachfolgenden Befehle und Möglichkeiten existieren nur, wenn zuvor wie hier beschrieben die benötigten Komponenten installiert wurden. Weiterhin sollte das Raspberry Pi bereits mit dem entsprechenden FT1.2-Adapter für die Busankopplung ausgestattet sein. Sollte ein anderer als der beschriebene Busankoppler verwendet werden, so muss die EIBD-Konfiguration entsprechend angepasst werden (s.u.).

 

Steuerung von KNX-Aktoren

Wurde das Raspberry Pi nach der Installation ordnungsgemäß neu gestartet, sollte nun der direkte Zugriff auf den KNX-Bus von Kommandozeile funktionieren. Dazu sollte zunächst geprüft werden, ob der Service EIBD ordnungsgemäß läuft. Dies kann mittels

sudo service eibd status

geschehen. Die Eingabe des Befehls sollte etwas wie

[ ok ] eibd is running.

zurück liefern. Sollte dies nicht der Fall sein, so kann via

sudo service eibd start

versucht werden den Service zu starten.

Nun kann bereits mit

groupswrite ip:localhost [GAD] [Wert]

der Versuch unternommen werden, eine bestimmte Gruppen-Adresse (GAD) mit einem binären Wert (0/1) zu beschreiben. Beispiel:

groupswrite ip:localhost 0/0/5 1

Für nicht-binäre Werte kann der Befehl „groupwrite“ (Beachte fehlendes „s“) genutzt werden. Beispiel:

groupwrite ip:localhost 0/0/4 22

 

Anpassung der EIBD-Konfiguration für andere Busankoppler

Kommt nicht der FT1.2 Adapter zur Anwendung, so kann die Datei /etc/init.d/eibd angepasst werden. Dazu die Datei mit einem beliebigen Editor (vi, nano, …) öffnen. Nachfolgendes Beispiel zeigt das Öffnen der Datei mit dem Kommandozeileneditor vi (Bedienungsanleitung):

sudo vi /etc/init.d/eibd

Dort sollten nun die Zeile(n)

EIBD_DEVICE=/dev/ttyAMA0

und/oder

EIBD_DEVICE_TYPE=ft12

den Erfordernissen angepasst werden. Nach den Änderungen muss der Service EIBD folgendermaßen neu gestartet werden:

sudo service eibd restart

Nun sollte das Ansteuern von KNX-Teilnehmern wie oben beschrieben funktionieren.

 

Was tun bei Problemen?

Da die Probleme sehr vielfältig sein können, kann an dieser Stelle niemals umfassend jeder Fehler oder jedes Problem behandelt werden. Jederzeit hilfreich ist aber sich die Ausgaben von EIBD genauestens anzusehen. Die umfangreiche Ausgabe der Arbeit von EIBD kann durch Erhöhen des Trace-Levels eingestellt werden. Dazu kann in der Datei /etc/init.d/eibd (öffnen mit vi, nano, … wie oben) in der Zeile

EIBD_OPTS="--eibaddr=0.0.254 -T -S -i --trace=15"

der Wert hinter –trace erhöht werden. Maximale Ausgabe erhält man mit dem Wert 65535. Damit die Änderungen wirksam werden, muss EIBD mittels

sudo service eibd restart

neu gestartet werden. Wird nun versucht mit groupwrite oder groupswrite etwas auf den Bus zu schreiben, kann anschließend in der Datei /var/log/eibd.log der Erfolg/Miserfolg betrachtet werden.

Möchte man die Auswirkungen eines Befehls direkt zu sehen bekommen, so kann man EIBD auch direkt aufrufen. Zunächst sollte der aktuell laufende EIBD beendet werden:

sudo service eibd stop

Um den EIBD manuell starten zu können, müssen alle Parameter aus /etc/init.d/eibd übernommen werden. Beispiel:

eibd --eibaddr=0.0.254 -D -T -S -i --trace=65535 ft12:/dev/ttyAMA0 &

Das Ampercent (&) am Ende der Zeile ermöglicht die weitere Eingabe von Befehlen, während im Hintergrund die Ausgaben von EIBD ausgegeben werden.

Hinweis: Dies kann zur Folge haben, dass Eingaben „überschrieben“ werden. Es sollte jedoch beachtet werden, dass die Eingabeaufforderung nur die Betätigung der Tastatur beachtet und nicht das was Sie sehen! Dies kann für Anfänger verwirrend sein! Im Zweifel sollte man die Eingabe mittels STRG+C beenden und von vorne beginnen.

Möchte man keine weiteren Ausgaben mehr von EIBD so kann mittels des befehls fg der (vorher via & in den Hintergrund geschobene) EIBD in den Vordergrund geholt werden und mittels STRG+C beendet werden.

Die auf diese Weise gewonnenen Informationen über Fehler oder Probleme sollten bei der Recherche hilfreich sein.

Erster Anlaufpunkt sollte dabei die offizielle Seite des EIBD sein.

Installation und Konfiguration des RPI für den Betrieb als Hausautomations-Server

Vorwort

Die nachfolgende Anleitung erläutert die Installation aller (ggf. später) benötigter Komponenten „von beginn an“, d.h. es sind keine vorbereitenden Arbeiten notwendig. Spätere Anleitungen werden ggf. nur einen Teil dieser installierter Komponenten benötigen. Es wird dazu an gegebener Stelle aber einen Hinweis geben und eine Erläuterung wie nur die gerade benötigten Komponenten installiert werden können.
Die vorgestellten Schritte nutzen das eigens dafür erstellte Installations-Skript easy-knx. Zur Zeit* werden dabei folgende Komponenten installiert:

  • Apache2 (Webserver)
  • PHP
  • MySQL
  • EIBD (Zum Empfangen und Senden von KNX-Paketen/Signalen)
  • Logik-Ebene (LinKNX und SmartHome.py)
  • Visualisierungen (KnxWeb2 und SmartVisu)

*Da das Installation-Skript fortlaufend weiterentwickelt wird, könnten bei einer konkreten Installation weitere Komponenten mit installiert werden!

Primär beziehen sich alle weiteren Anleitungen und Erklärungen auf das Paket bestehend aus SmartHome.py und SmartVisu. Dies hat den Hintergrund, da SmartHome.py in Kombination mit SmartVisu weitaus mehr Konfigurationsmöglichkeiten als LinKNX mit KnxWeb2 zulässt. In der Praxis ist das Paket aus LinKNX mit KnxWeb2 aber besser zum erstmaligen Testen des Buszugriffs geeignet, weshalb Einsteiger zunächst alle Komponenten installieren sollten.

 

SD-Karte vorbereiten

Als Basis kommt die Linux-Distribution Raspbian zum Einsatz. Diese muss zunächst auf eine mindestens 4 GiB große SD-Karte installiert werden.

Dazu zunächst das Image von dieser Übersichtsseite herunterladen (Direktdownloadlink) und an einem beliebigen Ort speichern (Ort merken). Anschließend kann das Image mithilfe verschiedener Werkzeuge auf die SD-Karte installiert werden. Die Art der Installation auf SD-Karte unterscheidet sich dabei, welches Betriebssystem eingesetzt wird.

Windows

Eine Installationsanleitung in der Sprache Englisch ist hier zu finden. Nachfolgend eine sinngemäße Übersetzung:

  1. Einstecken der SD-Karte in den Computer (Merken des Laufwerkbuchstabens z.B. E:)
  2. Herunterladen des Win32DiskImager (link)
  3. Entpacken des Win32DiskImager
  4. Doppelklick auf Win32DiskImager (ggf. als Administrator, Rechtsklick -> ausführen als Administrator)
  5. Auswählen des heruntergeladenen Raspbian-Image
  6. Auswählen des Laufwerkbuchstabens der SD-Karte (z.B. E:, siehe Schritt 1)
    1. WARNUNG: Es ist absolut wichtig, den korrekten Pfad zur SD-Karte anzugeben, da sonst ggf. ein falsches Gerät überschrieben wird!
  7. Klick auf write
  8. Beende Win32DiskImager und entferne SD-Karte

Linux

Eine Installationsanleitung in der Sprache Englisch ist hier zu finden. Nachfolgend eine sinngemäße Übersetzung:

  1. Öffne eine Konsole
  2. Führe df -h aus
  3. Einstecken der SD-Karte in den Computer
  4. Führe df -h erneut aus, vergleiche mit vorheriger Ausgabe, der neu hinzugekommene Eintrag stellt die SD-Karte dar
  5. Merken des Pfads zur SD-Karte ohne Partitions-Nummer (sollte z.B. /dev/mmcblk0 sein)
  6. Prüfen welche SD-Karten-Partitionen eingehängt sind via Befehl mount
  7. Aushängen (unmount) der SD-Karte bzw. aller SD-Karten-Partitionen  via unmount /dev/mmcblk0p1, unmount /dev/mmcblk0p2, usw.
  8. Kopieren des Images auf SD-Karte (als root oder via sudo)
    1. mit dd if=[Pfad zu Image] of=[Pfad zu SD-Karte] bs=4M
    2. z.B. dd if=/home/brootux/raspbian.img of=/dev/mmcblk0 bs=4M
    3. WARNUNG: Es ist absolut wichtig, den korrekten Pfad zur SD-Karte bei of anzugeben, da sonst ggf. ein falsches Gerät überschrieben wird!
    4. Der Kopiervorgang kann länger dauern und es gibt keine Rückmeldung! Daher einfach warten bis wieder ein Eingabe-Prompt erscheint
    5. Eventuell sollte bs=1M genutzt werden, sollte etwas schief gehen oder der Pi später nicht booten
  9. Ausführen von sync (als root oder via sudo)
  10. Entferne SD-Karte

MacOS

Eine Installationsanleitung in der Sprache Englisch ist hier zu finden. Da die Linux-Anleitung in etwa 1:1 für Mac-OS angewandt werden kann, wird an dieser Stelle eine Übersetzung ausgelassen.

 

Erstkonfiguration Raspberry Pi

Nach der Installation des SD-Karten-Images auf SD-Karte kann diese in das Raspberry Pi gesteckt und dieser durch einstecken des Netzteils gestartet werden. Beim ersten Start sollte das RPI dabei zunächst via HDMI oder S-Video-Out an einem Bildschirm/TV angeschlossen sein. Außerdem sollte eine funktionierende Tastatur per USB angeschlossen sein.

Beim ersten Start sollte dann am Bildschrim/TV ein Konfigurationsdialog angezeigt werden. Dabei sollten folgende Einstellungen durchgeführt werden:

  • Expandieren des Dateisystems (Expand Filesystem)
  • Einstellen eines Passworts (Change User Password)
  • Kein automatisiertes Starten von X nach Systemstart (Boot to Console)
  • Einstellen der Lokalisierung/Zeitzone/Tastaturlayout (Internationalisation Options)
  • Einstellen des GPU-Speichers auf den geringsten Wert (Advanced Options -> Memory Split -> 16)
  • SSH Aktivieren (Advanced Options -> SSH -> Enable)

Weiterhin besteht die Möglichkeit das RPI zu Übertakten (Overclock) dies stellt aber u.U. ein höheres Risiko für den Defekt des RPI dar und sollte nur durchgeführt werden wenn spätere Anwendungen nicht schnell genug bearbeitet werden. Abschließend wird man auf die Kommandozeile des RPI weitergeleitet.

An dieser Kommandozeile kann man sich dann mit dem Benutzernamen pi und dem selbst ausgesuchten Passwort anmelden.

Möchte man das RPI nun schon vom Bildschirm/TV trennen und nur noch per Netzwerk  zugreifen, so sollte man sich zunächst die aktuell zugewiesene IP merken. Dies kann mittels

ifconfig

geschehen. Bei der angezeigten Übersicht sollte nach dem Eintrag hinter inet addr: für die Schnittstelle eth0 gesucht werden. Die dort angezeigte IP sollte aufgeschrieben werden. Im folgenden Beispiel hat das RPI die IP-Adresse 192.168.0.20.

eth0     Link encap:Ethernet  HWaddr 00:11:af:fe:af:ab
inet addr:192.168.0.20  Bcast:192.168.0.255  Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:10297 errors:0 dropped:0 overruns:0 frame:0
TX packets:14519 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1753040 (1.6 MiB)  TX bytes:1770873 (1.6 MiB)

Möchte man, dass das RPI immer unter der gleichen IP-Adresse verfügbar ist, so kann dieses Tutorial genutzt werden.

Nun sollte man das RPI mittels

sudo shutdown -h now

herunterfahren und dann vom Netzteil trennen.

Hinweis: Möchte man weiter am Bildschirm/TV arbeiten, so kann der nachfolgende Schritt übersprungen werden.

 

Verbindung herstellen

Ist nun das RPI konfiguriert und am gewünschten Ort aufgestellt kann mithilfe von SSH per Netzwerk darauf zugegriffen werden, als würde man direkt auf einem Bildschirm/TV damit arbeiten. Es muss dazu die IP bzw. der Computername (hostname) bekannt sein!

Es kann sich dann z.B. via Putty (Direktdownloadlink) unter Windows oder unter Linux/MacOS via

ssh -l pi [IP/Hostname]

zum RPI verbunden werden. Dazu kann die im vorhergehenden Schritt aufgeschriebene IP-Adresse genutzt werden*.

*Hat sich die IP geändert, so kann man häufig durch Zugriff auf das DSL-Modem herausfinden welche IP vom RPI genutzt wird. Sollte dies nicht Möglich sein, so sollte das RPI wieder an den Bildschirm/TV angeschlossen werden und die oben genannte Möglichkeit zur Konfiguration einer statischen IP genutzt werden!

 

Installation starten

Hat man es geschafft sich per SSH zum RPI zu verbinden, kann nun (endlich) die eigentliche Installation beginnen. Dazu muss zunächst sichergestellt sein, dass eine Verbindung ins Internet möglich ist. Dies kann man Überprüfen indem man

ping www.google.de -c 4

auf der Konsole eingibt. Nach vier Versuchen http://www.google.de zu erreichen, sollte die Ausgabe folgendermaßen aussehen:

--- www.google.de ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 28.737/29.242/29.761/0.384 ms

Sollte dort etwas wie 0 received 100% packet loss zu finden sein, muss die Verbindung ins Internet überprüft werden!

Ist der Test geglückt muss zunächst das Versionsverwaltungswerkzeug git installiert werden. Dies kann man auf der Konsole sehr einfach mithilfe des – bei Linux standardmäßig mitgelieferten – Paketverwaltungssystem apt-get erledigen. Dazu

sudo apt-get install git

eingeben und anschließend die Installation mit y oder yes bestätigen.

Nun kann der aktuelle Stand des Installations-Skripts geholt werden. Dazu einfach

git clone https://github.com/Brootux/easy-knx.git

eingeben. Anschließend mit

cd easy-knx

in den neuen Ordner easy-knx wechseln. Dann sollte man sicherheitshalber mittels

chmod 744 easy_install.sh

das Installations-Skript ausführbar machen. Abschließend kann durch eingeben von

sudo ./easy_install.sh

und abschließender Bestätigung via Enter das Skript gestartet werden. Die Installation sollte nun laufen und einige Minuten benötigen. Bis auf die Eingabe eines Passwortes für das Datenbanksystem MySQL (welches man sich natürlich merken oder aufschreiben sollte) müssen keine Eingaben getätigt werden. Nach Abschluss der Installation muss das Raspberry Pi mittels

sudo shutdown -r now

neu gestartet werden.

 

Ergebnis

Nun kann mittels Browser auf das RPI zugegriffen werden (IP oder Computername des RPI eingeben). Man sollte dann zunächst auf folgende Übersichtsseite gelangen:

Uebersichtsseite

Hinweis: Die in der Abbildung gezeigte Webseite kann je nach Stand des Installationsskriptes anders aussehen, da dieses ständig verbessert wird.

Die Installation der benötigten Komponenten ist damit abgeschlossen. Alle weiteren Anleitungen basieren auf einem solchen Installationsstand.