Xiaomi Yeelight - Modul

Begonnen von niceday, 28 Oktober 2016, 01:20:25

Vorheriges Thema - Nächstes Thema

niceday

Hallo zusammen,

ich bin noch neu bei Fhem (danke für dieses wunderbare Projekt), habe mich jetzt gut 2 Tage mit befasst und schon fleißig mitgelesen :-)
Nun stelle ich mir jedoch die Frage ob es irgendeine Möglichkeit gibt die o.g. Leuchte Xiaomi Yeelight, E27er Fassung, White (http://xiaomi-mi.com/mi-lighting/xiaomi-yeelight-led-smart-bulb-white-e27/) etwas "komfortabler" anzubinden, ggfs. mit dem WifiLight-Modul ?

Die API ansich zum dem Teil ist ja frei verfügbar: http://www.yeelight.com/en_US/developer, wenn man sich dort das Linux-Beispiel runterläd bekommt man ein Python-Skript, welches auch recht einfach und rudimentär funktioniert, ist aber eher zu Testzwecken nutzvoll, da eine interaktive Eingabe des Nutzers erfordelich ist. Es hat sich rausgestellt, dass das Lämpchen einen Telnetzugriff anbietet.
Ich habe das nun mittels 3 externen Shellskripten gelöst, welche über ein Dummy-Interface in Fhem angesprochen werden und somit lässt sich die Birne steuern. Die Frage ist trotzdem, ob es vielleicht schon ein anderes Modul hierfür gibt ? (habe zwar gut recherchiert, jedoch nichts gefunden)

Anbei meine Shellskripte, wen es interessiert ("xxx" muss entsprechend durch eure IP ersetzt werden) und wie folgt die Definitionen in der fhem.cfg:

define Lampe_Yeelight dummy
attr Lampe_Yeelight group Wohnung,Wohnzimmer,Lampen
attr Lampe_Yeelight room Wohnung,Wohnzimmer
attr Lampe_Yeelight webCmd on:off:dim
attr Lampe_Yeelight setList dim:slider,0,1,100

define n_lampe_yeelight_off notify Lampe_Yeelight:off "/opt/fhem/yeelight_1_off.sh"
define n_lampe_yeelight_on notify Lampe_Yeelight:on "/opt/fhem/yeelight_1_on.sh"
define n_lampe_yeelight_dimm notify Lampe_Yeelight:dim.* "/opt/fhem/yeelight_1_dim.sh $EVTPART1"


LG Nils

DirkS

Großartig!
Habe heute mein Yeelight White bekommen. Die Lampe hat sich verbunden und lässt sich per App steuern.
Aber einen Telnet Zugang auf dem Port 55443 hat meine Lampe nicht. Wobei die Lampe gleich ein Firmware Update durchgeführt hat.
Eventuell wurde der Debug Zugang gestrichen?
MfG
Dirk

niceday

Du musst erst den "Developer Mode" einschalten in den Settings der App. Dann wird erst der Telnetzugang freigeschaltet.

DirkS

#3
Kaum macht man es richtig, funktioniert es auch. Danke!
[BTW]
Hätte mir die Farbe etwas mehr in Richtung warm Weiß gewünscht.
Wie sieht es mit den RGB Modellen aus, gehen sie auf warm Weiß zu schalten?

cc13

#4
Hi,

habe jetzt auch eine solche Lampe und in mein Heimnetz integriert.

Wenn ich jetzt deine Scripts in FHEM installiert habe und den Notify on aufrufe, erhalte ich im FHEM Logfile folgende Meldung:

/opt/fhem/yeelight_1_on.sh: line 3: nc: command not found

Auf der Konsole bekomme ich aber eine Ausgabe von nc, wenn ich es ohne Parameter aufrufe.

Und noch etwas, wo in der App finde ich den Developer-Modus zum einstellen?

Update: Das nc Problem konnte ich lösen, indem ich den kompletten Pfad zu nc im Script eingetragen habe. Bleibt noch der Developer Modus, den ich nicht finde. Im Moment wird nämlich die Verbindung zurückgewiesen.

Update 2: Ich und meine Ungeduld. ;-) Mit der richtigen App funktioniert alles wie oben beschrieben. Ich hatte den QR-Code aus der kleinen Anleitung in der Verpackung gescannt und da bekomme ich eine App, in der kein Developer Modus einstellbar ist.
VG
cc13

cc13

@Nils: Entwickelst du deine Scripte weiter? So mit Farbauswahl...?

niceday

Zitat von: cc13 am 11 November 2016, 11:49:58
@Nils: Entwickelst du deine Scripte weiter? So mit Farbauswahl...?
Ich wüsste nicht was ich noch weiterentwickeln kann. Vielleicht das statt externer Skripte interne Fhem bzw. Perl Funktionen genutzt werden. Zu der RGB-Version kann ich nichts sagen, hab leider nur die weiße Version.
Ich bin nebenbei auf das Mi-Light System umgestiegen bzw. eingestiegen daher werde ich mir wohl keine weiteren Yeelights holen :-)

Gesendet von meinem UMI_ROME_X mit Tapatalk


niceday

Vielleicht hat jemand eine Idee ob man für die Lampe eine feste IP vergeben kann? Alle paar Tage das Skript anpassen weil sich die Adresse geändert hat ist auch nervig.. Oder statt der IP den Hostnamen angeben, der kann aber variieren je nach Seriennummer denke ich (lässt sich im Router o.ä. z.b. sehen welche IP bzw. Hostnamen die Lampe hat).

Gesendet von meinem UMI_ROME_X mit Tapatalk


thaliondrambor

#8
Hallo,

ich habe gestern gerade die Yeelight Wifi RGB bekommen.
Da ich mich schon vorher etwas damit beschäftige habe, glaube ich, dass es eine bessere Möglichkeit geben muss.

Es gibt ein fertiges Paket für node.js hier: https://www.npmjs.com/package/yeelight-wifi.
Leider reichen meine Fertigkeiten und Kenntnisse nicht, um das ganze für FHEM umzusetzen. Das Homebridge-Plugin für FHEM greift ja auch auf ein node.js Paket zu, eventuell könnte man das anpassen.

