Eine der nächsten Dinge die im neuen Haus erledigt werden mussten ist die Temperetaturmesseung der einzelnen Räume für die automatisierte Heizungssteuerung.

Ich plane immer noch 1-Wire einzusetzen und habe auch dafür schon ein Gateway auf Basis des ESP8266 mit ESPEasy gebaut. Allerdings gibt es ein Störsignal auf den Leitungen imHaus (JY-ST-Y) was 1-Wire etwas aus dem Tritt bringt. Da muss ich mal schauen wie ich das gefiltert bekomme – das Gateway selbst funktioniert 🙂
Der 1-Wire-Plan ist also nicht begraben, ich brauchte aber eine Übergangslösung…

Auf der Suche nach einer Alternative bin ich über Xiaomi Aquara Temperatur-, Druck- und Luftfeuchte-Fühler gestolpert und fand mich plötzlich mitten im ZigBee-Universum wieder.
Die Sensoren sind wirklich klein und verhältnismäßig günstig, außerdem laufen sie mit einer CR2032-Batterie ziemlich lange. Aktuell habe ich sie etwa sechs Monate im Einsatz und die Batterieanzeige verspricht mir immer noch über 80%.

Software

Aktuell kommt für die Anbindung der Sensoren zigbee2mqtt zum Einsatz, dessen Dokumentation und Hardwaresupport vorbildlich ist. Mittelfristig will ich aber die ZigBee-Geräte komplett zu Homegear umziehen.

Das Einrichten von zigbee2mqtt am Pi geht mit dem passenden ZigBee-CC2531-USB-Stick schnell von der Hand und nach kurzem Studium der Anleitung hat man die Sensoren benannt und die Daten im MQTT-Broker:

{
"battery": 86,
"voltage": 2975,
"temperature": 22.07,
"humidity": 45.39,
"pressure": 985,
"linkquality": 102
}

Homegear holt mit großen Schritten bei der Zigbee-Implementation auf und io.broker funktioniert ebenso wie zigbee2mqtt da es auf zigbee-herdsman, eine freie ZigBee Implementierung in nodeJS, setzt.

Um den üblichen CC2531-USB-Stick zum laufen zu bekommen, muss man ihm eine entsprechende Z-Stack-Firmware verpassen. Da ich direkt einen CC-Debugger mitbestellt habe war das kein Problem. Es gibt auch Möglichkeiten den Stick mit einem Pi oder Arduino zu flashen.

Plötzlich hat man aber die ganzen Probleme am Bein: Angefangen von der teilweise unterirdischen chinesischen Hardware, über die verschiedenen Firmwares für selbige – vor allem aber die Reichweite von 2,4GHz mit schlechten Antennen.

Die China-Sticks gibt es zum Glück auch mit externer statt PCB-Antenne was die Reichweite etwas verbessert. So lange man aber keine aktiven – also mit Strom versorgten – Komponenten in seinem ZigBee-Mesh hat, hat man keine Repeater. Also Geräte, die grundliegend erst mal ein Mesh aufbauen können. Alle batteriebetriebenen Geräte haben eine solche Funktion aus Stromspargründen logischerweise nicht.
Meine Hue-Lampen sind aktuell nicht im Betrieb und hängen außerdem noch an der Hue-Bridge – somit können diese nicht als Repeater fungieren.

Alternativen zum CC2531-USB-Stick sind übrigens das RaspBee-Modul oder der ConbeeII-Stick, die wohl auch recht gut funktionieren und in jedem Fall ein Fortschritt gegenüber den China-Sticks sind.
Mein Problem dabei: Keine externe Antenne und demnach weniger Reichweite. Eine Installation des Raspberry Pi’s im Serverschrank fällt dabei auch aus, da die Funksignale nur schwer durch die Metallwände des Schrankes kommen…

Hardwaregrundlagen

Warum gibt es also kein ZigBee-Modul für den RaspberryPi mit externem Antennenanschluss? Dem aufmerksamen Leser meines Blogs wird aufgefallen sein wo das hin führt… 😉

