Tutorial: Controlar tus iluminaciones Legrand In One (CPL) con Gladys
Este tutorial explica cómo implementar la integración Legrand In One CPL de A a Z: conexión de la interfaz, pasarela serie, instalación, descubrimiento de dispositivos, lectura de registros, reglas de estado y tablero de control.
Requisitos previos: una instalación Legrand In One (interruptores, interescenarios), una interfaz Legrand CPL/USB ref. 882 13, y Gladys 4.86 o más reciente. La integración no está afiliada a Legrand.
1. Conectar la interfaz 882 13
La interfaz 882 13 se conecta a un puerto USB de la máquina que ejecuta Gladys. Linux la ve como un puerto serie (/dev/ttyACM0), con un nombre estable en /dev/serial/by-id/:
ls -l /dev/serial/by-id/
En mi caso: usb-Btcino_Terraneo_Mod._SFERA_Tele_Loop-if00 (el nombre BTicino es normal, es el fabricante del módulo).
¿Dónde conectarla?
| Máquina | ¿Factible? | Notas |
|---|---|---|
| Raspberry Pi 4/5, Home Assistant Yellow | Sí | Es mi caso (Yellow). Conéctala directamente, no a través de un hub USB no alimentado. |
| Mini PC con Linux (Debian, Ubuntu…) | Sí | Igual que el Pi. |
| NAS (Synology, QNAP) con Docker | A menudo | Docker debe poder montar el dispositivo (devices:). No probado. |
| Gladys en una VM | Difícil | Hay que pasar el puerto USB a la VM. Evítalo si es posible. |
| Gladys en Windows / macOS | No | La pasarela serie (más abajo) necesita Linux. |
Límite importante: la interfaz debe estar conectada a un enchufe de la misma red eléctrica que tus módulos In One (mismo cuadro, idealmente misma fase). La corriente portadora no cruza los filtros (882 12 / 882 21 / 882 23) ni, en general, los contadores. Si algunos módulos nunca se escuchan, es la primera cosa que hay que verificar.
2. Crear la pasarela serie (obligatoria)
Las integraciones de Gladys funcionan en una arena sin acceso USB. Un pequeño contenedor socat expone, por lo tanto, el puerto serie en un puerto TCP, al cual la integración se conecta.
Crea una carpeta (por ejemplo ~/legrand) con este docker-compose.yml, reemplazando el nombre del dispositivo por el tuyo:
services:
legrand-serial:
image: alpine/socat
container_name: legrand-serial
restart: always
labels:
- com.centurylinklabs.watchtower.enable=false
devices:
- /dev/serial/by-id/usb-Btcino_Terraneo_Mod._SFERA_Tele_Loop-if00:/dev/legrand
ports:
- "172.17.0.1:2000:2000"
command: tcp-listen:2000,fork,reuseaddr,max-children=1 /dev/legrand,raw,echo=0,b115200,hupcl=0
Luego:
cd ~/legrand
docker compose up -d
docker ps | grep legrand-serial
Dos puntos a saber:
172.17.0.1es la dirección del host vista desde la red Docker de Gladys. Funciona en una instalación Docker estándar. Si tu red Docker es diferente, verifica condocker network inspect bridge.max-children=1: una sola conexión a la vez. Si abres unnc 172.17.0.1 2000para probar, la integración pierde la pasarela hasta que cierres la prueba.
Prueba rápida, antes de instalar la integración:
nc 172.17.0.1 2000
Presiona un interruptor de pared: un marco como *1*1*0#15112945## debe mostrarse. Salir con Ctrl-C. Si falta nc: sudo apt install netcat-openbsd.
Si usas la imagen Raspberry Pi de Gladys (« Gladys OS »)
La imagen oficial es un Raspberry Pi OS con Docker ya instalado. La pasarela se crea, por lo tanto, exactamente como arriba; solo hay que abrir una terminal en el Pi a través de SSH.
1. Conectarse por SSH. Desde una computadora de la misma red:
ssh pi@gladys.local
(o ssh pi@ADRESSE_IP_DU_PI). Las credenciales son las de la imagen de la fundación: usuario pi, contraseña raspberry. En Windows, utilice PowerShell o PuTTY. Al primer acceso, cambie la contraseña con passwd.
2. Identificar la interfaz 882 13. Conéctela, luego:
ls -l /dev/serial/by-id/
Tome nota del nombre que comienza con usb-Btcino_....
3. Crear la pasarela. Siempre en el terminal SSH:
mkdir -p ~/legrand && cd ~/legrand
nano docker-compose.yml
Pegue el docker-compose.yml anterior (el clic derecho pega en la mayoría de los terminales), reemplace el nombre del dispositivo por el suyo, guarde con Ctrl-O luego Enter, salga con Ctrl-X. Luego ejecute:
docker compose up -d
docker ps | grep legrand-serial
- « permiso denegado »: agregue
sudoantes, o agregue su usuario al grupo Docker (sudo usermod -aG docker pi, luego desconéctese y vuelva a conectarse). docker composedesconocido (imagen antigua): intentedocker-compose up -d, con un guión.
4. Verificar con la prueba nc anterior. El contenedor se reinicia solo con el Pi (restart: always).
El mismo procedimiento es válido para un mini PC con Debian o Ubuntu y Docker: solo cambia el identificador SSH. La imagen Gladys no cubre el Raspberry Pi 5; para este, Gladys se instala manualmente con Docker, y la puerta de enlace se crea de la misma manera.
3. Instalar la integración
En Gladys: Integraciones → catálogo, busque « Legrand In One CPL », Instalar. Las actualizaciones se realizarán posteriormente desde el catálogo.
4. Configuración
Tres ajustes:
- Dirección de la puerta de enlace serie:
172.17.0.1(por defecto). - Puerto TCP:
2000(por defecto). - Dispositivos vinculados (Regla 1 a Regla 12): déjelos vacíos por ahora, volveremos a ellos en el capítulo 8.
Haga clic en Guardar la configuración. La insignia Conectado en la parte superior se refiere a la conexión con Gladys; la conexión con la puerta de enlace se verifica en la pestaña Registros, que debe mostrar Connected to 172.17.0.1:2000.
5. Descubrimiento: hacer hablar la instalación
El bus In One no sabe listar sus equipos. La integración aprende cada circuito al escucharlo: por lo tanto, debe presionar los botones.
- Abra la pestaña Registros en una ventana, para ver las tramas llegar.
- Recorra la casa y presione una vez en cada botón de cada interruptor y de cada interscenario, incluidos los botones de escenario, incluso aquellos que no están programados para nada. Un interscenario del que solo el botón de encendido/apagado ha hablado se reconoce como un simple «inter»; tan pronto como uno de sus botones de escena hable, se convierte en «inter scenario».
- Vuelva a Descubrimiento y haga clic en Escanear.
Cada botón aparece como un dispositivo:
Legrand 944559-1 (inter): un botón de interruptor, con una función de Iluminación Encendido/Apagado;Legrand 648966-1 (inter scenario): el botón de encendido/apagado de un interscenario;Legrand scenario 648966-3: un botón de escenario, expuesto como un botón «Clic».
El número 944559-1 es el número de circuito: identificador del módulo (944559) y número de botón (1). Aparece en todas partes: registros, reglas, parámetros técnicos. Anótelo para cada dispositivo.
Si falta un botón, presione nuevamente y reinicie el escaneo. La lista de circuitos conocidos se conserva al reiniciar.
6. Agregar los dispositivos a Gladys
Haga clic en Agregar a Gladys para cada dispositivo útil, luego elija su habitación en la pestaña Dispositivos.
Un consejo: no renombre los dispositivos. Mantenga Legrand 944559-1 (inter) como nombre, eventualmente complementado (Legrand 944559-1 (inter) Spot Cocina), de manera que se conserve visible el número de circuito. Es él quien hace la conexión con los registros y las reglas; sin él, uno ya no se orienta. El nombre «bonito» se da en el tablero de control, donde cada baldosa puede tener su propia etiqueta (capítulo 9).
Consejo: puede no agregar los botones de escenario no programados ni los interruptores que no controlan nada.
7. Comprender los registros
Cada línea cuenta lo que sucede en el bus. Las tramas están en formato Open Web Net *QUI*QUOI*OÙ##:
| Línea | Dirección |
|---|---|
Frame received: *1*1*0#15112945## (944559-1) |
un botón de iluminación ha enviado encender (*1*1). La dirección 15112945 corresponde al circuito 944559-1. |
Frame received: *1*0*0#15112945## (944559-1) |
el mismo botón ha enviado apagar (*1*0). |
Light 944559-1 … is now on |
el estado mostrado en Gladys ha cambiado. Esta línea solo aparece si el estado cambia: presionar dos veces «encender» solo la produce una vez. |
Frame received: *25*11*0#10383459## (648966-3) |
se ha presionado un botón de escenario (*25*11). |
Scenario 648966-3 … clicked |
el botón correspondiente de Gladys ha recibido un clic. |
Frame received: *25*16*… |
fin de la presión del escenario, ignorada. |
Linked light 944559-1 is now off (from 648966-3) |
una regla de dispositivos vinculados ha actualizado el estado (capítulo 8). Nada se envía al bus. |
Sent *1*0*#15112945## (944559-1 off) |
Gladys ha enviado un comando al bus. La respuesta *#*1## es el acuse de recibo. |
La conexión entre un marco y un dispositivo es la dirección: dirección = identificador × 16 + número de botón. 944559 × 16 + 1 = 15112945. La integración hace el cálculo y muestra el número de circuito entre paréntesis, no tienes que hacerlo.
8. Las reglas «Dispositivos vinculados»
Por qué existen
En el sistema In One, solo los botones hablan en el bus. Un receptor (el relé que controla la lámpara) escucha los botones que ha aprendido y reacciona, sin decir nunca nada. Gladys no puede saber si una lámpara está encendida: no hay ningún marco para eso, y no se puede hacer ninguna solicitud de estado.
Consecuencia: un dispositivo Legrand 648966-1 en Gladys es un botón, no una lámpara. Cuando este botón enciende la cocina, los dispositivos «Spot Cocina» y «Lámpara de Techo Cocina» siguen apareciendo apagados en Gladys, ya que sus propios botones no han hablado. Las reglas corrigen esto: indican a la integración qué luces siguen qué botón, solo en Gladys. Nada se envía al bus.
Las dos formas de regla
Un botón de iluminación a la izquierda: las luces de la derecha copian su estado.
648966-1 -> 944559-1, 944559-2
Cuando el botón 648966-1 se enciende (desde la pared o desde Gladys), 944559-1 y 944559-2 se encienden en Gladys; al apagarse, igual. Esta es la regla para un interruptor que controla varios receptores, o para dos interruptores que controlan la misma lámpara (vaivén):
929520-1 -> 944561-1
929521-1 -> 944561-1
Un botón de escenario a la izquierda: cada luz toma el estado escrito después de =.
648966-3 -> 944559-1=off, 944559-2=off, 648966-1=off
Un escenario no tiene un estado encendido/apagado, solo una presión: por lo tanto, dices qué hace a cada lámpara (=on o =off). Asegúrate de incluir los botones que controlan estas lámparas (aquí 648966-1=off), de lo contrario, el botón del botón seguiría apareciendo encendido.
Para un escenario «todo apagado», lista todas tus luces:
950680-3 -> 944556-1=off, 944556-2=off, 944559-1=off, 944559-2=off, 944560-1=off, 944560-2=off, 944561-1=off, 944561-2=off, 648966-1=off, 929521-1=off, 929520-1=off, 929523-1=off, 929528-1=off
Para un escenario « todo apagado excepto el salón »: misma lista, con 944560-1=on.
Reglas prácticas
- Una regla por campo (Regla 1 a Regla 12). ¿Más de 12 reglas? Póngalas en un campo, separadas por
;. - Las reglas se aplican al registrarse, sin reiniciar.
- Una regla inválida se ignora sin error: si no pasa nada, verifique los números.
- Un enlace solo se aplica a un nivel:
A -> BluegoB -> Cno se propaga de A a C. Esto evita bucles. - Para verificar una regla: presione la tecla y observe las líneas
Linked light … (from …)en los registros.
Cómo encontrar qué hace cada tecla
Haga un inventario por habitación: para cada interruptor y cada escena, anote qué lámparas se encienden o apagan realmente. Es la información que la integración no puede adivinar. Una tabla como esta ayuda:
| Tecla | Efecto real | Regla |
|---|---|---|
| 648966-1 (entrada, encendido/apagado) | enciende/apaga el foco y el plafón de la cocina | 648966-1 -> 944559-1, 944559-2 |
| 950680-3 (escena 3) | apaga toda la casa | 950680-3 -> … todo =off |
| 950680-4 (escena 4) | enciende los plafones del salón y la sala de estar | 950680-4 -> 944560-1=on, 944560-2=on |
9. El panel de control
En el panel de control, cree bloques « Dispositivos » por habitación y dé a cada baldosa el nombre legible (Foco, Plafón, Aplique…). Aquí es donde los nombres descriptivos toman lugar, el dispositivo manteniendo su número de circuito.
Las teclas de escenario también pueden servir como disparador de escena Gladys: « cuando Legrand scenario 950680-3 es clickeado, hacer… » (cortar un enchufe, avisar, etc.).
10. Si no funciona
- Ningún marco en los registros: verifique
docker ps | grep legrand-serial, luego que nada más esté conectado al puerto 2000 (solo una conexión posible).docker restart legrand-seriallibera la pasarela; la integración se reconecta sola. ECONNREFUSED 172.17.0.1:2000: la pasarela no está escuchando, o no en esta dirección.- Una lámpara no aparece: su interruptor aún no ha hablado, o está en otro circuito eléctrico (filtro, otra fase).
- El estado de una lámpara es falso: falta una regla, o la regla no menciona la tecla correcta. Los registros muestran la tecla que habló.
- El comando desde Gladys no hace nada: mire la línea
Sent …y la respuesta.*#*1##= aceptado por la interfaz;*#*0##= rechazado. Si es aceptado pero nada se mueve, el receptor no ha aprendido esta tecla.
Material probado y límites
Probado en mi instalación (22 dispositivos): interruptor doble 672 02, interruptor simple 672 01, interescenario de iluminación 672 08, interescenario emisor 672 80, Gladys 5.3 en Home Assistant Yellow. Los otros interruptores de encendido/apagado de la gama deberían funcionar; los variadores solo en encendido/apagado; las persianas no son compatibles en esta versión. Los comentarios sobre otros módulos son bienvenidos en el repositorio: GitHub - XDECO/gladys-integration-legrand-inone: Unofficial Gladys Assistant integration to control Legrand In One (PLC) lights through the Legrand 882 13 USB interface. · GitHub
Código bajo licencia Apache-2.0, desarrollado con la ayuda de Claude (Anthropic) y validado en mi instalación. No soy desarrollador: las revisiones de desarrolladores confirmados son bienvenidas.




