Philips Hue busybox Shell Script

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
dfroe
Beiträge: 5
Registriert: 16.12.2016, 23:06
System: CCU
Danksagung erhalten: 1 Mal

Philips Hue busybox Shell Script

Beitrag von dfroe » 16.12.2016, 23:54

Hallo,
als Ergänzung zu den bereits im Internet und hier im Forum veröffentlichten Scripten zur Ansteuerung der Philips Hue Bridge möchte ich hier an dieser Stelle auch meine Eigenentwicklung posten; vielleicht mag sie noch jemand anderem nützlich sein.

Beschreibung:
Die meisten bereits existierenden Scripte sind in TCL geschrieben und rufen daraus meist curl auf, um die entsprechende Anfrage per HTTP and die API der Hue Bridge zu senden.
Diese funktionieren soweit ganz gut. Das Laden der TCL und curl Binaries benötigt auf der nicht gerade mit Rechenleistung überschütteten CCU2 allerdings eine gewisse Zeit, so dass eine Anfrage ca. 650 ms benötigt. Da ich bei mir u.a. über einen Wandtaster die Lichtfarbe meiner Hue verändere, wollte ich dies noch etwas optimieren, um die an dieser Stelle auftretende Verzögerung so gering wie möglich zu halten.
Dazu habe ich ein Script gebastelt, welches komplett in der busybox Shell läuft, ganz ohne TCL. Der HTTP Aufruf erfolgt zudem durch Ausführen des leichtgewichtigen busybox telnet, so dass komplett auf 3rd Party Binaries wie z.B. curl verzichtet werden kann.
Dadurch benötigt eine Anfrage mit diesem Script nur noch rund 100 ms.
Das Script enthält neben der Implementierung mittels telnet zusätzlich auch kompatible Alternativen mittels netcat oder dem klassischen curl.

Installation:
Der Inhalt des angehängten tar Archivs ist nach /usr/local/addons/hue zu entpacken.
Anschließend sind in der Konfigurationsdatei config.sh die Variablen HUE_BRIDGE und HUE_USER entsprechend anzupassen.
Das Script hue.sh sollte als ausführbar gekennzeichnet sein (chmod +x).

Verwendung:
Mit dem Script hue.sh können generische Anfragen an die Hue API geschickt werden. Dazu ist die jeweilige API URL sowie eine Auflistung von key/value Paaren mit zu übergeben. Das Script erstellt daraus die JSON Daten sowie den HTTP Request. Einen Aufruf aus HomeMatic Scripten heraus realisiert man am besten mittel CUxD cmd_exec.

Code: Alles auswählen

Usage: /usr/local/addons/hue/hue.sh <API URL> [<key1> <val1> [<key2> <val2>...]]
  Common API URLs:
    lights/<light>/state
      on:  true/false (State)
      bri: 0-254 (Brightness)
      hue: 0-65535 (Hue)
      sat: 0-254 (Saturation)
      transitiontime: 0+ (1/10 sec)
    groups/<group>/action
      on:  true/false (State)
      bri: 0-254 (Brightness)
      hue: 0-65535 (Hue)
      sat: 0-254 (Saturation)
Beispiele:

Code: Alles auswählen

# Ausschalten der Hue Lampe 1:
hue.sh lights/1/state on false

# Setzen von Helligkeit, Farbton und Sättigung der Hue Lampe 1:
hue.sh lights/1/state on true bri 254 hue 3000 sat 254 transitiontime 0

# Ausschalten der Gruppe 1:
hue.sh groups/1/action on false
HM-Script:
Ein HomeMatic Script, wleches eine Gruppe von Hue Lampen anhand von HomeMatic Systemvariablen parametrisiert, könnte exemplarisch wie folgt aussehen:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/addons/hue/hue.sh groups/1/action on " # dom.GetObject("Hue.1.Zustand").Value().ToString() # " bri " # dom.GetObject("Hue.1.Helligkeit").Value().ToString(0) # " hue " # dom.GetObject("Hue.1.Farbton").Value().ToString(0) # " sat " # dom.GetObject("Hue.1.Saettigung").Value().ToString(0) # " transitiontime 5");
Die Scripte (und deren Beschreibung) richtet sich vorrangig an fortgeschrittene Nutzer, aber vielleicht kann hiervon ja noch der ein oder andere Bastler profitieren. :)
Dateianhänge
hue-20161216.tar
Philips Hue Shell Script (Stand: 16.12.2016)
(8 KiB) 131-mal heruntergeladen

jakobmitk
Beiträge: 5
Registriert: 06.01.2017, 07:59

Re: Philips Hue busybox Shell Script

Beitrag von jakobmitk » 06.01.2017, 08:22

Hallo dfroe,

danke für die Veröffentlichung von deinem Skript. Ich habe vor ein paar Tagen meine Hue-Lampen erstmalig über HM-Schalter steuern können. Soweit funktioniert das ganze auch sehr stabil und ich war froh, dass ich es hinbekommen habe :)

