Zum Inhalt springen

Volumio mit HomeKit steuern mithilfe von Node-Red

Wir setzen in unserem Smart Home als Sprachinterface auf Siri. Das hat Vorteile, aber auch Nachteile und Einschränkungen. Bisher war es mir nicht möglich Volumio über HomeKit zu steuern bzw. die Lautstärke einzustellen oder den Radiosender zu wechseln. Doch nun habe ich es mithilfe von Node-Red geschafft! Jetzt ist es mir möglich meine beiden Volumio mit meinem Lieblingsradiosender zu starten, die Lautstärke einzustellen und den Sender zu wechseln. Wie meine Vorgehensweise war, erfahrt Ihr im Artikel, also weiterlesen!

Viele Wege führen nach Rom, deswegen habe ich vorher auch schon einen anderen Weg ausprobiert Volumio zu steuern. Über die HomeKit Kurzbefehle, das war aber alles immer sehr mühsam und ich bin damit nicht warm geworden. Dann bin ich auf Node-Red gestoßen und die Freude war groß als ich entdeckte, dass die Installation parallel zu meiner Homebridge auf einem Raspberry Pi möglich war. Für den Aufbau werden diese Zutaten benötigt:

  1. Homebridge Installation am besten auf einem Raspberry Pi*
  2. Installiertes Node-Red
  3. Einen Volumio Player am besten auf einem Raspberry Pi
  4. Volumio Nodes für Node-Red
  5. HomeKit Nodes für Node-Red
  6. Natürlich ein HomeKit, bei mir mit einem Apple-TV* als Basis

Zugegebenermaßen ist eine Homebridge nicht zwingend erforderlich. Nur habe ich Node-Red neben meiner Homebridge auf dem gleichen Raspberry Pi* installiert, mithilfe des original Homebridge Images. Deswegen erkläre ich meine Vorgehensweise mit Homebridge.

Raspberry Pi 4 Modell B Basisplatine, 2 GB

Raspberry Pi 4 Modell B Basisplatine, 2 GB

Homebridge und Node-Red

Wie Ihr Euch einfach eine Homebridge aufsetzt, erfahrt Ihr in meinem früheren Artikel „Homebridge auf Raspberry Pi installieren und das einfach!“. Auf das, in dem Artikel benutzte Image, baut alles auf. Bei einer manuellen Installation von Homebridge und Node-Red, gibt es den ein oder anderen Fallstrick, aber warum sollte man es sich schwerer machen als es sein muss? Wie Ihr Euch dann Node-Red installiert, erfahrt Ihr in meinem Artikel:
Node-Red parallel mit Homebridge installieren“.

Volumio für Raspberry Pi

Das Volumio Image holt Ihr Euch bei Volumio.org und hier ist der direkte Link zur Volumio Download-Seite. Auf der Download-Seite gibt es auch eine Kurzinstallationsanleitung für Volumio. Zum Flashen des Volumio Images wird die Software „Etcher“ verwendet, die gleiche, wie beim Flashen der Homebridge. Wer sich nicht sicher ist, kann ja auch nochmal im oben genannten Homebridge Artikel vorbeischauen.

Volumio Nodes für Node-Red

Der Grundstock ist nun fertig, es fehlen aber noch ein paar Zutaten. Zu Node-Red müssen noch „Nodes“ hinzugefügt werden, damit es mit Volumio kommunizieren kann. Dazu geht Ihr oben rechts auf die drei gestapelten Striche und wählt „Palette verwalten aus“ und wählt die Karteikarte „installieren“ aus. Im Suchfeld gebt Ihr Volumio ein, dann sollten auch schon die richtigen Nodes angezeigt werden. Bei mir steht hier jetzt schon „Installiert“, bei Euch sollte „Installieren“ stehen. Diesen Button klickt Ihr an und installiert die Nodes.

In Node-Red neue Volumio Nodes Installieren
In Node-Red neue Volumio Nodes Installieren

In der Seitenleiste sollten nun unter „Eingabe“ die neuen Nodes enthalten sein.