Der CC2531 ist ein von Texas Instruments entwickelter ZigBee-Microcontroller und quasi der Standard für ZigBee-Kommunikation. Er hat einen Bruder, den CC2530.
Der einzige wirkliche Unterschied zwischen den Beiden ist der beim CC2530 fehlende integriete USB-Stack, wodurch er eben nicht ohne zusätzliche Hardware am USB-Anschluss betrieben werden kann. Der CC2530 stellt nur ein UART-Interface zur Verfügung.
Beide Chips können zur Reichweitenverbesserungen mit einem CC2592 kombiniert werden.

Das Schöne ist jetzt, dass es bereits fertige SMD-Module mit CC2530 und CC2530+CC2592 von EByte gibt, deren Bauteile ich ja bereits beim CC1101-868MHz-Modul einsetze und die wir in der Firma offiziell, inkl. Zoll und Einfuhrumsatzssteuer, importieren. EByte baut beide Module in Varianten mit PCB-Antenne und u.FL-Antennenanschluss.

ZigBee Raspberry Pi Modul

Die theoretische Funkreichweite für das CC2530-SMD-Modul wird vom Hersteller mit 240m angegeben, für den CC2530+CC2592 sogar 1000m. Dass diese Entfernungen in der Realität maximal auf dem freien Feld bei Sichtverbindung und idealen Antennen erreichbar sind, sollte klar sein.

Ich hab mich also dran gesetzt und eine Adapterplatine mit dem Modul E18-MS1-IPX für die GPIO-Leiste des Raspberry Pi gebaut. Da das Modul eine u.FL-Buchse habt, kann man einfach eine externe Antenne anschließen. Das ermöglicht den Betrieb mit besserer Reichweite oder zum Beispiel den Betrieb in einem Schaltschrank/Serverschrank.

„Long-Range“ Variante

Zusätzlich gibt es noch eine „Long Range“-Variante wo dem CC2530 ein CC2592 „Range Extender“ vorgeschaltet ist. EByte bietet das im Modul E18-MS1PA1-IPX, das ich genauso wie das E18-MS1-IPX implementiert habe.

The CC2592 device is a range extender for all CC25XX2.4-GHz low-power RF transceivers, transmitters, and system-on-chip products from Texas Instruments.
To increase the link budget,the CC2592 device provides a poweramplifier for increased output power and an LNA with a low-noise figure for improved receiver sensitivity.

https://www.ti.com/lit/ds/symlink/cc2592.pdf?ts=1592397878858

Fertige Module

CC2530 ZigBee Raspberry Pi Modul V0.3
CC2530 ZigBee Raspberry Pi Modul V0.3
CC2530 ZigBee Long-Range Raspberry Pi Funkmodul V0.3
CC2530 ZigBee Long-Range Raspberry Pi Funkmodul V0.3 mit integriertem CC2592

Die fertigen Module können im cod.m-Shop bestellt werden. Zusätzlich bieten wir Bundles mit verschiedenen Antennen an sowie eine Auswahl an passenden 2.4GHz-Antennen.

2,4GHz Antennen im cod.m Shop
2dBi, 2.5dBi, 5dBi und 3.5dBi 2,4GHz Antennen

Firmware

Wie bekomme ich aber nun die Firmware auf das Modul? Man benötigt dafür einen CC-Debugger oder muss etwas – wie oben erwähnt – mit einem Arduino oder Raspberry Pi basteln.
In vielen Facebook-Gruppen sieht man Anfragen nach fertig geflashten USB-Sticks oder die Frage nach jemandem, der bereit wäre die Firmware auf den in China erstandenen Stick zu flashen.
Um diesem Problem aus dem Weg zu gehen, kann man bei der Bestellung im cod.m-Shop die Firmware wählen und bekommt ein direkt einsatzbereites Modul.

Homegear mag aufgrund der Art der Implementation lieber die Z-Stack Firmware 3.0.x. zigbee2mqtt kommt bei Version 1.2.x genauso wie mit 3.0.x klar – sollte demnach genauso für io.broker gelten.
Version 3.x – nicht verwechseln mit 3.0.x – befindet sich noch in der Entwicklung und ist sowieso nicht mehr für den CC2530 konzipiert.
Bei der Auswahl von Z-Stack 3.0 spielen wir die Version mit Serial-Boot-Loader (SBL) auf. Damit sollte man dann auch ohne CC-Debugger eine Firmware updaten können. Habe ich aber bisher nicht getestet.
Siehe Ende des Artikels…

