, ,

Homematic – All-in-one: CCU2 und SONOS API auf einem Raspberry Pi installieren

Anfang des Monats habe ich euch bereits das Projekt piVCCU vorgestellt. Damit ist es möglich die Original CCU2 auf einen wesentlich schnelleren Raspberry Pi zu installieren. Damit können zwei wichtige Punkte erreicht werden. Erstens ist das System deutlich schneller als die CCU2. Zweitens können parallel zu HomeMatic auch noch andere Software Produkte installiert werden. Das macht dann auch den wesentlichen Unterschied zu RaspberryMatic aus. Diese kann nur „stand-alone“ Modus betrieben werden.

Allgemeines

In diesem Artikel möchte ich euch beschreiben, wie ihr neben der HomeMatic Zentrale (piVCCU) auch noch das SONOS API installieren könnt. In meinen letzten Artikel habe euch diese sehr interessante Steuerungsmöglichkeit einen SONOS Systems beschrieben. Dabei wurde dies auf einer separaten Raspberry Pi installiert.

Da aber sowohl die Appliaktion HomeMatic, als auch die SONOS API keine Anwendungen sind, die eine Raspberry Pi3 an den Rand ihrer Kapazität bringt, habe ich versucht beides auf der gleichen Hardware zu installieren.

Hier ist mein Erfahrungsbericht und eine Schritt für Schritt Beschreibung, wie ihr das realisieren könnt.

Was benötigen wir alles für dieses Tutorial?

Amazon eBay ELV
Raspberry Pi3 Link Link Link
Bausatz-Funkmodul Link Link Link
microSD Karte Link Link Link
Gehäuse Link Link Link
Gehäuse für HS Link Link Link
Netzteil für HS Link Link Link
USB für Netzteil HS Link Link Link
externe Antenne Link Link

piVCCU Installieren

Im ersten Schritt müssen wir piVCCU installieren. Dies geschieht wie bei RaspberryMatic über ein fertiges SD-Karten Image, welches ihr euch hier herunterladen könnt.


für unser Projekt laden wir das Raspbian Stretch Image herunter.

Vorbereitung der Speicherkarte

Formatieren

Zuerst müssen wir die Micro-SD-Karte formatieren. Dies ist besonders wichtig wenn die Karte vorher bereits genutzt wurde. Ich habe mit der kostenlosen Software „SD Card Formatter“ sehr gute Erfahrungen gemacht.

Image auf Karte schreiben

Wenn ihr einen Windows PC verwendet, könnt ihr die Software Win32 Disk Imager oder Etcher für Windows verwenden. Für MacOS Nutzer verwendet ihr die Software ApplePi-Baker.

Zugriff auf Raspberry Pi

Nachdem das Image geschrieben ist, kann die Karte in den Raspberry Pi eingesetzt werden. Um über Putty oder WINSCP auf den Pi zugreifen zu können, müssen wir erst einmal die richtigen IP-Adresse herausfinden.

Wie in meinem Artikel über piVCCU bereits beschrieben hat das neue Raspberry  System zwei IP-Adressen. Ursache dafür ist, dass piVCCU einen Container mit der CCU2 Firmware anlegt, der auf dem Pi eine eigene IP-Adresse hat. Über diese virtuelle IP können wir später auf die CCU2 zugreifen. Die andere IP-Adrese ist vom zuvor installierten Linux-System, auch „host“ genannt. Diese ist für unsere nächsten Schritte wichtig, da wir auf das Linux-System nach der Aktualisierung unsere SONOS API installieren werden.

Ermittlung der IP-Adressen

Bisher habe ich dafür immer die Möglichkeiten meines Routers genutzt. Von Sebastian habe ich gelernt, das es ein kleines kostenloses Tool gibt SoftPerfekt Network Scanner, welches diese Aufgabe auch perfekt erledigt.

Netzwerkauszug mit Soft Perfekt Network Scanner

Netzwerkauszug über Fritz.Box

