Perl Modul zur Steuerung von Philips Hue Geräten

Um in meinem Tommatic Projekt die Steuerung von Philips Hue Geräten über die Hue Bridge zu ermöglichen habe ich mich mit der Hue API beschäftigt. Die dabei entstandenen Perl-Klassen können auch ohne Tommatic zur Kommunikation mit der Hue Bridge verwendet werden.

Zum gegenwärtigen Zeitpunkt werden Lampen, Gruppen (Räume, Zonen) und Steckdosen unterstützt. Bei den Lampen und Gruppen wird neben dem Status auch die Helligkeit, Farbtemperatur und Farbe über den xyY oder den HSV-Farbraum - in Abhängigkeit der verwendeten Geräte - unterstützt.

Verwendung

Abhängigkeiten

Perl-Module
  • LWP::Simple libwww-perl
  • LWP::UserAgent libwww-perl
  • JSON::Parse 'parse_json'

Versionen ausgeben

Die Versionen der Perl-Modulen der Klassen kann wie folgt ausgegeben werden:

#!/usr/bin/perl

use TSS::Philips::Hue;

print "Version Hue.pm   : ".$TSS::Philips::Hue::VERSION."\n";
print "Version Light.pm : ".$TSS::Philips::Hue::Light::VERSION."\n";
print "Version Group.pm : ".$TSS::Philips::Hue::Group::VERSION."\n";
print "Version Common.pm: ".$TSS::Philips::Hue::Common::VERSION."\n";

Benutzer in der Philips Hue Bridge anlegen

Um mit einer Hue Bridge kommunizieren zu können muss ein Benutzer vorhanden und dessen Preshared Key bekannt sein.
Ist noch kein Benutzer angelegt oder der Preshared Key nicht bekannt, so kann mit dem folgenden Snippet ein Benutzer angelegt werden.

Vor dem Ausführen des Snippets muss die Taste der Bridge kurz gedrückt werden.

Als <IP-Adresse> wird die IP-Adresse der Philips Hue Bridge und als <Benutzername> ein beliebiger Name eingetragen.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          username => "<Benutzername>",
                                          presharedkey => "" );

print "Presared Key: ".$gobjGateway->{"presharedkey"}."\n"; 

Als Ergebnis wird der Preshared Key des Benutzers ausgegeben. Dieser Preshared Key wird dann bei jeder Kommunikation mit der Bridge angegeben.

Erzeugen einer Instanz der Klasse TSS::Philips::Hue

Um mit einer Hue Bridge zu kommunizieren muss eine Instanz der Klasse TSS::Philips:Hue erzeugt werden.

Als <IP-Adresse> wird die IP-Adresse der Philips Hue Bridge und als <Preshared Key> der zuvor einmal erstellte Preshared Key eingetragen.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          username => "",
                                          presharedkey => "<Preshared Key>" );

Aufbau der Geräte-IDs

Zur Unterscheidung zu welcher Klasse ein Gerät gehört wird der Hue Bridge internen ID ein Präfix vorangestellt:

<Präfix><Hue Bridge internen ID>

Die folgenden Präfixe sind vorhanden:

phl  = Lampen (l=light)
php = Steckdosen (p=Plug)
phg = Gruppen (g=group)

Die Klasse TSS::Philips::Hue

Die TSS::Philips::Hue Klasse bündelt alle Methoden um Lampen, Gruppen und Steckdosen über die Hue Bridge zu steuern.

Attribute

Die Klasse TSS::Philips:Hue besitzt die folgenden Attribute:

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

print "Fehlermeldung :'".$gobjGateway->{"error"}."'\n";
print "IP-Adresse    :'".$gobjGateway->{"host"}."'\n";
print "Benutzername  :'".$gobjGateway->{"username"}."'\n";
print "Preshared Key :'".$gobjGateway->{"presharedkey"}."'\n";

$gobjGateway->{"error"}> enthält eine Fehlermeldung nach dem ein Fehler aufgetreten ist.

$gobjGateway->{"host"}> enthält die IP-Adresse der Hue Bridge.

