HUE Dimmer Switch in FHEM

Begonnen von Kai-Uwe, 18 März 2016, 15:30:14

Vorheriges Thema - Nächstes Thema

Kai-Uwe

Hi,

da dieses Thema von mir in einem anderen Thread begonnen wurde und darin langsam unterging geht es hier weiter. Evtl. Interessiert es ja jemanden.

Die gewesenen Probleme sind alle gelöst. Darum habe ich das hier jetzt geändert/angepasst. Wer will kann das also gerne als funktionierendes HowTo nutzen.

Die HUE Dimmer Switches sind eine feine Sache. Sie sind wirklich günstig (ca. 24.-€) sehen gut aus, haben 4 Tasten welche sich unter FHEM sowie mit iConnectHUE völlig frei und teilweise auch mehrfach belegen lassen. Der eigentliche Schalter ist via Magnet perfekt auf der Schalterplatte eingepasst und lässt sich abnehmen und so als Fernbedienung nutzen.

Hier mal der Link zu iconnectHUE:

http://iconnecthue.com

Und ein Bild vom Schalter:

(https://www.macsources.com/wp-content/uploads/2015/10/Photo_315.jpg)

Mit
get huebridge1 sensors

in FHEM auf der HUE-Bridge ausgeführt bekommt man eine Liste aller bisher an der Bridge angelernten Schalter. Wobei "huebridge1" der Name der eigenen HUE-Bridge ist!

Das sieht dann z.B. so aus:


ID  NAME                           FHEM            TYPE
1: Daylight                                            Daylight
2: Flurschalter 1                                    ZLLSwitch
3: Flurschalter 2                                    ZLLSwitch
4: Badezimmerschalter 1                        ZLLSwitch
5: Spiegelschalter                                  ZLLSwitch
6: Badezimmerschalter 2                       ZLLSwitch


Merken muss man sich nun nur noch die ID des Schalters welchen man in FHEM verwenden möchte. Im Beispiel z.B. für den Flurschalter 1
die 2.

Nun legt man mit dieser Syntax:

define <device> HUEDevice sensor <id> <interval>

das Device an. Für mein Beispiel sieht das so aus:

define Flurschalter_1 HUEDevice sensor 2 1

Danach taucht der Schalter in FHEM auf und kann beliebig verwendet werden.

Eines gibt es aber zu beachten!!!
Im Beispiel habe ich den Wert für <Interval> auf 1 gesetzt. Das geht so eigentlich nicht! Der Wert gibt an wie oft der Schalter von FHEM abgefragt wird. Dort gehen eigentlich nur Werte ab 10 (10 Sekunden). Trägt man kleinere Werte ein wird der Wert automatisch auf 60 (60 Sekunden gesetzt).
Da mir das einfach zu lang ist, wer möchte schon 10 Sekunden warten bis das Licht an/aus geht, muss etwas geändert werden.

Im Verzeichnis "/opt/fhem/FHEM/" auf dem Raspberry gibt es eine Datei Namens 31_HUEDevice.pm. Diese muss Editiert werden. Dazu reicht ein einfacher Texteditor. Sicherheitshalber die Datei vorher einmal kopieren und umbenennen (z.B. 31_HUEDeviceOLD.pm), dann kann nichts schief gehen!
In Zeile 209 muss folgendes geändert werden:


$interval = 60 if( $interval && $interval < 10 );


in:
   

$interval = 60 if( $interval && $interval < 1 );


Danach können auch Intervalle bis 1 (1) Sekunde eingestellt werden. Das reicht eigentlich völlig aus.

Die Schalter haben dann State Readings in dieser Form:
On                    entspricht  100x
Dimmer up        entspricht  200x
Dimmer down    entspricht  300x
Off                    entspricht  400x

Wobei das x im Normalfall immer 2 ist. Je nachdem, wie lange man eine Taste am Schalter drückt kann das x auch 0 bis 3 sein. Eine direkte Nachvollziehbarkeit ist da leider nicht zu erkennen. Im Anhang nochmal ein Screenshot vom angelegten Flurschalter 1 nachdem die Off-Taste gedrückt wurde.

Das Notify muss also entsprechend aussehen, damit die letzte Ziffer des Readings des Schalters nicht beachtet wird!

define Stripes_K1_on notify Kueche_1:100.* set FBDECT_FritzBox_20 on

Wobei "Stripes_K1_on" der Name des Notify ist. "Kueche_1:100.* besagt, er soll auf das Reading des Schalters mit dem Namen "Kueche_1 reagieren wenn das irgendeinen Wert hat der mit 100 beginnt. Damit wird die letzte Ziffer einfach ignoriert. Und "FBDECT_FritzBox_20 " ist einfach nur meine Schaltsteckdose.

Äquivalent sieht das natürlich für die anderen 4 Tasten des Schalters aus. Dort muss dann eben nur die 100.* gegen die 200.*,b300.* oder 400.* getauscht werden.

Wer also eine HUE-Bridge hat kann damit gutaussehende und recht günstige Schalter in seinem FHEM Universum nutzen. Für das HUE Universum lassen sich die Schalter weiterhin ohne weiteres gleichzeitig nutzen.

Nun warte ich auf meine Mi-Light Empfänger für die LED-Stripes. Dann werden zwei Fritz DECT200 frei und die will ich dann mit einem HUE Dimmer Switch ansteuern. Sollte doch klappen.

Ein großer Dank allen die mir hier bis hierher geholfen haben!

Grüße Kai-Uwe

CoolTux

Hallo Kai,

Vielen Dank für Dein kleines HowTo. Vielleicht schaft es das ja ins Wiki.
Kleine Anmerkung möchte ich dennoch machen. Man muß natürlich nicht 10 Sekunden warten bis die Lampe an geht. Die geht sofort an wenn man auf den Knopf drückt. Nur der Status des Tasters wird erst 10 Sekunden später in FHEM korrekt dargestellt. So ist das gemeint.




Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Kai-Uwe

Hi,

das konnte ich bisher mangels Hardware noch nicht testen. Wenn das wirklich so ist kann man sich das ändern der .pm Datei sparen.

Mal sehen ob ich es dann auch noch hinbekomme das funktionierende Notify für die Verbindung HUE-Schalter und DECT200 zu erstellen.

Grüße Kai-Uwe


Gesendet von iPad mit Tapatalk

Kai-Uwe

#3
So, es geht weiter!

Ich habe nun die benötigte Hardware.

Der Switch ist in HUE angelernt. Ebenso in FHEM mit:

define Kueche_1 HUEDevice sensor 17 1

Er taucht in FHEM auf und die Readings sind wie erwartet:

On              >  100x
Dimm Up     >  200x
Dimm down >  300x
Off              >  400x

Das x nimmt je nach länge des Tastendrucks einen Wert zwischen 0 und 4 an. Meistens 0 oder 2.

Mit:

define Stripes_K1 notify Kueche_1 set FBDECT_FritzBox_20 on

Habe ich dann mal ein Notify angelegt. Und nun komme ich nicht weiter.

Wenn ich nun eine Taste am Switch drücke geht die Steckdose auf on. Das war es aber auch schon. Es ist dabei egal welche Taste ich drücke. Die Steckdose schaltet immer auf on. Es wird nicht unterschieden welche Taste ich drücke und ich kann auch nicht ausschalten.

Ich habe dann folgendes versucht:

define Stripes_K1_on notify Kueche_1:1002 set FBDECT_FritzBox_20 on
und:
define Stripes_K1_off notify Kueche_1:4002 set FBDECT_FritzBox_20 off

um getrennte Notifys für on und off zu haben. Das hat dann allerdings zur Folge, das nicht immer geschaltet wird. Es wird ja auch nicht immer die 1002 bzw. 4002 ausgegeben.

Ich habe mal das abwechselnde Drücken auf den On bzw. Off Taster geloggt:

2016-03-19 13:37:20 HUEDevice Kueche_1 1002
2016-03-19 13:37:24 HUEDevice Kueche_1 4002
2016-03-19 13:37:27 HUEDevice Kueche_1 1002
2016-03-19 13:37:31 HUEDevice Kueche_1 4000
2016-03-19 13:37:34 HUEDevice Kueche_1 1000
2016-03-19 13:37:36 HUEDevice Kueche_1 4002
2016-03-19 13:37:40 HUEDevice Kueche_1 1002
2016-03-19 13:37:42 HUEDevice Kueche_1 4002
2016-03-19 13:37:46 HUEDevice Kueche_1 4002
2016-03-19 13:37:50 HUEDevice Kueche_1 1002
2016-03-19 13:37:56 HUEDevice Kueche_1 1002
2016-03-19 13:37:57 HUEDevice Kueche_1 4000
2016-03-19 13:37:58 HUEDevice Kueche_1 4002
2016-03-19 13:38:01 HUEDevice Kueche_1 1002
2016-03-19 13:38:03 HUEDevice Kueche_1 1000
2016-03-19 13:38:13 HUEDevice Kueche_1 4000
2016-03-19 13:38:14 HUEDevice Kueche_1 4002
2016-03-19 13:38:19 HUEDevice Kueche_1 4001
2016-03-19 13:38:24 HUEDevice Kueche_1 1000
2016-03-19 13:38:25 HUEDevice Kueche_1 1003


Ich müsste das Notify (Die Notifys?) irgendwie so haben das es nur auf 100x für on und nur auf 400x für off reagiert. Wobei x eben eine Ziffer ist die ignoriert werden muss. Perfekt wäre natürlich auch noch mit 200x bzw. 300x für On & Off eine zweite Steckdose ansteuern zu können.

@CoolTux:
Die Ausführung des Schaltvorganges findet übrigens nicht sofort statt, sondern wirklich in der Zeit des eingestellten Intervalls. Schade eigentlich. Aber mit 1 Sekunde ist das vollkommen o. k.

Da komm ich nicht weiter. Nun Hoffe ich auf euch.

Grüße Kai-Uwe

CoolTux

Mach mal bitte das selbe noch mal und schau in den Eventmonitor. Dort sieht man welche events generiert werden und kann dann das notify entsprechend anpassen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Kai-Uwe

#5
Hi,

dort werden wie oben gepostet die 1000, 1001, 1002, 1003 und 1004 für den On Button generiert.
Für den Dimm Up Button sind es entsprechend die 200x usw. Für den Dimm down die 300x und für den Off Button die 400x. Immer in Abhängigkeit von der Druckdauer. Das scheinen aber extrem kurze Zeitunterschiede zu sein. Außer, das je länger, je höher der Wert ist da für mich bisher nichts nachvollziehbar. Zur Not müsste man für jeden der Werte ein Notify schreiben. Nicht schön.......

Mit den Notifys für die 1002 für On und 4002 für Off liegt die "Trefferquote" beim Schalten allerdings schon erstaunlich hoch. Klappt fast immer.

Da da somit wie es ist wäre es am einfachsten der Notify würde die 4.Ziffer des Readings ignorieren. Dann hat man immer noch 4 Tasten auf dem Schalter.

Wenn man den Schalter genauer betätigen könnte wären bis zu 16 Schaltzustände möglich. Dann sollte man aber ein Tutorial ausdrucken und neben dem Schalter aufhängen :-)