Oben seht ihr jeweils eine Auflistung aus meinem Netzwerk. Wir finden hier zwei neue Einträge, einer heißt „raspberrypi“ und ist der sogenante „host„. Die andere „homematic-ccu2“ ist der Container mit der CCU2 Firmware.

Die CCU2-Software ist im Netzwerk unter http://homematic-ccu2/ zu erreichen.

ACHTUNG:  Wenn ihr noch eine Original CCU2 im Netz habt, hat diese den gleichen Namen!

Damit ist der erste Schritt abgeschlossen. Wie Ihr ein Backup in die neue Installation einspielen könnt, habe ich in diesem Beitrag ausführlich beschrieben, daher werde ich auf diesen Punkt hier nicht noch einmal eingehen.

TIPP – IP-Adressen und Netzwerk-Namen

Meine Empfehlung ist hier, den beiden „Systemen“ eine feste IP-Adresse zu geben und dem Container zusätzlich einen anderen Netzwerknamen. Das ist wichtig, damit ihr später aus HomeMatic heraus die SONOS API immer unter der selben IP-Adresse ansprechen könnt. Auch für die HomeMatic Zentrale habe ich mir angewöhnt fest IP-Adressen zu vergeben.

Dem CCU Container habe ich zusätzlich noch den Netzwerknamen „homematic-pivccu“ gegeben. Damit kann ich meine RaspberryMatic, meine Original CCU2 und zusärtlich die piVCCU parallel im Netz betreiben. Voraussetzung ist, das die Zentralen nicht die gleichen Aktoren verwenden.

Erster Start CCU Zentrale (Container)

Wenn ihr den Namen nicht geändert habt, könnt ihr die CCU2 Software über  http://homematic-ccu2/ oder die entsprechende IP-Adresse erreichen.

Die CCU2-Firmware Version entspricht dem Erstellungsdatum der Image Datei und muss aktualisiert werden. Wie beschreibe ich weiter unten.

Startseite > Einstellungen > Systemsteuerung > Zentralen-Wartung

Hier ist die aktuell installiert CCU2 Firmware zu sehen.

Anmeldung via PUTTY auf dem Host

Da wir nun die IP-Adresse von unserem Pi wissen, können wir über Putty darauf zugreifen. Wir starten dazu Putty und tragen bei „Host Name“ die zuvor ermittelte IP-Adresse ein.

Der Port bleibt unverändert bei 22. Mit einem Klick auf „Open“ stellen wir nun eine Verbindung zum Raspberry Pi her. Sollte ein Fenster mit einer Meldung erscheinen, dass der host key noch nicht gecached ist, beantworten wir diese mit „Ja“.

Nun erscheint ein schwarzes Eingabefenster mit der Meldung „login as:“. Hier tragen wir „pi“ ein und quittieren dies mit Enter.

Das Passwort für den Benutzer Pi lautet: „raspberry

Nun befinden wir uns über SSH auf dem Rasperry Pi und wir können hier Aktualisierungen und weitere Installationen vornehmen.

Empfehlung:

Ich empfehle euch das Passwort für den User „Pi“ sofort nach der ersten Anmeldung auf eine Passwort eurer Wahl zu ändern. Dafür bitte das Kommando „passwd“ eingeben. Ihr werdet dann nach dem aktuellen Passtwort „raspberry“ gefragt. Nach der Eingabe müsst ihr zweimal euer neues Passwort eingeben.

Hier ist der Passwort Wechsel zu sehen

PiVCCU auf eine neue Version aktualisieren

Dazu aktualisieren wir zunächst unser komplettes System. Dies erfolgt durch die APT Funktion.

APT (Advanced Packaging Tool). APT ist ein Paketmanagement-System. Mit Hilfe von APT ist es sehr einfach möglich, Programmpakete zu suchen, zu installieren oder auch das ganze System auf den neuesten Stand zu bringen.

Dies kann mit dem folgenden Befehl durchgeführt werden:

sudo apt update && sudo apt upgrade

Dieser Befehl ist die Kombination aus zwei Befehlen, getrannt durch „&&“ und aktualisiert nicht nur unsere Raspbian Installation, sondern auch die CCU2 Firmware auf die aktuelle Version.

