RGB-Ambientlicht im Eigenbau

Jeder der sich mit Smart-Home beschäftigt, wird früher oder später auf die Lampen aus der Philips-Hue Reihe stoßen. Mittlerweile gibt es ein breites Angebot. Beginnend bei den einfachen Lampen mit E27 Fassung bis hin zu kompletten Ambient-Leuchten wie die Philips Living Colors Iris.

Sale
Philips Hue White E27 LED Lampe Erweiterung, dimmbar,...
Philips - Haushaltswaren - Italienisch, Deutsch, Französisch, Englisch, Spanisch
19,95 EUR - 3,00 EUR 16,95 EUR
Sale
Philips Living Colors Iris, EEK A, Energiesparende...
Philips - Haushaltswaren - Italienisch, Deutsch, Französisch, Englisch, Spanisch
129,00 EUR - 65,05 EUR 63,95 EUR

Letzte Aktualisierung am 23.08.2017 / Affiliate Links / Bilder von der Amazon Product Advertising API

Aber leider sind diese Lampen meistens etwas teurer und lassen sich meist nicht ohne zusätzlicher Bridge in FHEM einbinden.

Aus diesem Grund möchte ich euch in diesem Beitrag gerne zeigen, wie ihr relativ kostengünstig eure eigene Ambient-Beleuchtung bauen könnt und diese in FHEM einbinden und somit steuern könnt.

Grundidee

Ich hatte mir bereits vor Jahren eine einfach RGB-Lichtkugel von Tschibo gekauft. Im eingeschalteten Zustand hat sie den RGB-Farbraum durchlaufen und durch einen Knopf konnte man bei der gewünschten Farbe stoppen. Für den Anfang hat mir das auch gereicht, nur als ich immer mehr ins Thema FHEM eingestiegen bin, kam mir irgendwann der Wunsch, diese Lampe etwas smarter zu machen.

Mein Ziel war es, die Lampe in FHEM einzubinden und sie somit darüber steuern zu können. Mit der aktuell verbauten Technik war dies leider nicht möglich. Bevor ich mir also eine Alternative überlegt habe, habe ich eine Liste der Anforderungen erstellt.

  • Ansteuerung einer oder mehrer RGB-LEDs
  • Einbinden über das heimische WLAN, damit kein weiteres Gateway nötig ist
  • Platzsparend
  • Flexibel in der Ansteuerung und einfaches Einbinden in FHEM

Umsetzung

Mein Gedanke fiel dabei sofort auf ESP-Easy. Die Administrationssoftware für ESP-Bausteine hat bereits eine Vielzahl an Sensoren und Aktoren implementiert. Dank des ESP-Bausteins lassen sich diese zudem einfach ins eigene Heimnetz einbinden. Des Weiteren existieren bereits Module für FHEM um diese auch hier einbinden und steuern zu können. Also beste Vorraussetzung für meine eigene RGB-Ambientbeleuchtung. Da ich zuhause noch ein paar WeMos D1-Mini-Pros habe, habe ich mich für diesen als Herzstück für die RGB-Ambientleuchte entschieden. Es sind natürlich auch andere ESP-Module möglich. Wichtig ist, dass ihr mindestens drei PWM-Ausgänge habt. Je nach Anzahl der LEDs.

Letzte Aktualisierung am 23.08.2017 / Affiliate Links / Bilder von der Amazon Product Advertising API

Damit die Lampe später auch eine gewisse Helligkeit liefern kann, habe ich mich für eine High-Power-RGB-LED entschieden. Dimmen kann man ja softwaretechnisch später immer noch.

Highpower LED 3W RGB auf PCB, rot grün blau
world-trading-net - Elektronik
3,69 EUR

Letzte Aktualisierung am 23.08.2017 / Affiliate Links / Bilder von der Amazon Product Advertising API

Aufgrund der hohen Leistung der LED, ist ein direktes Steuern über den ESP-Chip leider nicht möglich. Bevor ich mir nun eine Transistorschaltung mit entsprechenden Vorwiderständen (je nach Farbe unterschiedlich) aufbaue, habe ich mich auf die Suche nach einer Konstantstromquelle gemacht. Die LED benötigt je Farbe bei maximaler Helligkeit ca. 350mA. Durch eine PWM-gesteuerte (Pulsweitenmodulation) Konstantstromquelle wäre ein Dimmen und somit ein Mischen der Farben möglich, ohne auf die unterschiedlich benötigten Spannungen der LED-Farben achten zu müssen. Fündig wurde ich auf eBay. KT-Electronic bietet eine 300mA Konstantstromquelle an, welche man über PWM dimmen kann. Des Weiteren sind sie für einen großen Spannungsbereich einsetzbar (Input: 6-30V; Output: 0-30V), sodass man mit denen auch größere Projekte (mehr LEDs) problemlos realisieren kann. Da ich jede Farbe getrennt steuern möchte, habe ich mir drei von diesen Quellen besorgt.

