Phillips Hue Sync: Mehrere Instanzen

26.03.2022
Bild

Mehrere Bridges mit der Hue Sync App gleichzeitig synchronisieren? Mit einem Trick funktioniert es.

Normalerweise verwende ich Phillips Hue, um eine angenehme Lichtstimmung zu erzeugen und dabei mehr oder weniger die "normale" statische Beleuchtung überflüssig zu machen. Die offene API und die gute Verfügbarkeit von Modulen für div. Hausautomatisierungslösungen machen die Lösung wirklich sehr flexibel. Seit einiger Zeit auch die Entertainment-Bereiche, welche mit der neueren Bridge eingeführt wurden, machen Laune.

Damit ist es möglich, musikgesteuert und/oder anhand des Bildschirminhalts bis zu 10 Leuchten passend leuchten zu lassen. Im Prinzip ist das eine weiterentwickelte Variante des Ambilights. Hierfür muss in der Hue App ein Entertainment-Bereich angelegt werden, die Leuchten hinzugefügt werden. Dann werden diese in dem Zimmer möglichst genau platziert. Dafür schiebt man die jeweiligen Leuchten an die jeweilige Position eines virtuellen Zimmers in der App. Während eine Leuchte ausgewählt wird, leuchtet diese in einer anderen Farbe.

Wenn der Bereich erstellt wurde, kann entweder direkt über die App oder unter Windows oder Mac mittels der Hue Sync Anwendung dann dieser Bereich ausgewählt werden.

Bei dem 1. Start der Anwendung muss die App mit der Bridge gekoppelt werden, das geschieht wie auch bei der App mit dem Betätigen des Knopfes an der Bridge. Hiermit zieht sich die App dann einen Token von der Bridge.

Jetzt hatte ich aber ein Problem: Ich habe 14 Leuchten im Zimmer...technisch kann ich aber in einem Entertainment-Bereich immer nur 10 Leuchten hinzufügen. Gruppen kann ich nicht hinzufügen, also kann ich die Leuchten auch nicht in Gruppen zusammenlegen. Warum die Anzahl der Geräte auf eine eher untypische Zahl für IT-Fachkräfte limitiert ist, ist merkwürdig, man hätte entweder 8 oder 16 erwartet...vermutlich eher ein Soft-Limit.

Da die Airtime mit ZigBee limitiert ist, schalten alle Leuchten im Entertainment-Bereich in einen "Group-Broadcast-Receive" Modus. Hierzu wurden die Leuchten mit einer Gruppen-Adresse durch die Bridge programmiert. Die Bridge selbst sendet 10 Werte in einer Reihenfolge an die Gruppen-Adresse, jedes Gerät pickt sich dann seinen Wert für die Farbwiedergabe. Eine Quittierung erfolgt nicht, bzw. nur in sehr großen Abständen. Eine einzelne Ansteuerung des Leuchten würde viel zu viel Airtime benötigen und jeweils die Rückmeldungen der Leuchten würden das Problem noch verstärken. Die aktuell 10 Leuchten könnten aber ein Limit der maximalen Größe des jeweiligen Paketes sein, je nach Datenformat. Genau habe ich das aber nicht analysiert. Wenn die Hue-Bridge-App die Leuchten synchronisiert, verursacht diese nun sehr wenig Netzwerklast zur Bridge.

Die Idee

Dann kam die Idee: Was passiert, wenn ich eine 2. Hue-Bridge kaufe und einfach die Hue Sync-App 2 Mal starte? Genug freie ZigBee-Kanäle gäbe es noch...

Also: 2. Hue-Bridge gekauft, die 4 Leuchten aus der bestehenden Installation entfernt und an der 2. Bridge angelernt. Dann etwas geflucht, da ich natürlich auch einige Szenen in FHEM überarbeiten musste, ich muss nun 2 Bridges ansteuern, wenn ich alle Leuchten steuern will...kein Problem, macht es aber etwas komplexer.

Dann der spannende Moment: Hue Sync gestartet, 1. Bridge ausgewählt. Versuch, die Anwendung ein 2. Mal zu starten scheitert. Es passiert einfach nichts. Mist. Die Anwendung ist wohl als Einzelinstanz-Anwendung designt, manchmal auch als "Singleton" bezeichnet. 

