Apple • Gadgets • Synths • Electronics • Math • Mostly German

Apple, Gadgets, Home, Raspberry Pi, Software

Mit einem Nintendo Joy-Con ein Apple Home Licht schalten

Ein Joy-Con mit Stream Decks im Hintergrund.

Neulich erst habe ich zufällig erfahren, dass so ein Joy-Con Controller der Nintendo Switch sich via Bluetooth mit einem Mac verbinden lässt. Natürlich habe ich sofort überlegt, für was ich den benutzen könnte und kam auf die Idee, die ein oder andere Apple Home kompatible Schalt-Steckdose damit zu schalten. Das klappt ganz prima und ich kann das Licht in meinem Studio jetzt auf mindestens drei Varianten ein- und ausschalten: via Siri, via Taste auf einem Elgato Stream Deck oder eben jetzt neu auch mit einem kurzen Tastendruck auf einen Knopf eines Joy-Cons.

Vielleicht habt ihr ja auch noch einen Joy-Con herumliegen, der sich langweilt und wollt wissen, wie das geht? Ich erklär’s – ist aber alles ein bisschen abgefahren und könnte etwas länger werden. 🤷‍♂️

Voraussetzungen

Was wir dafür brauchen ist:

  • Ein Nintendo Joy-Con – Ich nutze hier einen linken in Grau
  • Ein Raspberry Pi auf dem Hoobs oder Homebridge fertig eingerichtet läuft. Bei mir läuft Hoobs auf einem Raspberry Pi 4B. Zu Homebridge Details kann ich leider nichts sagen. Aber wer sich in Homebridge reingefuchst hat, kann das Gesagte hoffentlich leicht adaptieren.
  • Für Hoobs (oder Homebridge) benötigen wir noch das Plugin Button Platform. Es wurde ursprünglich für Homebridge entwickelt. 😉
  • Eine Apple Home kompatible Schaltsteckdose – ich bin happy mit den kleinen von Meross (China, aber läuft gut und ist einigermaßen erschwinglich) –, an der der zu schaltende Verbraucher hängt, in meinem Fall mehrere Lampen. Die Steckdose solltet ihr schon in Apple Home integriert haben, so dass sie in der Home App bedienbar ist.
  • Einen Mac – ich habe es auf meinem iMac (Intel, 2020) mit macOS 12.0.1 durchgeführt, aber vermutlich geht es auch mit früheren macOS Versionen.
  • Auf dem Mac die freie Software JoyKeyMapper – entweder aus dem Apple Mac AppStore oder von GitHub (Quellcode und/oder fertiges DMG der Version 1.2)
  • Und auf dem Mac die Software Keyboard Maestro – zwar nicht kostenlos, aber (a) gibt es sie in einer kostenlosen Testversion und (b) ist sie wirklich sehr empfehlenswert und sehr mächtig – und dafür nicht zu teuer. Sicher gibt es auch andere Tools, mit denen man individuell auf globale Hotkeys reagieren kann (z.B. Alfred). Wichtig ist nur, dass man in diesem Tool dann auch eine Möglichkeit hat, als Reaktion auf den Hotkey einen HTTP GET Request abzusetzen (in Alfred m.W. nicht direkt möglich, nur über Scripting).
  • Optional: Ein Elgato Stream Deck (egal, ob mini, normal oder XL), was von der freien Software Companion gesteuert wird, nicht von Elgatos eigener Stream Deck Software (es geht aber auch damit). Ich nutze immer den neuesten beta-Build der Version 2.2 von Companion. Die aktuelle Version 2.1.3 ist schon etwas älter (April 2021).

Ich erkläre hier alles exakt so, wie es bei mir läuft – also insbesondere auch mit dem Stream Deck und Companion – weise dann aber jeweils darauf hin, wie es ohne das auch geht.

Hinweis: bei mir laufen i.d.R. alle Betriebssysteme und daher meist auch alle Apps auf Englisch. Daher seht ihr auch in den Screenshots alles auf Englisch. Falls bei euch alles auf Deutsch läuft, könnte das das aber sicher entsprechend einordnen.