Da die Ausgänge der WeMos-Bausteine auf 3,3V laufen, kann es am PWM-Eingang der Konstantstromquelle zu Problemen und Fehlinterpretationen kommen. Um dies vorzubeugen, habe ich mich für den zusatzlichen Einsatz von Pegelwandlern (optional) entschieden. Diese regeln die 3,3V-Pegel des WeMos-Bausteins auf 5V-Pegel, welche dann problemlos von der Konstantstromquelle als HIGH-Pegel erkannt werden. Auch hier wurde ich wieder bei eBay fündig - 3,3V zu 5V Pegelwandler.

Ein Weiterer wichtiger Punkt war die Stromversorgung. Der WeMos-Baustein benötigt 5V und die Konstantstromquellen mindestens 6V (bei einer LED). Um die Lampe in Zukunft eventuell durch zusätzliche LEDs erweitern zu können, habe ich mich dazu entschieden, die Konstantstromquellen mit 12V zu betreiben. Dies erlaubt mir den Einsatz von bis zu drei LEDs in Reihe. Um den WeMos-Baustein nun mit seinen benötigten 5V zu versorgen, habe ich einen Step-Down-Spannungswandler eingesetzt, der mir die 12V Eingangsspannung auf 5V herunterregelt, ohne groß Abwärme zu produzieren. Was bei einem einfachen Spannungsregler 7805 leider der Fall wäre. Auch hier wurde ich wieder bei eBay fündig - LM2596 DC Step Down Spannungswandler.

Als Steckernetzteil habe ich eins verwendet mit 12V und 2A. Je nach Anzahl der LEDs ist eventuell eine Netzteil mit mehr Leistung notwendig, bzw. mit einer höheren Ausgangsspannung. Der Strom ist bei maximaler Helligkeit immer 3x300mA (je nach Konstantstromquelle). ​Mit 2A hat man also genug Leistung zum Betreiben der High-Power-LEDs und der zusätzlichen Module. Bei den verwendeten Konstantstromquellen kann man die benötigten Kenndaten des Netzteils aus folgender Tabelle entnehmen:

Ausgangsspannung Netzteil (mind.)

max. Anzahl LEDs

(Reihenschaltung)

benötigter Ausgangsstrom

6V

1

3x 300mA + 100mA = 1A

11V

3

3x 300mA + 100mA = 1A

32V

10

3x 300mA + 100mA = 1A

Sale
LE Trafo/Netzadapter für LED 12V DC, AC 100-240V...
Lighting EVER
17,99 EUR - 10,00 EUR 7,99 EUR

Letzte Aktualisierung am 23.08.2017 / Affiliate Links / Bilder von der Amazon Product Advertising API

​Je mehr LEDs in Reihe geschaltet werden, desto mehr Eingangsspannung benötigen die Konstantstromquellen um die 300mA bereitstellen zu können. Der benötigte Ausgangsstrom des Netzteils ist unabhängig von der Anzahl der LEDs. Durch den Einsatz von drei Konstantstromquellen mit jeweils 300mA empfehle ich ein Netzteil von mindestens 1A, damit noch genug Leistung für die anderen Modulen zur Verfügung steht. Wer mehr Infos zum Thema LED-Reihenschaltung haben möchte, dem empfehle ich die Seite von ledhilfe.de.

Aufbau der Hardware

Wie oben schon erwähnt, besteht der Aufbau aus einigen Modulen.

Damit alles so funktioniert wie es soll, müssen diese nun entsprechend miteinander verbunden werden. Folgendes Blockschaltbild zeigt den Zusammenhang der einzelnen Module.

Das Steckernetzteil versorgt die komplette Schaltung mit Spannung. Über den Step-Down-Wandler werden aus diesen 12V die benötigten 5V für den WeMos-Baustein. Die Konstantstromquelle wird direkt mit den 12V versorgt. Der WeMos-Baustein erzeugt ein PWM-Signal, welches über ein Pegelwandler die Konstantstromquelle steuert, welches wiederrum die LED mit dem benötigten Strom versorgt.

