Saltar a contenido

Estrategia de notificaciones — tiers, canales, escalation

Sin esto, "invisible" = inundación de notifications cansadora. La regla: fewer alerts, more meaningful. 4 tiers, canales por tier, Do-Not-Disturb honrado salvo Tier 0 (emergency), escalation con ack para los críticos. El agente AI mismo emite a Tier 2/Tier 3 según severidad, nunca Tier 0.

Contexto

La meta "no tinkering" sólo se cumple si las notifications respetan tu vida. Sin tiering, cada cambio del estado de un sensor te llega al lockscreen y vos terminás muteándolo todo → el día que pase algo real, no te enterás. Esta página define el sistema que el agente y los automations usan para decidir cómo gritar.

Contenido

Los 4 tiers (más uno especial)

Tier Nombre Cuándo Bypass DND? Canal default
0 — Emergency Vida/casa en riesgo: smoke, CO, water leak, intrusión confirmada Sí (Companion Critical) TTS speakers full volume + light flash + Critical mobile + SMS opcional
1 — Critical ops Essentials caídos: HA Yellow no responde, Z2M coordinator perdido Critical mobile + Telegram
2 — Warning Algo se rompió pero no urgente: HA Container twin restarting, sensor stale, battery <30% No (DND respetado) Telegram + companion app (no critical)
3 — Info Acciones del agente confirmadas, daily digest, mediciones No Telegram batched (1×hora máximo) o daily summary
4 — Debug Trace detallado de automations, agent reasoning No Solo logs en Loki, no se notifica

Reglas de oro

  1. Tier 0 son raros. Si el smoke detector dispara 2 veces al mes, hay calibration issue, no es realmente emergency.
  2. DND se respeta por default. Excepción: Tier 0/1 que tienen el toggle "critical" explícito.
  3. Acknowledge cancela escalation. Sin ack, los Tier 0/1 escalan según pattern de 4 stages.
  4. Batching para Tier 3. Nunca un mensaje por evento, siempre digest cada N tiempo.
  5. Per-user routing. input_boolean.<user>_sleep_mode + input_boolean.<user>_at_home filtran qué llega a quién.

Canales y cuándo usar cada uno

Canal Cuándo usar Cuándo NO
HA Companion app (push) Default para todos los tiers
HA Companion Critical Tier 0/1 únicamente Tier 2 o menos (rompe la trust del bypass)
Telegram bot Tier 1-3, group chat familiar Tier 0 (depende de internet + app open)
ntfy Self-hosted alternative para Telegram (privacy stricter) Si querés actionable buttons (limitado)
TTS via speakers Tier 0 only, dentro de la casa Cuando todos están dormidos (decisión per casa)
SMS via Twilio Tier 0 only, fallback si internet down Notifications generales (caro + lento)
Email Tier 3 daily digest Tier 0 (latency demasiado alta)
Webhook al agente AI Tier 1/2 — el agente decide si actúa o escala humano Tier 0 (humano siempre)

Escalation pattern (Tier 0/1 con ack)