Es gibt auch ein Plugin für die Homebridge selber (https://www.npmjs.com/package/homebridge-yeelight). Dieses habe ich schon eingerichtet und ich sehe die Lampe nun über die Homebridge auf dem IPhone und kann sie darüber mit Siri steuern (An/Aus, Farbe, Helligkeit).

Meine Grundidee wäre, ein Device in FHEM anzulegen welches als Yeelight-Bridge arbeitet. Dieses sucht nach Yeelight-Komponenten im Netz und legt dann entsprechende Devices in FHEM an. Ein weiterer Vorteil ist, dass der DeveloperMode nicht aktiviert werden muss und somit die Kommunikation weiterhin verschlüsselt läuft.

Ich würde mich riesig freuen, wenn jemand mit mehr Erfahrung mit FHEM und node.js sich eventuell daran setzen könnte.

Gruß

thaliondrambor

cc13

Hallo thaliondrambor,

was meinst du mit, dass du die Lampe über die Homebridge im iPhone siehst? Hast du das Homebridge Modul in FHEM installiert und danach das Homebridge-yeelight?

Was ich heute gemacht habe: Das dim-Script von niceday so angepasst, dass ich den Befehl "set_rgb" aufrufe. Darüber kann ich nur per Parameter die Lampe auf einen bestimmten RGB-Wert setzen. Nun wollte ich das mit dem Colorwheel in FTUI verbinden. Leider liefert das immer HEX-Werte, das Yeelight benötigt aber reine Integerwerte.

Vielleicht können wir ja zusammen arbeiten, um hier vorwärts zu kommen.

Gruß,
CC13

thaliondrambor

Ja genau. Homebridge installiert und das Homebridge-Yeelink Modul. Dann kann man es per IPhone und Siri steuern. Ich habe auch das Homebridge-Fhem Modul installiert, aber dadurch kann ich die Yeelink Lampe trotzdem nicht durch Fhem steuern (oder ich weiß nicht wie). Eben nur mit dem IPhone.

Ich habe heute noch weiter geschaut, weiter drüber nachgedacht und mit einem Kollegen drüber geredet.
Folgendes kommt in Frage:

1. Man könnte die Lampe ins Wifilight-Modul von FHEM versuchen zu integrieren. Die meisten anderen Wifi-Lampen senden ja auch auf UDP. Da müsste man dann jede Lampe allerdings einzeln anlegen, was geht, aber nicht das Optimum ist.

2. Schöner wäre ein eigenes Modul das zweigeteilt ist. Einmal ein Device, dass als Bridge arbeitet. Dieses müsste nur auf den Multicast der Lampen hören (auf  239.255.255.250:1982), den HTTP-Header auswerten (ID, Name, Typ), überprüfen ob die Lampe bereits in FHEM existiert und falls nicht, diese anlegen.
Der zweite Teil des Moduls ist dann die Lampe selbst, die die entsprechenden Befehle per UDP an die Lampe sendet, die Rückmeldungen auswertet und auch auf die regelmäßigen Multicasts hört (alle 3600s).

Die komplette dafür benötigte Dokumentation wurde ja bereits schon verlinkt (http://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf). Sie sieht an sich auch nicht wirklich kompliziert aus. Leider fehlen mir die Kenntnisse um a) ein FHEM-Modul zu schreiben und b) für die Handhabung des UDP-Sockets (wobei dies wahrscheinlich noch das einfachere ist). Meine Programmierkenntnisse sind eher rudimentär. Ich könnte nur aus anderen Modulen was zusammensuchen und anpassen.

Ich werde im Forum "Entwicklung" -> "Wunschliste" einen Post aufmachen und dort auch meine eine Lampe anbieten, damit das Modul entwickelt werden kann. Für den Preis kann man ruhig eine weggeben. Ich wollte eh noch mehr bestellen, da sie mir wirklich sehr gut gefallen.

cc13

Da haben wir doch gestern parallel gearbeitet. Mir hat es keine Ruhe gelassen und ich habe mich mal in die Entwickler-Doku für ein FHEM-Modul eingelesen. Es gibt schlimmere Dokumentation. ;-)

Im Moment habe ich nur eine Lampe und die hat ihre feste IP-Adresse. Mir liegt viel daran, möglichst alle Funktionen der Lampe in FHEM zu integrieren. Also ist eine Bridge-Lösung erstmal nicht in meinem Fokus. Weihnachten steht bald vor der Tür und damit ein paar Tage/Abende an denen Zeit für solche Spielereien ist. Mal sehen, wie weit ich mit dem Entwickeln eines Moduls komme.

Hast du jetzt gar keine Lampe mehr, wenn jemand dein Angebot annimmt? Ansonsten bist du mein Beta-Tester. ;-)

niceday

Zitat von: cc13 am 13 November 2016, 10:14:08
Im Moment habe ich nur eine Lampe und die hat ihre feste IP-Adresse.
Und wie hast du die feste IP vergeben können ?

thaliondrambor

Zitat von: niceday am 13 November 2016, 10:34:59
Und wie hast du die feste IP vergeben können ?

Also die feste IP habe ich über die FritzBox vergeben. Da kann man einfach ein Häkchen machen, dann vergibt die FritzBox immer die selbe IP an das Gerät (identifizieren über die MAC-Adresse). So bekommen alle relevanten Geräte bei mir eine feste IP, ansonsten würde ja so gut wie nichts hunderprozentig laufen, wenn die bei jedem Lease eine neue bekommen würden.

Mit dem Protokoll von Xiaomi könnte man aber die Lampen über die eindeutige ID identifizieren und so spätestens beim nächsten Multicast (alle 3600s) die neue IP übernehmen. Das wäre natürlich komfortabler.

Zitat von: cc13 am 13 November 2016, 10:14:08
Da haben wir doch gestern parallel gearbeitet. Mir hat es keine Ruhe gelassen und ich habe mich mal in die Entwickler-Doku für ein FHEM-Modul eingelesen. Es gibt schlimmere Dokumentation. ;-)