Jetzt hatte ich mir aber schließlich schon eine 2. Bridge gekauft und die Leuchten aus der bestehenden Konfiguration herausgerissen...da packte mich dann schon etwas der Spieltrieb...ist die Anwendung aus einen besonderen technischen Grund als Einzelinstanz-Anwendung konzipiert, oder will man damit einfach Anwenderfehler reduzieren? Wenn z.B. die Anwendung auf einem anderen Gerät einen Entertainment-Bereich synchronisiert, wird bei dem Versuch, dies von einem anderen Gerät zu tun, sauber angezeigt "Dieser Bereich wird bereits synchronisiert.". Die Daten des Szenen und Leuchten liegen im AppData-Verzeichnis des Benutzers, welcher die Anwendung gestartet hat (wird später noch wichtig). Die Daten liegen nicht in einer Datenbank, sondern in JSON-Format. Also auch kein technischer Grund.

Versuch 1:

Ich legte ein weiteres Benutzerkonto in Windows an. In meinem Fall "hue01" mit einem einfach zu merkenden Kennwort. Der Benutzer muss kein Administrator sein:

Bild

Dann habe ich versucht, die Anwendung mit der Option "Als anderer Benutzer ausführen" zu starten. Hierzu muss die Shift-Taste gehalten werden und dann auf die Hue-Sync-Anwendung ein Rechtsklick ausgeführt werden:

Bild

Leider kein Erfolg. Vermutlich wird die 2. Instanz kurz gestartet, aber dann direkt wieder beendet.

Aber vorher erkennt die Anwendung, das bereits eine Instanz läuft? Es gibt mehrere Möglichkeiten, aber da die Erkennung auch unter einem anderen Benutzerkontext funktioniert, musste die Erkennung mit so genannten "Mutexen" funktionieren.

Beim Start der Anwendung prüft diese, ob ein Mutex systemweit existiert, wenn ja, beendet sich die Anwendung direkt wieder. Wenn nicht, erstellt diese einem Mutex und startet.

Versuch 2:

Leider ist es mit Windows-Bordmitteln schwierig, die aktuell vorhandenen Mutexe zu ermitteln und zu manipulieren. In meinem Fall habe ich das Tool "System Informer" verwendet, welches die Handles, Mutexe, geladene Module auflistet und auch ermöglicht, Mutexe zu löschen. Im Prinzip handelt es sich um einen sehr umfangreichen Ersatz des Windows-Task-Managers.

Nach dem Start der Anwendung als Administrator suchte ich den noch laufenden Prozess der Anwendung und klicke dort auf "Properties":

Bild

Dann auf "Handles":

Bild

Dort die Suche verwenden und "Mutant" eintippen:

Bild

Es werden dann verschiedene Mutexe sichtbar, erkennbar in der ersten Spalte "Mutant".

Hier den Eintrag mit "\Sessions\1\BaseNamedObjects\Phillips Hue Sync" suchen und mit einem Rechtsklick das Kontextmenü öffnen. Dort dann "Close" anklicken:

Bild

Der Eintrag verschwindet, die Anwendung an sich bleibt aber geöffnet, System Informer kann geschlossen werden.

Nun starte ich die Hue-Sync-App mit einem anderen Benutzerkontext. Hintergrund: Ich möchte vermeiden, dass es zu Problemen mit dem Zugriff der Einstellungen im AppData-Verzeichnis gibt. Unterschiedliche Benutzer-Kontexte sind da ganz hilfreich. Auch wenn nicht ganz unproblematisch, wenn z.B. Anwendungen Low-Level auf Betriebssystem-Bereiche zugreifen oder dort Ressourcen sperren...da die Anwendung aber keine Admin-Rechte benötigt, war diese Gefahr eher gering.

Und tatsächlich: Die Anwendung startet! Es waren natürlich keine Einstellungen vorhanden, da im Benutzerkonto die Einstellungen noch nicht existieren. Entweder man wiederholt dort nun die Einrichtung mit der 2. Bridge oder - wenn bereits die 2. Bridge in der vorhandenen App-Konfiguration eingerichtet wurde - kopiert einfach die Dateien im AppData-Ordner in den Ordner des anderen Benutzers.

Aber noch spannender: Funktioniert die Erfassung des Bildschirminhalts und des Audios in beiden Instanzen? Ja, und das ohne merkliche Verzögerung!

Warum die Anwendung es dann nicht einfach zulässt, in mehreren Instanzen gestartet zu werden, finde ich merkwürdig. Ok, es könnte zu Race-Conditions beim Schreiben von den Einstellungen kommen...aber das wäre lösbar...

Im Prinzip lässt sich das jetzt weiter treiben, mit bis zum 20 Leuchten...


 

Feedback, Verbesserungsvorschläge, weitere Ideen?

Einfach das Kontaktformular verwenden oder direkt eine E-Mail an info@kirgus.net.