Im folgenden werde ich die genaue Verdrahtung der einzelnen Module näher beschreiben.

Steckernetzteil

Über das Steckernetzteil werden die drei Konstantstromquellen (rot, grün, blau) und der Step-Down-Wandler mit 12V Gleichspannung versorgt. Hier ist es wichtig, dass ein Netzteil verwendet wird, welches genügend Leistung zur Verfügung stellt. Siehe Tabelle weiter oben.

Step-Down-Wandler

Wie oben schon erwähnt, bekommt der Step-Down-Wandler direkt die Ausgangsspannung des Netzteils als Eingangsspannung. In meinem Fall also die 12V.

ACHTUNG: Bevor ihr mit der weiteren Verdrahtung fortfahrt, stellt über das kleine blaue Potentiometer die Ausgangsspannung auf 5V.

Solltet ihr mit einer höheren Versorgungsspannung arbeiten, müsst ihr darauf achten, dass der Spannungsregler (LM2596S) ausreichend gekühlt ist. Die Kühlkörper für den Raspberry funktionieren dafür sehr gut.

Rydges - Kühlkörper 2x Kupfer für Raspberry Pi 3...
Rydges Media Technology - Elektronik
6,49 EUR

Letzte Aktualisierung am 23.08.2017 / Affiliate Links / Bilder von der Amazon Product Advertising API

WeMos D1 Mini Pro

Das Herzstück der Ambientlampe ist der WeMos D1 Mini Pro. Dieser kümmert sich später darum, dass die Lampe sich ins heimische Netztwerk einwählt und die Lampe somit über FHEM steuerbar ist. Mit Spannung wird der Chip über die 5V Ausgangsspannung des Step-Down-Wandlers. Dazu einfach den Ausgang des Wandlers mit dem 5V- und GND-PIN vom WeMos-Baustein verbinden (siehe Schaltplan).

Vom WeMos-Baustein werden die Dateinausgänge D6, D7 und D8 verwendet. Diese gehen jeweils auf einen Eingang (LOW-Level) des Pegelwandlers. Diese drei digitalen Ausgänge steuern später jeweils eine Farbe (rot, grün, blau) der High-Power-LED.

Des Weiteren wird der 3,3V-Ausgang des WeMos-Chips benötigt. Dieser versorgt den Pegelwandler mit den benötigten 3,3V.

Pegelwandler (optional)

Der Pegelwandler wandelt die 3,3V-Pegel vom WeMos-Baustein zu 5V-Pegel, welche dann für Regelung der Konstantstromquellen verwendet wird. Die hier verwendeten Konstantstromquellen können jedoch auch mit den 3,3V-Pegel arbeiten (L-Pegel = 0V und H-Pegel = 2,5 - 5V). Damit ich in der Zukunft eventuell andere Konstantstromquellen einsetzen kann, habe ich mich jedoch für den Pegelwandler entschieden.

Damit der Pegelwandler funktioniert, bekommt er die 3,3V vom WeMos-Baustein für die Low-Level-Seite und die 5V vom Step-Down-Wandler. Zusätzlich werden beide Seiten noch an GND angeschlossen. Entweder an einen GND-Pin vom WeMos-Baustein oder an den GND-Pin des Step-Down-Wandler-Ausgang.

Wie oben schon erwähnt, bekommt der Pegelwandler die Signale der digitalen Ausgänge D6-D8 als Eingangssignal. Die entsprechenden Ausgänge des Pegelwandlers werden dann jeweils auf ein Dim-Eingang einer Konstantstromquelle geführt.

Konstantstromquelle

Die Konstantstromquelle wird mit der Ausgangsspannung vom Netzteil versorgt (In+ und In-). Das Signal für den Dim-Eingang kommt vom Pegelwandler bzw. vom WeMos-Baustein.

Auf der Ausgangsseite der Konstantstromquellen wird die LED angeschlossen (LED+ und LED-). An jeder Konstantstromquelle wird jeweils eine Farbe der LED angeschlossen.

High-Power-RGB-LED

Die High-Power-LED wird an den Ausgang der Konstantstromquelle angeschlossen. Jeweils eine Farbe an einem Ausgang. Hier ist man relativ frei, welche Farbe man an welcher Konstantstromquelle anschließt. Ihr solltet sptäter nur wissen, welcher digitale Ausgang welche Konstantstromquelle steuert, damit eine softwaretechnische Zuweisung ohne herumprobieren möglich ist.