Im Moment habe ich nur eine Lampe und die hat ihre feste IP-Adresse. Mir liegt viel daran, möglichst alle Funktionen der Lampe in FHEM zu integrieren. Also ist eine Bridge-Lösung erstmal nicht in meinem Fokus. Weihnachten steht bald vor der Tür und damit ein paar Tage/Abende an denen Zeit für solche Spielereien ist. Mal sehen, wie weit ich mit dem Entwickeln eines Moduls komme.

Hast du jetzt gar keine Lampe mehr, wenn jemand dein Angebot annimmt? Ansonsten bist du mein Beta-Tester. ;-)

Noch habe ich eine Lampe da und es sind auch schon neue bestellt. Kann nur bis zu 2 Wochen dauern, bis die aus China da sind. Wenn sich jemand melden sollte, der Interesse hat ein Modul zu entwickeln, aber keine Lampe hat, würde ich die zur Verfügung stellen. Ansonsten bin ich gerne Beta-Tester.

cc13

Genauso habe ich die "feste" IP vergeben. Bisher (3 Tage) läuft es ohne IP-Wechsel. Allerdings ist die Lampe bisher auch die ganze Zeit am Strom und online.

niceday

Zitat von: thaliondrambor am 13 November 2016, 10:45:29
Also die feste IP habe ich über die FritzBox vergeben. Da kann man einfach ein Häkchen machen, dann vergibt die FritzBox immer die selbe IP an das Gerät (identifizieren über die MAC-Adresse). So bekommen alle relevanten Geräte bei mir eine feste IP, ansonsten würde ja so gut wie nichts hunderprozentig laufen, wenn die bei jedem Lease eine neue bekommen würden.
Ich habe keine Fritzbox sondern den Telekom-Router, hier kann man zwar die IP und Macadressen sehen, jedoch nicht fest zuordnen, daher muss ich halt immer alle 3 Wochen (kann man ja einstellen wann DHCP neue Adressen vergibt) bzw. bei ggfs. Router Neustart, die neue Adresse raussuchen und das Skript anpassen.

herrmannj

hast Du mal geprüft ob in diesem Fall der hostname bleibt ? Oft werden ja die hostnamen aus der Kombination mac gebildet.

Btw, das keine statischen Adressen gehen (wenn dem wirklich so ist) wäre ein Armutszeugnis für die speedport ...

vg
joerg

niceday

#17
Zitat von: herrmannj am 13 November 2016, 11:58:00
hast Du mal geprüft ob in diesem Fall der hostname bleibt ? Oft werden ja die hostnamen aus der Kombination mac gebildet.

Btw, das keine statischen Adressen gehen (wenn dem wirklich so ist) wäre ein Armutszeugnis für die speedport ...

vg
joerg
Jop, der Hostname bleibt, habe eben nochmal eine neue IP erzwungen, die hat sich dann geändert der Hostname jedoch nicht.
Also ich habe schon alles durchgeschaut, kann dem Gerät keine feste IP zuweisen im Speedport, Foto anbei. Man kann nur einen anderen (Host?)-Namen vergeben, oder den Eintrag aus dem DHCP löschen, sonst nichts weiter.

herrmannj

ok, wenn der hostname bleibt könntest Du ja mit dem hostnamen definieren und alles wäre ok.

Für das modul bedeutet dass das fqn in der def möglich sein sollten. Das erzwingt die Notwendigkeit die DNS Auflösung nonblocking durchzuführen. In httputils ist ein Beispiel für non blocking dns req.

vg
joerg

thaliondrambor

#19
Da mir das ganze keine Ruhe lässt und ich aber trotzdem nicht weiß, wie ich ein FHEM-Modul bauen soll, habe ich etwas an dem Script weitergebastelt ;D

Aufgerufen wird es mit bash yeelight.sh [IP-Adresse] [Befehl] [Effekt]

Die IP-Adresse ist glaube ich klar. Für den Befehl kann folgendes eingesetzt werden:

  • "on" - Einschalten
  • "off" - Ausschalten
  • "toggle" - Umschalten
  • "dim X" - Auf X% Helligkeit stellen [1-100]
  • "RGB X Y Z" - Auf den Farbwert X Y Z einstellen [0-255]
  • "ct X" - Farbtemperatur einstellen [1700-6500]
  • "hsv X Y" - Farbton [0-359] und Sättigung einstellen [0-100]

Wird für X Y Z nichts oder ein falscher Wert eingegeben, dann wird für die Helligkeit automatisch auf 50% eingestellt und bei der Farbe auf weiß. Das Abfangen der Fehler ist also rudimentär.

Für [EFFEKT] gilt folgendes:
Außerdem kann zu jedem Befehl der Effekt ausgewählt werden (außer zu toggle). Es kann sofort umgeschaltet werden mit "sudden" oder ein Verlauf vom aktuellen Zustand zum gewünschten ausgewählt werden mit "smooth" und der gewünschten Dauer in Millisekunden. Die Standardwerte für den Effekt sind "smooth" und 500.

Beispiele für Befehle:
bash yeelight.sh 192.168.0.15 on
bash yeelight.sh 192.168.0.15 off
bash yeelight.sh 192.168.0.15 toggle
bash yeelight.sh 192.168.0.15 dim 30
bash yeelight.sh 192.168.0.15 dim 0
bash yeelight.sh 192.168.0.15 rgb 100 0 220
bash yeelight.sh 192.168.0.15 rgb
bash yeelight.sh 192.168.0.15 ct
bash yeelight.sh 192.168.0.15 hsv 200 30
bash yeelight.sh 192.168.0.15 on sudden
bash yeelight.sh 192.168.0.15 off smooth 200
bash yeelight.sh 192.168.0.15 RGB 100 0 220


Edit:

v0.0.3:

  • Auswählen des Wechseleffekts [smooth|sudden] mit Dauer
  • Toggle hinzugefügt
  • Farbtemperatur hinzugefügt
  • Farbton und Sättigung hinzugefügt
  • Helligkeit von 0% schaltet die Lampe aus

