Smart Home

Philips-Hue-Geräte im Desktop-Fenster auflisten

Ein kleines Python-Programm zeigt Geräte, Hersteller und Status auf dem Windows- und Linux-Desktop

Vor einiger Zeit hatten wir mal ein kleines Skript gebastelt, mit dem sich die Hue-Geräte im Terminal anzeigen lassen - erfüllt immer noch seinen Zweck. Hier kommt nun eine etwas aufwändigere Spielerei auf Python-Basis und mit Fenstern. Das Schöne: Das Skript läuft natürlich auf Windows- und Linux-Systemen. Ihr könnt das Skript aber auch als ausführbare Datei nutzen, also unter Windows als EXE. Dafür müsst Ihr aber noch was tun, ich war zu faul ...

Hue-Geräte auflisten

Update: Der Lister wird als Bastelprojekt weitergeführt - und kann dann auch steuern (sofern Hue API 1).

Die Nutzung des Tools ist ganz trivial: Beim ersten Aufruf müsst Ihr die IP der Hue-Bridge und Euren API-Schlüssel angeben und schon zeigt ein Fenster all Eure Hue-Geräte. Wie Ihr an den API-Schlüssel (in der Hue-Welt "Nutzername") kommt, zeigen wir hier. Die eingegebenen Daten werden dann in der Datei config.ini gespeichert und von dort beim nächsten Aufruf gelesen.

Wenn Ihr das Ding regelmäßig nutzen wollt, bietet es sich an, das Skript zu kompilieren, also zu einer ausführbaren Datei umzuwandeln. Und das ist hier erfreulich einfach! Der Grund, warum Ihr es nicht gleich als eine solche Binary bekommt: Wenn ich es so verteilen würde, müsste ich allerhand lizenzrechtlichen Kram dokumentieren und das lohnt sich für so einen ollen Blog-Artikel nicht. Ansonsten gilt natürlich: Alle eingesetzten Tools sind Open Source, das Python-Skript selbst ist gar nicht lizenziert, damit könnt Ihr eh machen was Ihr wollt.

Ihr könnt das Skript relativ simpel anpassen und noch weitere Informationen auslesen, das sollte mit ein wenig Copy&Paste selbst mit nur marginalen Python-/Code-Kenntnissen machbar sein. Oder mit Hilfe von ChatGPT, dessen Kollegen auch an meinem Original mitgearbeitet haben ;)

Ein Wort noch zur Funktionstüchtigkeit: Getestet wurde das Skript mit einer Bridge der 1. Generation und mit einem deutlich neuerem Modell. Beide Modelle haben unterschiedlich formatierte Daten zurückgegeben (genauer: Der JSON-Output kam einmal als list- und einmal als dict-Objekt). Das Skript kann beide Varianten auswerten, aber ich kann nicht garantieren, dass nicht weitere Varianten existieren.

el tutos hue lister.
Die drei Schritte des Skripts

Skript installieren

Das Skript benötigt natürlichPython selbst. Zudem werden die Bibliotheken Requests für HTTP-Anfragen und PyMsgBox für die Fenster gebraucht. Beide werden über den Python-eigenen Paketmanager pip installiert:

pip install requests pymsgbox

Die beiden Bibliotheken werden im Skript oben über Import-Befehle aufgerufen. Nun könnt Ihr das Skript ausführen. Vermutlich ... PyMsgBox benötigt das GUI-Framework tkinter, das eigentlich in Python enthalten ist. Aber es gibt Linux-Distributionen, die aus Platzgründen darauf verzichten, etwa Ubuntu. Wenn es also entsprechende Fehlermeldungen bezüglich tkinter/tk gibt, einfach nachinstallieren, zum Beispiel mit

sudo apt install python3-tk

Das sollte es dann aber auch gewesen sein.

Skript kompilieren

Kompilieren ist - insbesondere unter Windows - immer wieder die Hölle. Anleitungen funktionieren nicht, irgendwelcher Krempel fehlt. Jedes Mal. Selbst bei den simpelsten Dingen. In diesem Fall war zumindest ich angenehm überrascht, ein Befehl, fertig, alles funktioniert. Falls es bei Euch doch Fehler hagelt, möchte ich mich schon mal entschuldigen ...