automation:
  - alias: "Water leak emergency"
    trigger:
      - platform: state
        entity_id: binary_sensor.water_leak_lavadero
        to: 'on'
    action:
      # Reset ack state
      - service: input_boolean.turn_off
        entity_id: input_boolean.leak_acked

      # Level 1 (0 min) — critical actionable
      - service: notify.mobile_app_paulo
        data:
          title: "🚨 FUGA DE AGUA  LAVADERO"
          message: "Confirma que cerraste la llave o respondé Acknowledge"
          data:
            push:
              interruption-level: critical
              sound: critical.aiff
            actions:
              - action: ACK_LEAK
                title: "Acknowledge"
              - action: SHUTOFF
                title: "Cerrar válvula ya"

      # Level 2 (+2 min) si no ack
      - delay: '00:02:00'
      - if:
          - condition: state
            entity_id: input_boolean.leak_acked
            state: 'off'
        then:
          - service: notify.telegram_familia
            data: { message: "🚨 Fuga de agua. Paulo no responde." }

      # Level 3 (+5 min) si no ack
      - delay: '00:03:00'
      - if:
          - condition: state
            entity_id: input_boolean.leak_acked
            state: 'off'
        then:
          - service: tts.cloud_say
            data: { entity_id: media_player.house_speakers, message: "Fuga de agua confirmada" }
          - service: light.turn_on
            data: { entity_id: group.all_lights, color_name: red, brightness: 255 }

      # Level 4 (+6 min) — autonomous fail-safe
      - delay: '00:01:00'
      - if:
          - condition: state
            entity_id: input_boolean.leak_acked
            state: 'off'
        then:
          - service: switch.turn_on
            entity_id: switch.water_main_shutoff
          - service: notify.mobile_app_paulo
            data: { title: "Válvula cerrada automáticamente", message: "Tier 0 sin ack 6 min  fail-safe ejecutado" }

Action handler para el ACK:

automation:
  - alias: "Handle leak ack"
    trigger:
      - platform: event
        event_type: mobile_app_notification_action
        event_data:
          action: ACK_LEAK
    action:
      - service: input_boolean.turn_on
        entity_id: input_boolean.leak_acked

Respeto al sleep mode

Tier 2/3 siempre verifican:

condition:
  - condition: state
    entity_id: input_boolean.paulo_sleep_mode
    state: 'off'

Si dormís, sólo Tier 0/1 te llegan. Tier 2/3 se acumulan en Telegram (sin push) y los ves a la mañana.

El agente AI como emisor

Cuando el agente del Q10 strategy emite:

Acción del agente Tier
Fix autónomo aplicado exitoso Tier 3 (daily digest)
Fix falló, reintentando Tier 2
Fix imposible, escalando Tier 1 si essentials, Tier 2 si experimental
Detectó intrusión / leak / emergencia Tier 0 (delega al human path inmediato, no intenta fix solo)
Daily summary de qué hizo en 24h Tier 3

Nunca el agente emite Tier 0 por algo que él mismo decidió que es emergency. Los disparadores Tier 0 son sensores físicos (smoke detector, leak sensor, etc.), no inferencias del agente.

Anti-patrones (no hacer)

  • ❌ Tier 0 para "battery <20%" — eso es Tier 2.
  • ❌ Companion Critical sin acknowledge logic — si no hay ack, no escala apropiadamente.
  • ❌ TTS speakers a las 3 AM "su sensor reportó temp baja" — Tier 2/3 nunca despiertan a alguien.
  • ❌ 1 notification por state change — usar delay_off + batching.
  • ❌ Tier 1 para algo que pasa 5×día — ahí ya no es critical, es ruido.

Patrón "snooze inteligente"

Una notification Tier 2 sobre "battery low" debería: - Tener botón "Snooze 7 días". - Si volviera a disparar antes de 7 días, IGNORAR el snooze (si pasó algo, hay info nueva). - Si snoozed pasaron 7 días sin que se resuelva, escalar a Tier 1.

Métricas para validar la estrategia

Métrica Cómo Target
Notifications por día (total) Count en Prometheus / agente log < 10
Tier 0/1 por mes Mismo < 5 (si > 10, hay sensor calibration issue)
% Tier 0/1 que fueron real emergency Manual self-report > 80% (sino, hay false positives)
Tier 3 daily digest open rate Si tenés stats > 70% sino el digest no aporta
Tier 0 sin ack que disparó fail-safe Log < 1×año (sino, el ack flow está roto)

Relaciones

Citas / evidencia

Abierto / gaps

  • Twilio integration concreta para SMS Tier 0 fallback.
  • ntfy self-hosted setup como Telegram alternative.
  • TTS multi-room routing (no todos los speakers, solo donde hay gente).