Während der Installation kann es dazu kommen, dass eine Abfrage erscheint. Diese muss mit „Y“ bestätigt werden, damit der Prozess weiter laufen kann.


Kontrolle des Updates

Dazu die CCU Software erneut starten über den Namen oder die bekannte Adresse.

Es kann vorkommen, das ihr dann auf einem „blauen Bildschirm“ stehen bleibt, da der Browser Cache nicht bereinigt wurde. Dann kommt ihr mit der Eingabe von „Strg+F5“ weiter und die WebUI startet.

Im obigen Screenshot sehen wir, das auch die CCU2 Firmware aktualisiert worden ist. Damit ist unsere Raspberry komplett auf dem aktuellen Software Stand.

Installation von Node.js

Voraussetzung für die SONOS API ist das Software Paket „node.js“. Daher müssen wir dies als erstes installieren.

Installation über das NodeSource Repository

Hierbei handelt es sich sowohl um die einfachste, wie auch die sicherste Methode Node.JS zu installieren. Verwendet wird das Repository von NodeSource, wodurch alle Updates über den Paketmanager installiert werden.

Jetzt müssen wir die erforderliche Version installieren. Das gestartete Setup-Script erkennt automatisch das installierte Betriebssystem und konfiguriert die Pakete entsprechend. Empfohlen wird aktuell die Version 6.x zu installieren. Dies machen wir mit dem folgenden Befehl:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -

Nun müssen wir Node.js sowie die benötigten Build-Tools installieren. Dazu müssen wir den folgenden Befehl ausführen.

sudo apt-get install -y nodejs build-essential

Ob das Ganze funktioniert hat können wir mit dem folgenden Befehl kontrollieren:

node –v
Es sollte dann die gewünschte Version angezeigt werden.

v6.12.3

Installation SONOS API

Nachdem wir nun den Server inklusive Node.js Server komplett aufgebaut haben, können wir jetzt mit der Installation der SONOS API starten.

Dazu müssen wir zuerst in das „Home Verzeichnis“ des Users „Pi“ wechseln (1). Mit dem nächsten Befehl die Datei „master.zip“ herunterladen (2). Durch den dritten Befehl wird die Datei „master.zip“ entpackt (3). Mit dem letzten Befehl in das Verzeichnis „nodesonoshttpapimaster“ wechseln (4).

cd ~
wget https://github.com/jishi/node-sonos-http-api/archive/master.zip
unzip master.zip
cd node-sonos-http-api-master

Installation

An dieser Stelle findet dann die eigentliche Installation statt. Während diesem Installationsvorgang werden die benötigten Pakete und Module heruntergeladen und installiert. Mit Abschluss der Installation sind diese dann dem Node.js Server bekannt.

Dieser Vorgang kann etwas länger dauern, aber keine Sorge, dein System arbeitet.

Um sicher zu gehen, den folgenden Befehl eingeben, um in das korrekte Verzeichnis zu wechseln:

cd /home/pi/node-sonos-http-api-master

Jetzt folgt der eigentliche Befehl zur Installation der SONOS API:

npm install --production

Während der Installation seht ihr eine Auflistung der Module und Pakete, die ab dem Moment für Node.js zur Verfügung stehen.

Solange keine „roten Fehlermeldungen“ erscheinen, ist alles einwandfrei gelaufen.

Konfiguration

Nachdem wir die Installation erfolgreich hinter uns gebracht haben, können wir uns jetzt der Konfiguration widmen. Diese habe ich im meinem ersten SONOS Artikel ausführlich beschrieben und gehe daher hier nicht nochmals darauf ein.

Erster Start SONOS API

Jetzt haben wir alle Voraussetzungen erfüllt und können die SONOS API zum erstenmal starten. Dafür den folgenden Befehl ausführen:

Um sicher zu gehen vorher in das korrekte Verzeichnis zu wechseln, sonst funktioniert der Start Befehl nicht.

