Streamst du noch oder erfreust du dich schon an Hardwarebuttons mit Linux?

Vor einer Weile lief mir die „MX Creative Console“ von Logitech über den Weg und ich dachte mir wie geil, ich will auch echte Tasten am Schreibtisch haben! (Wenigstens einmal im Leben ein Gefühl von Kontrolle!) Doch dann fiel mein Blick auf den Preis und das Gefühl von Kontrolle war schneller wieder weg als der UPS-Lieferbote, wenn er was von „5. Stock ohne Aufzug“ hört. Doch die Neugierde ließ mich nicht los, also machte ich mich auf die Suche, das „Stream Deck Rabbit Hole“ zu ergründen. Und wie sich herausstellte, gibt es neben Logitech und Elgato – dem Quasi-Marktführer – auch noch jede Menge weitere Decks. Zeit also, ein solches mit der eigenen Home Automation zu verheiraten!

Was ist überhaupt ein Stream Deck?

Um die wichtigste Frage direkt zu Beginn zu klären: Was ist eigentlich ein Stream Deck? Um bei Live-Streams einen direkten Zugriff auf Lautstärken, Kameras, Input-Kanäle, Sound-Samples, Mute etc. zu haben, kam irgendjemand mal auf die Idee, kleine Pulte mit Buttons und USB-Anschluss zu bauen. Wesentlicher Unterschied zur Tastatur: Die Buttons sind nicht einfach nur Knöpfe, sondern kleine Displays, die kontextabhängig andere Dinge anzeigen können. Je nach Ausführung eines solchen Decks sind das zwischen sechs und 32 Buttons (mehr habe ich noch nicht gesehen) und wahlweise zusätzlich Drehknöpfe, Harwarebuttons ohne Display und/oder Displays ohne Buttons. Bei Elgato auf der Rückseite ggf. auch noch USB-Ports, SD-Karten-Slot und optional ein XLR-Port fürs Großmembran-Mikro. Neben den hochpreisigen Anbietern Elgato (55€ für sechs Buttons, 225€ für 32 Buttons) und Logitech (220€) hat sich mittlerweile ein bunter Markt unterschiedlichster No-Name-Anbieter etabliert, die offenbar alle den gleichen Lieferanten bei Aliexpress gefunden haben und wohlklingende Namen wie Soomfon, TreasLin, streamplify, Mars Gaming, Basicolor, Ulanzi, Redragon oder Ajazz tragen (gefühlt kommt jeden Tag ein weiterer Name dazu). Preislich liegen diese dann meistens zwischen 50 und 60€. „Weihnachten ist ja auch erst 10 Monate her“ dachte ich mir also und entschied mich mutig für ein Stream Deck von „Ajazz“:

Das AKP03e von Ajazz

Und das funktioniert mit Linux?

Zeit also, die zweitwichtigste Frage zu klären: Wird das jemals mit Linux funktionieren? Die erstaunliche Antwort: ziemlich einfach sogar! Die Decks selbst sind relativ „dumm“, die komplette Steuerung ist idR. durch eine Software auf dem Host-Gerät gelöst. Sobald der Laptop oder PC aus ist, ist damit aber auch das Deck komplett ohne Funktion. Die mitgelieferte Software ist bei den ganzen No-Name-Anbietern meistens ziemlicher Quatsch (und nur für Windows zu haben), was ihnen auch die ganzen negativen Rezensionen bei Amazon einbringt.

Für Linux gibt es meiner Recherche nach grob zwei Projekte: OpenDeck (729 Stars) und StreamController (764 Stars) (diese Hilflosigkeit, wenn die Metrik zur Entscheidung zwischen Github-Projekten so gleichauf liegt). Ich habe mich für OpenDeck entschieden und war ob der leichten Installation sehr überrascht. Vom Projekt wird ein deb-File angeboten (nur eine apt-Quelle wäre noch schöner gewesen!) und für die unterschiedlichen Decks gibt es diverse Plugins. Für selbige bringt OpenDeck eine Art App-Store mit:

Darin enthalten sind auch alle Plugins für Elgato-Decks, wobei man hier ein wenig darauf achten muss, dass manche Plugins zusätzliche exe-Dateien erwarten, was sich unter Linux vielleeeeeeicht mit Wine realisieren lässt, aber sicher wäre ich mir da nicht.

Das Ajazz-AKP03-Plugin erwartet dann noch ein paar udev-Rules (dass mit den gleichen Regeln auch noch 10 weitere Geräte unterstützt werden, stützt übrigens die Aliexpress-Theorie!) und los geht’s. Der Anschluss funktioniert tatsächlich quasi out-of-the-box!

Schön, aber was kann das nun?

Damit also zur dritten Frage: Was kann man damit nun machen?? Die Oberfläche zur Einrichtung kommt erstmal etwas spartanisch daher:

Auf der linken Seite sind die einzelnen Buttons sichtbar (die oberen beiden Reihen sind die Displays, die Reihe darunter Buttons ohne Display und die drei Kreise die Drehregler). Auf der rechten Seite gibt’s ein Inventar aus unterschiedlichen Aktionen, die sich per drag & drop auf die Knöpfe links ziehen lassen. Jeder einzelne Button lässt sich dann noch beliebig stylen:

Die grüne Farbe habe ich mir ausgewählt, die Buttons können jede beliebige Grafik anzeigen. Zusätzlich lässt sich über die Grafik auch noch ein Text legen.

Für die Plugins habe ich mich ehrlich gesagt nicht groß interessiert, da ich die meisten Aktionen, die ich umsetzen wollte, direkt als Shell-Commands implementieren wollte. Dafür bringt OpenDeck per default ein paar Standard-Funktionen mit:

„Run Command“ ist dabei das, was es erwarten lässt: Die Möglichkeit, einen Befehl in der Shell auszuführen. Dabei lässt sich zwischen key-up und key-down unterscheiden. „Input Simulation“ simuliert einen beliebigen Tastendruck, daneben gibt es noch ein paar ganz praktische Dinge: „Multi Action“ bietet die Möglichkeit, mehrere Befehle gleichzeitig auszuführen. „Toggle Action“ ist tatsächlich eine clevere Idee: Hier lassen sich beliebige „States“ des Buttons festlegen, die durch Drücken durchgeschaltet werden und sich unterschiedlich stylen lassen. Dadurch können z.B. Dinge wie „Mic an“/“Mic aus“ realisiert werden, indem beide States jeweils unterschiedliche Commands ausführen und jeweils ein unterschiedliches Symbol haben. „Switch Profile“ ermöglicht die Auswahl eines bestimmten Profils. Ein Profil jeweils eine Belegung der Buttons. Mit „Switch Profile“ können damit also unterschiedliche Profile durchgeblättert werden, womit sich praktisch „Seiten“ zum Blättern realisieren lassen. Ich nutze die drei Buttons unten ohne Display daher dafür, jeweils ein anderes Set an Buttons (Beleuchtung/Audio/…) anzuzeigen.

Was mache ich damit?

Nächste Frage also: Wofür nutze ich das ganze jetzt eigentlich? Im wesentlichen zur Steuerung von Audio, Licht und ein bisschen Home Automation:

Schreibtischbeleuchtung

Der erste Button steuert bei mir die Schreibtischbeleuchtung. Dafür führe ich per Shell einen curl-Befehl aus, mit dem ich mein NodeRed zur Home Automation austeuere:

(Die beiden Run Commands sind jeweils die zwei States der „Toggle Action“)

In NodeRed habe ich mir dafür eine kleine „API“ gebaut:

Wiki öffnen

Ein weiterer Button öffnet auf Klick mittels xdg-open unser privates Wiki – weil ich die Seite doch recht häufig öffne und zu faul bin, jedesmal die URL zu tippen. Kann man jetzt drüber streiten, ob das wirklich die Sekunden ausmacht oder auch nicht

