Piloter ses volets Profalux dans Home Assistant
Piloter mes volets roulants Profalux 868 MHz depuis Home Assistant, en local, sans la clé constructeur. Tout est open source et reproductible de deux façons : un ESP32 avec un module CC1101 pour une quinzaine d'euros, ou une carte intégrée, la Super v1.0, dont les fichiers de fabrication sont publiés.
Code : github.com/Isno-Open/OpenProfalux
- Le principe : cloner une télécommande, pas casser la crypto
- Route A : ESP32 + CC1101 (~15 €)
- Route B : faire produire la Super v1.0 (open hardware)
- Le flash (sans compiler)
- Premier démarrage et Wi-Fi
- L’intégration Home Assistant (MQTT)
- L’apprentissage des volets
- Compatibilité
- Sécurité de l’interface
- Pour reproduire
Mes volets roulants sont des Profalux 868 MHz (moteurs MAI-EMPX / MAI-EMNOE). Aucune passerelle officielle, aucun pont vers Home Assistant, et une télécommande en KeeLoq (code tournant) qu’on ne peut a priori pas rejouer. J’ai quand même voulu les piloter depuis Home Assistant, en local, sans cloud et sans tirer de fil.
Résultat : OpenProfalux, un firmware open source (GPL-3.0) qui tourne sur un ESP32 avec un petit module radio. Tout est publié et reproductible, et il y a deux façons de faire le matériel, toutes les deux ouvertes :
- Route A, la plus accessible : un ESP32 et un module CC1101, câblés soi-même, pour une quinzaine d’euros. Voir le projet OpenProfalux.
- Route B, la carte intégrée : faire produire soi-même la Super v1.0, une carte radio publiée en open hardware (CERN-OHL-S), dont les fichiers de fabrication sont dans le dépôt. Voir le projet ISNO Super.
Dans les deux cas, c’est le même firmware et le même usage dans Home Assistant.

Le principe : cloner une télécommande, pas casser la crypto
J’ai d’abord cherché la clé constructeur pendant des jours. Puis j’ai testé la chose la plus bête : rejouer une trame déjà captée.
Le moteur l’accepte. Le compteur anti-rejeu du KeeLoq n’est pas vérifié par le récepteur : une trame capturée puis réémise fait bouger le volet, même après avoir utilisé la vraie télécommande entre-temps. Donc aucune clé n’est nécessaire pour piloter par rejeu.
OpenProfalux clone donc une télécommande : on capture les trames montée / stop / descente d’une vraie télécommande, on les nomme, et on les rejoue à la demande depuis Home Assistant.
Pour les moteurs récents, une seconde méthode est gérée : l’enrôlement. Le boîtier crée sa
propre identité que le moteur apprend, puis génère lui-même ses trames à code tournant, sans
rejouer les captures. C’est souvent le plus fiable selon la génération. Quelle méthode marche
sur quel moteur ne se devine pas : le projet tient une table de compatibilité, une ligne par
retour vérifié (marque, modèle, fréquence, méthode), alimentée par les
issues et le forum, dans docs/COMPATIBILITE.md du dépôt.
Route A : ESP32 + CC1101 (~15 €)
Le montage accessible, à la portée de tous : un ESP32 et un module CC1101, reliés par quelques fils.

Un seul avertissement important : le CC1101 fonctionne en 3,3 V, jamais en 5 V.
Câblage, exemple ESP32-WROOM DevKit (profil external du dépôt) :
| CC1101 | ESP32 (GPIO) |
|---|---|
| SCK | 18 |
| MISO | 19 |
| MOSI | 23 |
| CS (CSN) | 5 |
| GDO0 | 4 |
| VCC | 3V3 |
| GND | GND |
GDO2 n’est pas utilisé. Chaque carte supportée est décrite par un fichier boards/<carte>.json
dans le dépôt (M5 ATOM Lite, D1 mini, Olimex ESP32-POE ont un autre brochage) : le firmware lit
ces broches, il n’en code aucune en dur.
Route B : faire produire la Super v1.0 (open hardware)
Pour une version intégrée et propre, j’ai dessiné une carte, la Super, et j’en ai publié la
v1.0 (EVT) en open hardware. On peut la faire produire soi-même : le dépôt
OpenSuperRF contient tout ce qu’un fabricant PCBA
(JLCPCB, Aisler, PCBWay) demande, dans fab/ :
isno-super-gerbers.zip(les couches du circuit),isno-super-bom.csv(la nomenclature),isno-super-cpl.csv(le placement des composants pour l’assemblage),
plus les sources KiCad complètes (hardware/super/) et un boîtier 3D imprimable
(enclosures/boitier_super.stl). On commande ces trois fichiers chez le fabricant et on récupère
la carte montée : la route est entièrement reproductible.