Beim Anschließen ist es jedoch wichtig, dass der Minus-Anschluss der LED auch an den entsprechenden Minus-Ausgang der Konstantstromquelle angeschlossen wird (siehe Schaltplan).

Zusammenbau

Da die Lichtkugel von Tschibo leider nicht so ohne weiteres zu öffnen war, habe ich mir im Bauhaus eine einfache Glas-Lichtkugel-Lampe gekauft und den E14-Lampen-Sockel entfernt. Mit bisschen Gefummel und Heißkleber habe ich dann die komplette Technik unterbringen können. Unter der High-Power-LED habe ich noch ein kleines Stück Aluminiumblech mit Wärmeleitpaste angebracht. Die Befestigungsklammer für die Glaskugel hilft zusätzlich für die Wärmeabfuhr.

Ich habe die beiden Kondensatoren vom Step-Down-Wandler durch neue ersetzt und diese dann abgewinkelt eingelötet damit sie sich nicht im Lichtkegel befinden.

Software

ESP Easy installieren

Wie oben schon erwähnt, fiel meine Entscheidung auf ESP Easy. Leider liefert die Software kein Modul für RGB-LEDs mit. Da die Community rund um ESP Easy schon recht groß ist, machte ich mich auf die Suche nache der passenden Erweiterung.

Fündig wurde ich im FHEM-Forum. Der Entwickler "dev0" hat das ESP Easy Plugin "Lights" entwickelt, welches das Steuern von RGBWW-LEDs ermöglicht. Das Plugin lässt sich von GitHub herunterladen.

Zusätzlich muss natürlich die ESP Easy Software selbst herunter geladen werden. Dies könnt ihr auf der Seite des Herstellers herunterladen. Für diesen Beitrag wurde die Version R147_RC8 verwendet.

Die benötigte Datei "_P123_LIGHTS.ino" des Plugins "Lights" muss dann einfach in den Ordner "Source/ESPEasy" kopiert werden. Ihr könnt nun den WeMos-Chip über die Arduino-IDE auf den Chip flashen (einfach die Datei "Source/ESPEasy/ESPEasy.ino" mit der Arduini IDE öffnen) oder ihr benutzt das ESP-Flash-Tool. Ich persönlich empfehle euch das Verwenden des Tools, da hier nicht darauf geachtet werden muss, dass die benötigten Libarys und Treiber in der Arduino IDE korrekt geladen wurden. Des Weiteren ist das Benutzen des Tools nicht so anfällig für Anwenderfehler.

Damit man jedoch das Tool verwenden kann, ist die entsprechende bin-Datei notwendig. FHEM-Forum-Mitglied "Waldmensch" stellt diese bin-Datei für 1024kb-Module im Forum zur Verfügung. Diese kann problemlos für die WeMos-Bausteine verwendet werden. Damit diese mit dem Flash-Tool verwendet werden kann, einfach die vorhandene Datei "ESPEasy_R147_1024.bin" in "ESPEasy_R147_1024_old.bin" umbenennen und die aus dem Forum heruntergeladenen bin-Datei in "ESPEasy_R147_1024.bin" umbenennen.

Nachdem der WeMos-Chip mit dem PC verbunden wurde, kann mit Hilfe der Datei "flash.cmd" das Flashen gestartet werden.

HINWEIS: Ich hatte schon mehrere Blog-Leser, die Probleme beim Flashen hatten. Grund war meist der Einsatz eines minderwertigen USB-Kabels.

Der COM-Port muss natürlich entsprechend angepasst werden. Welcher Port aktuell verwendet wird, könnt ihr in Windows über den Gerätemanager herausfinden. Sobald der Flash-Vorgang abgeschlossen ist, bekommt ihr eine entsprechende Meldung.

ESP Easy einrichten

Nachdem das Flashen erfolgreich war, kann mit dem Einrichten begonnen werden. Dazu verbindet man sich mit dem neu eröffneten Access Point vom WeMos-Board - Passwort "configesp". In meinem Fall mit dem Namen "ESP_0". Startet man nun den Browser öffnet sich die Konfigurationsseite. Sollte dies nicht der Fall sein, kann diese auch über die Eingabe der IP-Adresse geöffnet werden. In meinem Fall "192.168.4.1". Über die Konfigurationsseite kann das WeMos-Board nun mit dem heimischen WLAN verbunden werden. Mehr Infos dazu auf meinem Beitrag zum Thema ESP Easy.

Nachdem sich nun der WeMos-Baustein im eigenen WLAN befindet, kann mit dem eigentlichen Einrichten begonnen werden.