Audio an- und aus machen

Da meine Boxen nebst Verstärker im Regal hinter mir stehen, habe ich sie irgendwann mal mit einer Zigbee-Steckdose versehen. Diese kann ich jetzt über einen Button ansteuern, der wiederum eine API in NodeRed anspricht.

Mikrofon stummschalten

Der Klassiker vermutlich: Ein Button aktiviert oder deaktiviert das Mikrofon:

amixer set Capture cap bzw. amixer set Capture nocap

Play/Pause

Auch ein Klassiker: Die aktuelle Wiedergabe starten und stoppen:

playerctl -p playerctld play bzw. playerctl -p playerctld pause

Hier habe ich tatsächlich eine Weile gesucht, wie ich das mittels dbus o.ä. am schlauesten löse – am Ende hat mir playerctl da am meisten zugesagt, da es vorher erstmal prüft, was überhaupt wiedergegeben wird (Browser, Spotify, vlc, …)

Haustür öffnen

Ein bisschen unnötig aber super praktisch: Du bist in einer Telko und die Post klingelt, über den „Tür“-Button lässt sich zumindest schonmal die Haustür öffnen (wie genau, erzähle ich in einem späteren Beitrag).

Lautstärke regeln

No-Brainer: Der große Drehregler regelt natürlich die Lautstärke:

pactl -- set-sink-volume 0 +%d% (die Drehrichtung wird mit %d mitgegeben und ist entweder 1 oder -1)

Da man den Button auch drücken kann, wird damit alles stummgeschaltet: pactl -- set-sink-volume 0 0%

Helligkeit regeln

Auch etwas unnötig, aber praktisch: Mit den kleinen Drehreglern wird wieder via curl und NodeRed-API die Helligkeit von Schreibtischbeleuchtung und Wohnung insgesamt geregelt.

Beleuchtung Wohnung

Ein weiterer Button blättert unterschiedliche Beleuchtungs-Szenen in der Wohnung durch

Exit

Über einen Button lässt sich alles auf einmal ausschalten: Audio, Licht, Laptop in Standby.

Ausblick

Als nächstes werde ich noch eine Seite zur Steuerung der Heizung bauen, um a) die aktuelle Temperatur in unterschiedlichen Räumen anzuzeigen und b) über jeweils zwei Buttons die Solltemperatur zu erhöhen oder zu reduzieren. Zur Anzeige der Temperatur oder anderer Dinge ist praktisch, dass OpenDeck eine Schnittstelle zur Verfügung stellt:

opendeck --process-message '{"event": "setTitle", "context": "n3-xxxxxxxxxxxx.page3.Keypad.1.0", "payload": { "title": "Titel des Buttons"}}'

Über xxxxxx, page3, 1 und 0 lässt sich Gerät, Seite, Zeile und Spalte ansprechen. Mittels Payload können Bild, Titel und Aktion des Buttons geändert werden. Mittels Cron und Zusatzscript lässt sich damit eine regelmäßige Aktualisierung an das Gerät übermitteln.

Fazit

Insgesamt ist das Deck natürlich absolut unnötig, da sich alle Aktionen auch irgendwie anderes realisieren ließen. Das trifft auf Kühlschränke, Autos, Heizungen, Aperol Spritz und Bettdecken aber genauso zu. Daneben macht das Deck super viel Spaß und OpenDeck bietet überraschend viel Flexibilität in der Gestaltung der Buttons. Der Support für Linux ist überraschend gut und zuletzt wird die gesamte Config sogar artig in ~/.config/opendeck/ als json-Files abgelegt, die sich damit sogar vernünftig versionieren lässt. Insgesamt damit also eine echte Kaufempfehlung für Menschen mit Home-Automation-Fetisch! (Ob es nun Elgato oder no-name-Brand ist, spielt dabei vermutlich keine große Rolle)


Schreibe einen Kommentar