Cómo se conectan los dispositivos Shelly, las cámaras PTZ y el clima, qué controla cada uno, los esquemas de cableado y cómo hablará con todos ellos la web de control.
La web vive en un pequeño servidor del aula (mini-PC o Raspberry Pi) y habla directamente con cada dispositivo por la red local. La Shelly Wall Display XL hace dos papeles: es el punto único de control en la pared y la pasarela Bluetooth que recibe el sensor de movimiento y el pulsador de 4 botones.
| Elemento del aula | Dispositivo | Modo / canal | Orden desde la web |
|---|---|---|---|
| Iluminación general (downlights 230 V regulables) | Shelly Dimmer Gen3 | Light id 0 | Light.Set?id=0&on=true&brightness=70 |
| Tira LED ambiente / encimera RGBW 24 V | Shelly Plus RGBW PM + fuente 24 V 60 W | perfil RGBW | RGBW.Set?id=0&on=true&rgb=[255,200,150]&white=180 |
| Punto único de control | Shelly Wall Display XL | pantalla + 4 botones; relé 5 A libre | panel propio (o la web en su navegador) |
| Persiana 1 | Shelly 2PM Gen3 nº1 | perfil cover, id 0 | Cover.GoToPosition?id=0&pos=50 |
| Persiana 2 | Shelly 2PM Gen3 nº2 2.ª unidad | perfil cover, id 0 | Cover.Open?id=0 / Close / Stop |
| Campana extractora | Shelly 1PM Gen3 | Switch id 0 + medida | Switch.Set?id=0&on=true |
| Brazos TV abatibles ×2 | Shelly 1 Gen3 ×2 (contacto seco) según brazo | pulso 1 s | Switch.Set?id=0&on=true&toggle_after=1 |
| Aire acondicionado | Shelly 1 Gen3 al contacto remoto + integración del fabricante | habilitación ON/OFF | Switch.Set?id=0&on=false · consigna por API del fabricante |
| Presencia | Shelly BLU Motion | BLE → Wall Display | evento (solo lectura) |
| Pulsador de pared | Pulsador BLU 4 botones + marco | BLE → Wall Display | evento → lanza escena |
| Cámaras PTZ ×2 | cámaras IP (no Shelly) | presets 1…n | VISCA-IP o CGI HTTP del fabricante |
Las rutas RPC son de la API local Gen2/Gen3 de Shelly: http://IP/rpc/Método?parámetros. Cover.GoToPosition solo funciona después de calibrar cada persiana (Cover.Calibrate?id=0).
Usar luminarias LED marcadas como regulables y elegir corte de fase al inicio o al final en la configuración del dimmer si hay parpadeo. El pulsador de pared existente puede seguir funcionando en SW1.
Comprobar el consumo de la tira: W/m × metros ≤ 48 W (80 % de 60 W). La tira tiene que ser de 24 V para coincidir con la fuente. Con tramos largos, alimentar por los dos extremos.
Un 2PM Gen3 por persiana (el 2PM usa sus dos salidas para un solo motor). Tras cablear: perfil "cover" y calibración. Nunca conectar dos motores en paralelo al mismo 2PM.
El 1PM da o quita alimentación a la campana; las velocidades se siguen eligiendo en su propio mando. La medida de consumo permite saber si está realmente aspirando y en qué velocidad (cada velocidad consume distinto).
Opción A (brazo con entrada de pulsador): un Shelly 1 Gen3 por brazo; un pulso de 1 s abre o cierra. Opción B (motor 230 V de dos sentidos sin centralita): un 2PM Gen3 por brazo en modo cortina, igual que las persianas, y así la web sabe la posición.
El contacto apaga o habilita el equipo de forma fiable (cierre de aula, persiana abierta). Temperatura y modo no se controlan con un relé: necesitan el módulo Wi-Fi de la marca del aire o un emisor de infrarrojos con API local.
La pantalla se alimenta a 230 V (L y N) en una caja universal empotrada y su relé interno de 5 A queda libre: buena opción para un circuito on/off extra, como la luz de la isla o de la pizarra. El sensor BLU Motion y el pulsador BLU de 4 botones funcionan a pilas y se emparejan con la Wall Display, que reenvía sus eventos a la red. Colocar el sensor con vista a la zona de trabajo y lejos de fuegos y salidas de aire caliente.
| IP | Equipo | Conexión | Nombre en la web |
|---|---|---|---|
| 192.168.1.79 | Servidor web | Ethernet | server |
| 192.168.1.80 | Wall Display XL | Wi-Fi | panel |
| 192.168.1.81 | Dimmer Gen3 | Wi-Fi | luz_general |
| 192.168.1.82 | Plus RGBW PM | Wi-Fi | tira_led |
| 192.168.1.83 | 2PM Gen3 nº1 | Wi-Fi | persiana_1 |
| 192.168.1.84 | 2PM Gen3 nº2 | Wi-Fi | persiana_2 |
| 192.168.1.85 | 1PM Gen3 | Wi-Fi | campana |
| 192.168.1.86–87 | 1 Gen3 brazos TV | Wi-Fi | brazo_tv_1 / brazo_tv_2 |
| 192.168.1.88 | 1 Gen3 clima | Wi-Fi | clima |
| 192.168.1.89–90 | Cámaras PTZ | Ethernet PoE | ptz_1 / ptz_2 |
Recomendaciones: IP fija o reserva DHCP para todo; red o VLAN separada de la del alumnado; Wi-Fi de 2,4 GHz con buena cobertura junto a la campana (el acero del mobiliario atenúa la señal); contraseña de acceso activada en cada Shelly y desactivar la nube si no se va a usar.
| Cuando… | Entonces… | Dónde |
|---|---|---|
| BLU Motion detecta presencia y el aula está apagada | Luz general al 60 % | Wall Display (escena local) |
| BLU Motion sin movimiento 20 min | Escena "Fin de clase" salvo la campana si está consumiendo | Servidor |
| Campana consume > 30 W al encender la cocina | Registrar uso; aviso en la web si sigue encendida sin presencia | Servidor |
| Campana apagada desde la web | Mantenerla 10 min más para ventilar (post-extracción) | Script en 1PM |
| Aire encendido y persianas totalmente abiertas a mediodía | Bajar persianas al 30 % en la orientación solar | Servidor |
| Brazos TV se van a cerrar | Comprobar que no hay escena "Proyección" activa y pedir confirmación en la web | Web |
| Fuera del horario lectivo (22:00) | Todo apagado y aire deshabilitado | Programación del servidor |
El navegador llama a la API del servidor; el servidor traduce cada orden al protocolo del equipo y guarda las IPs y contraseñas. Así la web funciona igual desde la tablet o desde la Wall Display, y las credenciales no salen del servidor.
// Rutas del servidor (Node.js / Express) → orden al dispositivo
POST /api/luz { brillo: 0-100 } → Dimmer /rpc/Light.Set?id=0&on=true&brightness=…
POST /api/tira { rgb:[r,g,b], blanco, brillo }→ RGBW PM /rpc/RGBW.Set?id=0&rgb=[…]&white=…
POST /api/persiana/:n { pos: 0-100 | "abrir"|"parar"}→ 2PM nº n /rpc/Cover.GoToPosition?id=0&pos=…
POST /api/campana { on: true|false } → 1PM /rpc/Switch.Set?id=0&on=…
POST /api/brazo/:n { accion: "pulso" } → 1 Gen3 /rpc/Switch.Set?id=0&on=true&toggle_after=1
POST /api/clima { on, consigna } → 1 Gen3 + API del fabricante del aire
POST /api/ptz/:n { preset: 1-n } → cámara VISCA-IP "Memory Recall" o CGI del fabricante
POST /api/escena/:id → lanza varias órdenes en paralelo
GET /api/estado (WebSocket) → Shelly.GetStatus de cada equipo, consumo de la campana
Para estados en tiempo real, el servidor puede abrir un WebSocket con cada Shelly (ws://IP/rpc) y reenviar los cambios a la web, de modo que si alguien pulsa un botón físico la página se actualiza al instante. Alternativa sin programar el servidor: Home Assistant con la integración Shelly, cuyo panel también se puede mostrar en la Wall Display XL.