Philips Hue Leuchten über HomeMatic Sender dimmen

Seit die HomeMatic CCU Philips Hue Leuchtmittel unterstützt, hat vielleicht der ein oder andere den Wunsch verspürt, die Leuchtmittel über einen HomeMatic Sender – wie den 2-fach Wandtaster – zu dimmen.

Um das zu ermöglichen, habe ich mir folgende Lösung überlegt.
Ein kurzer Tastendruck nach oben schaltet das Hue Leuchtmittel auf 100% (Ein), ein kurzer Tastendruck nach unten schaltet das Leuchtmittel auf 0% (Aus).

Da ein langer Tastendruck nicht wiederholend von der Zentrale erfasst wird, sondern erst wenn man die Taste loslässt, wird das Dimmen bei dieser Lösung durch einen langen Tastendruck (d.h. die Taste wird für ca. 1 Sekunde gehalten und dann losgelassen) gestartet und durch einen weiteren kurzen Tastendruck bei der Wunschhelligkeit gestoppt.

Wird die obere Taste lang gedrückt wird bis 100% hochgedimmt, wird die untere Taste lang gedrückt, wird bis 5% heruntergedimmt. Sobald der gewünschte Dimmwert erreicht ist, wird das Dimmen durch kurzes Drücken der oberen oder unteren Taste des Senders gestoppt.