v0.0.2:

  • Dimmen funktioniert jetzt auch mit Kommazahlen, dabei werden alle Stellen nach dem Komma ignoriert (nötig für Steuerung über Slider in FHEM)
  • Beschreibung und kurze Anleitung hinzugefügt

linuxq

Hallo,

ich habe seit heute mein Yeelight RGB und wollte es gleich in FHEM einbauen. Ich habe die yeelight.sh in "/usr/local/bin/yeelight" kopiert und ausführbar gemacht. In der Konsole mit "/usr/local/bin/yeelight 192.168.178.53 on" etc. funktioniert alles super.

Mein fhem.cfg-Eintrag sieht so aus:

##### Yeelight #####
define Lampe_Yeelight dummy
attr Lampe_Yeelight group Wohnung,Wohnzimmer,Lampen
attr Lampe_Yeelight room Wohnung,Wohnzimmer
attr Lampe_Yeelight webCmd on:off:dim
attr Lampe_Yeelight setList dim:slider,0,1,100
define n_lampe_yeelight_off notify Lampe_Yeelight:off "/usr/local/bin/yeelight 192.168.178.53 off"
define n_lampe_yeelight_on notify Lampe_Yeelight:on "/usr/local/bin/yeelight 192.168.178.53 on"
define n_lampe_yeelight_dimm notify Lampe_Yeelight:dim.* "/usr/local/bin/yeelight 192.168.178.53 dim $EVTPART1"


Allerdings schaltet die Lampe nicht. Im Log erscheint es:
2016-11-15 23:49:56 dummy Lampe_Yeelight off
2016-11-15 23:50:00 dummy Lampe_Yeelight dim 46.0
2016-11-15 23:50:11 dummy Lampe_Yeelight off
2016-11-15 23:50:18 dummy Lampe_Yeelight on


Wo könnte mein Fehler liegen?

Danke für die Entwicklung!!!

LinuxQ

thaliondrambor

#21
Der Aufruf des Shell Scripts muss mit "system()" an das OS gesendet werden. Außerdem ist für das richtige Ausführen auf Systemebene ein "bash" nötig: So sollten deine Notifys funktionieren:
define n_lampe_yeelight_off notify Lampe_Yeelight:off {system('bash /usr/local/bin/yeelight 192.168.178.53 off')};
define n_lampe_yeelight_on notify Lampe_Yeelight:on {system('bash /usr/local/bin/yeelight 192.168.178.53 on')};
define n_lampe_yeelight_dimm notify Lampe_Yeelight:dim.* {system('bash /usr/local/bin/yeelight 192.168.178.53 dim $EVTPART1')};


Du hast die "yeelight.sh" in "yeelight" umbenannt? Ansonsten fehlt auch eventuell noch das ".sh"

linuxq

Danke! Jetzt kann ich die Lampe ein- und ausschalten. Dimmen geht aber nicht. In der Bash beschwert sich das Skript, das eine Ganzzahl erwartet wird:

pi@retropie:~ $ yeelight 192.168.178.53 dim 25.0
/usr/local/bin/yeelight: Zeile 15: [: 25.0: Ganzzahliger Ausdruck erwartet.
{ "id":1, "method":"set_bright", "params":[50,"smooth",500]}\r\n
pi@retropie:~ $


Wie kann ich den Sliderwert zur Ganzzahl konvertieren? Oder ist der Fehler ein anderer?

Danke für die Hilfe nochmal.

Gesendet von meinem BlackBerry DTEK50


thaliondrambor

#23
Gute Frage.
Das liegt am Slider, der den Wert als Kommazahl weitergibt. Ich habe leider nichts gefunden mit dem man das Verhalten des Sliders verändern kann.

Mir fallen zwei Lösungen ein. Entweder den Wert in FHEM erst auf eine Ganzzahl ändern oder das ganze im Script zu machen. Ich schaue mal, ob ich das auf die schnelle hinbekomme. Ich weiß aber nicht, ob ich es heute noch schaffe.

Edit:

Ich habe das Script so angepasst, dass beim Dimmen alles ab dem Punkt (inklusive dem Punkt selbst) abgeschnitten wird. So sollte es mit dem Dimmen klappen über den Slider.

linuxq

Super Danke!  Das muss ich aber leider morgen ausprobieren.

Gesendet von meinem BlackBerry DTEK50


thaliondrambor

Auch wenn ich eigentlich keine Zeit habe, habe ich dann doch an dem Script weiterbasteln müssen  :D

Das Script kann nun auch die Toggle-Funktion, einen Wechseleffekt auswählen, die Farbtemperatur steuern (Weißtöne) und die Farbe über den Farbton und Sättigung steuern. Das neue Script hänge ich in meinem ersten Post an.

cc13

Nicht so schnell, wie soll ich das alles noch in ein Modul bekommen? ;-)

Nein, finde ich prima, was du machst. Ich werde am Wochenende dein Script testen und dir Feedback geben.


thaliondrambor

#27
Naja, viel mehr können die Lampen fast nicht^^

Es fehlen nur noch Timer, Farbfolgen und Schalten zu bestimmten Uhrzeiten.

Was in dem Script fehlt, ist das komplette Auswerten der Antworten von den Lampen. Aber da es einfach eine Weile dauert bis die Antwort kommt, macht es das Script sehr langsam. Hatte mal versucht mit get_probs zu testen, ob die Lampe erreichbar ist und dann auszuwerten, ob sie an oder aus ist. Aber das hat mir alles zu lange gedauert.

Ich habe mich entschieden, mich doch mal mit der Modul-Entwicklung zu befassen. Also erstmal rauszufinden, wie das alles geht, welche Struktur, welche Herangehensweise, welche Regeln. Aber erstmal unabhängig von den Yeelights.

Edit: Momentan scheitert es daran, dass ich es nicht schaffe in Perl mittels TCP die Lampe zu schalten. Der Socket is aufgebaut, die Nachricht an den Server entspricht dem geforderten JSON-Format (wie im Shell Script eben auch), aber die Lampe reagiert nicht. Vielleicht kann mir einer einen Tipp geben, was ich falsch mache. Das Perl-Script hänge ich an (viel auskommentiert, weil ich schon viel rumprobiert habe).

