Hoy os traigo mi segunda oportunidad que le voy a dar a Shelly. Y es que mi primer Shelly Dimmer petó por exceso de temperatura, al tenerlo dentro de una caja de conexiones, pero el Shelly 2.5 que controla dos luces está aguantando también insertado en la pared.
Quizás la diferencia son los 5ºC más que soportan, así que hoy voy a montar un enchufe de pared con interruptor/programador wifi añadiéndole un diminuto Shelly 1, y esperemos que aguante.
Además de su pequeño tamaño, los Shelly son muy fáciles de configurar, así que también veremos cómo controlarlos localmente mediante su API HTTP.
Requisitos
Mi objetivo es habilitar un enchufe de pared que pueda controlar y programar mediante WIFI, en mi caso, para controlar el calentador de agua eléctrico. Veamos qué voy a usar:
- Shelly 1.
- Cable eléctrico de dos hilos (fase y neutro).
- Clavija de enchufe macho.
- Clavija de enchufe hembra.
- Material para ensamblar una carcasa (impresora 3D, madera, etc).






Conexión eléctrica
Veamos el manual de Shelly a ver cómo nos indica que realicemos las conexiones:
https://www.shelly.com/documents/user_guide/shelly_1_multi_language.pdf

La idea de este esquema estándar es que conectes el Shelly 1 a una luz y a su interruptor, significando cada símbolo lo siguiente:
- L: línea o fase
- N: neutro
- SW: switch (interruptor)
- I: input o entrada
- O: output o salida
Como quiero habilitar una clavija de enchufe, el esquema variará ligeramente, ya que no usaré el interruptor y puedo conectar la línea directamente a la entrada. Por otro lado, y por motivos que desconozco, no tengo cableado en esta caja de conexiones, así que traigo la línea eléctrica mediante un cable que va a otro enchufe... En fin, queda todo así:

TIP! Juraría que me he rayado confundiendo los colores, pero en este caso el circuito propio es cerrado así que no importa demasiado si no eres maniático, ya que el circuito está conectado correctamente.



Ensamblaje
Como verás, me he hecho un pequeño soporte en 3D para guiar las conexiones y también una tapa para cubrir el hueco del enchufe. Además, simular las piezas en 3D, con medidas reales , te ayudará a distribuir bien el espacio y asegurarte de que tu solución se acopla correctamente:
Te dejo los modelos 3D en .stl para mandar a imprimir en software slicer.
Shelly-Plug_support_v1.stl
https://theroamingworkshop.cloud/demos/Shelly-Plug_support_v1.stl
Shelly-Plug_tapa_v1.stl
https://theroamingworkshop.cloud/demos/Shelly-Plug_tapa_v1.stl
Al final, queda todo así montado. No es el ajuste perfecto, pero me vale para cumplir su función.





Conexión a internet
Ahora veamos como traer a la vida al Shelly 1 y manejarlo localmente.
Al contrario que los Sonoff, Shelly nos lo pone mucho más fácil y solo hay que seguir su manual.
- Enchufa el Shelly 1 a la corriente mediante el cable con clavija macho.
- Se activará un AP (Access Point) o red Wi-Fi con una SSID del estilo "shelly1-01A3B4". Conéctate a esta red Wi-Fi mediante un smartphone o PC.
- Cuando te conectes, usa un navegador web para acceder a la IP 192.168.33.1 y accederás a la interfaz web de configuración del dispositivo.
- Una vez dentro, deberás configurar el dispositivo (en el menú Internet & Security) para que se conecte automáticamente a tu red Wi-Fi, así como también es recomendable que bloquees el acceso al dispositivo con usuario y contraseña, por lo que pudiera ocurrir...


Con esto ya podemos comunicarnos localmente con nuestro Shelly 1.
Uso de Shelly HTTP API
Para usar los comandos de la API HTTP deberás conocer la IP del dispositivo en la red local.
Averiguar IP mediante router
Puedes acceder al mapa de red de tu router, normalmente mediante la dirección http://192.168.1.1
Tanto la dirección como la contraseña de acceso deberían aparecer en una pegatina en tu router. Luego verás tu dispositivo con algún nombre tipo shelly1-XXXXXXXXXXXX:

Averiguar IP mediante nmap
Mediante un terminal, puedes usar el programa nmap para escanear tu red local.
- Descárgalo si no lo tienes:
sudo apt-get update
sudo apt-get install nmap - Escanea tu red (con sudo aportará también la dirección MAC, útil por que la IP podría llegar a cambiar al reiniciar tu router)
sudo nmap -v -sn 192.168.1.0/24

Enviar solicitudes HTTP al dispositivo
La API HTTP de Shelly viene documentada en su web dedicada:
https://shelly-api-docs.shelly.cloud/gen1/#common-http-api
Para poder comunicarte con el dispositivo necesitas enviar solicitudes HTTP mediante algún programa tipo Postman o mediante curl o wget en un terminal.
La solicitud se hará a la IP del dispositivo con:
$ curl -X GET http://192.168.1.XX/command
Si has definido usuario y contraseña, deberás ingresarlo también en la URL de esta manera o devolverá una respuesta "401 unauthorized":
$ curl -X GET http://user:[email protected]/command
Ahora veamos algunos casos concretos:
Información del dispositivo
http://[user]:[pass]@[ip]/status
- curl
curl -X GET 'http://user:[email protected]/status
- Respuesta
{"wifi_sta":{"connected":true,"ssid":"MYWIFINETWORK","ip":"192.168.1.XX","rssi":-70},"cloud":{"enabled":false,"connected":false},"mqtt":{"connected":false},"time":"19:30","unixtime":1699295403,"serial":1,"has_update":false,"mac":"A4CF12F407B1","cfg_changed_cnt":0,"actions_stats":{"skipped":0},"relays":[{"ison":false,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"source":"input"}],"meters":[{"power":0.00,"is_valid":true}],"inputs":[{"input":0,"event":"","event_cnt":0}],"ext_sensors":{},"ext_temperature":{},"ext_humidity":{},"update":{"status":"idle","has_update":false,"new_version":"20230913-112003/v1.14.0-gcb84623","old_version":"20230913-112003/v1.14.0-gcb84623"},"ram_total":51688,"ram_free":39164,"fs_size":233681,"fs_free":146333,"uptime":2679}
Encender/apagar (on/off)
http://[usr]:[pass]@[ip]/relay/0?turn=[on/off]
- curl
curl -X GET http://user:[email protected]/relay/0?turn=on
- Respuesta
{"ison":true,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"source":"http"}
El valor de 0 en la URL corresponde con el número del relay o interruptor interno del Shelly. En este caso solo hay uno, pero en caso del Shelly 2.5 tienes dos relays, por lo que puedes manejarlos individualmente cambiando este número.
Programador
http://[usr]:[pass]@[ip]/settings/relay/0?schedule_rules=[HHMM]-[0123456]-[on/off]
- curl
curl -X GET http://user:[email protected]/settings/relay/0?schedule_rules=1945-0123456-on
- Respuesta
{"name":"CALENTADOR","appliance_type":"General","ison":false,"has_timer":false,"default_state":"off","btn_type":"toggle","btn_reverse":0,"auto_on":0.00,"auto_off":0.00,"power":0.00,"schedule":true,"schedule_rules":["1945-0123456-on"]}
En este caso, en la URL se definen los siguientes parámetros de las reglas:
- HHMM: hora y minuto que activan la regla
- 0123456: los días de la semana en los que se produce la regla
- on/off: estado que se produce al activarse la regla
De esta forma, para programar el encendido y apagado del dispositivo (excepto fines de semana), tendrías una solicitud de este estilo:
curl -X GET http://192.168.1.XX/settings/relay/0?schedule_rules=2300-01234-on,0700-01234-off
Obviamente, también podrás configurar las reglas de programación desde la interfaz web, o comprobar que los comandos han funcionado:

Y con eso estaría todo. Lánzate a llenar tu casa de discretos Shellys totalmente personalizables. Cualquier duda o comentario, al Twitter 🐦, gracias! (aunque visto lo de X, no sé yo lo que me durará...)