HomeKit Geräte Node für virtuelle Schalter

Um eigene virtuelle Schalter über Node-Red in HomeKit einzubinden, benötigen wir noch einen weiteren Node. Ich habe mir den „node-red-contrib-homekit“ installiert. Diesen Node installiert ihr genauso wie zuvor die Volumio Nodes. Es ist nur ein Node, aber relativ mächtig, denn mit ihm können ziemlich viele Geräte, virtuell in HomeKit erzeugt werden.

HomeKit Node in Node red installieren

Volumio mit Lieblingsradiosender starten

Als Erstes wollte ich, dass mein Volumio in der Küche beim Betätigen eines virtuellen Schalters die Wiedergabe meines Lieblingsradiosenders startet. Zum Anfang legen wir uns also einen Schalter an, dazu ziehen wir den Node in den Flow.

Einfügen des ersten HomeKit Schalters in Node Red

Diesen Node müssen wir noch konfigurieren, aber keine Angst, das meiste wird auf den Standardeinstellungen belassen. Jetzt wird erst einmal auf den Node doppelt geklickt, damit sich die Einstellungen öffnen. Dann klickt Ihr auf den kleinen Bleistift zum Anlegen eines neuen „Accessory“ bzw. einem Gerät.

Erstellen des Accessory

Die Eigenschaften des Gerätes öffnen sich. Darin müsst Ihr nur den Gerätetyp und den Namen festlegen. Ich habe mich beim Typ für eine Lampe „Lightbulb“ entschieden, das ist ein einfaches Gerät, man kann sie einschalten und dimmen, das reicht erstmal. Genannt habe ich das Gerät sinnigerweise „Radio“.

Einstellen des Accessory

Nach dem Klicken auf Hinzufügen seit Ihr wieder bei den Eigenschaften. Dort habe ich auch „Lightbulb“ als „Service“ eingestellt und einen Namen vergeben.

Einstellung der ersten Funktion des Accessory

Das war es! Nun noch den Flow veröffentlichen mit „Deploy“ und Ihr könnt im HomeKit den virtuellen Schalter hinzufügen. Dazu geht Ihr auf Eurem iPhone in die Home App und dann auf Gerät hinzufügen. Da Ihr keinen QR-Code habt, klickt Ihr auf „Ich habe keinen Code bzw. kann nicht scannen“. Beim Hinzufügen müsst Ihr den Pin-Code eingeben, der in den Eigenschaften vorgegeben wird. Ein Tipp am Rande, Ihr solltet nur die geänderten Nodes veröffentlichen, sonst wird jeder Schalter der in HomeKit schon angemeldet ist, auch wieder aktualisiert. Das kann unter Umständen etwas länger dauern und hat auch unerwünschte Effekte auf die Schalter, auf die ich später näher eingehen werde.

Nach dem Hinzufügen in der Home-App könnt Ihr den Schalter direkt betätigen und bekommt den Schaltzustand in Node-Red in Eurem Flow angezeigt. Dort wird dann unter dem HomeKit Node bei Schaltzustand „Ein“ der Text
„On: true“ oder bei Schaltzustand „Aus“ dann „On: false“ kurz angezeigt.

Diese zwei Schaltzustände habe ich mit einem „Switch“ Node ausgewertet. In diesen „Switch“ geben wir zwei Abfragen. Bei „On: true“ also wenn das Objekt „On“ wahr ist, soll an Ausgang 1 und bei „On: false“, wenn das Objekt „On“ falsch ist, soll zu Ausgang 2 weitergeleitet werden. Den Switch findet man bei der Kategorie „Funktionen“. Diesen Node einfach auf das Raster ziehen und den Ausgang des Schalters mit dem Eingang des Switch verbinden. Nach einem Doppelklick auf den Switch bearbeitet Ihr die Eigenschaften wie auf dem Bild zu sehen. Wichtig ist, dass „On“ genauso geschrieben wird, mit großem „O“, sonst geht es nicht. Man muss zwingend die Groß- und Kleinschreibung beachten!

