Automation ideas: maintenance + safety¶
Los patterns que evitan disasters silenciosos (filter sucio, battery muerta) y que responden a emergencies (smoke, water, intrusion). Estos no son "nice to have" — son la diferencia entre "la casa se cuida sola" y "ah, el calefón estaba goteando hace 3 meses". Foundation: counter helpers + alert tiering.
Categorías¶
Predictive maintenance¶
Filter / consumible counters ★★★¶
Counter de horas de uso → notify cuando supera threshold.
counter:
hvac_filter_hours:
name: "Horas filtro HVAC desde último cambio"
initial: 0
step: 1
automation:
# Sumar 1 hora cada hora que HVAC corra
- alias: "HVAC filter counter"
trigger:
- platform: time_pattern
minutes: '0'
condition:
- condition: state
entity_id: climate.thermostat
state: 'heat' # o 'cool'
for: '01:00:00'
action:
- service: counter.increment
entity_id: counter.hvac_filter_hours
# Notify cuando llega a 500
- alias: "HVAC filter needs change"
trigger:
- platform: numeric_state
entity_id: counter.hvac_filter_hours
above: 500
action:
- service: notify.telegram
data:
message: >
🔧 Cambiar filtro HVAC.
{{ states('counter.hvac_filter_hours') }} horas desde último cambio.
data:
actions:
- action: RESET_FILTER
title: "Marcar cambiado"
Action handler resetea el counter cuando vos cambiás el filtro.
Aplicar a: - Filtros HVAC (~500h). - Filtro de agua (~6 meses). - Bolsa de aspiradora. - Cepillos del Roomba. - Bateria de batería UPS (lifespan ~3 años).
Battery low alerts ★★★¶
Por cada device wireless, alert when battery < 30%:
template:
- sensor:
- name: "Devices con battery baja"
state: >
{{ states.sensor
| selectattr('attributes.device_class', 'eq', 'battery')
| selectattr('state', 'lt', 30)
| map(attribute='entity_id')
| list | count }}
automation:
- alias: "Battery low daily check"
trigger:
- platform: time
at: '20:00:00'
condition:
- condition: template
value_template: "{{ states('sensor.devices_con_battery_baja') | int > 0 }}"
action:
- service: notify.telegram
data:
title: "🔋 Battery low"
message: >
{{ states('sensor.devices_con_battery_baja') }} devices < 30%:
{{ states.sensor
| selectattr('attributes.device_class', 'eq', 'battery')
| selectattr('state', 'lt', 30)
| map(attribute='attributes.friendly_name')
| join(', ') }}
Daily digest > 1 alert per device.
Service interval reminders ★¶
# HVAC service annual
input_datetime:
hvac_last_service:
has_date: true
automation:
- alias: "HVAC annual service reminder"
trigger:
- platform: time
at: '10:00:00'
condition:
- condition: template
value_template: >
{{ (now() - as_datetime(states('input_datetime.hvac_last_service')))
.days > 365 }}
action:
- service: notify.telegram
data: { message: "🔧 HVAC anual service — agendá técnico" }
Aplicar a: HVAC anual, lavarropas (limpieza), boiler, septic tank.
Safety / emergency¶
Smoke / CO detection ★★★ (tier 0)¶
Ver patrón en notification-strategy — escalation completa con TTS speakers, light flash all-red, unlock doors (egress), notify all family.
Water leak emergency ★★★ (tier 0)¶
automation:
- alias: "Water leak emergency"
trigger:
- platform: state
entity_id: binary_sensor.leak_lavadero
to: 'on'
action:
# Inmediato: cerrar electroválvula
- service: switch.turn_on
entity_id: switch.water_main_shutoff
# Alert tier 0 con escalation
- service: notify.mobile_app_paulo
data:
title: "💧 FUGA DE AGUA"
data: { push: { interruption-level: critical } }
# ... resto del escalation pattern de notification-strategy
Crítico: cerrar válvula antes de esperar ack humano. Esto es Tier 0 con autonomous action inmediato, distinto del pattern general que espera ack.
Unauthorized entry ★★¶
automation:
- alias: "Unauthorized door open"
trigger:
- platform: state
entity_id: binary_sensor.front_door
to: 'on'
condition:
- condition: state
entity_id: input_boolean.away_mode
state: 'on'
- condition: template
value_template: >
{# Ningún miembro de la familia está cerca según GPS #}
{{ state_attr('person.paulo', 'distance') | float > 1
and state_attr('person.partner', 'distance') | float > 1 }}
action:
# Tier 0
- service: notify.mobile_app_paulo
data:
title: "🚨 Puerta abierta y nadie en casa"
data:
push: { interruption-level: critical }
image: "/api/camera_proxy/camera.front_door"
# Activar cámara + grabar
- service: switch.turn_on
entity_id: switch.front_door_camera_recording
# Encender todas las luces (deterrent)
- service: light.turn_on
target: { entity_id: group.all_lights }
Freeze risk para tuberías ★★¶
automation:
- alias: "Pipe freeze risk"
trigger:
- platform: numeric_state
entity_id: sensor.outdoor_temp
below: 2 # umbral antes de freezing
action:
# Mantener garage tibio (donde están tuberías expuestas)
- service: climate.set_temperature
target: { entity_id: climate.garage }
data: { temperature: 8 } # solo evitar freezing
- service: notify.telegram
data: { message: "🥶 Outdoor {{ states('sensor.outdoor_temp') }}°C — calefacción garage activada" }
Gas leak detection ★★ (si tenés gas)¶
Si tenés gas natural / propane, MQ-2 sensor o equivalente:
automation:
- alias: "Gas leak"
trigger:
- platform: numeric_state
entity_id: sensor.gas_concentration_ppm
above: 100
action:
# Ventilation forced
- service: fan.turn_on
target: { entity_id: group.all_fans }
# Cerrar gas main si tenés electroválvula
- service: switch.turn_on
entity_id: switch.gas_main_shutoff
# Tier 0 escalation
- service: notify.mobile_app_paulo
data:
title: "🚨 FUGA DE GAS"
data: { push: { interruption-level: critical } }
Overheating appliances ★¶
automation:
- alias: "Refrigerator door left open"
trigger:
- platform: state
entity_id: binary_sensor.fridge_door
to: 'on'
for: '00:03:00'
action:
- service: notify.mobile_app_paulo
data: { title: "🧊 Heladera abierta hace 3 min" }
automation:
- alias: "Iron/stove left on"
trigger:
- platform: state
entity_id: binary_sensor.kitchen_occupied
from: 'on'
to: 'off'
for: '00:10:00'
condition:
- condition: state
entity_id: switch.iron_plug # con power monitoring
state: 'on'
action:
- service: notify.mobile_app_paulo
data:
title: "⚠️ Plancha enchufada y nadie en cocina"
data:
actions:
- action: TURN_OFF_IRON
title: "Apagarla"
Health / wellness (opcional, privacy-sensitive)¶
Sleep quality tracking ★¶
Si tenés sleep sensors (Withings, Oura via API): - Daily digest "dormiste X horas, calidad Y". - Adjust morning routine si dormiste mal (más gradual, alarm later).
Air quality alerts ★★¶
automation:
- alias: "Air quality bad"
trigger:
- platform: numeric_state
entity_id: sensor.living_co2_ppm
above: 1200
action:
- service: fan.turn_on
target: { entity_id: fan.living_ventilation }
- service: notify.mobile_app_paulo
data: { message: "💨 CO2 {{ states('sensor.living_co2_ppm') }} ppm — ventilación activada" }
Plant moisture ★¶
automation:
- alias: "Plant needs water"
trigger:
- platform: numeric_state
entity_id: sensor.monstera_moisture
below: 30
for: '01:00:00' # sostenido, no false positive
action:
- service: notify.telegram
data: { message: "🪴 Monstera necesita agua ({{ states('sensor.monstera_moisture') }}%)" }
Plan de implementación¶
| Mes | Construir |
|---|---|
| 1 | Smoke/CO emergency. Water leak emergency. Battery low daily check. |
| 2 | Filter counters (HVAC + filters principales). Unauthorized entry. Freeze risk. |
| 3 | Overheating appliances (iron, stove forgotten). Air quality. |
| 6 | Service interval reminders. Plant moisture (si plantas). |
| 12 | Health/wellness tracking (privacy-decided). |
Relaciones¶
- Conecta con: notification-strategy (tiers + escalation).
- Conecta con: failure-mode-sensor-stale (validar sensors críticos siempre reportan).
- Conecta con: disaster-recovery-runbooks (autonomous action en water leak).
Anti-patterns¶
- ❌ Tier 0 emergency sin shutdown autonomous: "te aviso pero no hago nada" = no protege.
- ❌ Counter sin handler de reset: vas a recibir alert forever post-fix manual.
- ❌ Health/wellness tracking sin consenso de cohabitantes: privacy issue.
- ❌ Auto-shutoff de fridge/freezer "por seguridad": destruye comida = pésima ROI.
Abierto / gaps¶
- Sensor gas detection — modelo específico recomendado.
- Integration con sistemas de monitoreo profesional (ADT, etc.) si aplica.
- Patrón "Wellness check" para personas mayores que vivan solas.