thaliondrambor

Ich habe es mittlerweile auch geschafft, dass ich über den TCP-Socket mit Perl die Lampe schalten kann.
Falls sich wer anderes auch daran versuchen möchte: Damit die Lampen das Ende der Nachricht erkennen, muss das "\r\n" richtig gesendet werden. Dafür darf es nicht mit "" oder '' verpackt werden, sondern mit qq(). Also als Beispiel: $msg = qq({"id":1, "method":"set_power", "params":["on", "smooth", 500]}\r\n);

Ich habe auch eine kleine pm-Datei für FHEM geschrieben. Damit kann man momentan ein-, ausschalten, Helligkeit einstellen und den Farbwert und die Sättigung (HSV). Als Rückgabewert gibt es immer den aktuellen Zustand der Lampe aus. Ich musste noch das CPAN-Modul "Data::Validate::IP" nachinstallieren, da es auf meinem System nicht drauf war. Das Programm nutzt es zum überprüfen der korrekten Eingabe der IP. Eventuell werde ich das demnächst ohne das Modul lösen.

Vielleicht findet sich ja noch einer, der das ganze irgendwie in einem Modul umsetzen kann.

thaliondrambor

Abend,

ich habe mich zwar zwischenzeitlich auch etwas an der Modulentwicklung versucht, aber das ganze Thema, vor allem mit den nonblocking Ports, überfordert mich noch etwas.
Allerdings habe ich in der Zwischenzeit die 99_YeelightUtils.pm etwas weiter entwickelt. Es sind mehr Funktionalitäten der API umgesetzt (noch nicht alle) und es kann auch über den Farbnamen gesteuert werden, ohne den zugehörigen HSV-Wert zu kennen.

Vielleicht hilft es ja jemandem weiter.

Hat eigentlich noch jemand andere Geräte aus der Xiaomi SmartHome Serie? Dort gibt es ja auch noch Schalter, Steckdosen, Bewegungsmelder und und und. Die Kommunikation dort läuft dann allerdings über Zigbee, wofür auch noch ein Gateway benötigt wird. Das Gateway kostet knapp über 30€ und die Sensoren und Schalter sind alle unter 10€.

drsoran

#30
Hallo,

ich habe vor kurzem auch 2 Yeelights bekommen. Ich habe mal angefangen ein Modul zu entwickeln, welches die Grundfunktionen der Birne unterstützt. Das sind:

  • an/aus
  • Helligkeit
  • RGB
  • HSV
  • Farbtemperatur

Eventuell hilft es jemanden sein Yeelight in FHEM zu integrieren. Ich hoste das Modul unter:

https://bitbucket.org/drsoran/32_yeelight/downloads?tab=tags

Einfach die v1.0 runter laden und die Datei 32_Yeelight.pm ins FHEM Modulverzeichnus kopieren. Dokumentation ist unter:

https://bitbucket.org/drsoran/32_yeelight/wiki/Home

Für feedback wäre ich dankbar.

Stoanze01

Hi,

@drsoran: Ich habe eben dein Modul installiert und versucht meine Yeelight zu schalten, bekomme dann
Usage: fade must be a number of at least 30ms

im Logfile heißt es..
PERL WARNING: Use of my $_ is experimental at ./FHEM/32_Yeelight.pm line 358.

was fehlt noch bzw. was mache ich falsch?


Bin noch relativ neu bei FHEM und hoffe meine Frage ist nicht total doof!




thaliondrambor

Hallo an euch beide, es gibt bereits ein Modul für die Yeelights. Ich kann gerade den Link nicht schicken, aber mal unter Anwendungen -> Beleuchtung schauen.

drsoran

@Stoanze01: Funktioniert es gar nicht bei dir? Dem Fehler nach hast du versucht ein "set" command mit fade abzusetzen. Also etwa wie set myLamp on <fade>
Könntest du prüfen das <fade> ein Zahl ist und mindestens 30?

Also nochmal. Was geht bei dir? Kannst du schalten? Könntest du dein "define" und Attribute aus der fhem.cfg posten? Die Warnung im log file kann nicht dein Problem sein, ich werde sie aber entfernen.

@thaliondrambor: Wusste gar nicht, dass es schon ein Modul gibt. Ich hatte nur diesen thread hier gesehen und da sah es aus, also ob es sowas noch nicht gibt. Jetzt gibt's wohl 2. ;D

Stoanze01

@drsoran: Kann leider garnichts Schalten, meine fhem.cfg Konfiguration ist:
define wz_Yeelight Yeelight 192.168.xx.xx
attr wz_Yeelight alias Yeelight
attr wz_Yeelight event-on-change-reading *
attr wz_Yeelight room Wohnzimmer


