Ich möchte meinen Dachfenster-Sonnenschutz gerne in mein MQTT System integrieren und hierfür den ESP8266 verwenden. Der Rollladen meiner Dachfenster von Velux besitzen eine Funk-Fernbedienung vom Typ KLI 313. Der Hersteller verwendet IO-Homecontrol 868 MHz für die Kommunikation.
Situation Sonnenschutz
- Ich habe 3 Fernbedienungen KLI313, die je einen außen montierten Sonnenschutz bzw. elektrischen Dachrollladen steuern.
- Funksystem des Dachfensterherstellers arbeitet mit 868 MHz und verwendet das IO-Homecontrol Protokoll. Bisher habe ich mit diesem Funkprotokoll keine Berührungen gehabt und und möchte mein Smart Home nicht mit weiteren Routern und Funkprotokolle hinzufügen.
- Ich möchte die vorhandenen Fernbedienungen, Empfänger, Steuergeräte etc. nur so weit anpassen, dass ich jede Änderung restlos wieder demontieren kann.
- Die Fernsteuerung kann trotz Umbau weitern normal verwendet werden.
- Es gibt bereits Projekte, die sich mit der Steuerung dieser Dachrollläden auseinandergesetzt haben.
https://github.com/reefab/homeassistant-velux
https://community.home-assistant.io/t/controlling-velux-remote-with-esp8266-and-esphome/591751
https://www.reddit.com/r/homeassistant/comments/pzhkia/hack_velux_kli3xx_to_use_blinds_without_gateway/
ESP8266 soll Velux KLI313 Jalousie steuern.
Mein Ansatz zur Lösung ist, die Bedieneinheit mit einem 3D-Druck etwas zu erweitern, um so innerhalb der Einheit Platz zu schaffen, um den Mikrocontroller mit zu integrieren. Die Abmessungen sollten dabei aber kaum verändert werden.
Wie ist die KLI-Fernsteuerung aufgebaut.
Die Fernbedienung besteht aus 3 Kunststoffteilen und einer Platine.
- Oberseite mit Tasten
- Unterseite, die als Wandbefestigung und Batteriefachdeckel dient.
- Batteriefach und Platinenabdeckung.
- Platine
![Velux ESP8266 MQTT Smart Home 2 Bestandteile Velux Fernbedienung KLI313](https://www.chrisbue.de/wp-content/uploads/Bestandteile-Velux-Fernbedienung-KLI313-scaled-edited-scaled.webp)
Umsetzung Zusammenbau
Bauteile
- ESP8266 Microcontroller WEMOS D1 Mini AliExpress
- „Federn“ Pin Header Male Female lange Beine AliExpress
Verwendeter 3D Drucker Anycubic KOBRA 2 (AliExpress)
Die 3D-Druck Modelle
Für meinen Umbau benötige ich das Batterie-/Platinenabdeckung nicht. Letztlich soll die Fernbedienung nur ca 7-8 mm höher (dicker) werden. Dazu habe ich folgende 3D-Modelle entworfen.
- Eine neue Gehäuseabdeckung, die Platz für den ESP8266 und zusätzliche Kabel schafft.
- Kontakt Platte, die als Aufnahme für die selbst gebauten Kontaktfedern verwendet wird.
Beide Modelle stehen auf Thingiverse bereit. Das Gehäuse besitzt eine Aufnahme für den ESP8266 und eine Öffnung, um den ESP mit Strom zu versorgen.
![Velux ESP8266 MQTT Smart Home 3 ESP8266 Velux Fernbedienung Gehäuseerweiterung](https://www.chrisbue.de/wp-content/uploads/ESP8266-Velux-Fernbedienung-Gehaeuseerweiterung--scaled-1024x769.webp)
![Velux ESP8266 MQTT Smart Home 4 ESP8266 Velux Sonnenschutz Platte Kontaktfedern](https://www.chrisbue.de/wp-content/uploads/ESP8266-Velux-Sonnenschutz-Platte-Kontaktfedern-scaled-1024x769.webp)
Schaltplan Fernbedienung KLI313 zu ESP Mqtt
Der Mikrocontroller wird per Netzteil über die Micro-USB Schnittstelle angeschlossen. Der Ausgang 3.3 V des ESP wird mit dem Pluspol der KLI-Platine verbunden. Der Minuspol der KLI-Platine mit GND des ESP. Die Fernbedienung hat drei Tasten, die für die Steuerung vorgesehen sind. Auf, Ab und Stop.
ESP | Bedieneinheit KLI | Funktion |
GND (Minus) | 1 | |
3,3 V (Plus) | 2 | |
D5 | 3 | Auf |
D6 | 4 | Stop |
D7 | 5 | Ab |
![Velux ESP8266 MQTT Smart Home 5 Schaltplan ESP8266 Velux Fernbedienung](https://www.chrisbue.de/wp-content/uploads/Schaltplan-ESP8266-Velux-Fernbedienung.webp)
Herstellung Kontaktfeder
In meiner Ausgangssituation habe ich beschrieben, dass ich die Fernbedienung jederzeit in ihren ursprünglichen Zustand zurückversetzen können möchte. Daher musst ich eine Möglichkeit finden, die Kontakte an der Unterseite der KLI313 Platine mit dem ESP8266 zu verbinden. Leider hatte ich keine Federn oder Kontakte zur Verfügung.
Im Lieferumfang meiner ESP Wemos waren auch immer „Pin Header Male Female“ mit langen Anschluss-Pins enthalten. Diese habe ich mit einer Zange oder einem Messer zerschnitten, dass ein einzelner Male-Female-Pin übrig blieb. Den langen herausstehenden Pin habe ich dann zu einer kleinen Lasche gebogen.
![Velux ESP8266 MQTT Smart Home 6 ESP8266 Velux Pin Header Kontaktfeder](https://www.chrisbue.de/wp-content/uploads/ESP8266-Velux-Pin-Header-Kontaktfeder-edited-scaled-1024x576.webp)
Kontaktfederplatte und Gehäuse 3D-Druck
In der Platte für die Kontaktfedern sind die Positionen der Kontakte der KLI- Fernbedienung exakt markiert. Für die selbst erstellten Federn ist eine Aufnahme vorbereitet. Die 5 Kontaktfedern habe ich mit Heißkleber eingeklebt.
![Velux ESP8266 MQTT Smart Home 7 Federplatte mit Feder ESP8266 Velux](https://www.chrisbue.de/wp-content/uploads/Federplatte-mit-Feder-ESP8266-Velux-scaled-1024x769.webp)
![Velux ESP8266 MQTT Smart Home 8 Federplatte mit allen Federn ESP8266 Velux](https://www.chrisbue.de/wp-content/uploads/Federplatte-mit-allen-Federn-ESP8266-Velux-scaled-769x1024.webp)
![Velux ESP8266 MQTT Smart Home 9 Federplatte mit Federn und angesteckten Kabeln](https://www.chrisbue.de/wp-content/uploads/Federplatte-mit-Federn-und-angesteckten-Kabeln-scaled-769x1024.webp)
Zur Verkabelung habe ich isolierten 2mm² draht verwendet. An den Federn habe ich das Kabel abisoliert und verzinnt. Dadurch konnte ich die einzelnen Kabel direkt in die Pin-Öffnungen der Federn stecken.
Die Kabel habe ich, wie oben beschrieben, an die Kontakte des ESP angelötet. Die Federplatte kann zusammen mit dem ESP in die neu gedruckte Gehäuseabdeckung eingeklebt werden. Die Federplatte passt, mit etwas spiel, an die richtige Position, um die Kontakte der Fernbedienung zu treffen. Ich habe vor dem Einkleben aller Bauteile die Platine auf die Federkontaktplatte gelegt und mit einem Durchgangsprüfer die korrekte Verbindung durchgetestet. Die Federn ließen sich leicht nachstellen, wenn ein Kontakt nicht gleich funktionierte.
![Velux ESP8266 MQTT Smart Home 10 ESP 3D Gehäuse Velux Fernbedienung](https://www.chrisbue.de/wp-content/uploads/ESP-3D-Gehaeuse-Velux-Fernbedienung-scaled-769x1024.webp)
Programmierung
Der ESP8266 soll sich am MQTT Broker mit für eine Topic anmelden um bei Nachrichten an die Topic diese zu empfangen. Wird eine Nachricht empfangen soll geprüft werden ob diese einer der Funktionen Auf, Ab oder Stop entspricht und entsprechend der Funktion dann die Ausgänge D5-D7 auf HIGH oder LOW setzen.
Ist der ESP über Serial mit einem Terminal verbunden, lasse sich die Funktionen AUF, AB und STOP auch über das Terminal auslösen.
#include "MqttSetup.h" #define mqtt_topic_ir_device "your/topic/the/esp/listen/to" String readString; void setup() { // open serial port Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); // LEFT // UP pinMode(D5, OUTPUT); digitalWrite(D5, HIGH); // Stop pinMode(D6, OUTPUT); digitalWrite(D6, HIGH); // Down pinMode(D7, OUTPUT); digitalWrite(D7, HIGH); // RIGHT // Up pinMode(D1, OUTPUT); digitalWrite(D1, HIGH); // Stop pinMode(D2, OUTPUT); digitalWrite(D2, HIGH); // Down pinMode(D8, OUTPUT); digitalWrite(D8, HIGH); setupWifiMqtt(); delay(1000); subscribeWifiMqtt(mqtt_topic_ir_device); setWifiMqttMessageCallback( roofWindowShadingCallback ); Serial.println(); Serial.println("Bereit "); digitalWrite(LED_BUILTIN, HIGH); } void loop() { while (Serial.available() > 0) { readString = Serial.readString(); readString.replace("\n", ""); } if (readString.length() > 0) { if (readString == "up") { veluxUp(); } if (readString == "stop") { veluxStop(); } if (readString == "down") { veluxDown(); } readString = ""; } } void roofWindowShadingCallback( char* messageTopic, char* message ){ if(strcmp(messageTopic, mqtt_topic_ir_device) == 0){ if(strcmp(message, "up") == 0){ veluxUp(); } else if(strcmp(message, "stop") == 0){ veluxStop(); } else if(strcmp(message, "down") == 0){ veluxDown(); } } } void veluxUp(){ Serial.println("up"); digitalWrite(LED_BUILTIN, LOW); digitalWrite(D5, LOW); digitalWrite(D6, HIGH); digitalWrite(D7, HIGH); delay(200); digitalWrite(D1, LOW); digitalWrite(D2, HIGH); digitalWrite(D8, HIGH); delay(200); VeluxReset(); } void veluxStop(){ Serial.println("stop"); digitalWrite(LED_BUILTIN, LOW); digitalWrite(D5, HIGH); digitalWrite(D6, LOW); digitalWrite(D7, HIGH); delay(200); digitalWrite(D1, HIGH); digitalWrite(D2, LOW); digitalWrite(D8, HIGH); delay(200); VeluxReset(); } void veluxDown(){ Serial.println("down"); digitalWrite(LED_BUILTIN, LOW); digitalWrite(D5, HIGH); digitalWrite(D6, HIGH); digitalWrite(D7, LOW); delay(200); digitalWrite(D1, HIGH); digitalWrite(D2, HIGH); digitalWrite(D8, LOW); delay(200); VeluxReset(); } void VeluxReset(){ digitalWrite(D5, HIGH); digitalWrite(D6, HIGH); digitalWrite(D7, HIGH); delay(200); digitalWrite(D1, HIGH); digitalWrite(D2, HIGH); digitalWrite(D8, HIGH); digitalWrite(LED_BUILTIN, HIGH); }
Link zur MqttSetup.h .
Anmerkung
Ich habe hier im Programm 6 Ein- und Ausgänge belegt. Hintergrund ist, dass ich in einem Raum zwei Jalousien für zwei einzelne Fenster habe. Im Programm erhalten beide Fernbedienungen den gleichen Befehl. Trotzdem sind beide Fenster per Fernbedienung unabhängig voneinander steuerbar.
Zwischen der Aktivierung eines Ausgangs auf Fernbedienung 1, habe ich eine kurze Pause eingebaut, bis ich die Ausgänge für Fernbedienung 2 schalte. Tests ergaben, dass beide Steuereinheiten nicht zur selben Zeit aktiviert werden sollten. Ich fand heraus, dass dann nur unzuverlässig und meist nur eine Sonnenschutz aktiviert wird. Das lässt sich auch über die Fernsteuerungen manuell nachstellen.
Ein ähnliches Projekt, das ebenfalls auf Nachrichten aus dem MQTT-Protokoll hört, ist das IR-Fernbedienung Projekt.