Stream Deck – Do not Disturb Button für MacOS

      0
Stream Deck - Do not Disturb

Manchmal ist es unbegreiflich, wieso ein Betriebssystem eine bestimmte Funktion nicht auf einfache Weise zur Verfügung stellt. In diesem Fall geht es um das Setzen des Fokusmodus unter MacOS. Mit ein bisschen Hirnschmalz, JavaScript und einem AppleScript konnte ich dann aber doch noch einen Do not Disturb Button für mein Elgato StreamDeck implementieren. Hier findest du die Anleitung.

Kurz vorweg: Wir könnten uns diesen ganzen Artikel sparen, wenn wir einfach nur in den Tastatur-Kurzbefehlen einen Befehl für den Fokusmodus setzen würden. Dieser könnte dann mit dem altbekannten Streamdeck „Hotkey“ Plugin getriggert werden. Allerdings kennt diese Buttonart nie den aktuellen Stand. Wenn du den Fokusmodus also ohne den Button wechselst, würde dieser das nicht mitbekommen. Das Problem können wir mit einem eigenen Stream Deck Plugin aber lösen.

Vorbereitungen

Wir brauchen insgesamt drei kleine Helfer, was in Anbetracht der Funktion, die wir erreichen wollen, ein wenig viel wirkt. Aber irgendwie ist es ja auch spannend mit Biegen und Brechen eine Lösung für unser Problem zu finden.

Aktuellen DND Status ermitteln

In den weiten des Internets habe ich ein AppleScript von drewkerr gefunden, welches den aktuellen Fokusmodus auslesen kann. Das kannst du irgendwo auf deinem Mac ablegen. Ich habe es z.B. unter ~/bin/get-focus-mode.scpt.

Dieses kann dann via Kommandozeile aufgerufen werden und gibt entweder den aktuellen Fokusmodus (bspw. „Do Not Disturb“) oder „No focus“ aus:

osascript -l JavaScript ~/bin/get-focus-mode.scpt

Toggle-Kurzbefehle konfigurieren

Das Stream Deck Plugin wird via JavaScript angesprochen. Da man damit nicht ohne Weiteres Shortcuts ausführen kann, müssen wir uns anders helfen. Unter MacOS gibt es die „Kurzbefehle.app“. Die öffnen wir über die Spotlight-Suche und klicken auf das + um einen neuen Befehl anzulegen. In dem Suchfeld auf der rechten Seite musst du nach „Fokus“ suchen. Mit einem Doppelklick auf „Fokus festlegen“ wird der Eintrag auf die linke Seite verschoben. Ganz oben kannst du dann noch den Namen „DND Off“ vergeben.

Screenshot der MacOS Kurzbefehle.app in der Bearbeitungsmaske eines Kurzbefehls

Das gleiche machst du dann nochmal, nennst den Befehl „DND On“ und wählst statt in dem hinzugefügten Eintrag statt „Aus festlegen“, „An festlegen“. In der Übersicht solltest du dann zwei Kurzbefehle haben, die ebenfalls über die Kommandozeile angesprochen werden können.

$ shortcuts run "DND On"
$ shortcuts run "DND Off"

NodeJS Helfer Skript

Nun haben wir alle Tools zusammen um den Fokusmodus auszulesen und zu verändern. Leider kann natives JavaScript aber keine Kommandozeilen Befehle ausführen. Deswegen müssen wir uns noch mit einem nodeServer, der über eine URL angesteuert werden kann, behelfen.

Du benötigst dafür nodeJS und yarn auf deinem Mac. Ich lasse solche Skripte außerdem gerne mit nodemon oder pm2 laufen.

Erstelle irgendwo auf deinem Mac einen Ordner, öffne ihn im Terminal und lege mit den folgenden Befehlen die Projektstruktur an:

$ yarn init
$ yarn add express
$ touch app.js

Öffne nun mit einem Editor deiner Wahl die app.js und füge den folgenden Code ein.

Starte dann mit nodemon app.js den Server und rufe eine der beiden Routen auf. Die erste gibt dir den aktuellen Fokusmodus aus, die zweite Wechselt zwischen Do not Disturb und keinem Fokus. Wenn bis hier hin alles funktioniert, sind alle Vorbereitungen getroffen und wir können uns endlich um das Stream Deck Plugin kümmern.

http://localhost:5511/get-dnd-state
http://localhost:5511/toggle-dnd-state

Eigenes Stream Deck Plugin erstellen

Unter MacOS liegen die Plugins unter /Library/Application Support/com.elgato.StreamDeck/Plugins. Dort kannst du einen neuen Ordner anlegen, beispielsweise „de.nickhatboecker.dnd.sdPlugin“. Dahin kopierst du dann die Plugin-Dateien, die du in meinem Repository findest.

Starte jetzt die Stream Deck App neu und ziehe das Plugin auf eine beliebige Stelle. Dein Do Not Disturb Button ist nun fertig! Sobald du ihn drückst, sollte der Fokusmodus umgeschaltet werden. Auch wenn du manuell den Fokusmodus veränderst, sollte sich der Button nach ein paar Sekunden automatisch aktualisieren.

Wie oft der Button im Hintergrund aktualisiert wird, wird über die Variable „UPDATE_INTERVAL_IN_MS“, die du in der plugin/main.js des Plugins findest, gesteuert.

Dein Plugin testen und debuggen

Falls es Probleme mit dem Plugin geben sollte, hat sich Elgato etwas cooles einfallen lassen, um die Plugins zu debuggen. Dazu muss zunächst der Debugger für das Stream Deck über einen Kommandozeilen Befehl aktiviert werden:

defaults write com.elgato.StreamDeck html_remote_debugging_enabled -bool YES

Anschließend kannst du den Debugger über http://localhost:23654/ öffnen. Es wird dir dann eine Liste aller Plugins angezeigt, in der du einfach das von dir gewünschte Plugin anklicken kannst. Der Rest funktioniert dann wie die normalen Chrome Dev Tools.

Screenshot vom Stream Deck Debugger. Man sieht eine Liste der aktivierten Stream Deck Plugins.

Fazit

Für ein System-Feature so viel Aufriss zu betreiben ist irgendwie schade. Vermutlich ist Elgato ebenso wie wir an die eingeschränkten Möglichkeiten von MacOS gebunden. Gut möglich aber, dass sie einen Do Not Disturb Button in einer zukünftigen Version nachholen werden. Bis dahin kommt man eben von hinten durch die Brust ins Auge :) Lasst mich gerne wissen ob die Anleitung dir geholfen hat und was für coole Sachen du für dein Stream Deck schon programmiert hast.

Schreibe einen Kommentar

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