Informiert euch in jedem Fall über die Unterschiede der Firmware für euren entsprechenden Anwendungsfall.

Inbetriebnahme

In der Standardkonfiguration eines Raspberry Pi’s ist der UART der GPIO-Leiste durch eine serielle Konsole belegt. Um ihn also als serielle Schnittstelle nutzen zu können, muss man diesen zuerst freiräumen und sicherstellen, dass Bluetooth den mini UART benutzt.

Öffnet mit einem Editor die Datei /boot/cmdline.txt und entfernet alle Einträge die console=serial0,115200 oder console=ttyAMA0,115200 lauten. Dann noch in der Datei /boot/config.txt zwei Zeilen hinzufügen

enable_uart=1
dtoverlay=miniuart-bt

Abschließend noch den „Modem System Service“ mit sudo systemctl disable hciuart deaktiveren.
Nach einem Neustart kann der UART über /dev/ttyAMA0 genutzt werden.

Zigbee2MQTT und auch Homegear erklären das auch nochmal sehr genau auf Ihren entprechenden Konfigurationsseiten:

Homegear ZigBee Manual
zigbee2mqtt: Connecting the CC2530

Den beiden verlinkten Anleitungen könnt ihr zur weiteren Einrichtung folgen. Im groben muss jetzt nur noch das Modul konfiguriert werden.

Homegear

Nach Installation des Moduls homegear-zigbee die Datei /etc/homegear/families/zigbee.conf bearbeiten und entsprechend anpassen:

[Serial]
id = CC2530
deviceType = serial
#use your own 16 bytes hexadecimal key!
password = AABBCCDDEEFF11223344556677889900
device = /dev/ttyAMA0

zigbee2mqtt

Bei zigbee2mqtt muss nach erfolgreicher Installation in der Datei /opt/zigbee2mqtt/data/configuration.yaml folgendes ergänzt werden:

serial:
  port: /dev/ttyAMA0
advanced:
  baudrate: 115200
  rtscts: false

io.broker

Ich habe selbst keine io.broker-Installation und habe daher auch keine Tests gemacht. Die Module sollten, da es sich ja „nur“ um CC2530 handelt, aber dort genauso funktionieren. Wie weiter oben beschrieben, wird dort auch der zigbee-herdsman genutzt, der auch zigbee2mqtt zu Grunde liegt.
Die io.broker ZigBee-Anleitung führt sie in jedem Fall als kompatibel auf.

Pairing

Nach der Konfiguration die jeweilige Software neu starten und es kann mit dem Pairing losgehen. Dieser Prozess ist in den jeweiligen Anleitungen sehr detaliert erklärt und ist im Normalfall ohne größere Hürden zu nehmen.

Homegear: Adding Zigbee Devives
zigbee2mqtt: Pairing Devices

Ich glaube jetzt das einzeln nochmal hier hin zu schreiben macht keinen Sinn, oder?

Fazit

Für „mal Schnell“ ne Platine machen, war es doch ein wenig mehr Aufwand 😉
SMD-Module und Antennen sourcen, Platine designen mit mehreren Prototypen und natürlich noch Anleitung schreiben und dergleichen.
Dann die passende Software finden für den CC2530 und den CC2530+CC2592 – da auch noch mal dickes Danke an Koen Kanters der durch die Entwicklung von zigbee2mqtt und der Bereitstellung von fertiger Z-Stack-Firmware Vieles erst möglich gemacht hat.

Wenn es zukünftig brauchbare CC2538-SMD-Module gibt, werden ich denke damit in jedem Fall ein Aufsteckmodul bauen. Der CC2530 ist teilweise einfach ein bisschen schwach auf der Brust und ist, was die Anzahl der Geräte angeht, doch sehr begrenzt.

Update: Mittlerweile gebaut und verfügbar: https://shop.codm.de/automation/zigbee/29/zigbee-cc2538-raspberry-pi-modul
Der CC2538 wird nur von Z-Stack Firmware 3.0.x unterstützt und ermöglicht bis zu 100 Children direkt am Coordinator. Näheres dazu auf der Produktdetailseite.
Außerdem ist damit, durch die hinzugekommenen Reset- und Flash-Buttons, auch ein Update der Firmware direkt über die GPIO-Leiste des Raspberry Pi möglich.