La carte : ESP32-S3 en USB-C, deux radios CC1101 (433 et 868 MHz) réunies sur un seul SMA par un diplexeur LC, connecteurs Qwiic (I2C) et mikroBUS, boutons BOOT/RESET, 4 couches, 67 x 55 mm. Elle a été fabriquée, assemblée et mesurée (porteuses propres au tinySA, mesures dans le dépôt).

Le mikroBUS (J2) : l’adaptateur, jamais une nappe droite. Pour piloter des volets avec OpenProfalux, le mikroBUS n’est pas nécessaire, les deux radios sont déjà sur la carte. Si on s’en sert pour une extension, le brochage J2 de la v1.0 est inversé : une nappe IDC droite est destructrice (elle court-circuite les alimentations). Il faut l’adaptateur passif qui croise les signaux, lui aussi open source dans
hardware/accessories/mikrobus-adapter(sources KiCad). Ce point et les autres (par exemple ne pas pousser le 433 pile à la limite réglementaire) sont détaillés dans leKNOWN_ISSUES.mddu dépôt.

Le flash (sans compiler)
Le plus simple, sans installer ESP-IDF : prendre les binaires pré-compilés de la dernière
release et flasher avec esptool
(pip install esptool). Choisir le binaire qui correspond au matériel, les broches SPI
diffèrent :
# Route A, ESP32 DevKit + CC1101 externe
esptool.py --chip esp32 -p /dev/ttyUSB0 --baud 460800 write_flash 0x0 openprofalux-external-full.bin
# Route B, Super v1.0 (ESP32-S3)
esptool.py --chip esp32s3 -p /dev/ttyUSB0 --baud 460800 write_flash 0x0 openprofalux-isno-super-full.bin
Sous Windows (PowerShell), remplacer -p /dev/ttyUSB0 par --port COM4. Si le câble USB coince
(« Timed out waiting for packet »), retomber à --baud 115200, qui passe partout. Qui préfère
compiler depuis les sources trouvera tout dans firmware/README.md et BUILD.md (ESP-IDF v6.1,
ou la même commande via Docker ; le profil carte de la Super est -DBOARD=isno-super).
Mises à jour ensuite : pas besoin de câble, l’onglet OTA de l’interface accepte le binaire -ota,
et le bootloader revient tout seul à la version précédente si une mise à jour plante.
Premier démarrage et Wi-Fi
- Sans Wi-Fi configuré, l’ESP32 ouvre un point d’accès ouvert
OpenProfalux_XXXX. - On s’y connecte : le portail captif s’ouvre tout seul (sinon
http://192.168.4.1). Onglet Wi-Fi : réseau, mot de passe, nom du boîtier. - Au redémarrage, le boîtier rejoint le réseau, joignable sur
http://openprofalux-xxxx.local.
L’onglet Wi-Fi montre ensuite l’état de la connexion : réseau, signal, adresse sur le réseau. À noter, l’ESP32 ne voit que le 2,4 GHz, pas le 5 GHz.

L’intégration Home Assistant (MQTT)
Dans l’onglet MQTT de l’interface, on renseigne l’adresse du broker. Le firmware publie alors
ses entités par MQTT discovery : chaque volet apparaît tout seul dans Home Assistant comme une
entité cover (ouvrir / fermer / stop / position en %). Rien à écrire dans configuration.yaml.
Un bouton détecte même le broker en mDNS, et le TLS (mqtts://) est disponible.


Pour piloter sans l’interface :
openprofalux/cover/<id>/set:OPEN|CLOSE|STOPopenprofalux/cover/<id>/set_position:0..100openprofalux/cover/<id>/positionet/state: position et état (retain)
L’apprentissage des volets
Deux méthodes, dans l’onglet Télécommandes, à choisir selon le moteur (voir la compatibilité plus bas).
Rejeu : cloner une télécommande
Le cas le plus simple. On choisit un volet (ou on le crée), puis on capture une à une les commandes montée / stop / descente en appuyant sur la vraie télécommande, gardée à portée du boîtier. Une capture par commande suffit, et Home Assistant rejoue ensuite ces trames.

Enrôlement : créer une télécommande virtuelle
Pour les moteurs qui refusent le rejeu (code tournant strict). Le boîtier crée sa propre identité et l’apprend au moteur. Il faut quand même la télécommande d’origine pour le geste de validation : on choisit le modèle de moteur, on lance, puis on appuie sur la vraie télécommande. Le boîtier reçoit une identité nouvelle si le moteur est inconnu, ou la même s’il est déjà connu. Ensuite il génère lui-même ses trames à code tournant, sans plus rejouer les captures.

Position : la calibration
Le moteur ne renvoie pas sa position. On la fait estimer par le temps de course : volet en butée haute, on lance une descente et on marque l’arrivée en bas, puis l’inverse pour la montée. La position en % apparaît alors dans Home Assistant, avec recalage aux butées.

Le boîtier suit aussi la vraie télécommande, et on peut associer plusieurs télécommandes à un même volet.
Compatibilité
Confirmé par des retours d’utilisateurs. La table ci-dessous est tenue à jour au fil des retours, directement depuis le dépôt :
La porteuse Profalux varie selon la génération (868,350 à 868,425 MHz) : pour un volet ancien ou une
autre marque, la fréquence et le profil radio se règlent dans l’interface, onglet Système > Appareil.
Le bouton Caler sur ma télécommande trouve la fréquence exacte que le boîtier reçoit. Les
particularités de réglage (moteurs solaires, Eveno, FranciaFlex) sont détaillées dans docs/COMPATIBILITE.md.

Le même boîtier sait aussi émettre en Somfy RTS (433,42 MHz) : appairage par le bouton PROG puis course complète en appui bref, validé sur un récepteur Somfy Soliris RTS (volet à lames orientables), voir l’issue #73 sur GitHub. À confirmer sur d’autres récepteurs. Il tente aussi l’io-homecontrol (Velux, Somfy io), qui n’est pas encore fonctionnel. Le cœur du projet reste Profalux.
Sécurité de l’interface
Le boîtier refuse les commandes qu’une page d’un autre site tenterait de lui faire exécuter via le navigateur (protection CSRF, réponse 403). Rien ne change pour l’interface, pour Home Assistant (MQTT ou REST) ni pour un script curl. Un mot de passe facultatif protège en plus l’accès à l’interface et à la sauvegarde.
Pour reproduire
Tout est ouvert et reproductible :
- Firmware OpenProfalux (GPL-3.0) : github.com/Isno-Open/OpenProfalux
(code, binaires pré-compilés, brochages dans
boards/, docs, bancs de test). - Carte open hardware OpenSuperRF (CERN-OHL-S) : github.com/Isno-Open/OpenSuperRF (gerbers, nomenclature, placement, sources KiCad, boîtier, accessoires mikroBUS, mesures RF).
Les retours, captures d’autres moteurs et ajouts de cartes sont les bienvenus via les issues des dépôts.
Matériel
-
Carte Seeed XIAO ESP32-S3 22,90 €Carte XIAO à base d'ESP32-S3 : double cœur, Wi-Fi et BLE 5, connecteur d'antenne externe, et de quoi faire tourner un petit modèle embarqué.
- ◨Module radio CC1101 868 MHz ~3 à 5 €
Émetteur-récepteur sub-GHz. Prendre impérativement une variante 868 MHz, pas 433. Sur les petits modules verts, les pastilles sont au pas de 2 mm et non uniformes, donc les headers 2,54 ne rentrent pas ; souder les fils directement marche très bien. 3,3 V uniquement, jamais 5 V.
AliExpress - ◨Antenne 868 MHz ~2 €
Un bout de fil de 8,6 cm (quart d'onde à 868 MHz) suffit en courte portée. Une antenne hélicoïdale SMA améliore nettement la portée dans la maison.
-
Carte ISNO Super 69,90 €Deux radios sous-GHz (433 + 868 MHz), chacune sur sa propre embase RP-SMA. ESP32-S3, Qwiic et mikroBUS, USB-C. Pour les firmwares radio ouverts. Avec OpenProfalux : Profalux (868 MHz) et Somfy RTS (433 MHz) aujourd'hui, d'autres marques au fil des versions.
Prix indicatifs relevés au moment du projet. Aucun lien affilié - je ne touche rien.