Wir gehen das Ganze top-down durch, fangen also da an, wie man es schließlich bedient und arbeiten uns vor, was dabei jeweils passiert und was der nächste Schritt dahinter ist. Los geht’s!

TL;DR
  • Joy-Con per Bluetooth mit Mac koppeln
  • In Software JoyKeyMapper für einen Button des Joy-Con einen Hotkey einrichten
  • In Keyboard Maestro einen Macro anlegen, der auf diesen Hotkey reagiert und in einer „Get URL“ Action die URL aufruft, die die Steckdose schaltet:
    • Das ist entweder direkt die URL des virtuellen Buttons, der in Hoobs über das Plugin „Button Platform“ angelegt wurde
    • oder die Companion URL des Stream Deck Buttons, der gedrückt werden soll, weil er wiederum diese Hoobs URL aufruft.
  • In Apple Home ist für diesen virtuellen Button noch zu konfigurieren, welche Steckdose tatsächlich geschaltet werden soll.
  • Bonus: will man mit ein und derselben URL die Steckdose „toggeln“ (ein/aus umschalten), muss man in Apple Home (nicht in der Shortcuts App!) für den virtuellen Button einen kleinen Shortcut-Workflow anlegen, der zunächst den Power Status abfragt und dann entweder ein- oder ausschaltet.
  • Details unten

Bluetooth Kopplung

Wir beginnen damit, den Akku des schon länger herumliegenden Joy-Cons zu laden 😉 und dann den Joy-Con mit dem Mac via Bluetooth zu koppeln. Dazu die Mac Systemeinstellungen für Bluetooth öffnen und am Joy-Con die Connect-Taste für ca. zwei Sekunden gedrückt halten, bis die vier LEDs eine Art Knight Rider / Cylons Animation machen. Dann den „Connect“ Button neben dem erkannten Joy-Con Eintrag drücken (ja, leider hat macOS nicht das richtige Icon für einen „Joy-Con (L)“ parat):

Joy-Con wurde erkannt, wir drücken auf „Connect“

Nach kurzer Zeit sollte der Joy-Con verbunden sein (zur Not während der LED Animation einfach mal eine Taste am Joy-Con drücken):

Joy-Con verbunden

Hinter dem „Options“ Button verbergen sich ein paar Einstellungen, die aber vermutlich nur dann eine Auswirkung haben, wenn man am Mac mit dem Joy-Con Spiele spielt, was wir ja hier nicht vor haben. Ich habe alle drei Settings auf „Off“ gestellt, glaube aber nicht, dass das eine entscheidende Rolle für unser Vorhaben spielt:

Die Joy-Con Settings von macOS interessieren uns nicht.

Joy-Con mit macOS verbinden

Als nächstes kommt die kleine, praktische Software JoyKeyMapper zum Einsatz. Ihr habt sie sicher schon heruntergeladen und gestartet, nicht wahr? Sie nistet sich in der Menüleiste ein und ist die Verbindung zu macOS. Wir öffnen mal den Settings Dialog:

Wir gehen in die JoyKeyMapper Settings

Mit verbundenem Joy-Con haben wir jetzt die Möglichkeit, alle Funktionen des Joy-Cons auf Tastendrücke / Hotkeys oder Mausaktionen zu mappen. Dabei kann man sogar App-spezifisch vorgehen (also nur wenn Programm xy läuft, sollen gewisse Mappings aktiv sein). Aber wir wollen hier einen globalen Hotkey festlegen, z.B. für den Up-Button des Joy-Cons:

JoyKeyMapper Einstellungen für einen verbundenen Joy-Con

Einmal rechts auf die Zeile mit „Up“ geklickt und wir können uns aussuchen, welcher Tastendruck an macOS gesendet werden soll, wenn wir den Up-Button drücken; ich habe mir mal eine Kombination ausgesucht, die vermutlich sonst nirgends verwendet wird:

Der Up-Button soll ⇧⌥⌃⌘F20 senden.

Keyboard Maestro

Weiter geht es in Keyboard Maestro (KM). Hier legen wir einen neuen Macro an, der als Trigger auf den gerade festgelegten Hotkey (also ⇧⌥⌃⌘F20) reagiert.