Zum Schluss sollte euer Flow so aussehen:

Jetzt muss die Information an den Ausgängen, in für Volumio verständliche Befehle umgewandelt werden. Dazu habe ich zwei „Change“ Nodes eingefügt, für jeden Ausgang des Switches einen und die Switch Ausgänge mit den Eingängen der neuen Change Nodes verbunden.
Ich will in Volumio eine Playliste starten, die meine Lieblingsradiosender enthält. Diese Sender stehen deswegen in einer Playliste mit dem Namen „Radio“, weil ich später auch mit einem Schalter die Sender wechseln will und das funktioniert in einer Playliste einfacher. Aber nun zum Einstellen der Change-Nodes. Der Change-Node am Ausgang 1 des Switch-Node wird Doppel-geklickt und wie folgt eingestellt:

Das erste Objekt, das an Volumio übergeben wird, heißt „event“ und enthält den Volumio-Befehl „playPlaylist“. Jetzt braucht Volumio noch den Namen der Playliste, die gestartet werden soll, diese wird im Objekt „data“ geliefert, und zwar heißt meine Playliste „Radio“.
Der zweite Change-Node ist zum Stoppen der Wiedergabe, dieser muss wie folgt eingestellt werden:

Im Event Objekt wird nun der Volumio-Befehl „Stop“ übergeben, dieser benötigt keine weiteren Daten. Damit das richtig funktioniert, musste ich in diesem Fall alles Unnötige aus dem Objekt Payload löschen. Jetzt kommt der Moment, an dem wir den Volumio Command Node einfügen! Nach dem Einfügen und Verbinden sollte unser Flow wie folgt aussehen:

Im Volumio Node muss noch die IP-Adresse des Volumio hinterlegt werden, den man steuern will. Also einen Doppelklick auf den Volumio Command Node und dann auf den kleinen Bleistift neben dem Text „Neuen volumio-server hinzufügen …“ klicken.

Als Host tragt Ihr die IP-Adresse Eures Volumio ein. Danach auf „Hinzufügen“ und dann auf „Fertig“ klicken. That’s it! Wenn in Eurem Volumio eine Playliste mit dem Namen „Radio“ existiert, könnt Ihr sie nun mit dem Schalter in HomeKit starten und stoppen.

Volumio Lautstärke über HomeKit steuern

Starten und stoppen der Musik ist ja schon ganz schön, aber ich wollte zusätzlich noch die Lautstärke des Volumio über HomeKit einstellen. Das habe ich mit dem gleichen Schalter wie zum an- und ausschalten bewerkstelligt. Also Ihr wählt den Schalter „Radio An / Aus“ aus und kopiert in mit der Tastenkombination „StRG“ und „c“ und fügt in wieder ein mit „StRG“ und „v“. Danach ändert Ihr den Namen des Schalters in „Radio Lautstärke“ und veröffentlicht den Node.

Wenn Ihr nun in HomeKit auf Euren Schalter tippt, dann öffnet sich eine Sicht mit zwei Schaltern und einer davon hat den Namen „Radio Lautstärke“. Jetzt wollte ich aber stufenlos, wie beim dimmen einer Lampe, die Lautstärke einstellen. Also muss der Schalter umgewandelt werden. Dazu müssen wir einmalig die „Brightness“ für den Schalter vorgeben. Dazu fügt Ihr den Node „inject“ aus der Kategorie „common“ hinzu und verbindet den Ausgang mit dem Eingang des Lautstärke-Schalters. Diesen „inject“ Node konfiguriert Ihr folgendermaßen:

Der Zahlenwert sollte größer als null sein und ist die Lautstärke. Achtet auf die Groß- und Kleinschreibung beim Ausfüllen des Payloads! Nachdem Ihr auf fertig geklickt habt, sollte euer Flow folgendermaßen aussehen:

