Saltar a contenido

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

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.