Wie immer gilt, bei Fragen und Anregungen jederzeit melden.

Mit einer Version ohne externe Antenne war es natürlich nicht getan 😉

CC1101 SPI Adaptor mit u.FL Antennenbuchse

Im üblichen chinesischen Warenhaus habe ich noch ein weiteres CC1101-Modul (E07-868MS10) mit passender 868MHz-Antennenkonfiguration gefunden. Da die ersten Funktionstests erfolgreich waren, bot es sich an damit zu lernen, wie man SMD Komponenten mit Lötpaste (Sn42/Bi57.6/Ag0.4) lötet. Eine Heißluftlötstation hatte ich mir vor längerer Zeit angeschafft, um besser entlöten zu können.

Das Adapterboard in einer ersten Version mit u.FL-Antennenbuchse habe ich jetzt endlich testen können (siehe Bild). Die Entwicklung dazu lässt sich im homegear Forum verfolgen.
Natürlich ist hier antennentechnisch und auch löttechnisch noch nicht alles hundertprozentig rund, aber ich bin mit den ersten Ergebnissen recht zufrieden.

u.FL Buchse mit etwas zu viel Lot

Pads mit ungleichmäßig verteiltem Lot

Man sieht klar, dass ich noch an der Verteilung der Lötpaste arbeiten muss. Wenn es mehr als ein paar Platinen werden sollten, werde ich in jedem Fall das passende Stencil mitbestellen, um die Lötpaste ordentlich aufzutragen. Das Zweite Board war zum Glück schon besser 🙂

Ich entwickle gerade mit etwas Hilfe aus dem Forum V0.2 des Boards. Es fehlt zum Beispiel noch an Groundplane für die Leiterbahnen des Antennenanschlusses. Eventuell schaffen wir es sogar eine Platine mit Leiterbahnantenne zu bauen.

Außerdem führe ich auf der neuen Version nicht nur GDO2 sondern auch GDO0 aus. Dadurch ändert sich zwar die Zuordnung zu den GPIO’s, aber man kann das Modul dann zum Beispiel für einen CUL nutzen. Bei meinen Tests hat allerdings der Selbstbau-CUL auch mit nur einem GDO für 868Mhz funktioniert.

Wie immer gilt: bei Fragen und Anregungen gerne melden. Auch wenn jemand ein Modul kaufen möchte.

Nachtrag

Mittlerweile hab ich mit der Hilfe von @malli aus dem Homegear-Forum die Antennenleiterbahnen inkl. Groundplane passend für 868MHz überarbeitet. Die Adapterplatine kann nun entweder mit U.FL-Buchse oder Drahtantenne bestückt werden.

Nachtrag II

Die Platinen von OSHPark sind endlich da und ich muss sagen, ich bin mit dem Ergebnis sehr zufrieden. Die Platinen können bei OSHPark oder bei mir komplett bestückt, mit U.FL-Buchse oder Drahtantenne, bestellt werden.

Das CC1101 SPI Raspberry Pi Modul kann im cod.m Online-Shop bestellt werden!

Hier die Config für V0.3 des Moduls mit Homematic (homematicbidcos.conf):

[TI CC1101 Module]
id = My-C1101-Module
default = true

deviceType = cc1100
device = /dev/spidev0.0
responseDelay = 100

interruptPin = 0
gpio1 = 25

Und so sieht das Ganze mittlerweile bei mir zu Hause aus:

Da ich vermehrt Homegear für Kunden einsetze und nicht ständig das CC1101-Modul aufs neue an Kabel anlöten wollte, habe ich mir mal eine kleine Adapterplatine gebaut.

Das (chinesische) CC1101-Modul ist die günstigste Möglichkeit mit einem Raspberry Pi und homegear auf Homematic oder Max! Komponenten bei 868MHz zuzugreifen. Von Timing ist diese Variante auf jedem Fall einem CUL – also USB Stick – vorzuziehen.