Grüße Kai-Uwe

CoolTux


define Stripes_K1_on notify Kueche_1:100.* set FBDECT_FritzBox_20 on


Probiere mal bitte.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Kai-Uwe

Heureka!
Jep!

Habe das gleich für Beide (On und Off) gemacht.

Das scheint es zu sein. Laut Events Ausgabe kommt alles mögliche vom Schalter. Es wird aber immer richtig geschaltet. Immer On bei Druck auf On bzw Off bei Druck auf Off. Die Verzögerung ist lächerlich! Da kann man perfekt mit leben!

Ergebnis: Viele günstige HUE-Switches in der Wohnung verteilen!

Vielen Dank! Und gelernt habe ich auch noch was!

Mein HowTo oben werde ich gleich passen ändern/ergänzen. Evtl. hilft es ja anderen.

Grüße Kai-Uwe

dev0

Zitat von: Kai-Uwe am 19 März 2016, 16:34:23
Mein HowTo oben werde ich gleich passen ändern/ergänzen. Evtl. hilft es ja anderen.
Ich kann CoolTux nur zustimmen: wenn Du das ins Wiki stellen würdest, dann hätte das den Vorteil, dass das irgendwann vielleicht auch von jemand anderem fortgeführt/ergänzt werden könnte. Hier im Forum geht der Beitrag nach ein paar Wochen eh unter und ist nur von Dir editierbar...

