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 | Sí | 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¶
- Tier 0 son raros. Si el smoke detector dispara 2 veces al mes, hay calibration issue, no es realmente emergency.
- DND se respeta por default. Excepción: Tier 0/1 que tienen el toggle "critical" explícito.
- Acknowledge cancela escalation. Sin ack, los Tier 0/1 escalan según pattern de 4 stages.
- Batching para Tier 3. Nunca un mensaje por evento, siempre digest cada N tiempo.
- Per-user routing.
input_boolean.<user>_sleep_mode+input_boolean.<user>_at_homefiltran 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) |
| 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:
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¶
- Apoya: meta "invisible" — el contrato de qué cuándo te molesta.
- Conecta con: q5-observability-stack-v1 (define qué dispara qué tier).
- Conecta con: q10-ai-tooling-strategy-v1 (el agente como emisor controlado).
- Conecta con: failure-mode-sensor-stale y failure-mode-z2m-coordinator-lost (tier de cada uno).
- Patrón sleep_mode de: automation-patterns-curated.
Citas / evidencia¶
- 4-stage escalation pattern — ../sources/ha-notification-tiers.
- Acknowledge via input_boolean — ../sources/ha-notification-tiers.
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).