Wie im vorigen Beitrag „Homematic mit node-red über homegear“ zu sehen ist, ist die Kabellösung doch auch immer recht unordentlich und vor allem fehleranfällig.

Wer mag kann die Platine bei OSHPark für $2.85 je 3 Stück (keine Versandkosten) bestellen und das CC1101-Modul auflöten. Dazu benötigt man ansonsten nur noch eine 2X05-Buchsenleiste um die Platine dann auf den Pi aufstecken zu können. Das Modul wir, wie im Bild zu sehen, ab Pin 17 der GPIO-Leiste des Pi gesteckt, GDO2 ist dann auf GPIO25 ausgeführt.

Hier mal beispielhaft der Auszug aus der homematicbidcos.conf:

[TI CC1101 Module]

id = My-CC1101
default = true

deviceType = cc1100
device = /dev/spidev0.0

responseDelay = 100

interruptPin = 2
gpio1 = 25

Wenn die Nachfrage groß genug ist, überlege ich das Modul komplett fertig verlötet zum Verkauf anzubieten. Also gerne melden 😊

Update: Ich habe mittlerweile neue Version des Adapters gebaut: https://allgeek.de/2017/09/23/cc1101-spi-adapter-mit-u-fl-antennenbuchse/

Update 2: Das CC1101 SPI Raspberry Pi Modul kann im cod.m Online-Shop bestellt werden!

Inspiriert von Oliver Lorenz schreibe ich hier mal eine Alternative zum Anbinden von Homematic-Komponenten an node-red auf. Ich nutze für die Hardwareanbindung der Homematic-Komponenten homegear, da es mir die bidirektionale Kommunikation per mqtt erlaubt.

In Oliver’s Post musste ein Programm auf der CCU geschrieben werden, um die Zustände bei Auftreten (event) „zurück“ an node-red zu melden, oder sie müssten zyklisch abgefragt werden. Durch die Nutzung von homegear entfällt dieser Schritt, weil jedes event direkt per mqtt kommuniziert wird.

Hardware

Aus einem Vortrag beim @make_ldk von letztem Jahr habe ich noch folgende Folie, die die Struktur recht anschaulich zeigt:

Es bietet sich an, homegear auf einem Raspberry Pi zu betreiben, da man dort den direkten Zugang zu den eventuell benötigten Hardwareschnittstellen hat. Homegear kann mit einer Vielzahl von Geräten mit homematic (BidCOS) kommunizieren. Ich nutze hier ein CC1101-Funkmodul, das per SPI angebunden wird. Natürlich kann man auch das HM-MOD-RPI-PCB, das HM-LGW oder eine CUL benutzen. Weiteres dazu in der homegear-Dokumentation zu Homematic-BidCOS.

Auch wenn das CC1101-Modul der basteltechnisch größere Aufwand ist, so ist es doch die günstigste und auch technisch beste Lösung (Timing). Die Module lassen sich für unter 5,- € bei den üblichen chinesischen Versandhäusern bestellen. Pollin bietet zum Beispiel auch ein CC1101 Modul an, was sich ohne Probleme einsetzen lässt.

Der CC1101 kann mit 868MHz oder 433MHz funken, allerdings muss er für die entsprechende Frequenz die passenden Antennenkonfiguration vorweisen – 433er-Module funktionieren nicht mit Homematic, das in 868MHz funkt. Auf den Marktplätzen werden viele Module mit 433MHz als 868MHz verkauft. Am besten haltet ihr euch an die Vorschläge im Wiki von FHEM für den Selsbstbau-CUL, den ihr natürlich auch mit homegear nutzen könntet.

Homegear kann mehrere Protokolle/Hardware anbinden. Es kann also nicht nur mit Homematic, sondern auch mit MAX!, Sonos, Philips Hue, Intertechno uvm. auf dem hier gezeigten Weg kommuniziert werden.

Software

Ich nutze für dieses Beispiel hier nicht das fertige homegear-Raspbian, da es sich um ein für den Dauerbetrieb optimiertes read-only Image handelt. Stattdessen habe ich ein Raspbian mit node-red installiert und dort zusätzlich mosquitto (ein mqtt-broker) und homegear mit dem homematic-bidcos Paket installiert. Mosquitto lässt sich sehr einfach über das zur Verfügung gestellte Debian-Repository installieren. Danach nur noch den Dienst mit systemctl enable mosquitto.service aktivieren.
Für die Installation könnt ihr gerne openHABian nutzen oder euch an mein Anfängertutorial zur Installation eines RaspberryPi mit node-red halten. OpenHABian kann node-red wie auch homegear mit installieren.

