En esta entrada te enseño un pequeño truco para blindar tus relés ‘detached’ y que nunca te fallen cuando no llega el WiFi.
Índice
¿Qué es un relé ‘detached’?
Imagino que ya sabes que un relé inteligente es un dispositivo que nos permite controlar un circuito eléctrico (o más) a distancia, desde Home Assistant.
Pues bien, algunos de ellos (no todos) permiten configurarlo en modo «detached», separado o desacoplado. Esto sirve para que el interruptor de la pared ya no controle la corriente del circuito. Simplemente envía la información de «pulsación» a relé.
Algunos relés, como los de Shelly, también exponen esta entidad en Home Assistant.
¿Para qué sirven?
Pues precisamente para lo que te acabo de explicar. Hay veces en las que NO queremos que un circuito pierda la corriente en ningún caso. Por ejemplo, cuando utilizamos bombillas inteligentes o un ventilador de techo con luz incorporada.
Cualquiera de estos dispositivos dejará de responder a través de su integración si le quitamos la corriente. Por eso lo correcto es conectar el relé en modo «detached» y utilizar la entidad que expone el relé para saber si el interruptor físico está en posición de encendido o apagado.
Luego crearemos una automatización que se encargue de realizar la acción correspondiente (por ejemplo, alternar una luz), en sincronía con el estado de la entidad mencionada.
¿Qué problema tienen?
En su fortaleza reside su debilidad, y por eso necesitas blindar tus relés ‘detached’. Imagínate que has utilizado este dispositivo para poder controlar la luz de un ventilador desde el interruptor de pared, y actúas sobre el propio ventilador con el mando o automatizaciones.
Esto significa que, si el relé se desconecta de tu red por cualquier motivo, no tendrás manera de encender la luz (me ha pasado). Aunque te puede parecer algo improbable, te aseguro que es un «marrón» no poder encender la luz en mitad de la noche porque el relé no se comunica con Home Assistant.
¿Cuál es la solución?
Lo genial de los relés de Shelly es que, además de exponer esa entidad «clave», también nos permite programar un ‘script’ dentro del propio relé.
Aprovechando esta función, vamos a crear una pequeña automatización en el relé, que desactive el modo separado en caso de que pierda la conexión con Home Assistant, y lo reactive cuando la recupere. De esta forma vas a blindar tus relés ‘detached’ ante cualquier imprevisto.
Para ello, sigue estos pasos:
- En Home Assistant, ve a Configuración > Dispositivos y servicios > Shelly y accede al relé correspondiente.
- Pulsa sobre el enlace «Visitar» para abrir la interfaz de Shelly del dispositivo.
- Accede al apartado «Scripts» y pulsa en «Create script».
- Introduce un nombre en el campo «Script name» (por ejemplo, «Blindaje detached») y pega el siguiente código en el campo inferior.
// Fallback entre detached y flip según disponibilidad de Home Assistant
const HA_URL = "http://192.168.1.218:8123/";
const CHECK_INTERVAL_MS = 10000; // Comprobar cada 10 segundos
const FAILURE_TIMEOUT_MS = 5 * 60 * 1000; // 1 minuto para pruebas
const SWITCH_ID = 0;
let lastSuccessfulCheck = Date.now();
let fallbackActive = false;
let requestInProgress = false;
function setInputMode(mode) {
Shelly.call(
"Switch.SetConfig",
{
id: SWITCH_ID,
config: {
in_mode: mode
}
},
function (result, errorCode, errorMessage) {
if (errorCode !== 0) {
print("Error cambiando el modo de entrada:", errorMessage);
} else {
print("Modo de entrada cambiado a:", mode);
}
}
);
}
function setSwitchState(state) {
Shelly.call(
"Switch.Set",
{
id: SWITCH_ID,
on: state
},
function (result, errorCode, errorMessage) {
if (errorCode !== 0) {
print("Error cambiando el estado del relé:", errorMessage);
} else {
print("Relé " + (state ? "encendido" : "apagado"));
}
}
);
}
function activateFallback() {
if (fallbackActive) {
return;
}
fallbackActive = true;
print("Home Assistant no responde durante el tiempo configurado");
print("Activando modo flip y apagando el relé");
// Primero se apaga la salida.
setSwitchState(false);
// Después se permite el control local mediante el interruptor.
setInputMode("flip");
}
function restoreNormalMode() {
if (!fallbackActive) {
return;
}
fallbackActive = false;
print("Home Assistant vuelve a responder");
print("Encendiendo el relé y restaurando modo detached");
// Primero se enciende la salida.
setSwitchState(true);
// Después se separa la entrada de la salida.
setInputMode("detached");
}
function checkHomeAssistant() {
if (requestInProgress) {
return;
}
requestInProgress = true;
Shelly.call(
"HTTP.GET",
{
url: HA_URL,
timeout: 5
},
function (result, errorCode, errorMessage) {
requestInProgress = false;
if (errorCode === 0 && result !== null && result !== undefined) {
lastSuccessfulCheck = Date.now();
if (fallbackActive) {
restoreNormalMode();
}
} else {
print("Home Assistant no responde:", errorMessage);
if (Date.now() - lastSuccessfulCheck >= FAILURE_TIMEOUT_MS) {
activateFallback();
}
}
}
);
}
// Se presupone que el Shelly comienza en modo normal.
lastSuccessfulCheck = Date.now();
// Comprobar periódicamente Home Assistant.
Timer.set(
CHECK_INTERVAL_MS,
true,
checkHomeAssistant
);
print("Script de supervisión de Home Assistant iniciado");
- Modifica la IP de tu instancia de Home Assistant en las primeras líneas y después pulsa en el icono de «Guardar». Por último, pulsa en el botón «Run» para iniciar el script.
Para comprobar que funciona, basta con que accedas a la configuración de tu router y le bloquees el acceso al relé. Lo primero que sucederá es que el interruptor físico dejará de responder (es lo que queremos evitar).
Transcurrido el periodo de espera (que te recomiendo bajar a 1 minuto para hacer la prueba), el relé debería cambiar al modo «separado» y volver a funcionar.