So sieht das ganze dann aus:

 

  1. Als erstes suchen wir das zu dimmende Hue-Leuchtmittel aus der Geräteliste heraus und kopieren uns den Namen des Gerätes in die Zwischenablage:

    Das zu dimmende Hue-Leuchtmittel in der Geräteliste. 
  2. Nun legen wir uns für jedes zu dimmende Hue-Leuchtmittel zwei Systemvariablen an. Der Name der Systemvariablen besteht aus dem Gerätenamen (aus Schritt 1) mit dem Zusatz _dim und _level.

    GERÄTENAME_dim ist vom Typ Werteliste und beinhaltet folgende Werte:
    stop;dimup;dimdown

    GERÄTENAME_level ist vom Typ Zahl und hat als Minimalwert 0 und als Maximalwert 1

    Die Systemvariablen die zum Dimmen notwendig sind.
  3. Nun legen wir für jedes Leuchtmittel zwei Programme an.
    Das erste Programm dient dazu, das Leuchtmittel beim kurzen Tastendruck ein- bzw. auszuschalten, sowie das Dimmen zu starten bzw. wieder zu unterbrechen:

    Das Programm zum Ein- und Ausschalten, sowie zum Starten und Beenden des Dimmvorganges.
  4. Das zweite Programm führt das eigentliche Dimmen durch und besteht nur aus zwei Triggern die auf Aktualisierung auslösen und den zwei Skripten aus Abschnitt 5:

    Dieses Programm dimmt das Leuchtmittel auf und ab und ruft sich selbst immer wieder auf.
  5. Das eigentliche Dimm-Skript liest den Trigger des Programms aus und weiß dadurch, ob hoch- oder heruntergedimmt werden soll. Dann liest es den aktuellen Dimmwert aus der Systemvariable GERÄTENAME_level aus und erhöht bzw. verringert diesen um 5% (0.05) und schickt den neuen Wert an das Hue-Leuchtmittel.

    WICHTIG
    Das Skript ermittelt den Namen des Datenpunktes für die Helligkeit aus dem Namen des Gerätes. Sollte der Gerätename geändert worden sein, muss in der Zeile

    string hue_datapoint_level = "";

    der Datenpunkt für den Level eingetragen werden. Diesen kann man sehr einfach über die XML-Api finden, wenn man unter Einstellungen > Systemsteuerung > Zusatzsoftware > XML-Api > Einstellen den Punkt statelist.cgi auswählt.

    Der Datenpunkt LEVEL in der XML-Api.


    Das erste Skript (Ausführung „sofort“):

    ! Hue-Dimmskript V1.0 für CCU2, CCU3 und OCCU
    ! Michael Gerhard
    ! V1.0 29.07.2018
    
    ! -------------------------------------------------------------
    ! Wenn der Name vom Kanal (Hue Leuchte) in der CCU geändert
    ! wurde, muss die folgende Zeile den LEVEL-Datenpunkt
    ! beinhalten, ansonsten muss die Zeile leer bleiben. 
    ! Ein korrekter Datenpunkt für ein Hue Leuchtmittel sieht
    ! z.B. so aus und kann über statelist.cgi der XML-API ermittelt
    ! werden:
    ! VirtualDevices.HU-Hue lightst:1.LEVEL
    
    ! Nur etwas eintragen, wenn Name vom Kanal geändert wurde 
    string hue_datapoint_level = "";
    
    ! -------------------------------------------------------------
    ! Ab hier nichts mehr ändern
    string hue_dim = dom.GetObject("$src$").Name();
    string hue = hue_dim.Substr(0,(hue_dim.Length()) -4);
    string hue_level = hue # "_level";
    
    if (hue_datapoint_level == "") {
       string hue_tmp_dp = (hue # ":1.LEVEL");
       integer pos = hue_tmp_dp.Find("HU-Hue");
       string hue_dp = "VirtualDevices." # hue_tmp_dp.Substr(pos,((hue_tmp_dp.Length()) - (hue_tmp_dp.Substr(pos))));
    }
    else { string hue_dp = hue_datapoint_level; }
    
    var direction = dom.GetObject("$src$").Value();
    real level= dom.GetObject(hue_level).Value();
    
    if (direction > 0){
       if (direction == 1){
          if (level < 1) {
             real new_level= (level + 0.05);
             dom.GetObject(hue_level).State(new_level);
             dom.GetObject(hue_dp).State(new_level);
             level=new_level;
          }
       }
       else {
          if (level > 0.05) {
             real new_level= (level - 0.05);
             dom.GetObject(hue_level).State(new_level);
             dom.GetObject(hue_dp).State(new_level);
             level=new_level;
          } 
       }
    }
    


    Das zweit Skript prüft, ob das Dimmen ggf. gestoppt wurde und triggert andernfalls das Programm erneut, indem es die Systemvariable GERÄTENAME_dim wieder auf den aktuellen Wert aktualisiert.

    Das zweit Skript (Ausführung „verzögert um 1 Sekunde“):

    string hue_dim= dom.GetObject("$src$").Name();
    string hue = hue_dim.Substr(0,(hue_dim.Length()) -4);
    string hue_level = hue # "_level";
    
    var direction = dom.GetObject("$src$").Value();
    real level= dom.GetObject(hue_level).Value();
    
    if (direction > 0){
       if (direction == 1){
          if (level < 1) {
             dom.GetObject(hue_dim).State(1);
          }
          else { dom.GetObject(hue_dim).State(0); }
       }
       else {
          if (level > 0.05) {
             dom.GetObject(hue_dim).State(2);
          }
          else { dom.GetObject(hue_dim).State(0); } 
       }
    }

     


Update 31.07.2018: Reine CCU2 Lösung entfernt, da die aktuelle Lösung auf allen Zentralen eine zufriedenstellende Lösung darstellt.

6 Antworten auf „Philips Hue Leuchten über HomeMatic Sender dimmen“

  1. IMO eine super Lösung, echt prima.

    Kannst Du Dir vorstellen, das Ganze auch mit einem Taster zu realisieren?

    … ich dachte so hier …….

    – Taster kurz getastet, Licht geht auf 100% Dimmwert EIN oder wenn das Licht schon eingeschaltet ist geht es wieder auf 0% Dimmwert AUS.
    – Taster lang getastet + losgelassen, Licht dimmt herunter bis Minimalwert erreicht, verharrt bei diesem Dimmwert kurz und dimmt dann wieder herauf bis Maximalwert erreicht und immer so weiter …… Tastet man jetzt 1x kurz wird das dimmen beendet und der aktuelle Dimmwert bleibt

    So könnte man mit einem 2-Kanal Taster zwei HUE Leuchten bedienen und mit einem 4-Kanal Einbausender sogar 4 HUE’s

    1. Prima Script, muss man aber wirklich immer pro Hue Lampe die Programme und Systemvariablen einzeln anlegen?

      Würde das gerne zusammenfassen, da ich in jedem Raum sechs Spots habe, die gleich gesteuert werden sollen.

        1. Solle theoretisch genauso gehen, hier muss im Skript nur das Gerät durch die Gruppe ersetzt werden. Da ich nur eine Hue-Lampe habe, kenne ich die Darstellung der Gruppe nicht. Wie ist die Gruppe denn benannt?

      1. Solle theoretisch genauso gehen, hier muss im Skript nur das Gerät durch die Gruppe ersetzt werden. Da ich nur eine Hue-Lampe habe, kenne ich die Darstellung der Gruppe nicht. Wie ist die Gruppe denn benannt?

  2. Super vielen Herzlichen Dank für die Anleitung, werde ich sofort probieren.
    Besteht auch die Möglichkeit die für mehrere Hue (evtll Gruppe) zu realisieren, und könntest du dann das vorgehen mal Posten.
    Gruß Nils

Schreibe einen Kommentar

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