Für die Grundlagen mag ich euch ein paar Links empfehlen:

Als Client, um die mqtt-Kommunikation zu überwachen, eignet sich mqtt-spy.

Aufbau/Konfiguration

Das CC1101 Modul wird direkt am SPI des Raspberry Pi betrieben, der Anschluss und die Konfiguration sind in der Dokumentation von homegear erklärt: Configure Texas Instruments CC1101 (SPI aktivieren mit raspi-config).

Nach Einrichtung des Betriebssystems sowie Verkabelung muss homegear und das Modul nur noch konfiguriert werden. Schaut dazu bitte in das Grundlagen-Tutorial unter dem Punkt „Konfiguration“ – wichtig auch der Absatz über AES (!) – oder in die Dokumentation von homegear.

Raspberry Pi 3 mit CC1101 SPI Modul

Update: Mittlerweile habe ich einen Adapter für das CC1101 Modul gebaut, damit man nicht immer so einen Kabelsalat veranstalten muss und eine externe Antenne anschließen kann. CC1101 SPI Adapter mit u.FL Antennenbuchse.
Das Modul ist auch bei uns im Online-Shop bestellbar.

Zum Test verwende ich einen HM-LC-Sw1-Pl-2. Nach dem Anlernen, wie unter First Steps beschrieben, meldet sich der Aktor mit seinen Datenpunkten per mqtt unter dem Topic homegear/<homegear-id>/plain/<device-id>/<channel>/<var-name>.
Die homegear-id und der Typ der Meldung wird in der mqtt.conf konfiguriert. Neben plain können auch noch json und jsonobj zurück gegeben werden. Achso, natürlich noch enabled = true setzen, um mqtt zu aktivieren.

Die in den Geräten vorhandenen Datenpunkte können in der offizielen Homematic Dokumentation nachgeschlagen werden.

In unserem Beispiel ist der Status des Aktors also unter homegear/1234-5678-9abc/plain/1/1/STATE zu finden (true/false). Um nun den Status zu „beschreiben“, tauschen wir plain im Topic einfach durch set aus: homegear/1234-5678-9abc/set/1/1/STATE. Dort können wir nun entweder true oder false hinterlegen (publish) – 1/0 würde genauso funktionieren, homegear verarbeitet die gelieferten Daten logisch.

In mqtt-spy kann man nun sehr gut die Zustandsänderungen unseres Status beobachten:

An „Last Received“ der Nachricht sieht man, dass Schaltbefehl senden (set) und Änderungen des Status (STATE) nur ca. 150ms auseinander liegen.

Die Zeit zwischen Betätigung des Tasters am Aktor bis zur Meldung per mqtt ist leider etwas länger (ca. 2s). Das liegt allerdings am Aktor selbst und im weiteren Zusammenhang an der 1%-Regel bei 868MHz.

node-red

Beispielhaft verwende ich node-red-dashboard zum Schalten des Aktors.

Man abonniert (subscribe) also das Topic des Status des Aktors und gibt diese msg.payload in einen Dashboard-Switch-Node. Der Switch muss so konfiguriert werden, dass er true und false als String in der on- bzw. off-payload versteht.

Beim Schalten sendet der Switch die konfigurierte Payload an seinen Ausgang und wir senden diese an unser set-Topic (publish).

Wichtig ist, dass ankommende Nachrichten nicht direkt an den Ausgang durchgereicht werden,  da es durch die 150ms Verzögerung beim Schalten zu einer Race-Condition kommen würde. Zum Glück bietet uns der Switch-Node dafür schon eine passende Option:

Der Switch-Node ändert seinen Status durch das eingehende Topic und sendet bei Betätigung die Änderung an das ausgehende Topic.

Conclusion


(die USB-Kamera hat ein wenig Verzögerung)