Unter dem Reiter "Config" wird die Verbindung zur FHEM-Installation eingerichtet. Wichtig ist hier, dass als Protokol "FHEM HTTP" ausgewählt wird und unter Controller IP die IP-Adresse des Raspberrys auf dem FHEM läuft eingetragen wird. Des Weiteren muss unter "Name" ein eindeutiger Name vergeben werden.

Weiter geht es mit dem Reiter "Devices". Hier wird nun die High-Power-RGB-LED definiert. Als Device wird das Plugin "Lights" ausgewählt.

Da ich nur eine normale RGB-LED verwende, habe ich nur die RGB Channels aktiviert. Wer möchte, kann natürlich auch die WW- und CW-Channels aktivieren. Wichtig ist, dass die verwendeten Ausgänge angegeben werden. Die digitalen Ausgänge D6-D8 sind die Gpios 12, 13 und 15. Ein komplette Auflistung der Zuordnung könnt ihr im Reiter "Hardware" einsehen.

Die Einrichtung von ESP Easy ist nun abgeschlossen und es kann mit der Einrichtung in FHEM begonnen werden.

Einrichtung unter FHEM

Wie ihr ein ESP-Device in FHEM definiert, könnt ihr in meinem Blog-Beitrag zu diesem Thema nachlesen. Folgende Schritte werden sich auf die anschließenden Konfigurationen und Anpassungen des ESP-Devices fokusieren. Das eigentliche Einbinden des ESP-Devices entnehmmt ihr deswegen bitte aus meinem Blog-Beitrag. Im Folgenden hat das eingerichtete ESP-Device den Namen "ESP_Lichtkugel". Nach dem automatischen Anlegen des ESP-Devices könnt ihr den Namen durch folgenden Befehl in "ESP_Lichtkugel" ändern.

rename ESPEasy_Lichtkugel_RGBWW ESP_Lichtkugel

Wer dieses Device bereits zum Steuern verwenden möchte, kann durch das Hinzufügen von ein paar Attributen die Steuerung etwas erleichtern.

attr ESP_Lichtkugel colorpicker HSVp;
attr ESP_Lichtkugel colorpickerCTww 2000;
attr ESP_Lichtkugel colorpickerCTcw 6000;
attr ESP_Lichtkugel devStateIcon { ESPEasy_devStateIcon($name) };
attr ESP_Lichtkugel mapLightCmds Lights;
attr ESP_Lichtkugel parseCmdResponse Lights;
attr ESP_Lichtkugel webCmd ct:pct:rgb:rgb ff0000:rgb 00ff00:rgb 0000ff:toggle:on:off;

Durch die Auswahl einer Farbe kann nun bereits getestet werden, ob die LED wie gewünscht funktioniert. Die Farbe lässt sich mit entweder über die Schaltflächen ändern oder über folgenden Befehl:

set ESP_Lichtkugel rgb 00ff00 5

Dieser Befehl ändert die Farbe zu Grün. Durch die optionale Angabe einer Zeit in Sekunden, stellt man die Zeitkonstante ein, mit der zur dieser Farbe gewechselt wird. In diesem Fall wechselt die Farbe also langsam (innerhalb von 5 Skunden) zur Farbe grün. Diese Funktion machen wir uns später für den automatischen Farbverlauf zu nutzen.

Dummy FL_Lichtkugel

Um etwas mehr Freiheit bezüglich der Konfiguration zu bekommen, habe ich ein Dummy angelegt, welches später die RGB-Ambientleuchte darstellt. Wer möchte, kann natürlich alle Anpassungen direkt am ESP-Device vornehmen, da ich dieses jedoch gerne "unberührt" lassen wollte, habe ich mich für den Umweg über einen Dummy entschieden. Da ich die ganze Technik in eine Glaskugel untergebracht habe, habe ich das Dummy "FL_Lichtkugel" genannt. Das FL steht dabei für den Standort Flur.

define FL_Lichtkugel dummy

Das nackte Dummy kann nun noch nicht sehr viel. Im Grunde kann es gar nichts. Ich habe mir deswegen ein paar Gedanken gemacht, was die Lichtkugel später alles können soll.

  • Automatischer Farbverlauf im RGB-Farbraum (Modus: Fade)
  • Farbauswahl vordefinierter Farben (Modus: Farbe)
  • Automatischer Farbverlauf mit einstellbarer Schnelligkeit
  • Ein / Aus (Modus: Off)
  • Steuern über Apples Homekit

