phu-API: Namen aller Lampen in einem Raum bekommen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Hallo,

wie bekommt man ein Array mit den Namen von allen Lampen in einem Raum bei der phue-API.

ich nutze ein Lichtsystem von Phillips hue und möchte eine Sprachsteuerung dafür in Python schreiben.

ich habe folgende 2 Klassen bereits geschrieben.
def lamp_on(lamps):
for item in lamps:
b.set_light(item, 'on', True)

"lamps" ist eine Liste mit allen Namen der Lampen, die Sie ausschalten möchten. Jetzt möchte ich eine Funktion wie die folgende:


def room_off(room):
for light in room:
b.set_light(light, 'on', False)

"room" ist der Name als Zeichenfolge des Raums, in dem alle Lichter ausgeschaltet werden sollen.

Vielen Dank für eure Hilfe!

Liebe Grüße,

Jakob
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Ich habe es gefunden.
Falls es jemand wissen möchte:
bei phue gibt es sog. groups, die als json zurückgegeben werden. Da sind die Räume enthalten
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

`b´ ist nicht nur ein schlechter Name, sondern kommt in beiden Funktionen auch noch aus dem Nichts; alles was eine Funktion (außer Konstanten) braucht, sollte sie über ihre Argumente bekommen. Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal 3 und mal 4.
Warum heißt das Licht mal lamp, mal item und mal light? Entscheide Dich für einen Namen.
Die Bibliothek sollte Dir eigentlich das Arbeiten mit json abnehmen:

Code: Alles auswählen

def room_off(bridge, room):
    for light in bridge.get_group(room, 'lights'):
        bridge.set_light(light, 'on', False)
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Sirius3 hat geschrieben: Montag 13. Juli 2020, 06:28 `b´ ist nicht nur ein schlechter Name, sondern kommt in beiden Funktionen auch noch aus dem Nichts; alles was eine Funktion (außer Konstanten) braucht, sollte sie über ihre Argumente bekommen. Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal 3 und mal 4.
Warum heißt das Licht mal lamp, mal item und mal light? Entscheide Dich für einen Namen.
Die Bibliothek sollte Dir eigentlich das Arbeiten mit json abnehmen:

Code: Alles auswählen

def room_off(bridge, room):
    for light in bridge.get_group(room, 'lights'):
        bridge.set_light(light, 'on', False)
Hallo,
Danke für deine Hilfe!
Mit den unterschiedlichen Namen hast du recht, das muss ich unbedingt ändern. "b" ist am Anfang festgelegt worden: b = Bridge('192.168.178.8') (So wurde es auch im GIthub-Projekt zur Bubliothek beschrieben)
Mit den Einrückungen habe ich nur im Forum probleme, bei copy-paste wird das irgendwie immer falsch übernommen. Bei meinem Programm passt das soweit alles, aber danke für den Tipp.
Kann ich in deiner Funktion room als String übergeben?
Liebe Grüße,
Jakob
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich denke, room muß ein String sein, kann es aber selbst nicht testen.
Einrückungen werden im Forum korrekt angezeigt, wenn man die Code-Tags benutzt </>.
Und dass Beispiele in irgendwelchen Projekten nicht so toll sind, heißt ja nicht, dass man das bei sich selbst auch so machen muß.
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Mit der Funktion von @Sirius3 bekomme ich folgenden Fehler:

WARNING:phue:ERROR: resource, /lights/False/state, not available for light 2
WARNING:phue:ERROR: resource, /lights/False/state, not available for light 1
Antworten