Nun bin ich jedoch mit der Reaktionszeit nicht ganz so zufrieden. Teilweise dauert es doch recht lange zum Schalten der Lampen - zumindest im Vergleich zu den vorher installierten Lichtschaltern, welche mit Verbindung der Phasen das Licht fast ohne Verzögerung einschaltet. Ich plane den zukünftigen Einsatz von HM-Bewegungssensoren für ein Nachtlicht, dort möchte ich sofort Licht haben, damit man auch gleich etwas sieht und nicht erst Nachts im Dunkeln mit den Armen wedeln muss. Mit den HUE-Bewegungssensoren klappt dies ja angeblich hervorragend und blitzschnell. Jetzt bin ich froh über deinen Beitrag gewesen, wenn ich hier doch noch ein wenig mehr Geschwindigkeit und die Schaltreaktion bekomme.

Leider klappt die Schaltung jedoch nicht. Kannst du vielleicht noch einmal ein paar Beispiel für Lampe an / aus als HM-Skript zur Verfügung stellen, damit ich es testen kann? Anscheinend habe ich die Logik noch nicht ganz verstanden, nachdem ich gerade mal die hue.tcl ein wenig verstanden habe... Die Dateien sind auf der Hue und die config habe ich entsprechend meiner Daten angepasst.

Hier mein Skript, mit dem ich über hue.cl arbeite, vielleicht kannst du mir mit diesen Parametern ein mal ei Beispiel für dein Skript schicken :)

Lampe im Flur an:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("tclsh /usr/local/addons/hue/hue.tcl 10 true 255 150 35000 0");
var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
WriteLine(v);

jakobmitk
Beiträge: 5
Registriert: 06.01.2017, 07:59

Re: Philips Hue busybox Shell Script

Beitrag von jakobmitk » 11.01.2017, 07:17

Hat sich sonst noch niemand mit dem Script beschäftigt und möchte sein Wissen teilen? :) Ich hatte den Eindruck, dass wirklich einige die HUE in die CCU2 eingebunden haben, um Lichter über Schalter od. Bewegungsmelder zu steuern. Ich würde mich sehr freuen, falls jemand versteht, wie man dieses Script umbauen muss, damit es auch bei mir funktioniert :)

dfroe
Beiträge: 5
Registriert: 16.12.2016, 23:06
System: CCU
Danksagung erhalten: 1 Mal

Re: Philips Hue busybox Shell Script

Beitrag von dfroe » 11.01.2017, 08:05

Hallo,
zur Integration von Bewegungsmeldern kann ich leider keine Erfahrungswerte beitragen. Die Latenz, die zwischen der Bewegung und Ausführen des Programms auf der CCU vergeht, lässt sich durch Optimierung der Hue-Ansteuerung natürlich nicht verbessern. Hier bei meinen Scripts geht es darum, die Latenz zwischen Ausführung des Programms auf der CCU und Schalten der Hue-Lampe zu verringern.

Wenn du bereits ein funktionierendes Programm auf der CCU hast, kannst du die hue.tcl eigentlich recht einfach durch die hue.sh ersetzen.
Die entsprechende Zeile im Script müsste dann in etwa so aussehen:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("/usr/local/addons/hue/hue.sh lights/10/state on true bri 254 hue 3000 sat 254 transitiontime 0");
Wenn das nicht funktioniert, würde ich zunächst mal testen, ob du die Hue korrekt steuern kannst, wenn du den o.g. Befehl (d.h. den Inhalt zwischen den hinteren Anführungszeichen) direkt via SSH auf der CCU ausführst, oder ob dabei evtl. eine Fehlermeldung erscheint.

jakobmitk
Beiträge: 5
Registriert: 06.01.2017, 07:59

Re: Philips Hue busybox Shell Script

Beitrag von jakobmitk » 22.01.2017, 20:52

Hallo dfroe,

vielen Dank für die Übersetzung. Das Skript funktioniert wirklich einwandfrei. Ich habe daran sehr viel Spaß, die Lampen reagieren spürbar um einiges schneller, als bei der Lösung über die hue.tcl.

Leider erreicht es noch nicht ganz die Geschwindigkeit der Philips Switches, aber wohl verständlich, da über Umwege auf die Hue Bridge zugegriffen wird. Ich bin damit aber erst einmal zufrieden. Ich wundere mich, warum hier nicht mehr Resonanz folgt, weil im Vergleich zu der bestehenden Lösung von hobbyquaker "homematic-hue" (auf GitHub) finde ich, dass dein Skript die bessere Lösung ist!

Danke für die Mühe.

Vearly
Beiträge: 1
Registriert: 26.01.2017, 13:42

Re: Philips Hue busybox Shell Script

Beitrag von Vearly » 26.01.2017, 15:28

Hallo,

danke für dein Skript, ich bin gerade selber dabei über die CCU2 auf Shell Ebene mit der Hue zu sprechen. Wobei ich bisher auf curl gesetzt habe ... mein eigentliches Ziel ist allerdings RGB Werte in XY Werte umzurechnen um diese an die Hue zu schicken.
Danke für den Hinweis auf die busybox darin hab ich zumindest "dc" gefunden mit dem ich die Berechnungen jetzt auch auf der CCU2 per Shell-Skript machen kann ohne auf ein Homematic-Skript angewiesen zu sein.

In meinem aktuellen Setup nutze ich allerdings noch einen "minimal" Parser für JSON (basierend auf grep + regex) um auf die Antwort der hue ("success", "error") reagieren zu können.
Sobald ich Zugriff auf mein Skript habe kann ich die entsprechenden Zeilen mal raus kopieren. Damit lässt sich auch recht einfach der Zustand der Lampen erfragen.

Viele Grüße
Vearly

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“