Nachdem das Ziel definiert wurde, habe ich mich an die Konfiguration des Dummys gemacht. Damit in der Device-Overview die Kontrollelemente für die Steuerung erscheinen, habe ich folgende Attribute hinzugefügt:

attr FL_Lichtkugel readingList Zeit,rgb;
attr FL_Lichtkugel setList Zeit:slider,1,1,20 rgb:colorpicker,rgb state:Fade,Farbe,off;
attr FL_Lichtkugel webCmd state:Zeit:rgb:rgb FF0000:rgb 00FF00:rgb 0000FF:rgb FFFF00:rgb FFA500:rgb 8a2be2;

Diese Attribute bewirken nun, dass man direkt in der Device-Overvie den Modus (off, Fade, Farbe) über ein Drop-Down-Menü auswählen kann, die Schnelligkeit (Zeit, 0s - 20s) über einen Slider steuern kann, den Farbwert über ein Color-Picker-Feld aussuchen und vordefinierte Farben über Farbfelder anklicken kann.

Die über den Slider eingestellte Zahl, beschreibt das Reading "Zeit" mit dieser. Das Format ist dabei eine einfache Zahl - 0 bis 20. Für die späteren Hilfsdevices wird jedoch eine Zeitangabe im Format "hh:mm:ss" benötigt. Über das Attribut userReadings wird deswegen ein zusätzliches Reading mit dem Namen "Time" erstellt, welches die Zahl aus dem Reading "Zeit" in das gewünschte Format ändert.

attr FL_Lichtkugel userReadings Time {sec2time(ReadingsVal("FL_Lichtkugel","Zeit",0))}

Die Umwandlung passiert dabei in der Routine "sec2time". Das Anlegen dieser Routine geschieht später weiter unten.

Für das Optische (alias, Raum etc.) werden dann noch ein paar zusätzliche Attribute gesetzt.

attr FL_Lichtkugel alias Lichtkugel;
attr FL_Lichtkugel group Licht;
attr FL_Lichtkugel icon LED_Kugel;
attr FL_Lichtkugel devStateIcon {".*Fade:LED_Kugel_RGB .*off:LED_Kugel .*:LED_Kugel@#".ReadingsVal($name, "rgb", "ffffff")};
attr FL_Lichtkugel room Alexa,Flur,Homekit;
attr FL_Lichtkugel stateFormat state;

Die Raumauswahl ist natürlich euch überlassen. Wollt ihr jedoch, dass die Lampe später auch per Apples Homekit und Amazons Alexa steuerbar ist, solltet ihr die Lampe auch jeweils in den Raum "Homekit" und "Alexa" packen, damit diese Anleitung problemlos übernommen werden kann.

Der erfahrende FHEM-User wird schon gesehen haben, dass die ausgewählten Icons "LED_Kugel" und "LED_Kugel_RGB" keine offiziellen FHEM-Icons sind. Da FHEM kein passendes Icon für meine Lichtkugel bereitstellt, habe ich mir ein eigenes Icon erstellt. Wer möchte, kann sich diese Icon hier downloaden. Die beiden Dateien einfach auf den Raspberry in den Ordner "/opt/fhem/www/images/fhemSVG" kopieren und FHEM neustarten.

Das sieht nun zwar alles schon recht hübsch aus, jedoch sind die Schaltflächen noch ohne Funktion. Da kommen nun ein paar Hilfs-Devices und Routinen zum Einsatz.

atRGB - Hilfsdevice für den automatische Farbverlauf

Damit dem Dummy nun auch Leben eingehaucht wird, kommt unter anderem das at-Device "atRGB" zum Einsatz. Dieses at-Device sorgt im Modus "Fade" dafür, dass im Abstand der eingestellten Zeit (Reading Time) sich die Farbe der Lichtkugel automatisch ändert.

define atRGB at +*{ReadingsVal("FL_Lichtkugel","Time",0)} { 
my $Status = ReadingsVal("FL_Lichtkugel","state",0);
my $Zeit= ReadingsVal("FL_Lichtkugel","Zeit",0);
my $rgb = randomRGB();
if($Status eq "Fade") {
fhem("setreading FL_Lichtkugel rgb $rgb");
fhem("set ESP_Lichtkugel rgb $rgb $Zeit");}
}

Info: Ich empfehle euch zuerst ein at-Rohling zu definieren (define atRGB at 00:00:00 a) und dann über den DEF-Editor die finale Definition einzutragen.

