Somfy- und Velux-Rollläden in Home Assistant – mit einer DIY-ESP32-Bridge
Sechs io-homecontrol-Rollos – vier Somfy-Rollläden und zwei Velux-Dachfensterrollos – laufen bei mir über eine selbstgebaute ESP32-Bridge für rund 30 Euro in Home Assistant, ganz ohne Somfy TaHoma oder Velux KLF 200. Dazu gibt es ein Dashboard, eine Automation nach Sonnenstand und Sprachsteuerung über Alexa.
Für jeden Hersteller ein eigener Hub? Der offizielle Weg sähe so aus: eine TaHoma für Somfy, ein KLF 200 für Velux, dazu jeweils eine eigene App und oft eine Cloud dazwischen. Jede neue Marke im Haus bringt noch eine Box mit, die Strom zieht, Updates braucht und irgendwann vom Hersteller nicht mehr unterstützt wird.
Ich gehe lieber den anderen Weg: selbst bauen und alles zentral über Home Assistant steuern. Somfy und Velux funken ohnehin im selben Standard. Warum also zweimal für eine Box zahlen, die nur einen Teil davon versteht? Ja, das kostet einen Samstag Bastelzeit. Dafür läuft danach alles lokal, ohne Cloud-Abhängigkeit, und ich verstehe mein System, statt einem Hersteller zu vertrauen.
Dieser Artikel fasst zusammen, was ich dafür gekauft, eingerichtet und unterwegs gelernt habe – inklusive der Stolperfallen, die mich Zeit gekostet haben.
Ausgangslage und Aufbau
Alle Rollos funken mit io-homecontrol auf 868 MHz – dem Funkstandard, den Somfy und Velux gemeinsam nutzen. Genau diese Funksprache spricht die ESP32-Bridge. Sie verhält sich gegenüber den Motoren wie eine weitere Fernbedienung.