$gobjGateway->{"username"} wird nur beim Anlegen eines neuen Benutzers in der Hue Bridge angegeben. Für die Kommunikation mit einem vorhandenen Preshared Key muss kein Benutzername angegeben werden.

$gobjGateway->{"presharedkey"} enthält den Preshared Key zur Kommunikation mit der Hue Bridge.

Gesamtstatus aller Geräte ausgeben

Mit der Methode $gobjGateway->listObjects() werden alle Lampen, Gruppen und Steckdosen aus der Hue Bridge ausgelesen.

Die Methode $gobjGateway->listObjects() gibt einen Pointer auf ein Array mit Objekten aller Geräte zurück. Werden diese Objekte im scalaren Kontext verwendet, so werden alle Statusattribute der einzelnen Objekte als String ausgegeben.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gprtarrDevices=$gobjGateway->listObjects();
if (! defined($gprtarrDevices)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

foreach my $tobjDevice ( @{$gprtarrDevices} ) { print $tobjDevice."\n"; }

Beispielausgabe der Geräte-Objekte im scalaren Kontext:

<datapoint deviceid='phl1' name='Wohnzimmer' devicetype='TRADFRI bulb E27 CWS opal 600lm' online='0' status='0' brightness='131' ct='345' xyY='0.4444,0.4065,131' hsv='8418,140,254' />
<datapoint deviceid='phl2' name='Schlafzimmer' devicetype='LCA001' online='0' status='0' brightness='131' ct='500' xyY='0.5266,0.4133,131' hsv='8418,140,254' />
...

Gesamtstatus eines Gerätes ausgeben

Die Methode $gobjGateway->getDeviceInfo("<Geräte-ID>") liest das durch die Geräte-ID angegebene Gerät aus der Hue Bridge aus.

Auch hier wird ein Objekt, welches das Gerät repräsentiert, zurück gegeben.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "$gobjObject\n";

Beispielausgabe des Geräte-Objektes im scalaren Kontext:

<datapoint deviceid='phl1' name='Wohnzimmer' devicetype='TRADFRI bulb E27 CWS opal 600lm' online='0' status='0' brightness='131' ct='345' xyY='0.4444,0.4065,131' hsv='8418,140,254' />

Alle Geräte ein- / ausschalten

Die Methode $gobjGateway->setPowerAll("<0=aus / 1=ein>") schaltet alle Lampen und Steckdosen ein bzw. aus.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gstrResult=$gobjGateway->setPowerAll("<0=aus / 1=ein>");
if (! defined($gstrResult)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='' status='0' />

Alle Lampen ein- / ausschalten

Die Methode $gobjGateway->setPowerAllLights("<0=aus / 1=ein>") schaltet nur alle Lampen ein bzw. aus.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gstrResult=$gobjGateway->setPowerAllLights("<0=aus / 1=ein>");
if (! defined($gstrResult)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='' status='0' />

Alle Steckdosen ein- / ausschalten

Die Methode $gobjGateway->setPowerAllPlugs("<0=aus / 1=ein>") schaltet nur alle Steckdosen ein bzw. aus.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gstrResult=$gobjGateway->setPowerAllPlugs("<0=aus / 1=ein>");
if (! defined($gstrResult)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='' status='0' />

Alle Gruppen ein- / ausschalten

Die Methode $gobjGateway->setPowerAllGroups("<0=aus / 1=ein>") schaltet nur alle Gruppen ein bzw. aus.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gstrResult=$gobjGateway->setPowerAllGroups("<0=aus / 1=ein>");
if (! defined($gstrResult)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='' status='0' />

Ein Gerät ein- / ausschalten

Die Methode $gobjGateway->setPower("<Geräte-ID>","<0=aus / 1=ein>") schaltet die durch die Geräte-ID angegebene Lampe, Steckdose oder Gruppe ein bzw. aus.

Hier wird wieder ein Objekt, welches das Gerät repräsentiert, zurück gegeben.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->setPower("<Geräte-ID>","<0=aus / 1=ein>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "$gobjObject\n";

Beispielausgabe des Geräte-Objektes im scalaren Kontext:

<datapoint deviceid='phl1' name='Wohnzimmer' devicetype='TRADFRI bulb E27 CWS opal 600lm' online='0' status='0' brightness='131' ct='345' xyY='0.4444,0.4065,131' hsv='8418,140,254' />

Helligkeit eines Gerätes ändern

Die Methode $gobjGateway->setBrightness("<Geräte-ID>","<0-254>") ändert die Helligkeit der durch die Geräte-ID angegebene Lampe oder Gruppe.

Hier wird wieder ein Objekt, welches das Gerät repräsentiert, zurück gegeben.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->setBrightness("<Geräte-ID>","<0-254>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "$gobjObject\n";

Beispielausgabe des Geräte-Objektes im scalaren Kontext:

<datapoint deviceid='phl1' name='Wohnzimmer' devicetype='TRADFRI bulb E27 CWS opal 600lm' online='0' status='0' brightness='131' ct='345' xyY='0.4444,0.4065,131' hsv='8418,140,254' />

Farbtemperatur eines Gerätes ändern

Die Methode $gobjGateway->setCT("<Geräte-ID>","<153-500>") ändert die Farbtemperatur der durch die Geräte-ID angegebene Lampe oder Gruppe.

Diese Methode ist nur bei Lampen oder Gruppen wirksam, welche die Einstellung der Farbtemperatur unterstützen.

Hier wird wieder ein Objekt, welches das Gerät repräsentiert, zurück gegeben.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->setCT("<Geräte-ID>","<153-500>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "$gobjObject\n";

Beispielausgabe des Geräte-Objektes im scalaren Kontext:

<datapoint deviceid='phl1' name='Wohnzimmer' devicetype='TRADFRI bulb E27 CWS opal 600lm' online='0' status='0' brightness='131' ct='345' xyY='0.4444,0.4065,131' hsv='8418,140,254' />

Farbe eines Gerätes über den xxY-Wert ändern

Die Methode $gobjGateway->setXYY("<Geräte-ID>","<0.0000-1.0000,0.0000-1.0000,0-254>") ändert die Farbe der durch die Geräte-ID angegebene Lampe oder Gruppe.

Diese Methode ist nur bei Lampen oder Gruppen wirksam, welche die Einstellung der Farbe unterstützen.

Hier wird wieder ein Objekt, welches das Gerät repräsentiert, zurück gegeben.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->setXYY("<Geräte-ID>","<0.0000-1.0000,0.0000-1.0000,0-254>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "$gobjObject\n";

Beispielausgabe des Geräte-Objektes im scalaren Kontext:

<datapoint deviceid='phl1' name='Wohnzimmer' devicetype='TRADFRI bulb E27 CWS opal 600lm' online='0' status='0' brightness='131' ct='345' xyY='0.4444,0.4065,131' hsv='8418,140,254' />

Farbe eines Gerätes über den HSV-Wert ändern

Die Methode $gobjGateway->setHsv("<Geräte-ID>","<0-65535,0-254,0-254>") ändert die Farbe der durch die Geräte-ID angegebene Lampe oder Gruppe.

Diese Methode ist nur bei Lampen oder Gruppen wirksam, welche die Einstellung der Farbe unterstützen. Die Hue Bridge gibt zwar für alle Geräte, bei denen die Farbe geändert werden kann, einen HSV-Wert zurück. Es lassen sich jedoch nicht alle Lampen über den HSV-Wert einstellen. Besonders bei Fremdherstellern ist die Einstellung über den xyY-Wert sicherer.

Hier wird wieder ein Objekt, welches das Gerät repräsentiert, zurück gegeben.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->setHsv("<Geräte-ID>","<0-65535,0-254,0-254>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "$gobjObject\n";

Beispielausgabe des Geräte-Objektes im scalaren Kontext:

<datapoint deviceid='phl1' name='Wohnzimmer' devicetype='TRADFRI bulb E27 CWS opal 600lm' online='0' status='0' brightness='131' ct='345' xyY='0.4444,0.4065,131' hsv='8418,140,254' />

Die Klasse TSS::Philips::Hue::Light

Die TSS::Philips::Hue::Light Klasse bündelt alle Attribute und Methoden um Lampen und Steckdosen über die Hue Bridge zu steuern.

Attribute

Die Klasse TSS::Philips:Hue::Light besitzt die folgenden Attribute:

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "Fehlertext             : ".$gobjObject->{"error"}."\n";
print "Gateway                : ".$gobjObject->{"gateway"}."\n"; # Übergeordnetes Objekt TSS::Philips::Hue
print "Geräte-ID              : ".$gobjObject->{"deviceid"}."\n";
print "Gerätetyp              : ".$gobjObject->{"type"}."\n";
print "Gerätename             : ".$gobjObject->{"name"}."\n";
print "Gerätebezeichnung      : ".$gobjObject->{"devicetype"}."\n";
print "Hersteller             : ".$gobjObject->{"manufacturername"}."\n";
print "Produktname            : ".$gobjObject->{"productname"}."\n";
print "Eindeutige ID          : ".$gobjObject->{"uniqueid"}."\n";
print "Softwareversion        : ".$gobjObject->{"version"}."\n";
print "Onlinestatus           : ".$gobjObject->{"online"}."\n";
print "Power-Status           : ".$gobjObject->{"status"}."\n";
print "Helligkeit             : ".$gobjObject->{"brightness"}."\n" if (defined($gobjObject->{"brightness"}));
print "Farbton                : ".$gobjObject->{"hue"}."\n"        if (defined($gobjObject->{"hue"}));
print "Sättigung              : ".$gobjObject->{"saturation"}."\n" if (defined($gobjObject->{"saturation"}));
print "Effekt                 : ".$gobjObject->{"effect"}."\n"     if (defined($gobjObject->{"effect"}));
print "Alarm                  : ".$gobjObject->{"alert"}."\n"      if (defined($gobjObject->{"alert"}));
print "Modus                  : ".$gobjObject->{"mode"}."\n"       if (defined($gobjObject->{"mode"}));
print "Farbe X                : ".$gobjObject->{"colorx"}."\n"     if (defined($gobjObject->{"colorx"}));
print "Farbe Y                : ".$gobjObject->{"colory"}."\n"     if (defined($gobjObject->{"colory"}));
print "Farbtempeatur          : ".$gobjObject->{"ct"}."\n"         if (defined($gobjObject->{"ct"}));
print "Letzte Farbeinstellung : ".$gobjObject->{"colormode"}."\n"  if (defined($gobjObject->{"colormode"}));

Einige der Attribute sind optional und nur vorhanden, wenn die Lampe oder die Steckdose diese unterstützen.

Methoden zur Statusausgabe

Neben den Attributen besitzt die Klasse TSS::Philips:Hue::Light auch Funktionen um einen Status abzufragen:

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "Gerätename    : ".$gobjObject->name()."\n";
print "Geräte-ID     : ".$gobjObject->deviceid()."\n";
print "Gerätetyp     : ".$gobjObject->devicetype()."\n";
print "Version       : ".$gobjObject->version()."\n";
print "Onlinestatus  : ".$gobjObject->online()."\n";
print "Power-Status  : ".$gobjObject->status()."\n";
print "Helligkeit    : ".$gobjObject->brightness()."\n";
print "Farbtempeatur : ".$gobjObject->ct()."\n";
print "Farbe xxY     : ".$gobjObject->xyy()."\n";
print "Farbe HSV     : ".$gobjObject->hsv()."\n";
print "Gesamtstatus  : ".$gobjObject->devicestate()."\n";

Alle Geräteinformationen neu einlesen

Durch die Methode $gobjObject->devicestate() werden alle Informationen der Lampe oder Steckdose neu eingelesen.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gintResult=$gobjObject->readDeviceInfo();
if (! defined($gintResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

Das Gerät ein- / ausschalten

Die Methode $gobjObject->setPower("<0=aus / 1=ein>") schaltet das Gerät ein bzw. aus.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gstrResult=$gobjObject->setPower("<0=aus / 1=ein>");
if (! defined($gstrResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='phl1' status='0' />

Helligkeit des Gerätes ändern

Die Methode $gobjObject->setBrightness("<0-254>") ändert die Helligkeit des Gerätes.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gstrResult=$gobjObject->setBrightness("<0-254>");
if (! defined($gstrResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='phl1' brightness='131' />

Farbtemperatur des Gerätes ändern

Die Methode $gobjObject->setCT("<153-500>") ändert die Farbtemperatur des Gerätes.

Diese Methode ist nur bei Lampen oder Gruppen wirksam, welche die Einstellung der Farbtemperatur unterstützen.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gstrResult=$gobjObject->setCT("<153-500>");
if (! defined($gstrResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='phl1' ct='347' />

Farbe des Gerätes über den xxY-Wert ändern

Die Methode $gobjObject->setXYY("<0.0000-1.0000,0.0000-1.0000,0-254>") ändert die Farbe des Gerätes.

Diese Methode ist nur bei Lampen wirksam, welche die Einstellung der Farbe unterstützen.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gstrResult=$gobjObject->setXYY("<0.0000-1.0000,0.0000-1.0000,0-254>");
if (! defined($gstrResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='phl1' xyY='0.4452,0.4068,131' />

Farbe des Gerätes über den HSV-Wert ändern

Die Methode $gobjObject->setHsv("<0-65535,0-254,0-254>") ändert die Farbe des Gerätes.

Diese Methode ist nur bei Lampen wirksam, welche die Einstellung der Farbe unterstützen. Die Hue Bridge gibt zwar für alle Geräte, bei denen die Farbe geändert werden kann, einen HSV-Wert zurück. Es lassen sich jedoch nicht alle Lampen über den HSV-Wert einstellen. Besonders bei Fremdherstellern ist die Einstellung über den xyY-Wert sicherer.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gstrResult=$gobjObject->setHsv("<0-65535,0-254,0-254>");
if (! defined($gstrResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='phl1' hsv='0,254,63' />

Die Klasse TSS::Philips::Hue::Group

Die TSS::Philips::Hue::Group Klasse bündelt alle Attribute und Methoden um Gruppen über die Hue Bridge zu steuern.

Attribute

Die Klasse TSS::Philips:Hue::Group besitzt die folgenden Attribute:

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "Fehlertext             : ".$gobjObject->{"error"}."\n";
print "Gateway                : ".$gobjObject->{"gateway"}."\n"; # Übergeordnetes Objekt TSS::Philips::Hue
print "Geräte-ID              : ".$gobjObject->{"deviceid"}."\n";
print "Gerätebezeichnung      : ".$gobjObject->{"name"}."\n";
print "Gerätetyp              : ".$gobjObject->{"devicetype"}."\n";
print "Gerätename             : ".$gobjObject->{"name"}."\n";
print "Automatisches löschen  : ".$gobjObject->{"recycle"}."\n";
print "Zugeordnete Lampen     : ".join(" ,",@{$gobjObject->{"lights"}})."\n";
print "Zugeordnete Sensoren   : ".join(" ,",@{$gobjObject->{"sensors"}})."\n";
print "Status aller Lampen    : ".$gobjObject->{"state_all"}."\n";
print "Power-Status           : ".$gobjObject->{"status"}."\n";
print "Helligkeit             : ".$gobjObject->{"brightness"}."\n" if (defined($gobjObject->{"brightness"}));
print "Farbton                : ".$gobjObject->{"hue"}."\n"        if (defined($gobjObject->{"hue"}));
print "Sättigung              : ".$gobjObject->{"saturation"}."\n" if (defined($gobjObject->{"saturation"}));
print "Effekt                 : ".$gobjObject->{"effect"}."\n"     if (defined($gobjObject->{"effect"}));
print "Alarm                  : ".$gobjObject->{"alert"}."\n"      if (defined($gobjObject->{"alert"}));
print "Farbe X                : ".$gobjObject->{"colorx"}."\n"     if (defined($gobjObject->{"colorx"}));
print "Farbe Y                : ".$gobjObject->{"colory"}."\n"     if (defined($gobjObject->{"colory"}));
print "Farbtempeatur          : ".$gobjObject->{"ct"}."\n"         if (defined($gobjObject->{"ct"}));
print "Letzte Farbeinstellung : ".$gobjObject->{"colormode"}."\n"  if (defined($gobjObject->{"colormode"}));

Einige der Attribute sind optional und nur vorhanden, wenn die Gruppe diese unterstützen.

Neben den Attributen besitzt die Klasse TSS::Philips:Hue::Group auch Funktionen um einen Status abzufragen:

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

print "Gerätename          : ".$gobjObject->name()."\n";
print "Geräte-ID           : ".$gobjObject->deviceid()."\n";
print "Gerätetyp           : ".$gobjObject->devicetype()."\n";
print "Status aller Lampen : ".$gobjObject->status_all()."\n";
print "Power-Status        : ".$gobjObject->status()."\n";
print "Helligkeit          : ".$gobjObject->brightness()."\n";
print "Farbtempeatur       : ".$gobjObject->ct()."\n";
print "Farbe xxY           : ".$gobjObject->xyy()."\n";
print "Farbe HSV           : ".$gobjObject->hsv()."\n";
print "Gesamtstatus        : ".$gobjObject->devicestate()."\n";

Alle Geräteinformationen neu einlesen

Durch die Methode $gobjObject->devicestate() werden alle Informationen der Gruppe neu eingelesen.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gintResult=$gobjObject->readDeviceInfo();
if (! defined($gintResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

Die Gruppe ein- / ausschalten

Die Methode $gobjObject->setPower("<0=aus / 1=ein>") schaltet die Gruppe ein bzw. aus.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gstrResult=$gobjObject->setPower("<0=aus / 1=ein>");
if (! defined($gstrResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='phg1' status='0' />

Helligkeit der Gruppe ändern

Die Methode $gobjObject->setBrightness("<0-254>") ändert die Helligkeit der Gruppe.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gstrResult=$gobjObject->setBrightness("<0-254>");
if (! defined($gstrResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='phg1' brightness='131' />

Farbtemperatur der Gruppe ändern

Die Methode $gobjObject->setCT("<153-500>") ändert die Farbtemperatur der Gruppe.

Diese Methode ist nur bei Gruppen wirksam, welche die Einstellung der Farbtemperatur unterstützen.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gstrResult=$gobjObject->setCT("<153-500>");
if (! defined($gstrResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='phg1' ct='347' />

Farbe der Gruppe über den xxY-Wert ändern

Die Methode $gobjObject->setXYY("<0.0000-1.0000,0.0000-1.0000,0-254>") ändert die Farbe der Gruppe.

Diese Methode ist nur bei Gruppen wirksam, welche die Einstellung der Farbe unterstützen.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gstrResult=$gobjObject->setXYY("<0.0000-1.0000,0.0000-1.0000,0-254>");
if (! defined($gstrResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='phg1' xyY='0.4452,0.4068,131' />

Farbe der Gruppe über den HSV-Wert ändern

Die Methode $gobjObject->setHsv("<0-65535,0-254,0-254>") ändert die Farbe der Gruppe.

Diese Methode ist nur bei Lampen wirksam, welche die Einstellung der Farbe unterstützen. Die Hue Bridge gibt zwar für alle Geräte, bei denen die Farbe geändert werden kann, einen HSV-Wert zurück. Es lassen sich jedoch nicht alle Lampen über den HSV-Wert einstellen. Besonders bei Fremdherstellern ist die Einstellung über den xyY-Wert sicherer.

#!/usr/bin/perl

use TSS::Philips::Hue;

my $gobjGateway = TSS::Philips::Hue->new( host => "<IP-Adresse>", 
                                          presharedkey => "<Preshared Key>" );

my $gobjObject=$gobjGateway->getDeviceInfo("<Geräte-ID>");
if (! defined($gobjObject)) { print "Fehler:'".$gobjGateway->{"error"}."'\n"; exit(1); }

my $gstrResult=$gobjObject->setHsv("<0-65535,0-254,0-254>");
if (! defined($gstrResult)) { print "Fehler:\"".$gobjGateway->{"error"}."\"\n"; exit(1); }

print "$gstrResult\n";

Beispielausgabe:

<datapoint deviceid='phg1' hsv='0,254,63' />

Copyright & Gewährleistung

Copyright (C) 2019 Thomas Schütz-Schneider

Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.

Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.

Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, siehe <https://www.gnu.org/licenses/>.

Download

(Checksum 4027041168)