Das at-Device wird kontinuierlich ausgeführt. Die Zeitkonstante ist dabei das Reading "Time" vom Dummy "FL_Lichtkugel". Ändert man also durch den Schieberegler vom Dummy die Zeit, so ändert sich der Widerholungsintervall des at-Devices.

Innerhalb des at-Devices werden dann zunächst drei Variablen erzeugt. Eine Variable enthält den ausgewähltem Modus vom Dummy - $Status. Die Variable "$Zeit" enthält die Zeitkonstante als reine Zahl. Die Variable "$rgb" enthält einen zufälligen RGB-Wert, welcher über die Routine "randomRGB" aus einem Farbwert-Pool ausgewählt wird. Mehr zur Routine und dessen Definition erfahrt ihr später weiter unten.

Befindet sich die Lichtkugel nun im Modus "Fade", wird das Reading "rgb" vom Dummy mit dem zufälligen Farbwert beschrieben. Damit die Lichtkugel selbst auch die Farbe annimmt, wird das ESP-Device auf die Farbe mit der Zeitkonstate (Zeit) gesetzt. Die Farbe der Lichtkugel ändert sich nun innerhalb der Zeitkonstante zur gewünschten Farbe.

Da die Zeitkonstante identisch ist mit dem Widerholungsintervall des at-Devices (Zeit = Time), startet das Faden zur neuen Farbe mit dem Erreichen der aktuell gewünschten Farbe. Es erfolgt somit ein automatischer Farbverlauf, solange wie der Modus "Fade" aktiv ist.

notifyRGB - Hilfsdevie zur Modi-Steuerung

Das notify "notifyRGB" sorgt dafür, dass je nach Modus die entsprechenden Hebel gesetzt werden, dass die Lichtkugel entsprechend reagiert.

define notifyRGB notify FL_Lichtkugel:.* {
my $Status = ReadingsVal("FL_Lichtkugel","state",0);
my $RGB = ReadingsVal("FL_Lichtkugel","rgb",0);
if($Status eq "off"){
fhem("set atRGB inactive");
fhem("setreading FL_Lichtkugel rgb 000000");
fhem("set ESP_Lichtkugel rgb 000000");}
elsif($Status eq "Farbe"){
fhem("set atRGB inactive");
fhem("set ESP_Lichtkugel rgb $RGB");}
elsif($Status eq "Fade"){
fhem("set atRGB active");}
}

Das notify reagiert auf eine Readings-Änderung vom Dummy-Device "FL_Lichtkugel". Ändert man also den Modus vom Dummy, so reagiert das Notify.

Zuerst werden wieder zwei Variablen definiert. Zum Einen der aktuelle Status (§Status) vom Dummy und zum Anderen der aktuelle Farbwert (§RGB).

Danach beginnen drei if-Abfragen, jeweils nach dem Status.

off

Farbe

Fade

  • das at-Device "atRGB" wird deaktiviert
  • der Farbwert vom Dummy und vom ESP-Device wird auf "000000" gesetzt
  • das at-Device "atRGB" wird deaktiviert
  • das ESP-Device wird auf die eingestellte Farbe gesetzt, welche durch den Color-Picker oder durch die Farbfelder ausgewählt wurde
  • das at-Device "atRGB" wird aktiviert - der automatische Farbverlauf beginnt.

sec2time - Routine zur Formatsumwandlung

Nachdem die benötigten Hilfsdevices eingerichtet wurden, können die benötigten Routinen eingerichtet werden. Diese werden in der Datei "99_myUtils.pm" geschrieben.

Die Rounte "sec2time" wandelt die einfache Zahl vom Reading "Zeit" in einen Zeitstring im Format "hh:mm:ss" um.

##### Zeit ##############

sub sec2time($)
{
my ($sec) = @_;
my $m = int($sec/60);
my $s = $sec - ($m * 60);
my $h = int($m/60);
my $m = $m - ($h * 60);
my $timestring = sprintf("%02d:%02d:%02d",$h,$m,$s);

return $timestring
}

randomRGB - Routine für die zufällige Farbwahl

Die Routine "randomRGB" wählt aus einer Auswahl von RGB-Farbwerten zufällig ein Farbwert und gibt diese zurück. Die Anzahl an Farbwerten kann nach belieben angepasst bzw. vergrößert werden.

###### RGB ##############

sub randomRGB()
{
my @rgbarray = ("FF0000","00FF00","0000FF","8A2BE2","FFA500","FF69B4","FFFF00");
my $Laenge = @rgbarray;

my $rgbneu = $rgbarray[int(rand($Laenge))];

return $rgbneu;
}

