(Packe es hier in openHAB, da es darüber gesteuert wird. Hätte sicher auch gut in den Hobbykeller gepasst, konnte mich nicht entscheiden, ggf. einfach verschieben.)
Idee
Ich habe auf YouTube ein Video gesehen, wo eine Frau ihr Schuhregal mit warmweißen LED-Streifen bestückt hat. Wie ich auf das Video gekommen bin, weiß ich nicht mehr und die Quelle kann ich auch nicht mehr angeben (irgendwo beim Stöbern entdeckt). Jedenfalls hat es mir gefallen und ich dachte mir "sowas brauchst du auch". Naja Schuhregal hatte ich nicht aber kurz vorher ein Kallax-Regal bei Ikea gekauft. Ich wollte bei der Umsetzung etwas anspruchsvoller sein, hier die Anforderungen:
* Bunte LED-Streifen + Warmweiß
* Steuerbar über WLAN mit App bzw. openHAB
Einkaufsliste
Zuerst habe ich nach einem geeigneten Controller gesucht und wurde bei MagicHome fündig. Sie bieten unterschiedliche Modelle an (RGB, RGBW, RGBWW und jede Variante entweder mit IR oder ohne), für jeden Geschmack etwas dabei. Diese basieren auf einem ESP und können über die App von MagicHome oder über die beiliegende IR-Fernbedienung (falls IR-Version) gesteuert werden. Außerdem kann dieser Controller über das WiFi LED BindingWiFi LED Binding in openHAB eingebunden werden. Als Alternative kann der Controller auch mit Tasmota (falls gewünscht) bespielt werden. Gekauft habe ich letztendlich diesen hier: https://www.amazon.de/gp/product/B0772TB9L4/?tag=kodinerds04-21 [Anzeige]
Bei den LED-Streifen habe ich mich für folgendes Produkt entschieden: https://www.amazon.de/gp/product/B01GJ6XF32/?tag=kodinerds04-21 [Anzeige] Ich kann leider gar nicht mehr sagen warum das so war, da es mittlerweile schon lange her ist. Mir gefällt hier besonders, dass die LEDs abwechselnd sind (1RGB, 1WW, usw.) und die Kanäle RGB/WW einzeln angesteuert werden können. Es wäre schön gewesen noch die Farbtemperatur vom Weiß zu steuern aber dadurch, dass man mit den RGB "mischen" kann, lassen sich auch so gute Effekte erzielen. Zusätzlich habe ich noch Schnellverbinder/Eckverbinder https://www.amazon.de/gp/product/B01FQF7LKA/?tag=kodinerds04-21 [Anzeige] bestellt, wie man sie auch von diversen Ambilight-Projekten kennt. Ich habe leider einen Lötkolben, der für so kleine Punkte nicht wirklich geeignet ist. Beim Ambilight bin ich damals schon fast verzweifelt, deshalb habe ich dieses mal Verbinder bestellt. Diese sind natürlich optional und können weg gelassen werden.
Das Netzteil habe ich, wegen der guten Bewertungen von Salcar gekauft: https://www.amazon.de/gp/product/B01A6LQMWW/?tag=kodinerds04-21 [Anzeige] Dieses kann ich auf jeden Fall empfehlen, fiept nicht und verrichtet sehr gute Dienste! Leider hatte ich zuerst ein 12V Netzteil bestellt. Deshalb bin ich am Tag, als meine Bestellung ankam, in die Stadt gefahren um Ersatz zu besorgen. Ich war in etlichen Läden und keiner hatte ein 24V Netzteil da. In einem namhaften Baumarkt hat mir sogar ein Mitarbeiter versucht zu erzählen, dass es sowas überhaupt nicht gibt... In einem anderen Laden musste die Mitarbeiterin sogar den Chef holen, da sie mit dem Begriff Hohlstecker nichts anfangen konnte. Die Tour war sehr amüsant jedoch ohne Erfolg. Deshalb habe ich das Netzteil dann bestellt und musste nochmal warten.
Die restlichen Dinge hatte ich noch Zuhause: Kabel, Schrumpfschläuche, Heißkleber und Werkzeug.
Umsetzung
Ich habe in meinem Regal solche Stoffschubladen/-boxen und entschieden nur die Fächer zu beleuchten, wo keine Schubladen sind. Die andere Variante "alles beleuchten" habe ich auch ausprobiert, jedoch hat mir dies nicht gefallen. Ein Foto habe ich davon leider nicht, aber Geschmäcker sind ja sowieso verschieden. Als das richtige Netzteil endlich kam, habe ich das Regal ausgeräumt, umgelegt und dann ging es los. Zunächst habe ich alles ausgemessen, die LED-Streifen passend geschnitten und die LED-Verbinder mittig durchgeschnitten. Diese habe ich dann mit eigenen Kabeln verlängert und die Verbindungen mit Schrumpfschläuchen isoliert. Danach habe ich die LED-Streifen angeklebt, der Kleber an den Streifen ist vollkommen ausreichend und hält auch nach einem 3/4 Jahr gut, hier ist also kein extra Kleber notwendig. Es muss beachtet werden, dass das Endstück (wo der Controller angeschlossen wird) an der gewünschten Stelle (in meinem Fall unten Links) angebracht wird und die Streifen in der richtigen Richtung (siehe Pfeil-Aufdruck) positioniert werden. Zum Schluss habe ich die Verbindungskabel mit Heißkleber am Regal fixiert, sodass man diese bei aufgestelltem Regal nicht sehen kann. Danach alles (Controller+Netzteil) angeschlossen und mit der IR-Fernbedienung und App getestet. Es hat alles Problemlos funktioniert. Zu beachten ist aber, dass ggf. Rot- und Grün-Kanal am Controller vertauscht sind, sodass man hier ggf. noch ein Kabel umlöten muss. Bei mir war das der Fall (es gibt hier scheinbar unterschiedliche Versionen). Zwei Bilder gibt es hier WiFi LED Binding zu sehen (ich lade sie jetzt nicht nochmal neu hoch).
Für die Einbindung in openHAB, habe ich das WiFi LED Binding genutzt. Ich habe mir zunächst Meinungen hier im Forum bzgl. der Tasmota-Alternative eingeholt. Scheinbar hat man beim Binding den Vorteil, dass die Effekte (color cross fade, strobe, etc.) genutzt werden können. Ich glaube, dass ich sie trotzdem nie getestet habe. Zur Sicherheit habe ich in meiner Fritzbox den Internetzugriff für den Controller gesperrt. Letztendlich wollte ich auch nicht extra einen MQTT-Broker aufsetzen. Was mir hierbei nicht gefällt ist, dass der Power-Kanal nicht getriggert wird, sobald Farb- und Weiß-Kanal auf 0 stehen. D.h. wenn ich über den Power-Kanal die Streifen ausschalte, muss ich diesen auch wieder anschalten ansonsten haben die Kanäle für Farbe und Weiß keine Wirkung (und andersherum). Deshalb ist bei mir der Power-Kanal immer eingeschaltet und ich steuere nur über die beiden anderen.
Fazit
Letztendlich bin ich, bis auf die erwähnten Kleinigkeiten sehr zufrieden. Es sieht einfach super aus und ich werde bestimmt noch weitere Dinge damit bestücken. Es gibt scheinbar auch einen Alexa-Skill dafür aber bei mir ist es über openHAB in Alexa eingebunden, dazu kann ich also nichts sagen (soll jetzt hier nicht weiter ausgeführt werden).
Idee 2
Irgendwann kam mir die Idee, dass es schön wäre, wenn das Licht automatisch an geht, sobald man vor dem Regal steht und es relativ dunkel ist.
Einkaufsliste 2
Zunächst habe ich mir überlegt, wie eine Umsetzung bzgl. der Sensoren am besten wäre. Ein Bewegungsmelder mit Helligkeitssensor von Xiaomi, Philipps usw. kam für mich dann nicht in Frage, da es wirklich nur reagieren sollte, wenn ich direkt vor dem Regal stehe. Irgendwann bin ich auf den HC-SR04 (Ultraschallsensor) aufmerksam geworden, der wohl meine Anforderung erfüllen sollte. Bzgl. der Helligkeit dachte ich an einen Xiaomi Pflanzensensor, da @horschte schon viel Gutes davon berichtet hatte. Kurz darauf bekam ich zufällig ein DIY-Elektronik-Set von Elegoo geschenkt, worin ein HC-SR04 enthalten war. Das Set ist echt schön gemacht, mit mehrsprachigen Anleitungen und Beispielprojekten auf CD (soll jetzt hier keine Werbung sein, hat mir echt gut gefallen). Das ganze hätte mit Projektideen noch schön erweitert werden können, aber bei dem Preis habe ich schon viel mehr bekommen als erwartet. Bzgl. der Helligkeit bekam ich von @Momo90 den Tipp einen LDR zu verwenden (vielen lieben Dank nochmal dafür! Ich wäre selbst nie darauf gekommen!). Als Steuereinheit habe ich ein NodeMCU Board verwendet (welches Model weiß ich leider nicht, kann bei Bedarf nachschauen). Nachdem Ich auf der Arbeit von meiner Idee erzählt habe, hat mir ein Kollege das Board spendiert, dankeschön! Ich wusste zwar, dass ich einen ESP wollte aber was genau war mir nicht klar. Das hatte sich damit dann erledigt.
Zusammengefasst:
- NodeMCU Board
- LDR
- HC-SR04
Zusätzlich noch Breadboard, Kabel und einen Widerstand für den LDR (alles aus dem Elegoo Set. Bei Bedarf führe ich das weiter aus). Das ist natürlich nur ein Versuchsaufbau (aber produktiv im Einsatz), die richtige Verkabelung kommt, sobald das Gehäuse https://www.thingiverse.com/thing:2550726 da ist.
Umsetzung 2
(Ich halte mich ab hier kurz, da schon spät und führe es ggf. später weiter aus.)
Ich habe zunächst alles verkabelt, damals noch mit einem Arduino UNO und einer LED, die hier die Stripes darstellen sollen. Ein Foto ist hier WiFi LED Binding zu sehen. Als es soweit lokal funktioniert hat, musste die Kommunikation zu openHAB noch erledigt werden. Dafür habe ich in openHAB den "Embedded MQTT Broker" installiert. Dieser kann über die Oberfläche ganz einfach per Klick installiert werden. Mehr dazu hier: https://www.openhab.org/blog/2018-12-1…-in-openhab-2-4 Danach habe ich mir das Programm MQTT.fx auf meinem Laptop installiert, womit ich die Verbindung und das Senden/Empfangen von Nachrichten direkt testen konnte. Das Programm ist sehr übersichtlich, für alle gängigen Betriebssysteme verfügbar und einfach zu bedienen, also sehr zu empfehlen! Anschließend habe ich meinen finalen Sketch, den ich mir aus Beispielen zusammengestellt und erweitert habe, auf das Board übertragen und getestet. Ich hänge diesen hier an. Ich weiß, dass es hier einiges an Optimierungsbedarf gibt, jedoch war das mein erster Ausflug in die Arduino- und MQTT-Welt und ich wollte es zunächst funktional haben, bevor ich Optimierungen vornehme.
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "SR04.h"
#define TRIG_PIN D1
#define ECHO_PIN D2
const char* WIFI_SSID = "xxx";
const char* WIFI_PASSWORD = "xxx";
const char* MQTT_SERVER = "xxx";
const char* MQTT_PATH = "xxx/regal/ip";
const int LDR_PIN = A0;
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
IPAddress ipAddress;
/*
ESP verbindet sich per WLAN.
Wenn die Verbindung steht, wird eine Verbindung zum MQTT-Server aufgebaut.
Wenn die IP-Adresse sich geändert hat, wird diese über MQTT bereitgestellt.
Der LDR-Wert wird alle 60s über MQTT bereitgestellt.
Die Distanz wird als Trigger (ON/OFF) bereitgestellt, sobald die Bedingungen (Wert kleiner/größer x) erfüllt sind.
*/
void setup() {
pinMode(LDR_PIN, INPUT);
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(MQTT_SERVER, 1883);
}
void loop() {
if (!client.connected()) {
// Loop until we're reconnected
while (!client.connected()) {
Serial.println(analogRead(LDR_PIN));
Serial.println(sr04.Distance());
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println("connected");
// Once connected, publish an announcement...
if (ipAddress != WiFi.localIP()) {
ipAddress = WiFi.localIP();
client.publish(MQTT_PATH, ipAddress.toString().c_str());
}
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
} else {
client.publish("xxx/regal/abstand", String(sr04.Distance()).c_str());
client.publish("xxx/regal/helligkeit", String(analogRead(LDR_PIN)).c_str());
delay(5000);
}
}
Alles anzeigen
Nach ein paar Korrekturen und Tests, hat auch alles soweit funktioniert und ich konnte die Daten über mein Programm empfangen. Anschließend habe ich in openHAB ein MQTT Generic Thing angelegt. Dort mussten die Channels für Abstand und Helligkeit, sowie die zugehörigen "MQTT state topics" (xxx/regal/abstand usw.) angelegt werden. Danach habe ich die openHAB Items angelegt:
Number Regal_Abstand "Abstand zum Regal [%s cm]" <niveau> {channel="mqtt:topic:755040c3:distance"}
Number Regal_Helligkeit "Helligkeit am Regal [%s]" <lightbulb> {channel="mqtt:topic:755040c3:brightness"}
Zusätzlich habe ich noch zwei Dummy-Items angelegt, dazu später mehr:
Switch Regal_Schalter "Dummy Switch" <switch> {expire="10s,command=OFF"}
Dimmer Regal_White_Last "Dummy Dimmen" <lightbulb>
Zum Schluss muss natürlich noch eine (bzw. mehrere) Rule angelegt werden um das Licht zu schalten:
rule "Trigger Regal"
when
Item Regal_Abstand changed
then
if (Regal_Abstand.state < 100 && Regal_Helligkeit.state < 100) {
if (Regal_Schalter.state != ON) {
Regal_White_Last.sendCommand(Regal_White.state as PercentType)
Regal_White.sendCommand(100)
}
Regal_Schalter.sendCommand(ON)
}
end
rule "Regal aus"
when
Item Regal_Schalter changed to OFF
then
Regal_White.sendCommand(Regal_White_Last.state as PercentType)
end
Alles anzeigen
Die erste Regel triggert, sobald sich der Abstand verändert. Dann wird abgefragt, ob Abstand (cm) und Helligkeit geringer als 100 sind. Ist das der Fall, wird geprüft ob der angelegte Dummy-Schalter nicht eingeschaltet ist. Anschließend wird zunächst der aktuelle Helligkeitswert der LEDs in einem Dummy zwischengespeichert. Das nutze ich, um später zurück zu schalten. Danach wird die Helligkeit des Regals auf 100% gesetzt. Zum Schluss wird in jedem Fall der Dummy-Schalter eingeschaltet. Dieser wird genutzt, damit das Licht auch weiterhin an bleibt, wenn man länger vor dem Regal steht. Der Dummy-Schalter wird nämlich über das Expire-Binding nach 10s wieder auf OFF geschaltet. Das sieht man bei der Items-Einbindung.
Zusätzlich gibt es noch eine Regel, die den vorherigen, zwischengespeicherten Helligkeitswert der Stripes, zurück schreibt, sobald der Dummy-Schalter OFF geht.
Fazit
Es funktioniert soweit ziemlich gut. Der LDR ist natürlich bei der Aktualisierung sehr träge, aber das ist für meinen Zweck kein Problem. Ein Problem ist allerdings, dass der Ultraschallsensor scheinbar auch auf Mücken, Fliegen oder so etwas reagiert. Ich hatte am ersten Abend nämlich spät noch einen Film geschaut und mehrfach festgestellt, dass das Regal an ging. Das ist irgendwie ärgerlich, evtl. hat hier jemand noch eine Idee für mich.
Bitte verzeiht komische Formulierungen und Fehler, denn ich habe nicht mehr Korrektur gelesen, da es schon Nacht ist. Ich werde morgen oder so nochmal Korrektur lesen und ggf. Ergänzungen vornehmen!
Falls ihr Fragen, Ideen, Verbesserungen und Anmerkungen habt, bitte gerne immer her damit!