Als Action nehmen wir eine „Get a URL“ Action und bei der URL wird’s spannend. Jetzt haben wir ein bisschen ein Henne-Ei-Problem, denn die URL, die wir hier eintragen müssen, gibt es noch gar nicht. 😂 Aber erstmal ein Screenshot:

Macro in Keyboard Maestro – wenn man mit einem Stream Deck und Companion arbeitet.

Die URL http://192.168.0.180:8888/press/bank/8/2, die ich hier verwende, besagt, dass auf meinem Elgato Stream Deck, was von Companion verwaltet wird, auf Seite 8 die Taste Nr. 2 gedrückt werden soll. Die IP Adresse ist die des Rechners, auf dem Companion läuft (mein Mac), was auf Port 8888 quasi ein kleines HTTP API anbietet.

Ich habe bei mir zwei Elgato Stream Decks im Einsatz und auf einer Companion-Seite schon einen Knopf zum Licht ein-/ausschalten konfiguriert, der noch dazu seine Hintergrundfarbe und seinen Text entsprechend dem Schalt-Status der smarten Steckdose anpasst. Von daher wollte ich mit dem Joy-Con-Knopf diesen Stream Deck Button drücken (lassen), damit Hintergrundfarbe und Text sich auch immer mit ändern.

Letztlich löst der Stream Deck Button seinerseits ebenfalls einen HTTP GET Request aus, nämlich einen, den die Hoobs-Erweiterung „Button Platform“ zur Verfügung stellt. Dazu weiter unten mehr.

Hat man also keine Stream Decks im Einsatz, kann die Action des KM Macros auch direkt diese Hoobs-URL aufrufen. Ich habe das mal auf einen zweiten Joy-Con Button, den Down-Button, gelegt – natürlich mit einem anderen in JoyKeyMapper definierten Hotkey:

Macro in Keyboard Maestro – wenn man direkt die Hoobs URL aufruft.

Hoobs und das „Button Platform“ Plugin

Damit man über eine URL eine Apple Home kompatible Steckdose schalten kann, muss diese zunächst zu Apple Home hinzugefügt werden. Ich habe bei mir im Raum „Studio“ eine der Meross Mini Steckdosen hinzugefügt und als Licht gekennzeichnet. Das ein- und ausschalten über die Home App oder Siri klappt damit ganz normal.

Die Schaltsteckdose als Lichtquelle in Apple Home

In Hoobs kann man über Plugins & Search nach „button“ suchen und das von Hoobs offiziell zertifizierte Plugin „Button Platform“ installieren. Hier im Screenshot ist es natürlich schon installiert:

Hoobs Button Platform Plugin suchen und installieren

Dann geht es in dessen Konfiguration. Der Knackpunkt ist: dieses Plugin stellt zunächst gar keine Verbindung mit irgend einem vorhandenen Apple Home Zubehör her. Man kann in der Konfiguration beliebig viele „Buttons“ (wir werden gleich sehen, was das ist) anlegen. Dazu denkt man sich einfach einen Namen aus und trägt ihn im Config-Bereich des Plugins ein. Bei mir sieht das aktuell so aus:

Fünf virtuelle, selbst ausgedachte „Buttons“.

Es macht Sinn, diese Strings, also die Namen der Buttons, so zu wählen, dass man sie später in der Home App leicht wieder findet und einem Raum zuordnen kann. Hier zum Beispiel sind es alles Buttons für Home Zubehör, was sich im Raum „Studio“ befindet. Aber man muss die Namen nicht mit dem Raumnamen beginnen lassen, der Raumname muss auch gar nicht darin vorkommen. Ich empfehle es aber. Erfahrungsgemäß taucht so ein virtueller Button dann auch gleich in dem Raum in der Home App auf, mit dessen Name er beginnt.

Meine virtuellen Buttons heißen am Ende übrigens „toggle“, weil ich mit ein und dem selben Button das Licht sowohl ein-, als auch wieder ausschalten können möchte. Ich möchte nicht einen Button nur zum Einschalten und einen zweiten Button nur zum Ausschalten haben. Wie das mit dem Wechselschalten dann geht, sehen wir etwas weiter unten.