Wollt ihr andere Farbwerte im Farbverlauf haben, dann passt einfach die Werte vom Arra "rgbarray" an. Ihr könnt natürlich auch weitere Farbwerte hinzufügen.

Lichtkugel in Apples Homekit einbinden

Solltet ihr, wie ich auch Apples Homekit verwenden, dann könnt ihr natürlich auch die Lichtkugel darin integrieren. Im folgenden erkläre ich euch, wie ihr dies macht.

Solltet ihr die Homebridge (Schnittstelle zwischen Homekit und FHEM) noch nicht eingerichtet haben, dann solltet ihr meinen Blog-Beitrag dazu besuchen. Im folgenden ist die Homebridge zu eingerichtet, dass alle Geräte im Raum "Homekit" für Homekit berücksichtigt werden.

Wie ihr weiter oben schon bemerkt habt, befindet sich das Dummy-Device bereits in den Raum "Homekit". Damit das Dummy jedoch auch als Lampe erkannt wird, ist ein weiteres Attribut notwendig.

attr FL_Lichtkugel genericDeviceTyp light

Ich habe mich dazu entschieden, dass ich mit Apples Homekit die Lichtkugel auf in den Modus "Fade" versetzen und sie wieder ausschalten kann. Damit dies auch funktioniert, muss man dies mit Hilfe des Attributs "homebridgeMapping" Homekit mitteilen.

attr FL_Lichtkugel homebridgeMapping On=state,valueOn=/Fade/,valueOff=/off/,cmdOn=Fade,cmdOff=off

Für das Verständnis werde ich dieses Attribut nun ein bisschen erklären:

"On=state" - Das Reading "state" wird gesteuert.

​"valueOn=/Fade/,valueOff=/off/" - Gibt den Wert des Readings an, welches es haben muss, damit das Gerät als on bzw. off angezeigt wird.

"cmdOn=Fade,cmdOff=off" - Gibt an, auf was das Reading geschaltet werden soll, wenn es an bzw. ausgeschaltet wird.

Wenn ihr nun eure Homebridge neu startet, solltet die Lichtkugel bereits unter Apples Homekit angezeigt werden.

Lichtkugel mit Amazons Alexa steuern

Solltet ihr anstelle von Apples Homekit lieber auf Amazons Alexa setzen, dann geht dies auch relativ einfach. Voraussetzung ist hier jedoch, dass ihr Alexa bereits mit FHEM verbunden habt. Mehr zu diesem Thema auf meinem Blog. Ich persönlich habe meine ganzen Devices für Alexa in den Raum "Alexa" gepackt. Mit dem room-Attribut haben wir dies weiter oben schon erledigt.

Damit Alexa aber das Dummy richtig erkennt, sind auch hier wieder die beiden Attribute "genericDeviceTyp" und "homebridgeMapping" notwendig:

attr FL_Lichtkugel genericDeviceTyp light
attr FL_Lichtkugel homebridgeMapping On=state,valueOn=/Fade/,valueOff=/off/,cmdOn=Fade,cmdOff=off

Wenn ihr nun innerhalb der Alexa-App nach neuen Devices sucht, sollte die Lichtkugel auftauchen.


Ich hoffe ich konnte euch mein kleines Projekt verständlich näher bringen und euer Interesse wecken. Ich freue mich über jeden Nachbauer. Sollten fragen auftauchen, dann stellt sie mir gerne in den Kommentaren.

Hinterlasse einen Kommentar

4 Kommentare auf "RGB-Ambientlicht im Eigenbau"

Benachrichtige mich zu:
avatar
Fotos und Bilder
 
 
 
sonstiges Dateiformat
 
 
 
Sortiert nach:   neuste | älteste | beste Bewertung
Mike
Gast
Mike

Hi,
nette Idee werde ich bei Zeit einmal nachbauen 🙂
Bei deiner Beschreibung ist dir ein kleiner Fehler unterlaufen:

„Ich habe die beiden Transistoren vom Step-Down-Wandler durch neue ersetzt und diese dann abgewinkelt eingelötet damit sie sich nicht im Lichtkegel befinden.“

Nach deinem Bild hast du aber die Kondensatoren getauscht und abgewinkelt eingebaut.

Grüße

Holger
Gast
Holger

Hallo ich würde es gerne auf einer NodeMCU nutzen brauche aber dafür eine bin für 4096 oder sehe ich das falsch

wpDiscuz