Skip to content

Tips & Tricks: Critical Chore Overdue Alerts

ccpk1 edited this page Mar 2, 2026 · 3 revisions

🚨 Critical Chore Overdue Alerts: Ensuring Essential Tasks Are Completed

⚠️ Note: This is NOT a built-in feature of ChoreOps but a manual configuration that has been tested and confirmed to work with the system. This setup requires advanced configuration using YAML and Jinja templating, but there is good reference documentation available to guide you.


📌 Why Use Critical Chore Alerts?

Most chores can be flexible, but some tasks must not be overdue—like feeding pets, taking medication, or locking doors at night. If a chore is time-sensitive and must be completed on schedule, setting up an alerting system ensures it gets done.

This guide walks through a real-world example of tracking feeding the cat with persistent visual alerts and notifications until the task is completed.


🔹 Features of This Setup

One-Tap Enable/Disable Button – Quickly turn alerts on or off. ✅ Dashboard Alert Widget – Shows a visual warning when a critical task is overdue. ✅ Escalating Notifications – Sends reminders at 15 minutes, 30 minutes, and then every 30 minutes until resolved. ✅ Customizable for Multiple Chores – Expand this logic to any critical task in your home.


📺 Dashboard Alert Example

A visual alert that can be placed on any of your home assistant dashboards and only shows when a task is overdue: image


📱 Dashboard Alert Acknowledgement Example

Reminders are sent at increasing intervals until the alert is acknowledged or the chore is completed: image


🛠️ How to Implement This

1️⃣ Start with the Basics – Learn how to implement Home Assistant's Alerts effectively with this guide: 🔗 Simple and Effective Alerting

2️⃣ Apply Advanced Logic – Once familiar with the basics, try a simple example from that guide. You can come back here to reference the chore sensor names and get a feel for how it fits together. Once you have that down, you can work your way up to more advanced multi-chore configuration with custom messages if your situation requires it.

3️⃣ Customize for Your Needs – Use the examples below to modify the sensors, notifications, and dashboard alerts to fit your household.


📌 What You’ll Need

  • Basic YAML knowledge for creating automations.
  • Jinja templating skills to adjust logic dynamically.
  • Home Assistant sensors that track critical chore completion.

🔹 The following examples show which sensors to monitor and demonstrate what’s possible with this setup specific to ChoreOps. It does not include the dashboard widget setup and all the other detail that can be found in the Simple and Effective alerting link above.🚀


Place in your configuration.yaml file or packages yaml file depending on how you configure your instance

input_boolean:
  cat_fed_chore_notify:
    name: Cat Fed Chore Notify
    icon: mdi:alert
  cat_litter_cleaned_chore_notify:
    name: Cat Litter Cleaned Chore Notify
    icon: mdi:alert

template:
  - binary_sensor:
      - name: "Cat Fed Chore Alert Active"
        state: >
          {{ is_state('sensor.sarah_chore_status_feed_cat_am', 'overdue') or is_state('sensor.jack_chore_status_feed_cat_pm', 'overdue') }}
      - name: "Cat Litter Cleaned Chore Alert Active"
        state: >
          {{ is_state('sensor.jack_chore_status_clean_litter_pm', 'overdue') or is_state('sensor.sarah_chore_status_clean_litter_am', 'overdue') }}
      - name: "Cat Chore Alert Active"
        state: >
          {{
            (is_state('input_boolean.cat_fed_chore_notify', 'on') and is_state('binary_sensor.cat_fed_chore_alert_active', 'on')) or
            (is_state('input_boolean.cat_litter_cleaned_chore_notify', 'on') and is_state('binary_sensor.cat_litter_cleaned_chore_alert_active', 'on'))
          }}

alert:
  cat_chore_warn_alert_active:
    name: Cat Chore Alert Active
    entity_id: binary_sensor.cat_chore_alert_active
    state: "on"
    repeat:
      - 15
      - 30
    can_acknowledge: true
    skip_first: false
    title: "Warning - Cat Chores Not Completed"
    message: >
      {% set chore_sensors = {
        'sensor.sarah_chore_status_feed_cat_am': 'Sarah needs to feed the cat.',
        'sensor.jack_chore_status_feed_cat_pm': 'Jack needs to feed the cat.',
        'sensor.sarah_chore_status_clean_litter_am': 'Sarah needs to clean the litter box.',
        'sensor.jack_chore_status_clean_litter_pm': 'Jack needs to clean the litter box.'
      } %}

      {% set ns = namespace(overdue_messages=[]) %}

      {% for entity_id, message in chore_sensors.items() %}
        {% if states(entity_id) == 'overdue' %}
          {% set ns.overdue_messages = ns.overdue_messages + [message] %}
        {% endif %}
      {% endfor %}

      {% if ns.overdue_messages %}
        Willow is not feeling loved. / {{ ns.overdue_messages | join(' / ') }}
        Triggered: {{ as_timestamp(states.binary_sensor.cat_chore_alert_active.last_changed) | timestamp_custom('%A %I:%M%p (%d-%b-%Y)') }}
      {% endif %}
    done_message: "Willow is feeling loved again as of {{ as_timestamp(states.binary_sensor.cat_chore_alert_active.last_changed) | timestamp_custom('%A %I:%M%p (%d-%b-%Y)') }}"
    notifiers:
      - ASSIGNEE_Warning

Example notify group to be place in configuration.yaml

notify:
  - name: ASSIGNEE_Warning
    platform: group
    services:
      - service: mobile_app_phone_1
      - service: mobile_app_phone_2

Clone this wiki locally