Man beachte auch die Port Nummer 3001 – die war uns oben schonmal untergekommen und zwar bei der URL in der Action des KM Macros. Denn dieses Plugin lauscht auf dem hier eingetragenen Port.

Sobald man so einen neuen Eintrag zur Liste der virtuellen Buttons hinzugefügt und die Änderungen gespeichert hat („Save Changes“ Button links), startet der Bridge Service von Hoobs neu …

Hoobs‘ Bridge Service startet neu

Virtuelle Buttons in der Home App

… und nach wenigen weiteren Sekunden sieht man in der Home App einen neuen Eintrag – den virtuellen Button – für jeden in Hoobs ausgedachten Button Namen:

Die in Hoobs eingerichteten, virtuellen Buttons erscheinen in der Home App.

Dabei fällt der erste Teil des Button Namens (bei uns also „Studio „) weg und nur der Rest (also z.B. „Hauptlicht toggle“) wird angezeigt. Diese Buttons tauchen bei mir im Raum „Studio“ automatisch auf. Aber man kann in den Eigenschaften dieses Buttons in der Home App auch den Raum manuell umstellen.

Das „Button Platform“ Plugin bietet nun pro erzeugtem Button drei „Schaltmöglichkeiten“ an: single press/click, double press/click und long press/click. Uns interessiert hier nur der „single press“. Die URL, um so einen virtuellen Klick mit einem HTTP GET Request auszuführen lautet dann:

http://<IP Adresse oder mDNS Name des Raspis>:3001/<button-URI>?event=click

(Man beachte: nicht https!)

Da es etwas knifflig sein kann, vom selbst vergebenen Button-Namen auf den Teil der URL nach der Port-Angabe (oben als „button-URI“ bezeichnet) zu schließen, kann man einen Blick in das Hoobs Logfile werfen. Hier werden die konkreten URIs nach einem Restart des Bridge Service angegeben:

Im Hoobs Log findet man die tatsächlichen URL Komponenten für die eingerichteten Buttons.

Um also einen single click Event für unseren „Studio Hauptlicht toggle“ Button auszuführen, kann ich z.B. im Browser (oder eben auch in der KM Action oder in einer Companion Button Konfiguration für einen Stream Deck) diese URL aufrufen:

http://192.168.0.137:3001/button-studio-hauptlicht-toggle?event=click

… da mein Raspi die IP 192.168.0.137 hat.

Virtuelle Buttons mit echten Steckdosen verbinden

Aber halt! Da wird noch nichts passieren! Denn dieser virtuelle Home App Button ist ja noch gar nicht mit einer Steckdose verbunden, die tatsächlich geschaltet werden soll! Jetzt kommt unser kleiner „Toggle Workflow“ zum Einsatz.

In der Home App – wir machen das mal am Mac, es geht aber auch genauso am iPhone oder iPad oder iPod touch – klicken wir einmal auf unseren virtuellen Button „Hauptlicht toggle“ und sehen im Dialog die drei oben erwähnten Arten der Aktivierung:

Der Settings Dialog des virtuellen Buttons. Ich habe zu Testzwecken für diesen Blog Post mal einen Button „Hauptlicht toggle 2“ angelegt.

Wir klicken also auf „Add“ beim „Single Press“ und landen jetzt in einem Dialog, in dem wir auswählen können, mit welchem Home Accessory wir jetzt etwas machen wollen, wenn der virtuelle Button geklickt, also die URL aufgerufen wird:

Wir wählen die „Convert To Shortcut“ Variante.

Hier könnten wir zwar direkt unser Licht „Hauptlicht“ auswählen, aber dann haben wir nur die Möglichkeit, auszuwählen, ob wir es ein- oder ob wir es ausschalten wollen. Wenn wir aber am Ende mit einem einzigen Button auf einem Stream Deck oder einem einzigen Button auf einem Joy-Con das Licht sowohl ein-, als auch ausschalten können wollen, müssen wir hier jetzt die Option „Convert To Shortcut“ ganz am Ende des Dialogs wählen!

