Saltar a contenido

05 resiliencia fisica

Principio

La seguridad de las personas y de la vivienda en Chapinería frente a daños irreversibles —inundación del sótano por fallo de la bomba de achique, falta de climatización básica en invierno— no puede quedar a merced de un contenedor LXC (contenedor ligero de Proxmox) que se reinicie ni de un pico de CPU en el servidor Ra (servidor principal de SmallCountry).
Por eso SmallCountry entrega esas responsabilidades directamente al hardware.

  • La bomba de achique del sótano está gobernada por un Shelly (actuador eléctrico WiFi) 1PM configurado con power_on_default: ON. Si el Shelly pierde la conexión MQTT (protocolo de mensajería ligera para IoT) con Mosquitto, si Node-RED deja de responder o si el servidor Proxmox VE entero se apaga, el relé se cierra y la bomba arranca. El sótano no se inunda porque el software haya decidido no actuar; se protege precisamente porque el software ha desaparecido.
  • El sistema de climatización Daikin Altherma está conectado a un ESP32 que mantiene su última consigna de temperatura y modo de funcionamiento aunque falle la comunicación con el servidor. La casa no se congela mientras se diagnostica una incidencia informática.

En la finca de Garganta la Olla, la resiliencia sigue una filosofía idéntica pero con componentes distintos: el Cerbo GX de Victron, junto con su propio Node-RED y Mosquitto locales, garantiza la monitorización de baterías, inversores y paneles solares aunque la VPN (red privada virtual) con la casa esté caída.

Principio rector: la automatización crítica no se virtualiza. El hardware sabe cuidar de sí mismo.

Cómo se garantiza la autonomía en la práctica

1. La bomba del sótano con Shelly (Chapinería)

Componente Comportamiento
Shelly 1PM Configurado vía MQTT (protocolo de mensajería ligera para IoT) o panel web con "power_on_default": "on". Al recibir corriente o perder la conexión MQTT, el relé interno se cierra y la bomba arranca. No requiere script ni orden externa.
Sensor de nivel (opcional) Conectado directamente a un GPIO del Shelly o a un ESP32 (microcontrolador WiFi para sensores) auxiliar. Si el agua supera un umbral, el propio Shelly puede activarse por hardware sin intervención de Node-RED.
Mosquitto Durante el funcionamiento normal, el Shelly publica su estado y recibe comandos. En modo degradado, el Shelly opera de forma independiente.
Node-RED Envía la orden de apagado cuando el nivel de agua es seguro. Si Node-RED falla, la bomba permanece encendida (estado seguro por defecto), evitando inundaciones.

2. Climatización con ESP32 + Daikin Altherma (Chapinería)

Componente Comportamiento
ESP32 Conectado al bus de la Daikin Altherma (vía RT/wired remote o adaptador P1P2). Almacena los últimos valores válidos de temperatura de impulsión y modo (calefacción/refrigeración). Si pierde la señal MQTT durante más de N segundos, congela esos valores y los mantiene indefinidamente.
Watchdog por hardware Si el firmware del ESP32 se bloquea, el watchdog reinicia el microcontrolador en milisegundos y recupera la última configuración guardada en flash.
Mosquitto En operación normal, recibe los comandos de ajuste desde Node-RED. En ausencia de red, el ESP32 ignora la falta de broker y sigue operando.

3. La finca (Garganta la Olla)

Componente Comportamiento
Cerbo GX Sigue centralizando los datos de los MPPT, inversores y baterías Victron aunque se pierda la VPN con la casa. No necesita al servidor Ra para registrar información local.
Node-RED + Mosquitto locales** Si la conexión NetBird se interrumpe, los flujos de riego y monitorización continúan ejecutándose dentro de la finca. Solo se detiene la sincronización de telemetría con la casa.
ESP32 de riego Conectados a sensores de humedad capacitivos. Si pierden comunicación con el Cerbo GX, aplican sus propios umbrales preprogramados de riego mínimo.

Ciclo de operación ante fallo

  1. Operación normal
    Tanto la bomba como el Altherma publican su estado cada pocos segundos en MQTT. Node-RED consume esos datos y ajusta la lógica según horarios, temperatura exterior o presencia. Mosquitto retiene los mensajes.

  2. Pérdida de comunicación con el servidor
    Si el servidor Ra se detiene (mantenimiento, fallo eléctrico con SAI agotado, caída de NetBird), los dispositivos físicos dejan de recibir comandos nuevos.

  3. El Shelly mantiene el relé cerrado (bomba encendida) o lo abre según su programación local.
  4. El ESP32 del Altherma congela la última consigna de temperatura.
    Ambos permanecen en ese estado hasta que se restablezca la comunicación.

  5. Fallo del firmware o reinicio del dispositivo

  6. Si el ESP32 se reinicia por watchdog, arranca con la configuración guardada en flash (último modo y temperatura válidos).
  7. Si el Shelly pierde la alimentación y se reanuda, el power_on_default: ON arranca la bomba de inmediato. No espera a que el software le diga qué hacer.

  8. Recuperación
    Cuando Node-RED o Mosquitto vuelven a estar operativos, reciben el estado actual del dispositivo y reanudan el control normal. Si durante la desconexión la bomba estuvo encendida más tiempo del necesario, eso es preferible a una inundación. El sistema prioriza la seguridad física sobre la eficiencia energética puntual.

Stack necesario

  • Shelly 1PM – Relé WiFi con MQTT nativo y configuración de estado por defecto.
  • ESP32 – Microcontrolador con firmware PlatformIO, watchdog hardware y almacenamiento en flash.
  • Mosquitto – Broker MQTT local en ambas ubicaciones.
  • Node-RED – Flujos de control en tiempo real en casa y finca.
  • NetBird – Túnel VPN entre casa y finca (prescindible para la resiliencia local).
  • Victoria Metrics – Almacena el evento de pérdida de comunicación y su duración.
  • ntfy + Matrix – Alertas push que se disparan cuando un dispositivo deja de publicar heartbeat.

Relaciones con otros principios

Diagrama de resiliencia física

graph TD
    subgraph Casa [Chapinería]
        direction TB
        Shelly[Shelly 1PM - bomba sótano]
        ESP32[ESP32 - Daikin Altherma]
        NR_Casa[Node-RED doméstico]
        MQTT_Casa[Mosquitto casa]
        Alerta[ntfy / Matrix]

        Shelly -->|Heartbeat MQTT| MQTT_Casa
        ESP32 -->|Heartbeat MQTT| MQTT_Casa
        MQTT_Casa --> NR_Casa
        NR_Casa -->|Fallo de heartbeat| Alerta
    end

    subgraph Finca [Garganta la Olla]
        direction TB
        Cerbo[Cerbo GX - Victron]
        NR_Finca[Node-RED finca]
        MQTT_Finca[Mosquitto finca]
        ESP_Riego[ESP32 - riego]

        ESP_Riego -->|Heartbeat MQTT| MQTT_Finca
        MQTT_Finca --> NR_Finca
        Cerbo --> NR_Finca
        Cerbo --> MQTT_Finca
    end

    MQTT_Casa <-.->|NetBird VPN| MQTT_Finca

    %% Autonomía local
    Shelly -.-|Funciona sin servidor| NR_Casa
    ESP32 -.-|Funciona sin servidor| NR_Casa
    ESP_Riego -.-|Funciona sin VPN| MQTT_Finca

    style Casa fill:#e1bee7,stroke:#8e24aa,color:#000
    style Finca fill:#ffe082,stroke:#f57f17,color:#000

Principio 4: Segmentación de redes   |   Principio 6: Arquitectura por capas


Secciones relacionadas