Die hier genutzen Versionen auf dem Entwicklungssystem (Windows 11):

  • Python 3.12.0
  • Pip 32.2.1
  • Requests 2.31.0
  • PyMsgBox 1.0.9
  • Pyinstaller 6.2.0

Es müssen aber nicht genau diese Versionen sein, die nur als Anhaltspunkt. Ihr seht schon, neu hinzugekommen ist Pyinstaller, ein wunderbares Tool, das Python-Skripte in ausführebare, transportable Versionen überführt. Das können entweder Ordner mit allen benötigten Abhängigkeiten sein oder einzelne, ausführbare Dateien. So eine EXE ist dann aber zum Beispiel auch trotz des Miniskripts rund 11 Megabyte groß - schließlich sind die Bibliotheken, Python und ganz viel Zeug von Pyinstaller inbegriffen. (Und für all dieses Zeugs müssten Lizenzen, Copyright-Hinweise und gegebenenfalls Quelltexte mitgeliefert werden, wenn man sie verteilt.)

Also installiert pyinstaller:

pip install pyinstaller

Und kompiliert dann in ein Paket mit vielen Einzeldateien per

pyinstaller mein-skript.py 

oder eine einzelne Datei per

pyinstaller -F mein-skript.py

Und das war es auch schon, fortan bekommt Ihr Eure Hue-Geräte per Doppelklick geliefert. Hier mal unter Ubuntu:

hue-geräte auf linux-desktop.
Der Hue-Lister unter Ubuntu/Gnome

Das Skript

Das grundsätzliche Vorgehen steht ja bereits im ersten Artikel zum CLI-Tool, daher werde ich das Skript hier nicht bis ins letzte Detail aufdröseln. Sollte ich auch nicht, dafür ist meine Python-Macht zu gering. Dieses Skript basiert auf meinem Shell-Skript und wurde mit freundlicher KI-Unterstützung im Code-Editor Cursor gestrickt.

import requests
import re
import sys
import pymsgbox
import os

## config.ini - create or use
file_name = "config.ini"

if not os.path.isfile(file_name):
    #print(f"The file {file_name} is in the working directory.")
    ip = pymsgbox.prompt('Hue Bridge IP', default='192.168.178.100')
    key = pymsgbox.prompt('Hue API key', default='AB-1234567890abcdefghi')
    with open(file_name, "w") as file:
        file.write(f"var1: {ip}\nvar2: {key}")    
else:
    with open(file_name, "r") as file:
    content = file.readlines()    
    ip = content[0].split(":")[1].strip()
    key = content[1].split(":")[1].strip()

### get light info
url = f"http://{ip}/api/{key}/lights"
response = requests.get(url)    

def process_light_info(light_number, light_details):
    light_name = light_details.get('name', 'Unknown')
    light_type = light_details.get('type', 'Unknown')
    manufacturer_name = light_details.get('manufacturername', 'Unknown')
    product_name = light_details.get('productname', 'Unknown')
    light_status = light_details.get('state', {}).get('on', 'Unknown')  # Added status

    info_str = f"{light_number}. {light_name}\n\tType: {light_type}\n\tManufacturer: {manufacturer_name}, \n\tProduct: {product_name}\n\tStatus: {'On' if light_status else 'Off'}"  # Updated info_str to include status
    lights_info.append(info_str)    

lights_data = response.json()    
lights_info = []

if isinstance(lights_data, dict):
    for light_number, light_details in lights_data.items():
        process_light_info(light_number, light_details)
elif isinstance(lights_data, list):
    for i, light_details in enumerate(lights_data):
        process_light_info(i, light_details)

### print, for debugging
# print("\n".join(lights_info))
info = "\n".join(lights_info)

pymsgbox.alert(info, 'El Tutos Hue Lister')
26% sparen
×
Produktpreise und -verfügbarkeit sind zum angegebenen Datum / Uhrzeit korrekt und können sich ändern. Alle Preis- und Verfügbarkeitsinformationen auf https://www.amazon.de/ zum Zeitpunkt des Kaufs gelten für den Kauf dieses Produkts.

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help und VoltAmpereWatt.de. Neu: Mastodon

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"