Damit haben wir erfolgreich Homematic bzw. jedes von homegear zur Verfügung gestellte Gerät an node-red per mqtt angebunden. Wichtig hierbei ist, dass wir dadurch einen eventbasierten Rückweg haben, also auch Schaltaktionen am Aktor selbst oder durch andere gepairte Homematic-Geräte direkt wieder in node-red gemeldet bekommen.

Ein weiterer Weg wäre über das neu in homegear eingeführte node-blue nur bestimmte Variablen der Geräte in mqtt zu publishen. Dazu dann vielleicht mal mehr in einem anderen Artikel.

Im Herbst letzten Jahres habe ich mir zu Hause eine Multiroom Audio Lösung mit dem Logitech Media Server in Verbindung mit node-red zur Automation gebaut. Der Artikel ist aus einem älteren Forenbeitrag entstanden.

Ich habe verschiedene Hardwarelösungen (nanoPi, nanoPiAir und RaspberryPi Zero) qualitäts- und kostentechnisch gegenüber gestellt. Den RasperryPi ZeroW gab es damals noch nicht.

Folgendes Funktionen sind bis jetzt umgesetzt:

  • Abspielen verschiedener Inhalte in verschiedenen Räumen
  • Synchrones Abspielen von einem Inhalt in mehrere Räumen
  • Jeden Player als Airplay-Empfänger nutzen
  • beliebiges ARM-Board/Linux als Squeeze-Player nutzen (RPi, RPi Zero, NanoPiNeo, NanoPiNeoAir jeweils mit USB Soundkarte)
  • Airplay-Geräte als Squeeze-Player nutzen (ginge auch mit Chromecast)
  • DLNA-Geräte als Squeeze-Player nutzen, leider dann nicht synchron möglich wegen Umwandlung
  • Abspielen MP3’s, Webradio, Youtube (Spotify geht, braucht aber einen kostenpflichtigen Account)
  • Anbindung an node-red um Lautsprecher ein/aus zu schalten wenn Musik läuft
  • Anzeige aktueller Titel, Steuerung Player per node-red
  • …more to come

Server

Der Logitech Media Server (Suqeezebox) läuft bei mir auf meinem x86/64 Server, den ich sowieso zu Hause habe. Auf diesem Server liegen auch meine über die Jahre gesammelten MP3’s. Es läuft Ubuntu 16.04.2 und installiert habe ich dann einfach die Debian-Pakete des LMS: http://wiki.slimdevices.com/index.php/Debian_Package
Das Ganze sollte aber genauso auf einem RPi mit einer USB-Festplatte funktionieren.

Der LMS hat ein Webinterface, das sich per http://<ip/host>:9000/ aufrufen lässt. Zugegeben, das ist ziemlich altbacken aber reicht für rudimentäre Bedienung und Konfiguration. Dort wird dann auch das Musikverzeichnis konfiguriert und das Durchsuchen angestoßen. Der LMS ließt die ID3-Tags und kategorisiert die Musik und macht sie durchsuchbar.

LMS selbst lässt sich per Plugins erweitern, auch aus Drittquellen. Dafür gibt es auch eine recht aktive Community. Wichtig waren für mich diese hier: https://github.com/philippe44
Ich betreibe den LMS ohne jeglichen Account (myqueezebox, etc.) – einzig einen Youtube-API Key musst ich bei Google erzeugen um die Youtube-Funktionalität zu nutzen.

Player

Als Player setze ich aktuell einen NanoPiNeo, einen RaspberryPi Zero, ein AppleTV und ein altes Noxon iRadio per DLNA ein. Als tragbaren Player nutze ich den NanoPiNeo Air:

Den NanoPiNeoAir kann ich nur eingeschränkt empfehlen, da mit ihm nur noch sehr schwer SSH-Kommunikation per WLAN möglich ist, wenn per USB Sound ausgegeben wird. Hatte dazu auch ne längere Diskussion im Armbian Forum https://forum.armbian.com/index.php/topic/3269-nano-pi-neo-air-unstable-wi-fi/
Aktuell läuft Ubuntu 16.04.1 bzw Debian Jessie auf den kleinen Dingern. Als Software nutze ich Squeezelite, das ich anhand dieser Anleitung installiert habe: http://www.gerrelt.nl/RaspberryPi/wordpress/tutorial-installing-squeezelite-player-on-raspbian/

