Ob Lampen per Fernsteuerung übers Internet angehen, oder eine Pumpe täglich die Topfpflanzen wässert: Home-Automation erobert die Heime der Bastler. Die Z-Wave-Technologie bietet preiswerte Geräte, die zuverlässig steuern und regeln.
Mit dem Einzug von preiswerten Mini-Rechnern wie dem Raspberry Pi schießen mir die Ideen zur Heim-Automatisierung gleich dutzendweise durch den Kopf: Wie kann ich auf meinem Mobiltelefon von unterwegs aus sehen, ob daheim der Trockner für meinen Surfanzug noch an ist und ihn notfalls ausstellen? Ist die Wohnungstür zu? Steht irgendetwas unter Wasser? Dergleichen treibt mich schon seit geraumer Zeit um, und treue Leser werden sich vielleicht an die in die Jahre gekommenen Artikel zum Internet-gesteuerten Lampenschalter und der wettergesteuerten Pflanzenbewässerung ([2] und [3]) erinnern.
Letztlich ergibt sich bei diesen und ähnlichen Anwendungen immer der gleiche Ablauf, dass nämlich ein Sensor einen Wert wie etwa Helligkeit oder Feuchtigkeit an einen Controller meldet, der wiederum einen Aktor anwirft, wie ein Relais, das eine Lampe oder Pumpe anschaltet. Dort stellt sich dann oft Problem, dass die Steuereinheit weit weg ist und das Signal drahtlos zum Aktor gelangen muss, denn wer hat den steuernden Rechner schon direkt am Blumentopf stehen?
Eine ganze Reihe mehr oder weniger standartisierter Technologien widmet sich diesem Thema ([4]). Nach Jahren des Verdrusses mit dem in den USA gängigen X10-Verfahren, das unzuverlässig über die Stromleitung kommuniziert, fand ich neulich heraus, dass die sogenannte Z-Wave-Technik sowohl in Europa als auch Amerika weit verbreitet ist und mittels eines drahtlosen Handshake-Protokolls nicht nur tadellos zuverlässig funktioniert, sondern auch noch relativ preiswert ist.
Abbildung 1: Der Controller Aeon Labs DSA02203-ZWUS Z-Wave Z-Stick zum Einstöpseln in den USB-Port eines PCs. |
Zum Einstieg erwarb ich einen Z-Wave-zertifizierten Mini-Controller namens "Z-Stick" der Firma Aeon Labs ([5], Abbildung 1) für 35 Dollar und einen "Smart Energy Switch" zum Anschalten von elektrischen Verbrauchern für 24 Dollar ([6], Abbildung 2). Der "Z-Stick" ist ein USB-Dongle, den man in den USB-Port eines PCs steckt, der dann über den Stick drahtlos Werte von Sensoren empfängt und Signale an Aktoren aussendet.
Abbildung 2: Der Z-Wave Smart Energy Switch (Aeon Labs DSC06106-ZWUS) empfängt drahtlose Signale und schaltet elektrische Verbraucher ein und aus. |
Die Installation des USB-Dongles ging praktisch geräuschlos
vonstatten, denn Ubuntu 14.04 erkannte ihn sofort, und legte, wie
aus dem Syslog-Eintrag in Abbildung 3 ersichtlich, ein neues
Device unter /dev/ttyUSB0
an.
Da der Device-Eintrag dem User root
und der Gruppe
dialout
gehört und die Zugriffsrechte crw-rw----
hat, muss
ein darauf zugreifendes Skript unter einem User laufen,
der zur Gruppe dialout
gehört. Wer sich nicht darum schert, welcher User
damit Geräte ein und ausschaltet, darf die Zugriffsrechte auch
mit sudo chmod a+rw /dev/ttyUSB0
lockern.
Abbildung 3: Ubuntu erkennt den ZWave-USB-Stick sofort nach dem Einstöpseln. |
Als ersten Schritt in die Welt der ZWave-Kommunikation
wählte ich das Perl-Skript zwave_s
,
das eine Firma namens bigsister.ch ([7]) zum Download anbietet, und das
nach der Installation eines CPAN-Moduls zur Kommunikation auf dem
USB-Port mit cpanm Device::SerialPort
tadellos funktionierte.
Abbildung 4 zeigt, wie das Kommando zwave_s add
erst den USB-Dongle
initialisiert und anschließend eine Meldung ausgibt, nach der der
User einen Knopf auf dem anzusteuernden Gerät,
in diesem Fall dem Energy Switch, zu drücken hat. Das tat ich, und
zwave_s
wies, wie aus der Ausgabe ersichtlich,
dem Schalter die Nummer 3 zu. Auf das anschließend aufgerufene Kommando
zwave_s switch 3 on
schickte der USB-Controller ein drahtloses Signal
an den Switch, der tatsächlich wie von Geisterhand
den in einem anderen Zimmer angesteckten elektrischen Verbraucher
einschaltete. Die Reichweite des Sticks beträgt angeblich 30 Meter, bei
dicken Wänden eventuell weniger. Anschließend schaltete
zwave_s switch 3 off
den Verbraucher wieder aus.
Abbildung 4: Das Skript zwave_s initialisiert den Energy Switch und schaltet ihn anschließend ein und aus. |
Auf Github existiert ein Perl-Projekt namens p5-ZWave-Controller
, das
allerdings auf dem Zahnfleisch daherkommt, weil es anscheinend seit Jahren
nicht gewartet wurde, und daher in die Kategorie "Abandonware" eingeordnet
werden muss. Statt dessen klopfte ich schnell ein neues CPAN-Modul namens
ZWave::Protocol zusammen und lud es kurz vor Redaktionsschluss dort hoch.
Listing 1 zeigt eine praktische Anwendung mit dem Modul,
die den oben vorgestellen
Aeon Energy Switch erst ein- und dann wieder ausschaltet.
Zum Einschalten des Energy Switches schickt Listing 1 als Payload die
Byte-Sequenz 0x00 0x13
gefolgt von der Node-Nummer des gewünschten Gerätes
an den seriellen Port des PCs.
Anschließend verlangt das Protokoll 0x03, 0x20, 0x01
, gefolgt
vom Dimmer-Sollwert des Schalters (0=aus, 255=ein),
gefolgt von einem Byte mit dem Wert 0x05
.
Wie die Ausgabe des Ein- und Abschaltvorgangs in Abbildung 5 zeigt, schnürt
das CPAN-Modul aus der Payload ein Paket, indem es einen Header mit dem
Wert 0x01
voranstellt, gefolgt von der Länge der nachfolgenden Bytes,
sowie einer nachgestellten Prüfsumme (0x3e bzw. 0xc1
in Abbildung 5).
Letztere
errechnet sich gemäß des ZWave-Protokolls
aus der XOR-Verknüpfung aller Bytes des Pakets, exklusive dem
allerersten Header-Byte. Anschließend wird die Prüfsumme noch negiert
und wandert dann ans Ende des Pakets, sodass der Empfänger den Inhalt
der Nachricht auf eventuell auf dem drahtlosen Übertragungsweg
umgeflippte Bits prüfen kann. Die Prüfsumme ist eine der Schwachstellen
des Protokolls, denn manche Fehler werden bei nur 255 verschiedenen
Prüfwerten und dem simplen Verknüpfungsverfahren einfach nicht entdeckt.
Das Skript in Listing 1 hat Log4perl auf den Loglevel $DEBUG initialisiert,
darum druckt es die hin- und herflitzenden Bytes mit aus,
falls dies unterbleibt, tut es schweigend seinen Gang.
01 #!/usr/local/bin/perl -w 02 use strict; 03 use ZWave::Protocol; 04 use Log::Log4perl qw(:easy); 05 06 Log::Log4perl->easy_init($DEBUG); 07 08 my $zwave = ZWave::Protocol->new( 09 device => "/dev/ttyUSB0" ); 10 11 $zwave->connect or 12 die "Failed to connect to " . 13 $zwave->device; 14 15 my $node_id = 3; 16 17 for my $state ( 255, 0 ) { 18 19 $zwave->payload_transmit( 20 0, 0x13, 21 $node_id, 0x03, 0x20, 0x01, 22 $state, 0x05 ); 23 24 sleep 1; 25 }
Abbildung 5: Listing 1 schaltet einen ZWave-Verbraucher ein und aus und druckt die hin- und herflitzenden Bytes. |
Als Pluspunkt des ZWaves-Protokolls gilt das Handshake-Verfahren, bei dem der Empfänger einer Nachricht immer gleich ein ACK-Paket zum Sender zurückschickt, damit dieser weiß, dass seine Anfrage angekommen ist und eine entsprechende Aktion ausgelöst hat. Wenn der Controller eine Wasserpumpe einschaltet, möchte er vielleicht auch gerne wissen, ob nun die Schleusen offen sind, oder ob etwas schiefgelaufen ist.
ZWave kann aber noch viel mehr als nur Verbraucher ein- und auszuschalten. Der Energy-Switch lässt sich zum Beispiel so konfigurieren, dass er regelmäßig Pakete schickt, die anzeigen, wieviel Strom gerade durch die Leitung fließt. Das ist sehr nützlich und die Steuerungssoftware kann so nicht nur Aktionen auslösen, sondern auch noch Buch darüber führen, welche Stromkosten entstehen und Alarm schlagen, wenn der Schalter eventuell manuell ausgestöpselt wurde, weil er dann keine Reports mehr sendet.
Weiter kommen Z-Wave-Aktoren auch ohne Netzstromquelle aus, so gibt es zum Beispiel drahtlos verriegelbare Türschlösser, und damit der dort installierten Batterie nicht frühzeitig der Saft ausgeht, muss das Z-Wave-Protokoll dafür sorgen, dass das Schloss immer wieder kurz aufwacht, nachsieht, ob überhaupt ein Signal in der Luft liegt, und sich sofort wieder schlafen legt, falls im Äther nichts los ist. Findet es hingegen ein Signal, fängt die Elektronik an, es zu untersuchen und falls es von einem Controller kommt, dem es traut, reagiert es auf die gesendeten Befehle. Auch erweitert Z-Wave die Reichweite eines Controllers mit einem Routing-Protokoll, bei dem andere Z-Wave-Komponenten dessen Signal weiterleiten, bis es in Reichweite des angesprochenen Aktors kommt und dieser es aufschnappen kann.
Als begleitende Lektüre kann ich den englischsprachigen Titel "Z-Wave Basics: Remote Control in Smart Homes" [8] empfehlen, der von einem deutschen Autor stammt, was man unter anderem daran ablesen kann, dass wohl sonst niemand seinen Doktortitel auf den Buchrücken schriebe und sich einige amerikanische Amazon-Rezensenten über den etwas teutonische Grammatikstil beschwerten, ein Korrekturleser wäre eine gute Investition gewesen. Die Kindle-Ausgabe kam erst kürzlich heraus und enthält einige überarbeitete Kapitel. Das Buch geht ausführlich auf die historische Entwicklung des Protokolls ein und stellt die Vor- und Nachteile konkurrierender Ansätze gegenüber. Spezialisten dürften auch die detaillierten Ausführungen zu den technischen Details des Protokolls zu schätzen wissen, obwohl das Buch nicht auf die einzelnen Bytefolgen eingeht, die der geneigte Anwender entweder über den von ZWave-Vertreiber Sigma-Designs verkauften SDK einholen muss oder über das freie Projekt openzwave.com.
Abbildung 6: Z-Wave Basics E-Book |
Listings zu diesem Artikel: ftp://www.linux-magazin.de/pub/listings/magazin/2016/02/Perl
"Heimschaltwarte", Michael Schilli, Linux-Magazin 04/2007, http://www.linux-magazin.de/Ausgaben/2007/04/Heimschaltwarte
"Der Mörder ist nimmer der Gärtner", Bewässerungsanlage mit Perl-Steuerung im Eigenbau, Michael Schilli, Linux-Magazin 03/2007, http://www.linux-magazin.de/Ausgaben/2007/03/Der-Moerder-ist-nimmer-der-Gaertner
"Intelligenz im Hause", Sebastian Mogilowski , Markus Feilner, http://www.linux-magazin.de/Ausgaben/2014/01/Home-Automation/
Aeon Labs DSA02203-ZWUS Z-Wave Z-Stick Series 2 USB Dongle, http://www.amazon.com/gp/product/B003MWQ30E
Aeon Labs DSC06106-ZWUS - Z-Wave Smart Energy Switch, http://www.amazon.com/gp/product/B007UZH7B8
Testskript zur Ansteuerung des Z-Wave USB-Dongles mit Perl: http://www.bigsister.ch/zwave/zwave_s
"Z-Wave Basics: Remote Control in Smart Homes", Dr. Christian Paetz, 2013, http://www.amazon.com/dp/1490537368