Home Assistant schickt Befehle per WLAN an die Bridge. Die Bridge funkt sie an die Rollos. Die Wandschalter bleiben parallel angelernt, und Alexa hängt per Matter an Home Assistant.
Einkaufsliste
Für die Bridge brauchst du nur ein fertiges Funkboard, ein Kabel und ein Netzteil. Löten ist nicht nötig. Die Preise sind grobe Richtwerte.
| Teil | Wofür | ca. Preis |
|---|---|---|
| LilyGO TTGO T3 LoRa32 868 MHz, V1.6.1 (mit Antenne und OLED-Display) | Die eigentliche Bridge: ESP32 + SX1276-Funkchip für io-homecontrol | 25–35 € |
| USB-Datenkabel (kein reines Ladekabel) | Erstes Flashen am PC | vorhanden |
| USB-Netzteil 5 V | Dauerbetrieb der Bridge | 5–10 € |
| Gehäuse (optional) | Schutz und Optik, z. B. selbst 3D-gedruckt | 0–10 € |
Wichtig: unbedingt die 868-MHz-Variante kaufen. Es gibt das Board auch mit 433 MHz und 915 MHz – die funken nicht im io-homecontrol-Band. Das Projekt ist nur auf der V1.6.1 getestet.
Software und vorhandene Geräte:
- Home Assistant (bei mir als HAOS-VM auf einem Unraid-Server)
- ESPHome-App in Home Assistant (Device Builder)
- Firmware-Projekt somfy-io-bridge von danielpetrovic, festgelegt auf Version v1.0.1
- Für Alexa: die App „Matter Hub“ in Home Assistant und ein Echo Dot (5. Gen.)
- Mindestens eine vorhandene, funktionierende Fernbedienung oder ein Wandschalter pro Rollo (bei mir Somfy Smoove io bzw. Velux 3LI) – ohne die lässt sich der Motor nicht in den Lernmodus versetzen
Schritt 1: Bridge mit ESPHome einrichten
Die Bridge besteht aus zwei YAML-Dateien: somfy-io-bridge.yaml ist das Gerät, somfy-io-cover.yaml ist eine Vorlage, die pro Rollo einmal eingebunden wird.
- In Home Assistant unter Einstellungen → Apps die App ESPHome installieren und starten.
- Die beiden Dateien aus dem GitHub-Projekt nach
/config/esphome/legen. Den Funk-Code holt ESPHome beim Kompilieren selbst von GitHub. - Die Komponente auf ein Release festnageln statt „immer neuester Stand“:
external_components:
- source: github://danielpetrovic/somfy-io-bridge@v1.0.1
- Im ESPHome-Builder über ⋮ → Secrets die Zugangsdaten eintragen:
wifi_ssid,wifi_passwordund den API-Schlüsselio_bridge_api_key(erzeugen mitopenssl rand -base64 32). - Für jedes Rollo eine feste Identität erzeugen und ebenfalls in die Secrets schreiben:
node(3 Byte,openssl rand -hex 3) undkey(16 Byte,openssl rand -hex 16). Ohne feste Werte erfindet das Board beim ersten Start eigene – und wenn du das Board mal tauschst, musst du alle Rollos neu anlernen. - Pro Rollo einen Eintrag unter
packages:anlegen (Beispiel siehe unten). - Erstes Flashen per USB am PC („Plug into this computer“). Alle weiteren Updates laufen danach drahtlos.
- Home Assistant findet das Gerät unter Einstellungen → Geräte & Dienste. Hinzufügen und den API-Schlüssel eingeben.
So sieht ein Rollo-Eintrag aus. Die Somfy-Rollläden laufen als shutter, die Velux-Rollos als blind mit my_pattern: simple:
packages:
rollladen_1: !include
file: somfy-io-cover.yaml
vars:
cover_id: rollladen_1
cover_name: "Rollladen 1"
node: !secret io_rollladen_1_node
key: !secret io_rollladen_1_key
velux_rollo_1: !include
file: somfy-io-cover.yaml
vars:
cover_id: velux_rollo_1
cover_name: "Velux Rollo 1"
device_class: "blind"
my_pattern: "simple"
node: !secret io_velux_rollo_1_node
key: !secret io_velux_rollo_1_key
Jedes Rollo bekommt außerdem einen eigenen Eintrag unter esphome: devices:, damit es in Home Assistant als eigenes Gerät erscheint. motor_address bleibt leer – das braucht man nur zusammen mit einer TaHoma.
Dass die Datei somfy-io-cover.yaml im Builder mit dem Fehler „esphome section missing“ auftaucht, ist normal: Sie ist nur die Vorlage, kein eigenes Gerät.
Schritt 2: Somfy-Rollläden anlernen
Die Bridge meldet sich beim Motor als zusätzliche Einweg-Fernbedienung (1W) an. Der vorhandene Wandschalter bleibt dabei voll funktionsfähig.
- Am vorhandenen Smoove-io-Schalter die PROG-Taste gedrückt halten, bis der Rollladen kurz ruckelt. Das kann ein paar Sekunden dauern.
- Der Motor bleibt jetzt etwa 10 Minuten im Lernmodus.
- In Home Assistant beim passenden Rollladen in der Gerätekonfiguration „Program (1W)“ drücken.
- Der Rollladen ruckelt noch einmal: angelernt.
- Mit Auf/Zu in Home Assistant testen.
- Für jeden weiteren Rollladen wiederholen.
In Home Assistant habe ich die Rollos danach umbenannt, z. B. in „Rolladen Wohnzimmer 1“ und „Rolladen Esszimmer 2“.
Achtung, Umschalter: „Program (1W)“ sendet beim ersten Druck Anlernen (Add) und beim nächsten Druck Ablernen (Remove). Drück den Knopf bei einem funktionierenden Rollo also nicht noch einmal „zur Sicherheit“. Welchen Befehl die Bridge gesendet hat, steht im Protokoll (siehe Stolperfallen).
- ☐ Rolladen Wohnzimmer 1
- ☐ Rolladen Wohnzimmer 2
- ☐ Rolladen Esszimmer 1
- ☐ Rolladen Esszimmer 2
Schritt 3: Velux-Dachfensterrollos anlernen
Velux nutzt ebenfalls io-homecontrol, deshalb läuft es mit derselben Bridge, obwohl der Entwickler Velux nicht getestet hat. Bei meinen zwei fest verkabelten Dachfensterrollos hat es auf Anhieb geklappt.
- Die Velux-Rollos wie oben als eigene Pakete eintragen (
device_class: blind,my_pattern: simple) und die Bridge neu flashen. - Die Bridge in die Nähe des Rollos bringen. Meine Velux-Rollos sitzen zwei Stockwerke über dem normalen Platz der Bridge. Zum Anlernen habe ich sie einfach mit einem USB-Netzteil nach oben getragen.
- Den Lernmodus am Rollo starten: Bei mir sitzt die Lerntaste direkt am Rollo. Dazu muss man die Abdeckung abnehmen („auseinanderbauen“). Die Taste nur kurz drücken, bis das Rollo ruckelt – langes Drücken kann einen Reset auslösen.
- Sofort in Home Assistant bei „Velux Rollo 1“ „Program (1W)“ drücken.
- Mit Auf/Zu testen, dann dasselbe für Rollo 2.
- Bridge wieder an ihren festen Platz stellen und alle Rollos einmal testen, z. B. über „Alle hoch“. Bei mir reicht die Funkreichweite vom festen Platz aus für alle sechs.
Die Velux-Wandschalter (3LI) funktionieren danach ganz normal weiter.
Schritt 4: Dashboard und Automation nach Sonnenstand
Alle sechs Rollos steuere ich über ein eigenes Dashboard „Rollläden“. Eine Automation fährt sie morgens hoch und abends runter.
Das Dashboard ist eine Sections-Ansicht mit zwei Spalten:
- Alle Rollläden: drei Knöpfe „Alle hoch“, „Alle 50 %“ und „Alle runter“ für alle sechs Rollos, dazu ein Schalter, um die Automation an- und auszuschalten.
- Einzeln: eine Kachel pro Rollo mit Auf, Stopp, Ab und Positionsregler. Die Velux-Rollos stehen unter der Zwischenüberschrift „Dachfenster (Velux)“.
So sieht eine Rollo-Kachel aus:
type: tile
entity: cover.velux_rollo_1
features:
- type: cover-open-close
- type: cover-position
Die Automation „Rollläden nach Sonnenstand“ hat zwei Auslöser: Sonnenaufgang zum Hochfahren und Sonnenuntergang plus 2 Stunden zum Runterfahren.
alias: Rollläden nach Sonnenstand
triggers:
- trigger: sun
event: sunrise
id: sonnenaufgang
- trigger: sun
event: sunset
offset: "02:00:00"
id: sonnenuntergang
actions:
- choose:
- conditions:
- condition: trigger
id: sonnenaufgang
sequence:
- action: cover.open_cover
target:
entity_id: &rollos
- cover.rollladen_1
- cover.rollladen_2
- cover.rollladen_3
- cover.rollladen_4
- cover.velux_rollo_1
- cover.velux_rollo_2
- conditions:
- condition: trigger
id: sonnenuntergang
sequence:
- action: cover.close_cover
target:
entity_id: *rollos
mode: single
Im Home-Assistant-Editor steht die Rollo-Liste einfach zweimal. Den YAML-Anker &rollos habe ich hier nur zum Abkürzen genutzt.
Schritt 5: Sprachsteuerung mit Alexa über Matter
Alexa bekommt die Rollos über eine Matter-Bridge direkt aus Home Assistant – ohne Abo bei Nabu Casa und ohne Cloud-Umweg über Somfy oder Velux.
- In Home Assistant die App Matter Hub installieren und starten.
- Im Matter Hub eine Bridge anlegen und die Rollo-Geräte (
cover.*) freigeben. - In der Alexa-App Gerät hinzufügen → Matter wählen und den QR-Code oder Kopplungscode aus dem Matter Hub scannen. Mein Echo Dot (5. Gen.) dient dabei als Matter-Steuerzentrale.
- Alexa übernimmt die Namen aus Home Assistant. Danach funktionieren Befehle wie „Alexa, fahre Rolladen Wohnzimmer 1 runter“.
Kommen später Rollos dazu (bei mir die Velux-Rollos), prüf im Matter Hub, ob sie freigegeben sind. Dann tauchen sie auch in Alexa auf.
Stolperfallen und Tipps
| Problem | Ursache | Lösung |
|---|---|---|
| Rollo reagiert nach dem Anlernen nicht | „Program (1W)“ ist ein Umschalter: Der zweite Druck hat Remove statt Add gesendet | Im Protokoll nachsehen, Lernmodus neu starten und genau einmal drücken |
| Man sieht nicht, ob das Anlernen geklappt hat | Einweg-Funk bekommt keine Bestätigung vom Motor | Auf das Ruckeln achten und danach Auf/Zu testen |
| Weit entferntes Rollo lässt sich nicht anlernen | Funkreichweite über mehrere Stockwerke | Bridge zum Anlernen mitnehmen, danach am festen Platz testen |
| Prozentanzeige stimmt nicht | Die Position wird nur aus der Fahrzeit geschätzt | Einmal ganz auf oder zu fahren; „Travel Time Open/Close“ (Standard 25 s) mit der Stoppuhr anpassen |
| Board getauscht, alle Rollos weg | Keine festen node/key-Werte in den Secrets |
Von Anfang an feste Werte vergeben |
| „Program (2W)“ funktioniert nicht | Zweiweg-Kopplung klappt mit diesem Projekt bisher auf keiner Hardware | Bei 1W bleiben |
So liest du das Protokoll: Im ESPHome-Builder beim Gerät auf das Protokoll-Symbol klicken und dann „Program (1W)“ drücken. Wichtig sind diese Zeilen:
Prog pressed while paired_=false -> sending Add
Add sent to C293BC (full ceremony: Add + private-write + Pair, experimental)
paired_=false -> sending Add heißt Anlernen, paired_=true -> sending Remove heißt Ablernen.
Sicherheitsregeln:
- Niemals die letzte funktionierende Bedienung eines Motors ablernen. Sonst kommst du nicht mehr in den Lernmodus und brauchst einen Werksreset.
- Ein Werksreset per Doppel-Stromunterbrechung löscht alle Einweg-Fernbedienungen dieses Motors. Dabei nur den betroffenen Motor vom Strom nehmen.
- Das Logging auf
VERY_VERBOSEist zur Fehlersuche praktisch, kostet aber Leistung. Im Dauerbetrieb lieber aufDEBUGoderINFOzurücksetzen. - Das Projekt ist nur für den privaten Gebrauch an eigenen Geräten gedacht.

Fazit
Für unter 50 Euro laufen sechs io-Rollos von zwei Herstellern lokal in Home Assistant, mit Dashboard, Automation und Alexa. Die originalen Wandschalter funktionieren weiter. Der einzige Nachteil: Die Position ist nur geschätzt, weil die Motoren per Einweg-Funk nichts zurückmelden. Für Rollläden, die morgens hoch- und abends runterfahren, reicht das völlig.