Ein Toggle-Shortcut direkt in der Home App

Daraufhin erscheint eine Mini-Version des von der „großen“ Shortcuts App bekannten GUIs und wir haben die Möglichkeit einen (einfachen) Shortcut hier selbst zu designen. Eine erste Action ist schon für uns eingetragen, nämlich die, mit der man auf Home Scenes und Accessories zugreifen kann:

Ein noch fast leerer Shortcut Workflow in der Home App

Wenn ihr rechts auf „Apps“ und dann unten auf „Home“ klickt, …

Erst rechts auf „Apps“, dann auf „Home“ klicken.

… solltet ihr in der Lage sein, euch erstmal dieses Shortcut-Gerüst zusammenzubasteln:

Die Actions links mit „Set Scenes and Accessories“ entstehen durch drag-und-drop der rechten „Control CatHQ“ Action – bei euch heißt die natürlich anders, da euer „Home“ nicht „CatHQ“ heißt. Und die Action „Get Accessory State“ entsteht durch drag-und-drop von „Get the state of <euer Hausname>“.

Jetzt müssen wir die Platzhalter füllen. Die Idee ist einfach: wir fragen erstmal den Power-Status der Steckdose ab. Ist sie an, dann schalten wir sie aus. War sie aber aus, dann schalten wir sie jetzt ein.

Zunächst also erstmal auf das schwach orangene „Accessory State“ in der ersten Action tippen und im öffnenden Dialog die Steckdose wählen (Häkchen rechts oben muss an sein), die wir schalten wollen (hier: „Hauptlicht“) und dann auf „Done“ tippen:

Wir wählen die Steckdose aus, deren Strom-Status wir wissen wollen.

Im Ergebnis sehen wir, dass standardmäßig jetzt von dieser Steckdose der „Power State“ abgefragt wird – also, ob sie ein- oder ausgeschaltet ist:

Die Abfrage des Strom-Status der Steckdose ist fertig.

Jetzt müssen wir die „If“-Bedingung festlegen und tippen dafür auf das schwach orangene „Input“ dort.

Praktisch in Shortcuts sind immer wieder die „magischen Variablen“.

Im erscheinenden Dialog wählen wir „Select Magic Variable“ aus und dann „Power State“:

Die magische Variable „Power State“ wird übernommen.

Damit ist unsere If-Bedingung fertig und besagt „If Power State“. Das ist so zu verstehen: „Wenn der Strom an ist“.

Der Strom-Status der Steckdose liegt jetzt im Shortcut vor.

Daher müssen wir jetzt in der ersten eingerückten Action dafür sorgen, dass die Steckdose ausgeschaltet wird (sie ist ja an und wir wollen togglen, also umschalten). Wir tippen also auf das „Scenes and Accessories“ der ersten eingerückten Action (also den „true“ Fall der If-Bedingung), wählen im aufgehenden Popup Fensterchen unsere Steckdose „Hauptlicht“ und klicken auf „Next“ rechts oben:

Wir wählen die zu schaltende Steckdose aus.

Jetzt müssen wir sagen, was mit dem Hauptlicht (also der Steckdose) gemacht werden soll. Wir wollen sie ja hier ausschalten, also achten wir im folgenden Dialog darauf, dass das auch so eingestellt ist („Turn off“) und klicken auf „Done“:

Falls die Steckdose an ist, soll sie ausgeschaltet werden.

Analog gehen wir auf die zweite, eingerückte Action – den „else“-Fall –, in der wir die Steckdose nun ja einschalten müssen. Sieht dann so aus („Turn On“):

Im „else“-Fall (die Steckdose war aus) schalten wir das Licht an.

Der Workflow ist nun fertig, wir müssen nur noch einmal rechts oben auf „Next“ klicken:

So sieht der fertige Shortcut in der Home App aus. Leider sieht man den beiden „Set Hauptlicht“ Actions ihren Unterschied nicht direkt an.

Und im nächsten Dialog können wir unseren Shortcut einmal testen, indem wir unten auf „Test This Action“ klicken:

Am Ende steht der Test innerhalb der Home App.

