Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin Philips HUE

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] Plugin Philips HUE

    Hallo zusammen,

    ich habe mich mal an der Anbindung von Philips HUE Lampen am Wiregate versucht. Bin zwar was die Programmierung betrifft noch Neuling, aber bei mir funktioniert die Anbindung prima. Als Bridge verwende ich den RaspBee von Dresden Elektronik, da dieser neben den HUE´s auch mit weiteren ZLL Steuergeräten zurechtkommt. Ich habe auch den Plugin angehängt. Wer also ebenfalls mal HUE anbinden möchte oder Verbesserungsvorschläge hat, ist herzlich eingeladen.

    Viele Grüße

    Thomas
    Angehängte Dateien

    #2
    Schön
    Ich hab das inkl. einem älteren Plugin von mir (mit dem Orginal-GW/API) gleich mal ins SVN: Open Automation / Code / Commit [r2045]

    Makki
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      Original Hue Bridge

      Hallo Thomas!

      Toll das du dich diesem Thema angenommen hast, genau das brauche ich.
      Habe mich dann auch mal an meinen Hue`s probiert. Leider ohne Erfolg.
      Warum? Keine Ahnung, da fehlen mir wohl einige Basics. Vieleicht kann mir trotzdem jemand auf die Sprünge helfen.

      Also, ich habe eine original Hue Brigde (sollte genauso klappen?),
      kann auch prima über die API Ein und Auschalten (Anmeldung eines Users hat also auch geklappt), Plugin ins Wiregate eingefügt (Gruppenadressen meiner Programmierung gemäß entsprechend geändert, beginnen mit 6/3/...),
      keine Fehlermeldung, sieht also gut aus. Die Gruppenadresse 6/3/0 für Ein / Aus im Wiregate angelegt und nix, Lampe 1 geht nicht an.

      Anbei mein geändertes Plugin.

      ZLL-Bridge V0_4.txt

      Was mache ich falsch?

      Viele Grüße
      Thomas

      Kommentar


        #4
        Hast du die GAs im Wiregate selbst eingetragen? Falls nicht, lege diese unter Eibd: Ga bearbeiten an, oder importiere diese aus der Ets. Achte bitte auf die richtigen Datentypen.

        Gruß

        Thomas

        Kommentar


          #5
          Update

          Hallo nochmal.

          Habe das Wiregate mal neu gestartet, und siehe da Lampe 1 lässt sich Ein und Aus schalten. Also grundsätzlich klappt's. Gleich mal Lampe 2 und 3 ausprobiert
          Und shit, zu früh gefreut, Lampe 2 und 3 bleiben aus. Hat jemand einen Tip?

          LG
          Thomas

          Kommentar


            #6
            GA' s selbst angelegt. Ein Aus und Dimmen klappt bei Lampe 1 (mehr habe ich noch nicht angelegt) Damit Stimmen die Datentypen.

            Danke für die Unterstützung

            Thomas

            Kommentar


              #7
              Ich habe kürzlich ein älteres Plugin mit der (orginal) HUE-Bridge hochgeladen, vielleicht bringt dich das weiter..
              Open Automation / Code / [r2072] /wiregate/plugin/generic/Hue-Simple.pl

              Ist nur ein grobes Gerüst aber bei mir funktionieren einzelne Leuchten (zumindest 3..)

              Edit: der Rest steht - mit Verlaub - in der HUE API-Doku..

              Makki
              EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
              -> Bitte KEINE PNs!

              Kommentar


                #8
                Moin!

                Danke an alle, Ansteuerung der Lampen klappt nun. Habe wohl bei der Änderung des Plugins auf drei Lampen was falsch gemacht.

                Fazit: original Hue klappt, Ideen zur Anwendung habe ich genug, warum fehlt mir nur immer die Zeit.

                PS: @Makki ... Was macht die Wärmepumpe?

                VG
                Thomas

                Kommentar


                  #9
                  Habe das Plugin bei mir auch benutzt habe ein paar Bugs bereinigt und an die original Bridge angepasst. Vielen Dank für die gute Vorarbeit an Thomas.

                  Code:
                  ################################ Plugin für die Zigbee Light Link Steuerung ########################
                  # Thomas Willi, Version 0.4
                  # Martin Jepkens, Version 0.5 Behebung einiger BUGS, Anpassung an original HUE Bridge
                  # Ermöglicht die Steuerung von Philips HUE Lampen, etc. über IP Telegramme an ZLL Bridge
                  # Die benötigten Gruppenadressen müssen im Wiregate eingetragen sein.
                  ### Definitionen -----------------------------------------------------------------------
                  # Perl Module
                  use utf8;
                  use HTTP::Request::Common;
                  use LWP;
                  use Time::HiRes qw( usleep );
                  # Basis Link zur ZLL Bridge
                  # Um den Zugriff auf die Bridge zu bekommen muss ein neuer Benutzer angelegt werden.
                  # Anleitung siehe z.B. http://developers.meethue.com/gettingstarted.html
                  my $Bridge = 'http://192.168.76.48/api/newdeveloper/lights/';
                  # Gesamtanzahl aller HUE-Lampen
                  my $anzahl=1;
                  #########################################################################################
                  # Gruppenadressen
                  # Um Lampen hinzuzufügen Block kopieren und anschließen nur Index ändern
                  my %adresse=(
                  # Dresden FLS-PP Nr. 1+++++++++++++++++++++++++++++++++++++++++++++++++++++
                  # Bridge light: 1
                  # Name Gruppenadresse Funktion
                  "1_Schalten"=>    "9/1/26",    #Ein/Aus
                  "1_Status_Schalten"=>    "9/1/27",    #Rückmeldung Ein/Aus
                  "1_Helligkeit"=>    "9/1/28", #Helligkeit
                  "1_Status_Helligkeit"=>    "9/1/29", #Rückmeldung Helligkeit
                  "1_Rot"=>    "9/1/20", #RGB: Rot
                  "1_Gruen"=>    "9/1/22", #RGB: Grün
                  "1_Blau"=>    "9/1/24", #RGB: Blau
                  "1_Status_Rot"=>    "9/1/21", #Rückmeldung RGB: Rot
                  "1_Status_Gruen"=>    "9/1/23", #Rückmeldung RGB: Grün
                  "1_Status_Blau"=>    "9/1/25", #Rückmeldung RGB: Blau
                  # Philips HUE Lampe Nr. 1+++++++++++++++++++++++++++++++++++++++++++++++++++
                  # Bridge light: 2
                  # Name Gruppenadresse Funktion
                  #"2_Schalten"=>    "0/0/13",    #Ein/Aus
                  #"2_Status_Schalten"=>    "0/0/14",    #Rückmeldung Ein/Aus
                  #"2_Helligkeit"=>    "0/0/15", #Helligkeit
                  #"2_Status_Helligkeit"=>    "0/0/16", #Rückmeldung Helligkeit
                  #"2_Rot"=>    "0/0/17", #RGB: Rot
                  #"2_Gruen"=>    "0/0/18", #RGB: Grün
                  #"2_Blau"=>    "0/0/19", #RGB: Blau
                  #"2_Status_Rot"=>    "0/0/20", #Rückmeldung RGB: Rot
                  #"2_Status_Gruen"=>    "0/0/21", #Rückmeldung RGB: Grün
                  #"2_Status_Blau"=>    "0/0/22", #Rückmeldung RGB: Blau
                  # Philips HUE Lampe Nr. 2+++++++++++++++++++++++++++++++++++++++++++++++++++
                  # Bridge light: 3
                  # Name Gruppenadresse Funktion
                  #"3_Schalten"=>    "9/1/26",    #Ein/Aus
                  #"3_Status_Schalten"=>    "9/1/27",    #Rückmeldung Ein/Aus
                  #"3_Helligkeit"=>    "9/1/28", #Helligkeit
                  #"3_Status_Helligkeit"=>    "9/1/29", #Rückmeldung Helligkeit
                  #"3_Rot"=>    "9/1/20", #RGB: Rot
                  #"3_Gruen"=>    "9/1/22", #RGB: Grün
                  #"3_Blau"=>    "9/1/24", #RGB: Blau
                  #"3_Status_Rot"=>    "9/1/21", #Rückmeldung RGB: Rot
                  #"3_Status_Gruen"=>    "9/1/23", #Rückmeldung RGB: Grün
                  #"3_Status_Blau"=>    "9/1/25", #Rückmeldung RGB: Blau
                  # Philips HUE Lampe Nr. 3+++++++++++++++++++++++++++++++++++++++++++++++++++
                  # Bridge light: 4
                  # Name Gruppenadresse Funktion
                  );
                  #########################################################################################
                  #Variablen
                  my $Helligkeit;
                  my $Status_Helligkeit;
                  my $Rot;
                  my $Gruen;
                  my $Blau;
                  my $Status_Rot;
                  my $Status_Gruen;
                  my $Status_Blau;
                  my $hue;    # Farbe als hsv Wert
                  my $bri;    # Helligkeit
                  my $sat;    # Sättigung
                  my $on_off;    # on/off
                  my $light=1; # Startwert Index für Gruppenadressen (1_xxx)
                  # Liste Standard Befehle an Bride+++++++++++++++++++++++++++++++++++++++++++++
                  my %befehl=(
                  # Name Bridge-Kommando
                  "ein"=>    '{"on":true}',
                  "aus"=>    '{"on":false}',
                  );
                  ### Ende Definitionen -------------------------------------------------------------------
                  # Eigenen Aufruf-Zyklus setzen
                  $plugin_info{$plugname.'_cycle'} = 60; #Aufruf alle 60 Sekunden
                  # Anmeldung Gruppenadressen
                  while (my($key,$ga) = each %adresse){
                  #my $Name_GA=$adresse{$key};
                  my $muster='Status';
                  if ($key !~m/$muster/i){
                  $plugin_subscribe{$adresse{$key}}{$plugname} = 1;
                  } # Ende if
                  }
                  ############################### HAUPTPROGRAMM ############################################
                  $anzahl=$anzahl+1;
                  while ($light<$anzahl){
                  my $key_Schalten=$light.'_Schalten';
                  my $key_Status_Schalten=$light.'_Status_Schalten';
                  my $key_Helligkeit=$light.'_Helligkeit';
                  my $key_Status_Helligkeit=$light.'_Status_Helligkeit';
                  my $key_Rot=$light.'_Rot';
                  my $key_Gruen=$light.'_Gruen';
                  my $key_Blau=$light.'_Blau';
                  my $key_Status_Rot=$light.'_Status_Rot';
                  my $key_Status_Gruen=$light.'_Status_Gruen';
                  my $key_Status_Blau=$light.'_Status_Blau';
                  # Ein/Aus
                  if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $adresse{$key_Schalten}) {
                  if ($msg{'data'} == 00) {
                  my $HTTP=Sende_Befehl($light, $befehl{'aus'});
                  usleep(300);
                  Sende_KNX_Status($light);
                  }
                  elsif ($msg{'data'} == 01) {
                  my $HTTP=Sende_Befehl($light, $befehl{'ein'});
                  usleep(300);
                  Sende_KNX_Status($light);    
                  }
                  return 0;
                  } # Ende Ein/Aus
                  # Dimmen
                  if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $adresse{$key_Helligkeit}) {
                  $Helligkeit=decode_dpt5($msg{'data'});
                  if($Helligkeit==0){
                  my $HTTP=Sende_Befehl($light, $befehl{'aus'});
                  usleep(300);
                  Sende_KNX_Status($light);
                  } else {
                  $bri=int($Helligkeit/100*255);
                  my $command='{"on":true,"bri":'.$bri.',"hue":14964,"sat":144}';
                  my $HTTP=Sende_Befehl($light, $command);
                  usleep(300);
                  Sende_KNX_Status($light);
                  return 0;
                  }
                  return 0;
                  } # Ende Dimmen
                  # RGB Wert senden
                  if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $adresse{$key_Rot}) {
                  $Rot=decode_dpt5($msg{'data'});
                  usleep(300);
                  $Gruen=knx_read($adresse{$key_Gruen},100,5);
                  usleep(300);
                  $Blau=knx_read($adresse{$key_Blau},100,5);
                  usleep(300);
                  if(($Rot==0&&$Gruen==0&&$Blau==0)){
                  my $HTTP=Sende_Befehl($light, $befehl{'aus'});
                  usleep(300);
                  knx_write($adresse{$key_Status_Helligkeit},0,5);
                  knx_write($adresse{$key_Status_Schalten},0,1);
                  } else {
                  ($hue, $sat, $bri)=RGBtoHSV($Rot, $Gruen, $Blau);
                  my $command='{"on":true,"bri":'.$bri.',"hue":'.$hue.',"sat":'.$sat.'}';
                  my $HTTP=Sende_Befehl($light, $command);
                  usleep(300);
                  Sende_KNX_Status($light);
                  return 0;
                  }
                  return 0;
                  } # Ende RGB Wert senden
                  # Status Update aller Lampen
                  Sende_KNX_Status($light);
                  # Ende Status Update
                  $light=$light+1;
                  } # Ende while
                  $light=1;
                  ############################### ENDE HAUPTPROGRAMM ########################################
                  # ------------------------------- Unterprogramme -----------------------------------------
                  ###################### RGBtoHSV #####################
                  sub RGBtoHSV {
                  my ($r, $g, $b2) = @_;
                  my ($h, $s, $v, $delta, $min);
                  ($r, $g, $b2)= map{$_ *= 1/100 }($r, $g, $b2);    #Umrechung RGB Werte in 0-1
                  $min = [sort {$a <=> $b} ($r, $g, $b2)] -> [0]; # Minimum
                  $v = [sort {$b <=> $a} ($r, $g, $b2)] -> [0]; # Maximum
                  $delta = $v - $min; # Maximum - Minimum
                  if (($v == 0 || $delta == 0)) { $s = 0; $h = 0; } # falls Min = 0 oder Max=Min, dann h=0, s=0
                  else {
                  if ($r == $v) { $h = 60 * ($g - $b2) / $delta; }    # Max=R
                  elsif ($g == $v) { $h = 120 + 60 * ($b2 - $r) / $delta; } # Max=G
                  else { $h = 240 + 60 * ($r - $g) / $delta; } # Max=B
                  $h = $h + 360 if ($h < 0); # falls h<0° dann h=h+360°
                  }
                  $s=$delta/$v;
                  $h=int($h*65535/360);
                  $s=int($s*255);
                  $v=int($v*255);
                  return ($h,$s,$v);
                  }
                  ########## Ende HSVto RGB ########################
                  ###################### HSVtoRGB ##################
                  sub HSVtoRGB {
                  my ($h, $s, $v) = @_;
                  my ($r, $g, $b);
                  my ($f, $i, $h_temp, $p, $q, $t);
                  $h=int($h/65535*360);    # Umrechnen 0-655355 in 0-360°
                  $s=$s/255;    # Umrechnen 0-255 in 0-1
                  $v=$v/255;    # Umrechnen 0-255 in 0-1
                  if ($s == 0) { # falls s=0, dann R=G=B=V
                  $r = $g = $b = $v;
                  } else {
                  if ($h == 360) { $h_temp = 0; } else { $h_temp = $h; } # h=0° identisch h=360°
                  $h_temp /= 60; # Berechne hi=H/60°
                  $i = int($h_temp);
                  $f = $h_temp - $i;
                  $p = $v * (1 - $s);
                  $q = $v * (1 - ($s * $f));
                  $t = $v * (1 - ($s * (1 - $f)));
                  if ($i == 0) {$r = $v; $g = $t; $b = $p;}
                  if ($i == 1) {$r = $q; $g = $v; $b = $p;}
                  if ($i == 2) {$r = $p; $g = $v; $b = $t;}
                  if ($i == 3) {$r = $p; $g = $q; $b = $v;}
                  if ($i == 4) {$r = $t; $g = $p; $b = $v;}
                  if ($i > 4) {$r = $v; $g = $p; $b = $q;}
                  }
                  $r=int($r*100);
                  $g=int($g*100);
                  $b=int($b*100);
                  return ($r,$g,$b);
                  }
                  ############### Ende HSVtoRGB #####################
                  ######### Sende KNX Status ########################
                  sub Sende_KNX_Status {
                  my ($light)=@_;
                  my $key_Status_Schalten=$light.'_Status_Schalten';
                  my $key_Status_Helligkeit=$light.'_Status_Helligkeit';
                  my $key_Status_Rot=$light.'_Status_Rot';
                  my $key_Status_Gruen=$light.'_Status_Gruen';
                  my $key_Status_Blau=$light.'_Status_Blau';
                  ($on_off,$hue,$sat,$bri)=Abfrage_Status($light);
                  $Helligkeit=int($bri/255*100);
                  knx_write($adresse{$key_Status_Schalten},$on_off,"1");
                  knx_write($adresse{$key_Status_Helligkeit},$Helligkeit,"5");
                  ($Status_Rot, $Status_Gruen, $Status_Blau)=HSVtoRGB($hue, $sat, $bri);
                  knx_write($adresse{$key_Status_Rot},$Status_Rot,"5");
                  knx_write($adresse{$key_Status_Gruen},$Status_Gruen,"5");
                  knx_write($adresse{$key_Status_Blau},$Status_Blau,"5");
                  $plugin_info{$plugname.'_R'} = $Status_Rot;
                  $plugin_info{$plugname.'_G'} = $Status_Gruen;
                  $plugin_info{$plugname.'_B'} = $Status_Blau;
                  return 0;
                  }
                  ###### Ende Sende KNX Status ######################
                  ######### Abfrage Routine #########################
                  sub Abfrage_Status {
                  my($LNr)=@_;
                  my $Adresse=$Bridge.$LNr;
                  my $req=HTTP::Request->new( 'GET', $Adresse );
                  my $lwp=LWP::UserAgent->new;
                  my $response= $lwp->request( $req )->content;
                  my ($response_hue, $response_sat, $response_bri);
                  my ($response_string, $response_on_off);
                  ($response_hue)=$response=~m/"hue":(\d+)/g;
                  ($response_sat)=$response=~m/"sat":(\d+)/g;
                  ($response_bri)=$response=~m/"bri":(\d+)/g;
                  ($response_string)=$response=~m/"on":(\w+)/g;
                  if ($response_string eq 'false'){
                  $response_on_off=0;
                  }
                  else {$response_on_off=1;};
                  return ($response_on_off,$response_hue,$response_sat,$response_bri);
                  }
                  ########## Ende Abfrage Routine ####################
                  ########## Sende Routine #########################
                  sub Sende_Befehl {
                  my($LNr, $Bef)=@_;
                  my $Adresse=$Bridge.$LNr.'/state';
                  my $req=HTTP::Request->new( 'PUT', $Adresse );
                  $req->header( 'Content-Type' => 'application/json' );
                  $req->content( $Bef );
                  my $lwp=LWP::UserAgent->new;
                  $lwp->request( $req );
                  }
                  ########## Ende Sende Routine #####################
                  # ----------------------------- Ende Unterprogramme ---------------------------------------

                  Kommentar


                    #10
                    Hallo. Bis jetzt war ich immer nur stiller Mitleser aber jetzt muss ich einfach mal fragen : Ich habe nun seit 5 Tagen die neue Hue Bridge zu hause und will jetzt dann meine RGBW und CW/WW LED's über die Cometvisu einbinden. Für kalt- und warmweiß finde ich hier jedoch überhaupt nichts und bei rgbw fehlt noch der Weißanteil. Müsste man den über den "sat" machen? Ich bin im Programmieren leider eine totale Niete. Evtl bräuchte ich da mal nen Kurs... Jeder hat halt seines woanders. Grüße Thorsti

                    Kommentar


                      #11
                      Guten Morgen,

                      Zitat von thorsti Beitrag anzeigen
                      Ich bin im Programmieren leider eine totale Niete. Evtl bräuchte ich da mal nen Kurs... Jeder hat halt seines woanders.
                      Richtig, und so geht es 95% aller WireGate Kunden. Ich habe in den letzten Jahren viele eMails bekommen, dass vor dem Kauf das mit den Plugins alles so einfach ausgesehen hat und danach. Kunden beschreiben, dass sie am Ende 80% der Dinge, die sie mit dem WireGate Server machen wollten, nicht umsetzen konnten, weil es an Programmierwissen fehlt, was in meinen Augen normal ist. Die meisten Anwender haben andere Berufe und Interessen. Ich habe zwar vor zwanzig Jahren programmiert, aber PERL kann ich ehrlich gesagt auch nicht, ich habe dafür jemanden, der das seit 20 Jahren beruflich tut.

                      Diese Erkenntnisse haben wir beim Design des WireGate New Generation berücksichtigt. Die meisten Dinge, die bisher in Plugins gelöst wurden - zumindest die viele betreffen - werden wir als fertiges Modul anbieten, bei dem man nach wenigen Klicks frustfrei zum Ziel kommt.

                      Was Lichtsteuerung betrifft:

                      - Wir werden alle Varianten können, also auch RGBW, RGBWW, RGBWA
                      - Unterstützt werden Leuchten via KNX, DMX, HUE, Lightify, DALI via KNX, WLAN-Steckdosen, 1-Wire
                      - Alle diese Technologien werden dann in einer Szene anlegbar und abrufbar.

                      - Dann nur noch die Objekte in der ETS zuweisen und man kann das mit jedem Taster belegen.

                      ==> Einfach nutzbar für jedermann. Per Klick.

                      Falls jemand besondere Wünsche oder Ideen hat, nehmen wir gerne unter support at wiregate dot de entgegen. Wir hören auf unsere Kunden. Nutzt das.

                      Hinweis: Wir erarbeiten derzeit einen umfassenden Prospekt mit allen Themen und Funktionen. Dauert noch ca. 8 bis 14 Tage. Mit Erscheinen dieses Kataloges werden wir dann Vorbestellungen für das nächste halbe Jahr annehmen. Da die limitierten Lieferpositionen der ersten Monate schnell vergeben sein dürften, sollte man bei Interesse schnell sein. Geliefert wird nach Reihenfolge der Bestellungen. Vorauszahler werden bevorzugt.


                      lg

                      Stefan




                      Kommentar


                        #12
                        Kann mir jemand verraten welche DPT Werte ihr benutzt?
                        Für ein/aus ist das DPT 1.001
                        Nur was nutzt ihr für die 8 Bit Werte? DPT:7.001?
                        --
                        Gruß
                        Lothar

                        Kommentar

                        Lädt...
                        X