Update 2017: Mit dem aktuellen Armbian kommt es kaum noch zu Problemen beim nanoPiAir.

Theoretisch lässt sich als Squeeze-Player auch ein altes Android Telefon nutzen oder ein RPi-1. Jeder Windows PC sollte genauso funktionieren. Ob ein Linux-Sat-Receiver auch geht, hab ich noch nicht geschaut.

Steuerung

Gesteuert werden kann der LMS natürlich durch das bereits erwähnte Webinterface. Richtig Spaß macht es aber erst mit einer passenden App auf dem Handy/Tablet. Unter Android habe ich Squeezer ausprobiert, was seinen Dienst tadellos erfüllt. Allerdings hab ich nur ein sehr sehr sehr sehr günstiges Android-Tablet zum probieren gehabt und ich glaube dadurch alleine blieb der Spaß auf der Strecke.

Schlussendlich habe ich iPeng 9 für iPad/iPhone gekauft. Mit 8,99€ wirklich happig, aber es lohnt sich in jedem Fall. Die App ist ordentlich geschrieben und bedient alle Möglichkeiten des LMS:

iPad

iPhone

node-red

Hier hab ich noch nicht so viel gemacht und nur den Player in der Küche angebunden. Ich prüfe jede Sekunde den mode des players und schalte bei play die Steckdose der Aktivboxen ein. Wenn auf pause gewechselt wird, wird 2 Minuten gewartet und dann die Steckdose wieder aus geschaltet.

Zusätzlich lasse ich noch im Dashboard anzeigen was gerade läuft. Da bin ich aber noch nicht ganz fertig.

(für „only when changed“ kann man natürlich auch den rbe-node nehmen)

Kosten

Kommen wir zum spannenden Teil, wo liegen die Kosten pro Player?

Die nanoPi’s habe ich direkt bei FriendlyElec bestellt, Lieferzeit ca. 3,5 Wochen. Mittlerweilse sind diese aber auch schon in DE bestellbar.

NanoPiNeo (Ethernet)
Board: 10€ (512MB)
SD-Karte 7€ (Sandisk 16GB)
GooBay 5V/2A Netzteil 7€
Generic C-Media USB Sound 3€
—–
28,-€

NanoPiNeoAir (WLan)
Board: 20€
IPEX Antenne ca. 5€
GooBay 5V/2A Netzteil 7€
Generic C-Media USB Sound 3€
(keine SD-Karte notwendig, da internes 8GB eMMC)
—–
35,-€

Präferierte Hardware

Empfehlen mag ich einen Raspberry Pi Zero mit PhatDAC. Der PhatDac ist eine „echte“ Soundkarte für den Rapsberry Pi Zero. Klanglich ist man dabei einfach in einer anderen Welt gegenüber den China-C-Media-USB-Soundkarten, das hört  sogar das ungeübte Ohr.

Raspberry Pi mit PhatDAC und WLan-Stick

Raspberry Pi Zero von thepihut (WLan)
Board: 4,50€ (4£)
PhatDAC 13,70€ (12£)
WiFi USB mini + OTG Adapter 8,50€
SD-Karte 7€ (Sandisk 16GB)
GooBay 5V/2A Netzteil 7€
—–
40,70€

Natürlich kommt da dann immer noch die gewünschte Aktivbox dazu. Für etwas qualitativ hochwertiges, sollte man schon um die 70-80€ ausgeben. Ein Sonos Play 1 ist also Preislich nicht ganz soweit davon entfernt.
Man muss für sich entscheiden ob der Bastellaufwand die Vorteile gegenüber dem Sonos aufwiegt.

Hier eine weitere Idee, wie man den Player schick in einer Regalbox verbauen kann: http://indibit.de/multiroom-audio-wlan-lautsprecher-selber-bauen/ – die Lösung mit den zwei Netzteilen hat mir nicht ganz so gut gefallen.

Update 2017: Durch den RaspberyPi ZeroW kann man die Kosten für den bevorzugten Player noch mal um 2,- € senken. Der ZeroW liegt bei 10,-£ und man benötigt dann eben keinen separaten WLan-Stick mehr.