Wenn die Steckdose an war, sollte sie beim ersten Test aus gehen und beim erneuten Test wieder an. Klappt’s? Dann einmal noch rechts oben auf „Done“ klicken und den nun wieder sichtbaren Dialog des virtuellen Schalters „Hauptlicht toggle“ mit dem x rechts oben schließen.

FERTIG! Puh! 😊

Jetzt könnte schon alles funktionieren, denn wir haben ja den KM Macro oben schon eingerichtet – okay … wir wussten da noch nicht genau, wie wir unsere virtuellen Buttons nennen würden und wie die exakte URL lauten wird. Aber das lässt sich ja jetzt noch schnell anpassen. Und dann kann getestet werden.

Schnelltest im Browser

Apropos testen: da wir hier mit einem ganz einfachen GET Request arbeiten (POST Requeste gehen übrigens mit dem „Button Platform“ Plugin auch), können wir die URL zum togglen des Steckdosen-Status ausnahmsweise auch in Safari oder einem anderen Web Browser aufrufen. Als Ergebnis wird dann im Browser lediglich ein lapidares „OK“ angezeigt:

Auch über den Browser kann man so eine URL mal eben testen.

Übrigens könnte man diesen Shortcut, den wir hier innerhalb der Home App angelegt haben, auch in der „richtigen“ Shortcuts App anlegen und dann in der Home App lediglich aufrufen. Falls man den Shortcut also auch noch außerhalb der Home App braucht, könnte man das so machen. Ich wollte hier aber ganz bewusst mal darauf eingehen, dass man auch innerhalb der Home App Shortcut Workflows anlegen kann. Das ist nicht so weit verbreitet bzw. bekannt.

Bonus: Companion Konfiguration

Für die Elgato Stream Decks kann ich die freie Software Companion – ich nutze i.d.R. immer die neueste 2.2.x beta – nur wärmstens empfehlen. Mit einem Stream Deck Button eine Apple Home Steckdose zu togglen ist dann ja nichts großartig anderes, als sie mit einem KM Macro zu steuern. In Companion muss man sich eine neue „connection“ hinzufügen und zwar die „Generic HTTP Requests“, damit wir den GET Request von Hoobs‘ Button Platform ausführen können:

In Companion die „Generic HTTP Requests“ connection hinzufügen.

Die konfiguriert man dann so, dass man ihr einen Namen gibt (sinnvollerweise also z.B. „hoobs“) und die IP Adresse nebst Port des Button Platform Plugins hinterlegt:

Die neue connection muss konfiguriert werden. [Grafik klicken zum Vergrößern]

Dann kann man sich einen Button – passenderweise einen „Latch/Toggle“ – so konfigurieren, dass beim Drücken eben die entsprechende URL ausgeführt wird. Dazu nutzt man die action „GET“ der gerade hinzugefügten HTTP connection. Tipp: nach „hoobs“ suchen (also dem Namen der HTTP connection):

Um den GET Request zu finden am besten nach dem Namen der connection suchen.

Die Variante des Toggle Buttons ist optional, ich nutze sie aber hier gern, weil dann dem Button auf dem Stream Deck schon anzusehen ist, ob die Steckdose gerade an oder aus ist. Zusätzlich habe ich dann noch im Bereich „Feedback“ die Hintergrundfarbe und den Text des Buttons angepasst. Alles in allem sieht es dann so wie im folgenden Screenshot aus; die URI ist sowohl bei der Latch-, als auch bei der Unlatch-Action die selbe und besteht nur aus dem Teil nach der Port-Angabe in der vollen URL. Denn den vorderen Teil haben wir ja schon in der „hoobs“ connection konfiguriert:

Die fertige Konfiguration eines Stream Deck Buttons in Companion. [Grafik klicken zum Vergrößern]

Damit sind wir fertig.

Ich hoffe, dem einen oder der anderen hilft und gefällt dieser Beitrag, der oben einige Amazon-Affiliate-Links enthält, über die ich ein paar Cent verdiene, wenn ihr darüber einkauft. Herzlichen Dank!

Schreibe eine Antwort

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.