nach deffine des Device, beim Versuch es on oder off zu schalten bekomme ich einen Dialog mit eben der Meldung  :(
Was mir etwas komisch vorkommt, im Device wz_Yeelight bleibt 'STATE' immer auf 'initialized', also wird die Lampe doch erst garnicht erkannt oder!?

Hatte heute leider aber auch keine Zeit mehr mich weiter damit zu beschäftigen  :-\

Vielen Dank schon mal im voraus für deine Hilfe!


drsoran

Also ich konnte das Problem mit der Fehlermeldung nachvollziehen. Ich habe eine neue Version des Moduls hochgeladen. Warum bei dir der state auf "initialized" bleibt verstehe ich nicht. Ich habe bei mir mal ein device angelegt und ihm eine IP gegeben, die nicht existiert. Bei mir wechselt der state sofort auf "disconnected".

Kleine Zwischenfrage: Hast du den "developer mode" an deinem Yeelight aktiviert? Das machst du in der Yeelight App. Ausserdem erhöhe mal den verbose level auf 4 und setze mal in FHEM ein "rereadcfg" ab. Guck in das fhem.log und du solltest sehen, dass sich die Lampe versucht zu connecten. Das log kannst ja mal posten.


define wz_Yeelight Yeelight 192.168.xx.xx
attr wz_Yeelight alias Yeelight
attr wz_Yeelight event-on-change-reading *
attr wz_Yeelight room Wohnzimmer
attr wz_Yeelight verbose 4


Du kannst auch ein connect anstoßen indem du ein "set wz_Yeelight connect" absetzt.

Stoanze01

#36
Ok, super danke dafür schon mal drsoran.

"developer mode" ist aktiviert, "verbose" auf 4 gesetzt und "reradcfg" abgesetzt. Nach triggern von "set wz_Yeelight connect" habe ich nun einige Readings mehr und der aktuelle STATE wird auch richtig angezeigt da ich die Yeelight mit dem App zuvor eingeschaltet habe.
Kann jedoch noch immer nichts schalten, bekomme die Meldung "Usage: fade must be a number of at least 30ms" weiterhin  :-\

Eintrag im .log:
2017.01.09 20:58:31.376 3: wz_Yeelight: connected

Wenn ich, wie du mir gesagt hast, einen Befehl mit Angabe von fade=30 sende, also
set wz_Yeelight off 30
schaltet die Lampe auch ab. Funktioniert aber nur wenn fade eben größer als 30 ist, ohne diese Angabe geht es leider nicht.

Im Event monitor werden immer zwei Events gelistet.....
2017-01-09 21:04:38.423 Yeelight wz_Yeelight off 30
2017-01-09 21:04:38.438 Yeelight wz_Yeelight off
2017-01-09 21:04:50.816 Yeelight wz_Yeelight on 40
2017-01-09 21:04:50.829 Yeelight wz_Yeelight on
2017-01-09 21:05:08.789 Yeelight wz_Yeelight off 50
2017-01-09 21:05:08.796 Yeelight wz_Yeelight off
2017-01-09 21:07:34.967 Yeelight wz_Yeelight on 100
2017-01-09 21:07:35.374 Yeelight wz_Yeelight on


Ein
set wz_Yeelight on
liefert mir nur wieder die Meldung "Usage: fade must be a number of at least 30ms".

Auch beim setzten der brightness muss ich die fade Angabe machen sonst geht´s nicht. Bsp.:
set wz_Yeelight bright 50 30

drsoran

Das ist ja schon mal gut das es prinzipiell bei dir geht. Wegen den 30ms: bist du sicher, dass du die letzte Version des Moduls genommen hast? Ich hatte eine v1.1 hochgeladen.

https://bitbucket.org/drsoran/32_yeelight/get/v1.1.tar.gz

Da sollte der Fehler dann raus sein. Du kannst die neue Version einfach über die alte in FHEM kopieren und dann in FHEM mit

reload 32_yeelight.pm

die Änderungen laden.

Stoanze01

Ach shit, das habe ich gestern vergessen zu aktualisieren. Werde ich Abends gleich ausprobieren und mich wieder melden! 

Vielen Dank für deine Unterstützung!



Stoanze01

Funktioniert einwandfrei!!! Wirklich ein klasse Modul drsoran, vielen Dank auch nochmal für deine Hilfe & Geduld! 



Hast du vor auch noch für andere Xiaomi Geräte ein Modul zu schreiben?
Finde die Xiaomi Geräte wirklich klasse, alleine schon das Preis/Leistungsverhältnis ist einfach unschlagbar. Da ich mich selber aber noch nicht sehr lange mit der Gebäudeautomatisierung und FHEM beschäftige wird es mit Sicherheit noch etwas dauern bis ich selber in der Lage bin ein Modul zu schreiben. Der 'Xiaomi Mini Smart Home Temperature and Humidity Sensor' beispielsweise interessiert mich brennend  ;D

drsoran

Das ist ja schön, dass es endlich funktioniert. Die Yeelights waren bisher das einzige, was ich ausprobiert hatte. Aber du hast Recht. Das Preis/Leistungsverhältnis ist einfach gut. Mal sehen was noch kommt....

Stoanze01

#41
Es müsste doch möglich sein das Modul Colorpicker https://wiki.fhem.de/wiki/Color für die Yeelight zu nutzen. Irgendwie bekomme ich es nicht gebacken, hat hier schon jemand Erfahrungen?

Funktioniert nun, hatte aus noch unbekannten Gründen
attr global userattr cmdIcon devStateIcon devStateStyle icon sortby webCmd widgetOverride
nicht gesetzt.

Jedoch schaffe ich es nicht mit defStateIcon das Icon in der eingestellten Farbe anzuzeigen..
attr wz_Yeelight devStateIcon {Color_devStateIcon(ReadingsVal($name,"rgb","000000"))}

memed

Hi,


Ich habe versucht wie hier in den ersten Postings beschrieben die Dimmer-Funktion in die Weboberfläche zu integrieren, meine Frage ist jetzt:
- wie rufe ich ein externes Programm auf und übergebe den Slider-Wert an das externe Skript?
- wie kann ich zwei Slider für ein Device nutzen (und extern übergeben)?

Hintergrund ist, ich kann/möchte das FHEM Perl Modul nicht nutzen, auf einer Synology eine ganze Make/Gcc/Ipkg Umgebung drauf zu packen nur um JSON:XS ans laufen zu bekommen um ein paar Klammer-Strings zu lesen und schreiben...
Warum nicht: weil es einfach auf ein NAS nicht passt, eine Development-Umgebung zu packen, bei Updates man immer Gefahr läuft, dass es nicht mehr klappt und ich da keine Zeit drauf investieren will.
Naja ich habe leider auch kein "NC" für die Synology (415Play, x86) gefunden, also kann ich die Shellscripte vom Anfang des Threads nicht nutzen.
Es war aber schnell erledigt die Bash-Skripte in Python "nach" zu bauen, nur ich scheitere jetzt an FHEM.

Danke für Hilfe (und nein, in der Commandreferenz steht zu Übergabe von Slider Werte an externe Skripte nichts was ich  finden würde)
-M

ridestar

Zitat von: Stoanze01 am 21 Januar 2017, 17:47:52
Es müsste doch möglich sein das Modul Colorpicker https://wiki.fhem.de/wiki/Color für die Yeelight zu nutzen. Irgendwie bekomme ich es nicht gebacken, hat hier schon jemand Erfahrungen?

Funktioniert nun, hatte aus noch unbekannten Gründen
attr global userattr cmdIcon devStateIcon devStateStyle icon sortby webCmd widgetOverride
nicht gesetzt.

Jedoch schaffe ich es nicht mit defStateIcon das Icon in der eingestellten Farbe anzuzeigen..
attr wz_Yeelight devStateIcon {Color_devStateIcon(ReadingsVal($name,"rgb","000000"))}
Ich habe leider nach wie vor das Problem, dass ich keine Slides bekomme. Bei mir steht immer nur in der Anzeige "opened" und "RGB". Habe schon webcmd auf RGB und widgetoverride auf rgb:colorpicker,RGB gesetzt. Leider klappt s nicht. Hat noch jemand eine Idee?

Dann habe ich noch ein weiteres Problem. Ich will die Lampe mit HomeKit nutzen. Funktioniert auch soweit. Ich kann die Lampe über die Home-App an und ausschalten und auch die Farben wechseln. Allerdings wird sie mir jedesmal als An angezeigt sobald ich die App öffne. Ich denke es liegt dadran, dass der Status "opened" ist. Weiss jemand ob es hierfür eine Lösung gibt?

Stoanze01

ZitatBei mir steht immer nur in der Anzeige "opened" und "RGB".

Du musst webCmd hsv setzen, vielleicht schadet es auch nicht deine Lampe einmalig mit einem set hsv auf hsv "umzustellen". Kann ich mir zwar nicht vorstellen aber einen versuch ist es allemal wert!
set Yeelight hsv 120,30,50

Die Color.pl ist sicher vorhanden? https://wiki.fhem.de/wiki/Color

Muss gehen....    hier mal meine config der Yeelight

# Yeelight
#####################################################

define Yeelight Yeelight 192.xxx.xxx.xxx
attr Yeelight userattr keepAlive
attr Yeelight defaultFade 80
attr Yeelight group Lichter
attr Yeelight icon hue_filled_white_e27_b22
attr Yeelight room Wohnzimmer
attr Yeelight userReadings hsv {ReadingsVal($name,'hue','360').','.ReadingsVal($name,'sat','100').','.ReadingsVal($name,'bright','100')}
attr Yeelight webCmd hsv
attr Yeelight widgetOverride hsv:colorpicker,HSV,hue,0,1,360,sat,0,1,100,bright,0,1,100

################################################




ridestar

tatsächlich jetzt geht es. Es lag wirklich dadran einmalig mit Set auf HSV zu setzen.

Für die Homebridge Problematik hast du zufällig keine Lösung?

Stoanze01

Freut mich zu hören und auch gut zu wissen dass ein einmaliger 'set hsv x,x,x' wirklich notwendig ist.

Etwas wenig Information 'Homebridge Problematik' um dir helfen zu können, am besten du versuchst es aber gleich in einem passenden Thread!

chrisnitt

Zitat von: thaliondrambor am 07 Januar 2017, 15:16:29
Hallo an euch beide, es gibt bereits ein Modul für die Yeelights. Ich kann gerade den Link nicht schicken, aber mal unter Anwendungen -> Beleuchtung schauen.

https://forum.fhem.de/index.php/topic,62570.0.html

Funktioniert super.

Merlin123

Sehe ich das richtig, dass wir jetzt zwei gleichnamige Module haben, die ähnliches machen?
Worin unterscheiden sich die Module funktionsmäßig?
Gruß,
Oliver

thaliondrambor

Zitat von: Merlin123 am 04 April 2017, 13:44:24
Sehe ich das richtig, dass wir jetzt zwei gleichnamige Module haben, die ähnliches machen?
Worin unterscheiden sich die Module funktionsmäßig?

Ich kenne das Modul von drsoran nicht so gut, aber soweit ich das sehe, sind beide Module in den Grundfunktionen der Lampen gleich. Das andere Modul von mir (https://forum.fhem.de/index.php/topic,62570.0.html) hat noch ein paar weitere Funktionen, wie z.B. eine vorgefertigte Blinken-Funktion, die Unterstützung der Szenen-Funktion der Lampen inklusive ein paar vorgefertigter Szenen und die Möglichkeit, eigene Szenen als Attribut festzulegen.

Der deutlich größere Unterschied ist, dass es zu dem YeeLight-Modul an sich auch noch ein "Bridge"-Modul gibt, wobei dieses nur eine softwareseitige Bridge ist. Diese kann im Netz nach neuen Lampen suchen, kann diese durch eine eindeutige ID identifizieren und sie so auch bei geänderten IP-Adressen (z.B. durch DHCP) wiedererkennen. Auch wenn die Lampen durch andere Geräte gesteuert werden (z.B. die Smartphone-App), empfängt die Bridge diese Informationen und leitet sie weiter, so dass die Readings stets aktuell sind. Zusätzlich können in der Bridge gewisse Attribute für alle Lampen gesetzt werden, wie zum Beispiel die Standardrampe (Ein- und Ausschaltzeit der Lampe). Dieses Attribut gilt dann für alle Lampen, so lange das Attribut der Lampe selbst nichts anderes sagt.

Ich hatte am Anfang das Problem, dass Nachrichten verschluckt wurden, wenn sie zu schnell hintereinander kamen. Dies habe ich durch Warteschlangen gelöst, in denen alle gesendeten und empfangenen Nachrichten gespeichert werden und dann abgearbeitet. Da kann ich aber nichts zu sagen, ob drsoran dieses Problem auch gelöst hat.

mi.ke

Aber Bluetooth unterstützen beide Module nicht, oder?
(z.B. wegen der Xiaomi Yeelight Nachttischlampe)

Ist da vielleicht geplant?

Cheers

mi.ke
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

Merlin123

Ist auf jeden Fall sehr verwirrend, auch weil beide Module gleich heißen.

Gesendet von meinem LG-H850 mit Tapatalk

Gruß,
Oliver

thaliondrambor

Zitat von: mi.ke am 14 April 2017, 14:12:22
Aber Bluetooth unterstützen beide Module nicht, oder?
(z.B. wegen der Xiaomi Yeelight Nachttischlampe)

Ist da vielleicht geplant?

Cheers

mi.ke
Momentan nicht. Ich weiß auch nicht, ob es dafür eine API gibt bzw. jemand die Bluetooth-Befehle ergründet hat. Was eventuell geht, ist das Steuern mithilfe des Gateways von Xiaomi. Für dieses gibt es auch ein Modul.
Müsste man aber mal genauer nachforschen oder ausprobieren.

mi.ke

FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

retikulum

Bin ich der Einzige mit dem Problem, dass das devStateIcon nicht funktionieren will? Der Standard-State bei dem Yeelight-Modul ist opened und closed.
Wenn ich nun, wie normalerweise, den Status "power" als stateFormat angeben möchte, kann ich die Lampe danach nur genau einmal schalten. Beim zweiten Mal dann immer die Meldung
"Can't send command if bulb is not connected. Try "reopen" and check, if bulb is powered. Current state is off". Ich muss hier also erst "reopen" senden und dann geht wieder genau ein Schaltvorgang.

Gibts hier einen Trick? Ein Workaround wäre sicherlich über ein Notify beides hintereinander schalten: Reopen und On bzw. off. Aber das ist ja auch nicht der Sinn eines Moduls...

Danke schonmal.

floflo

Habe das gleiche Problem wie retikulum. Da es mit anderen Lampen bei mir geht, gehe ich davon aus, dass das Problem auf das Modul zurückzuführen ist. Kann jemand genaueres sagen?

ChHerrm

#56
Hallo,
ich nutze das Xiaomi Yeelight - Modul um die WLAN-Nachttischlampe zu schalten. Die befindet sich auch im Netzwerk, lässt sich anpingen, per Xiaomi-APP bedienen aber nicht mehr per FHEM. Vor einigen Wochen ging es noch, dann hatte sich das irgendwann erledigt.
Läuft das bei euch noch? ???

Hier die Konfiguration:

define Nachttisch YeeLight 192.168.0.XYZ
attr Nachttisch devStateIcon {my $power=ReadingsVal($name,"power","off");;my $mode=ReadingsVal($name,"color_mode","RGB");;if($power eq "off"){Color::devStateIcon($name,"rgb","rgb","power");;}else{if($mode eq "RGB"){Color::devStateIcon($name,"rgb","rgb","bright");;}elsif($mode eq "color temperature"){Color::devStateIcon($name,"rgb",undef,"bright");;}}}
attr Nachttisch eventMap on:an off:aus
attr Nachttisch group Licht
attr Nachttisch icon light_wall_3
attr Nachttisch room Wohnung
attr Nachttisch userReadings keepAlive
attr Nachttisch webCmd an:aus
attr Nachttisch widgetOverride bright:colorpicker,BRI,0,1,100 ct:colorpicker,CT,1700,10,6500 rgb:colorpicker,RGB
attr Nachttisch devStateIcon {my $power=ReadingsVal($name,"power","off");;my $mode=ReadingsVal($name,"color_mode","RGB");;if($power eq "off"){Color::devStateIcon($name,"rgb","rgb","power");;}else{if($mode eq "RGB"){Color::devStateIcon($name,"rgb","rgb","bright");;}elsif($mode eq "color temperature"){Color::devStateIcon($name,"rgb",undef,"bright");;}}}
attr Nachttisch widgetOverride bright:colorpicker,BRI,0,1,100 ct:colorpicker,CT,1700,10,6500 rgb:colorpicker,RGB


PS: Die mangelnde Erreichbarkeit per FHEM äußert sich natürlich in der üblichen Meldung: "Can't send command if bulb is not connected. Try "reopen" and check, if bulb is powered. Current state is disconnected", bzw. Log-Eintrag: "Nachttisch: connect to http://192.168.0.xyz:55443 timed out"

Hausierer

Hallo Zusammen,
eine Frage in die Runde, ist es normal das die Yeelight  800lm e27 Rgbw Lampe auch auf der niedrigsten Helligkeitsstufe sehr hell ist? Gefühlt kann ich nur auf ca. 50% dimmen (in der App oder im FHEM Modul 1%) und bei 0 ist dann natürlich aus.
Gruß der Hausierer

veeroohre

Zitat von: ChHerrm am 24 Juni 2018, 18:58:13
Läuft das bei euch noch?

Yo, läuft bei mir noch.
Nur leider spammt mir das Modul das Log voll (jede Minute "Keine Route zum Zielrechner"), wenn die Lampe ohne Strom ist. Sehr unschön.

Kann man das irgendwie unterdrücken?

afrix

Hallo zusammen!
Ich betreibe schon lange erfolgreich 3 Yeelight-E27-Birnen zusammen mit FHEM.
Das einzige, was mich stört, sind unzählige Logeinträge, falls die Yeelights vom Strom getrennt sind:

2019.02.21 23:24:52 2: wz_ak_yeelight2: connect to http://192.168.0.69:55443 timed out
2019.02.21 23:24:54 2: wz_ak_yeelight1: connect to http://192.168.0.66:55443 timed out
2019.02.21 23:24:57 2: wz_ak_yeelight3: connect to http://192.168.0.70:55443 timed out
2019.02.21 23:25:55 2: wz_ak_yeelight2: connect to http://192.168.0.69:55443 timed out
2019.02.21 23:25:57 2: wz_ak_yeelight1: connect to http://192.168.0.66:55443 timed out
2019.02.21 23:26:00 2: wz_ak_yeelight3: connect to http://192.168.0.70:55443 timed out


Gibt es eine Möglichkeit, dass ich diese minütlichen Fehlermeldungen unterdrücke und nicht in die Logdatei schreibe?
Danke für euren Support!

Neuling

Hi,

Ich habe meinen das Attribut ,,verbose 1" gegeben. Seit dem bekomm ich die Meldung nur noch einmal beim an und abmelden.
Intel NUC (ESXI) mit FHEM und IoBroker -> CUL868 -> LaCrosse GW -> Zigbee CC2530 + CC2531 -> Shelly2 –> Yeelight

afrix

Vielen Dank, das hat funktioniert!