Skip to content

Instantly share code, notes, and snippets.

@curreta
Last active November 14, 2025 13:54
Show Gist options
  • Select an option

  • Save curreta/379554410a2e3f812c32b0e2b413c166 to your computer and use it in GitHub Desktop.

Select an option

Save curreta/379554410a2e3f812c32b0e2b413c166 to your computer and use it in GitHub Desktop.
MakeSure Home Assistant Blueprint - Handle activity reminders with customizable notifications
blueprint:
name: MakeSure Notification Handler
description: Handle notifications from MakeSure activity reminder system with customizable actions
domain: automation
input:
webhook_id:
name: Webhook ID
description: The webhook ID for this automation (you'll use this in your MakeSure settings)
selector:
text:
notification_actions:
name: Notification Actions
description: What to do when a notification is received
selector:
select:
options:
- label: "Send mobile notification"
value: "mobile"
- label: "Display persistent notification"
value: "persistent"
- label: "Send to TTS device"
value: "tts"
- label: "Flash lights"
value: "lights"
- label: "All of the above"
value: "all"
multiple: true
default: ["mobile"]
mobile_device:
name: Mobile Device (optional)
description: Mobile device to send notifications to
default: ""
selector:
device:
filter:
integration: mobile_app
tts_target:
name: TTS Media Player (optional)
description: Media player for text-to-speech announcements
default: ""
selector:
entity:
filter:
domain: media_player
light_entity:
name: Light to Flash (optional)
description: Light to flash for urgent notifications
default: ""
selector:
entity:
filter:
domain: light
urgent_color:
name: Urgent Light Color
description: Color for urgent notifications
default: [255, 0, 0]
selector:
color_rgb:
moderate_color:
name: Moderate Light Color
description: Color for moderate notifications
default: [255, 165, 0]
selector:
color_rgb:
gentle_color:
name: Gentle Light Color
description: Color for gentle notifications
default: [0, 255, 0]
selector:
color_rgb:
acknowledge_button:
name: Show Acknowledge Button
description: Add button to acknowledge directly from notification
default: true
selector:
boolean:
trigger:
- platform: webhook
webhook_id: !input webhook_id
allowed_methods:
- POST
local_only: false
variables:
# Blueprint inputs exposed as variables
notification_actions: !input notification_actions
mobile_device: !input mobile_device
tts_target: !input tts_target
light_entity: !input light_entity
urgent_color: !input urgent_color
moderate_color: !input moderate_color
gentle_color: !input gentle_color
acknowledge_button: !input acknowledge_button
# Webhook data
notification_data: "{{ trigger.json.notification }}"
message: "{{ notification_data.message }}"
title: "{{ notification_data.title | default('MakeSure Reminder') }}"
urgency: "{{ notification_data.urgency | default('moderate') }}"
activity_title: "{{ notification_data.activity.title if notification_data.activity is defined else 'Activity' }}"
requires_ack: "{{ notification_data.requires_acknowledgment | default(false) }}"
ack_url: "{{ notification_data.acknowledgment_url | default('') }}"
scheduled_for: "{{ notification_data.occurrence.scheduled_for if notification_data.occurrence is defined else '' }}"
action:
# Mobile Notification
- choose:
- conditions:
- "{{ 'mobile' in notification_actions or 'all' in notification_actions }}"
- "{{ mobile_device != '' }}"
sequence:
- service: notify.mobile_app_{{ device_attr(mobile_device, 'name') | slugify }}
data:
title: "{{ title }}"
message: "{{ message }}"
data:
priority: "{{ 'high' if urgency == 'urgent' else 'normal' }}"
tag: "makesure_{{ notification_data.scheduled_notification_id | default('notification') }}"
actions: >
{% if acknowledge_button and requires_ack and ack_url != '' %}
[
{
"action": "URI",
"title": "Acknowledge",
"uri": "{{ ack_url }}"
}
]
{% else %}
[]
{% endif %}
# Persistent Notification
- choose:
- conditions:
- "{{ 'persistent' in notification_actions or 'all' in notification_actions }}"
sequence:
- service: persistent_notification.create
data:
title: "{{ title }}"
message: >
{{ message }}
Activity: {{ activity_title }}
{% if scheduled_for != '' %}
Scheduled: {{ scheduled_for }}
{% endif %}
{% if requires_ack and ack_url != '' %}
[Acknowledge]({{ ack_url }})
{% endif %}
notification_id: "makesure_{{ notification_data.scheduled_notification_id | default('notification') }}"
# TTS Announcement
- choose:
- conditions:
- "{{ 'tts' in notification_actions or 'all' in notification_actions }}"
- "{{ tts_target != '' }}"
sequence:
- service: tts.speak
target:
entity_id: "{{ tts_target }}"
data:
message: "{{ urgency | title }} reminder: {{ message }}"
cache: false
# Flash Lights
- choose:
- conditions:
- "{{ 'lights' in notification_actions or 'all' in notification_actions }}"
- "{{ light_entity != '' }}"
sequence:
- variables:
flash_color: >
{% if urgency == 'urgent' %}
{{ urgent_color }}
{% elif urgency == 'moderate' %}
{{ moderate_color }}
{% else %}
{{ gentle_color }}
{% endif %}
- service: light.turn_on
target:
entity_id: "{{ light_entity }}"
data:
rgb_color: "{{ flash_color }}"
brightness: 255
- delay:
milliseconds: 500
- service: light.turn_off
target:
entity_id: "{{ light_entity }}"
- delay:
milliseconds: 500
- service: light.turn_on
target:
entity_id: "{{ light_entity }}"
data:
rgb_color: "{{ flash_color }}"
brightness: 255
- delay:
milliseconds: 500
- service: light.turn_off
target:
entity_id: "{{ light_entity }}"
- delay:
milliseconds: 500
- service: light.turn_on
target:
entity_id: "{{ light_entity }}"
data:
rgb_color: "{{ flash_color }}"
brightness: 255
- delay:
seconds: 2
- service: light.turn_off
target:
entity_id: "{{ light_entity }}"
mode: queued
max: 10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment