Home Assistant

Morning alert for due to-do items

At a set time, one Companion notification lists to-do items that are due or overdue. Mark the first one done or snooze. Nothing is sent when the lists are clear.

Difficulty · BeginnerSetup · 15–30 minutesHA · 2024.10 or newer
Get the pack · from $19Have us set it up

A pantry list only helps if the thing that expires today is in front of you in the morning. This blueprint reads one or more to-do lists at a time you set, keeps items whose due date is today, overdue, or inside the next N days, and sends one Companion notification. Two buttons: Mark first done and Snooze. If nothing is due, it does not notify.

The due date is the to-do item’s own due date. For a pantry, that date is the expiry. The pack does not add a custom integration.

A notification that waits for a reply and then runs an action is actionable notification reply. An evening chore with Done and Snooze on a calendar, not a to-do due date, is bin-day reminder. A single chore you complete by tapping a tag is NFC chore tracker. This one is the morning pass over due dates.

List names and item titles end up in the notification. Do not publish a screenshot of a real list.

What problem it solves

You want one morning push for what is due, a way to complete the first item or delay the reminder, and silence when the lists have nothing due.

How it works

The lists are todo entities. The phone is a Companion device. Two input_text helpers remember which item was first, because the button press is a later run and no longer has the list in memory. A timer is the snooze.

  1. When — at the morning time (pack default 07:00), and again when the snooze timer finishes. A button press is a third trigger, filtered to the tag todo_due_morning.
  2. What is due — todo.get_items asks each list for needs_action items. An item counts when its due value is before tomorrow at midnight, plus the extra days you set. Pack default 0 means today and overdue only. Items with no due date are skipped. The list is sorted by due date, earliest first.
  3. One notification — the first 12 summaries, then a “and N more” line if needed. The first item’s uid and list entity id are stored in the helpers. The notification tag is stable, so a later push replaces this one.
  4. Nothing due — the if is skipped. No push, and the helpers are left as they were.
  5. Mark first done — todo.update_item sets that uid to completed on the stored list, then clears the notification. A missing uid does not call the service.
  6. Snooze — starts the timer (pack default 30 minutes) and clears the notification. When the timer finishes, the same check runs again.

The automation is queued, so a button tap during the morning check is not dropped. The helpers’ max length is 255 characters. A uid longer than that cannot be stored, and Mark first done will not find it.

Snippet

The helpers are what the button press reads. The due-date filter is in the blueprint.

input_text:
  todo_due_first_uid:
    name: To-do due first uid
    max: 255
  todo_due_first_list:
    name: To-do due first list
    max: 255

timer:
  todo_due_snooze:
    name: To-do due snooze
    duration: "00:30:00"

Setup outline

  1. Copy helpers/todo_due_morning_alert.yaml into config/packages/ and include that folder from the existing homeassistant: block. Restart, and confirm the two input texts and timer.todo_due_snooze.
  2. Import the blueprint. Select the to-do lists, the morning time, and the Companion device.
  3. Put a due date on one item that is today or earlier. Leave another item with no due date, as a check that it stays out of the push.
  4. Run the automation once from the UI (that fires the time trigger’s check only if you set the trigger id; easier is to temporarily set the morning time a minute ahead, or call the automation after changing the time). Confirm one notification and that the undated item is absent.
  5. Tap Mark first done. The item should complete and the notification should clear. Put the item back if it was only a test.
  6. Tap Snooze on a later run. The notification should clear and return when the timer finishes, still only if something is due.

Troubleshooting

  • No notification, and an item is due. The due value did not parse, the item is completed, or the list entity id is wrong. The trace’s todo_result shows what Home Assistant returned. A date-only due value is midnight at the start of that day, which still counts as today.
  • An item with no date appeared. It has a due value you did not expect, including a time. This blueprint does not infer dates from the summary text.
  • Mark first done does nothing. The helpers were cleared, the uid was longer than 255 characters, or the list no longer has that item. The action is ignored when either helper is empty.
  • Snooze never comes back. The timer helper is not the one the blueprint points at, or a restart cleared it because restore was turned off. The pack turns restore on.
  • Two phones. The blueprint has one device. Duplicate the automation and the helpers if a second phone should get its own buttons. Sharing the helpers means the second phone’s Mark first done completes the first phone’s item.
  • The push lists twelve and stops. The rest are still on the to-do list. The message is capped so it stays readable. Open the list for the remainder.
  • You wanted a barcode pantry integration. This pack only reads native to-do due dates. It does not install another integration.

Credits

Inspired by pantrist-ha-integration, which tracks a pantry in Home Assistant. This pack does not use that integration. It is a morning notification over the built-in to-do lists, with due dates standing in for expiry.

Changelog

v1.0 · Oct 30, 2026: First publish.