Kai-Uwe

Kann denn jeder so ohne weiteres was ins Wiki stellen? Mach ich dann gerne.

dev0

Hier kannst Du einen Account beantragen.

netdom

Hi,

ich hatte vor einigen Tagen eine ähnliche Frage gestellt, prima das du dich auch damit beschäftigt hast.
Hast du durch das Implementieren deiner Lösung mit der 1 Sekundenabfrage eine negative Auswirkung auf die Performance oder sonstige Funktionen deines FHEM Servers festgestellt ? Ist ja immerhin eine Verzehnfachung der Anfragen die der Server (und die Bridge) bewältigen muß.

Kai-Uwe

Hi, heute habe ich noch eine Living Color der 1. Genaration mit hinzugefügt.

Bisher läuft alles so wie gewohnt, Keine Probleme. Alles geht fix bzw. sofort. Nur eben der wie oben beschriebene Switch benötigt Sekundenbrichteile bis reagiert wird.

Bisher also alles Top!


Grüße Kai-Uwe

netdom

Habe jetzt auch nachgerüstet und mir einen Schalter gekauft. Mit deinen Beispielen war das ganze innerhalb von 5 Minuten eingerichtet und funktioniert tadellos.

Ich habe mich mal soweit möglich mit den gesendeten Zahlencodes beschäftigt und mein Notify wie folgt gebaut:


wz.schalter:.* {

  if($EVENT eq "1002" || $EVENT eq "1000") {fhem("set HUEDevice3 on");
  }
  elsif($EVENT eq "4002" || $EVENT eq "4000") {fhem("set HUEDevice3 off");
  }
  elsif($EVENT eq "1003") {fhem("set HUEDevice3 rgb 0800FF");
  }

}




Er schickt manchmal nach einem Tastendruck nicht die x002 sondern manchmal auch die x001, das habe ich mit dem "or" Statement oben abgefangen.
Wenn man länger auf eine Taste drückt, kommt mehrfach x001 und wenn man loslässt die x003. Dies ist so auch gut reproduzierbar. Leider gibt es da noch einen Haken, aus mir noch nicht bekannten Gründen schickt er manchmal vor dem langen Tastendruck noch die x000 . Dies passiert meistens wenn man ein paar Minuten auf keine Taste gedrückt hat. Wenn dies nicht käme, könnte man mit langem Tastendruck einfach eine Doppelbelegung erreichen.


Aber auch so ist das eine feine Sache und funktioniert richtig gut.

Promme

Moin.

Da ich nicht unbedingt ein neues Thema aufmachen wollte ...

Hat sich mal jemand damit beschäftig die Optik des Dimmers zu verändern?

Ich stelle mir vor, statt dem den normalen Zeichen zB ein "Schlafen" Symbol auf einem der Taster zu haben.

Kann man die vorhandene Beschriftung abkratzen oder sonst irgendwie modifizieren?

Grüße
Thomas