Wenn ihr jetzt links auf das kleine Quadrat am Node „Give Brightness“ klickt, dann übergibt der Inject Node dem Schalter „Radio Lautstärke“ einen Wert und euer Schalter in HomeKit wird ein Schieberegler. Bewegt ihr den Schieberegler in HomeKit, dann steht unter dem Schalter in Node-Red der eingestellte Wert. Dieser Wert muss jetzt in einen Lautstärke-Befehl umgewandelt und an „Volumio Command“ geschickt werden. Zum Umwandeln des Payload benutzen wir dieses Mal einen Funktions-Node. In diesen schreiben wir folgende Funktion:

var vol = msg.payload.Brightness;
    msg.payload = {
    event: "volume",
    data: vol,
    }
return msg;

Nach dem Bearbeiten des Nodes erstellt Ihr noch die Verbindung zum „Volumio Command“ Node und schon könnt Ihr die Lautstärke über HomeKit ändern. Der Flow sieht jetzt so aus:

Jetzt kann es passieren, dass man über das Webinterface von Volumio die Lautstärke ändert, diese stimmt dann nicht mehr mit der Anzeige am HomeKit Schalter überein. Um diesen möglichen Fehler zu beheben, fügen wir den „Volumio event“ Node ein. In diesem Node wählen wir unseren schon erstellten Volumio Server aus und klicken auf „Fertig“. Dann fügen wir wieder einen Funktions-Node ein. In diesem Funktions-Node muss die Lautstärke von Volumio, die „volume“ in eine Helligkeit, die „Brightness“ umgewandelt werden. Dazu fügt Ihr folgende Funktion ein:

var vol = msg.payload.volume;
    msg.payload = {
    Brightness: vol,
    }
return msg;

Der Flow wächst und wächst:

Wenn Ihr jetzt im Volumio Webinterface die Lautstärke ändert, dann ändert sich auch der Schalter für die Lautstärke im HomeKit, wie von Geisterhand.

Wenn Ihr immer Euren ganzen Flow veröffentlicht dann werden die Schieberegler wieder zu normalen Schaltern! Also nur die geänderten Nodes veröffentlichen, ansonsten müsst Ihr die Schalter manuell mit dem Inject Node wieder in Schieberegler umwandeln.

Den nächsten Titel in der Playlist wählen

Jetzt fehlt nur noch, dass über HomeKit der nächste Radiosender oder Titel in der Playliste ausgewählt werden kann. Dazu fügen wir einen komplett neuen Schalter hinzu, nicht kopieren! In diesem neuen Schalter wird ein neues „Accessory“ erzeugt, wie vorher beim „Ein / Aus“ Schalter schon beschrieben, nur dass der Name des „Accessory“ und des Schalters „Weiter“ lautet. Mehr muss erst einmal nicht eingestellt werden. Nach dem „Deploy“ kann der Schalter dem HomeKit hinzugefügt werden. Unser neuer Schalter soll sich selbstständig zurücksetzen, dafür fügen wir einen Change Node ein, der den Payload von „On:true“ auf „false“ setzt.

Der neue „Weiter“ Schalter soll auch, nur wenn er eingeschaltet ist, den nächsten Titel abspielen. Dazu muss mit einem Switch Node das „On:false“ abgefangen werden.

Und zu guter Letzt muss das „On:true“ in den Volumio Befehl „next“ umgewandelt werden. Dies geschieht wieder mit einem Change Node.

Damit keine Fehler passieren, wird das „On“ gelöscht und nur der Befehl „next“ an Volumio Command weiter gegeben. Zum Schluss sollten die Verbindungen des Flows folgendermaßen aussehen:

Der fertige Node Red Flow um Volumio von HomeKit aus zu steuern
Der fertige Node Red Flow um Volumio von HomeKit aus zu steuern

Der „Weiter“ Schalter funktioniert nun! Das war ein hartes Stück Arbeit, aber wir haben es geschafft! Das Volumio Radio lässt sich von HomeKit aus steuern. Mehr wollte ich erst einmal nicht. Dieser Flow läuft bei mir jetzt schon längere Zeit und ich bin zufrieden.

Ich hoffe euch es ist alles soweit verständlich, dass ihr es Nachvollziehen und nachbauen konntet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.