cd /home/pi/node-sonos-http-api-master

Jetzt folgt der eigentliche Befehl zum Start der SONOS API:

npm start

Die folgenden Informationen sollten angezeigt werden, dann hat alles funktioniert und die API steht zur Verfügung und „lauscht“ jetzt auf dem port 5005 auf die HTTP Befehle.

 Test über Browser

Die API hört nun auf die Namen des jeweiligen Raumes. In meinem Beispiel nehme ich meinen Lautsprecher in der Küche und lasse dort die im Sonos definierte Playliste „TOP100“ abspielen.

Bei den Raumnamen keine Umlaute verwenden, also anstatt „Küche“ bitte „Kueche“ verwenden, ansonsten funktioniert das nicht.

Natürlich müsst ihr die IP Adresse auf die eurer Sonos Raspberry ändern.

In einem Browser folgende URL öffnen:

http://192.168.1.12:5005/kueche/playlist/top100

Es funktioniert, die Box beginnt mit dem ersten Titel der aktuellen Top100. Ihr könnt dann noch ein paar weitere Befehle über den Browser testen.

http://192.168.1.12:5005/kueche/next = springt zum nächsten Titel

http://192.168.1.12:5005/kueche/previous = springt zum vorherigen Titel

http://192.168.1.12:5005/kueche/volume/30 = setzt die Lautstärke auf den Wert 30

http://192.168.1.12:5005/kueche/volume/-10 = reduziert die Lautstärke um den Wert 10

http://192.168.1.12:5005/kueche/pause = stoppt das Abspielen

http://192.168.1.12:5005/kueche/play = startet das Abspielen wieder

http://192.168.1.12:5005/kueche/playlist/lieblingssongs = startet eine andere Playlist

Das soll für den ersten Test über den Browser mal reichen und enn alles funktioniert hat, werdet ihr meine Begeisterung sicher teilen. Ihr könnt das Ganze neben den Aktionen am Lautsprecher auch immer in der SONOS App verfolgen.

Problem mit Node.js Instanz

Obwohl bis jetzt alles super funktioniert, gibt es in der ganzen Konstellation noch ein kleines Problem, zu dem ich euch aber hier auch gleich eine Lösung präsentieren kann.

Ih könnt an dem folgenden Screenshot erkennen, das ihr euch nach dem Start der SONOS API in einer Node.js Instanz befindet. Dies erkennt ihr daran, dass ihr eigentlich keinen Prompt mehr seht, sondern nur den Cursor:

Solange sich euer Node.js Server in diesem Zustand befindet, empfängt er eure HTTP Befehle und setzt sie entsprechend um.

Mit Strg+C beendet man diese Node.js Instanz. Das gleiche passiert wenn ihr eure SSH Verbindung zum Server beendet. Damit beendet ihr auch SONOS API und eure Befehle laufen ins Leere.

Mit „Strg-C“ beendet ihr die Node.js Instanz

Lösung

Um die SONOS API auch laufen zu lassen, wenn kein User auf dem Raspberry Server angemeldet ist, wird SCREEN benötigt. Mit dem Programm SCREEN verwalten wir mehrere virtuelle Konsolen in einem einzigen Terminal-Fenster, lassen Prozesse auf entfernten Servern weiterlaufen (während wir längst vom System abgemeldet sind.

Installation von SCREEN

Um sicher zu gehen vorher in das korrekte Verzeichnis zu wechseln, sonst funktioniert der Start Befehl nicht.

cd /home/pi/node-sonos-http-api-master

Jetzt folgt der eigentliche Befehl zur Installation von SCREEN:

sudo apt-get install screen

Installation von SCREEN

Nachdem die Installation abgeschlossen ist, könnt ihr SCREEN mit dem folgenden Befehl starten:

screen

Ihr bekommt dann die nachfolgenden Meldungen und befindet euch dann quasi in einer Shell innerhalb einer Shell in der nun die SONOS API erneut gestartet werden muss.

Um die SONOS API erneut zu starten, geht ihr wieder den folgenden Befehl ein:

npm start

Dadurch läuft nun die SONOS API in einer separaten Shell und die Befehle zur Steuerung der Sonos Lautsprecher werden korrekt bearbeitet.

Um zurück auf die Original Shell zu kommen, müsst ihr „Strg+A+D“ nacheinander drücken (also Strg gedrückt halten, dann A und dann D).

Mit dem folgenden Befehl könnt ihr in die Screen Instanz zurückzukehren:

screen -r

Die SONOS API läuft nun im Hintergrund. Ihr könnt nun ohne Bedenken eure SSH Session (WINSCP oder PUTTY) beenden, ohne das die SONOS API beendet wird.

Damit ist die Installation komplett abgeschlossen, die zusätzliche Raspberry läuft mit dem Node-js Server und der SONOS API und wartet auf die Abarbeitung von HTTP Befehlen. Ihr könnt an dieser Stelle den Test von Oben ja nochmal wiederholen. Es sollte alles funktionieren.

Anmerkung

Solltet ihr aus welchen Gründen auch immer gezwungen sein die SONOS Raspberry neu zu Starten, müsst ihr natürlich erneut innerhalt der SCREEN Instanz die SONOS API neu starten.

Bei mir läuft der Server nun schon zwei Monate ohne Probleme durch und bearbeitet meine HTTP Steuerungs-Befehle ohne zu murren.

Service von uns

Wir bekommen häufig die Anfrage per Mail, ob wir Euch bei der Installation und Einrichtung behilflich sein können. Ich kann Euch gerne ein fertiges System zusammenstellen. Schreibt mich dazu einfach an: werner (@) technikkram.net

Weitere Vorgehensweise

Nach Abschluss dieses Projektes haben wir es geschafft, die CCU2 Software und die SONOS API auf den gleichen Raspberry zu installieren.

Wie ihr nun die Steuerung der SONOS Komponenten umsetzt, erfahrt ihr in den folgenden beiden Artikel:

Homematic – SONOS steuern – Teil 02 – WebUI und Skripte

Homematic – SONOS steuern – Teil 03 – Sprachausgabe

Fazit

Ich habe es zwar vermutet, aber mein Test hat es nun auch bestätigt. Im Zusammenspiel mit der piVCCU Lösung kann man die CCU2 Software und die SONOS API auf einem Raspberry Pi betreiben. Eine wie ich finde wirklich tolle Geschichte, die den Umstieg auf piVCCU noch einmal deutlich interessanter macht. Ich kann bei mir jetzt eine Raspberry Pi wieder für andere Aufgaben bzw. Tests verwenden.

Es hat sich mal wieder gezeigt, das es viele tolle Projekte gibt, welche die Möglichkeiten der Hausautomation über HomeMatic erweitern können. Im konkretten Fall gilt mein besonderer Dank Jimmy Shimizu (Jishi).

13 Kommentare
  1. Indy
    Indy sagte:

    Hallo Werner, Danke für diese umfassende Anleitung. Würde diese Lösung auch auf einem Orangen Pi mit piVCCU3 aus Eurem Shop funktionieren? Viele Grüße Indy

    Antworten
  2. Christian Preiß
    Christian Preiß sagte:

    Ich hätte da mal eine Frage bezüglich Updates.
    Nach dem letzten Aut Upgrade, um pivccu auf die aktuelle Version zu bringen, war Node auf die Version 8.12 geklettert. Und Zack, lief die Sonos api nicht mehr.

    Antworten
  3. Christian Preiss
    Christian Preiss sagte:

    Hallo,
    eine Frage haette ich zur Begrenzung der Scriptvariablen.
    Diese ist doch meines Wissens mitlerweile in der Originalfirmware beseitigt, oder nicht?

    Antworten
      • Alex
        Alex sagte:

        Das Changelog von eq-3 ist leider auch nie vollständig.

        Die Begrenzung wurde in ReGaHSS Version R1.00.0388.0105 behoben. Die ist einerseit in der genannten RaspberryMatic Version drin, andereseits aber auch in der CCU Firmware 2.29.22 und höher. Allerdings nur dann, wenn man die Logik Schicht auf Community umstellt, bei RaspberryMatic fehlt diese Umschaltmöglichkeit, da ist immer die Community Variante aktiv.

        Viele Grüße
        Alex

        Antworten
        • Werner
          Werner sagte:

          Guten Morgen Alex,

          vielen Dank für diese Information.

          Unter dem Punkt „Systemsteuerung/Zentralenwartung/Logikschicht-Version“ kann die Logikschicht umgeschaltet werden. Hier existieren drei Versionen: Standard, Community und Legacy.

          Hier die Erklärung:

          Wählen Sie die Version ‚Standard‚, um Fehlerbehebungen im Zeitmodul und neue Funktionen, wie z. B. mathematische Operationen in Skripten, nutzen zu können.

          Wählen Sie die Version ‚Community‚ für zusätzliche Verbesserungen zur Fehlerbehebung in Skripten. Bitte beachten Sie, dass diese Version zu Abbrüchen von Skripten führen könnte, auch wenn diese mit bisherigen Versionen der CCU2-Software ausgeführt wurden.

          Sollten seit dem Update auf die aktuelle CCU2-Software Probleme aufgetreten sein, können Sie mit der Auswahl ‚Legacy‚ auf die Vorgängerversion wechseln.

          Grüße
          Werner

          Antworten
  4. Mathias
    Mathias sagte:

    Hi Alex,
    ich werde dieses oder nächstes Wochenende doch von Raspberrymatic auf piVCCU umsteigen.
    Hintergrund: Ich will eine Anwesenheitskennung mit Gigaset G-tags umsetzen.
    Wo ist eigentlich der USB-Speicher bei piVCCU? ist der auch USB0 wie bei Raspberrymatic?
    Ich setzte zusätzlich CuxD Highcharts und den automatischen Backup der CCU-Einstellungen ein. beides soll auf einem USB-Stick, der im Raspberry steckt ausgelagert werden.
    Gruß,
    Mathias

    Antworten
      • Mathias
        Mathias sagte:

        Danke Alex,
        das ging aber schnell!
        Wie verhält es sich mit dem enocean FAM-USB?
        Wird der gleich im CuxD erkannt, damit man Anwesenheit und Abwesenheit triggern kann?
        Die Passenden Tracker dazu habe ich. In der Raspberrymatic laufen die auch. Wenn auch mehr schlecht als recht……..
        Gruß,
        Mathias

        Antworten
        • Alex
          Alex sagte:

          Hi,

          in CUxD wird der aber mit gleicher Begründung nicht sofort verfügbar sein. Auf meiner Github Seite, steht aber, wie man die Geräte für CUxD verfügbar macht. Wie er dann innerhalb von CUxD konfiguriert wird ist dann halt nochmal eine komplett andere Baustelle, da kann ich dir leider nicht weiterhelfen, da ich den Stick nicht kenne.
          Es ist aber nicht falsch, sich zu überlegen, ob man weiter mit CUxD arbeiten will, oder ob man zusätzlich zu piVCCU eine andere Smarthome-Lösung wie ioBroker oder Openhab installiert und HM Fremdes darüber anbindet. Beides kann Sinn machen und es ist schwierig eine klare Abgrenzung zu ziehen, wann das eine und wann das andere besser ist. Aber Gedanken drüber machen ist sicher nicht falsch.

          Der Hauptgrund für piVCCU war, dass ich Openhab und Homematic auf der gleichen Hardware laufen lassen wollte und ich keine vorhandene Lösung gefunden habe, welche mir das (stabil) ermöglicht hat.

          Viele Grüße
          Alex

          Antworten
    • Alex
      Alex sagte:

      Hi,

      ich habe kein Sonos, daher kann ich an der Stelle leider keine exakte Anleitung geben, sondern nur den Grundgedanken nennen. Und besser als in dem Link bekomme ich es nicht erklärt, vor allem nicht über die Kommentarfunktion.

      Viele Grüße
      Alex

      Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert