Last active
November 14, 2025 13:54
-
-
Save curreta/379554410a2e3f812c32b0e2b413c166 to your computer and use it in GitHub Desktop.
MakeSure Home Assistant Blueprint - Handle activity reminders with customizable notifications
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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