blueprint: name: Calendar Notifications & Actions description: "# \U0001F4C5 Calendar Notifications & Actions\n**Version: 1.7**\n\nTransform Your Calendar: Turn Events Into Notifications and Actions! \U0001F4C5\U0001F514⚙️\n\n**If you like my blueprints, and would like to show your support or just say thank you?** [Click Here](https://www.paypal.com/donate/?hosted_button_id=WAZS3QSDTPGA8) \U0001F642\n
The Automation Process: \U0001F448\n\n \ - **Calendar Event Triggering:**\n - Trigger based on a keyword in a calendar event or on all events in a selected calendar.\n - Choose to trigger at the start or end of a calendar event with time offsets.\n\n - **Notification Options:**\n \ - Option to send notifications to one or multiple devices when triggered.\n \ - Action Buttons (Optional):\n - Notifications can include up to 3 action buttons.\n - Each action button is linked to a designated custom action group.\n - Option to send a confirmation message when an action button is pressed.\n - The automation will continue after a specified time delay if an action button is not pressed.\n - Compatible with Apple iOS and Android devices.\n\n - **Custom Actions:**\n - Option to define up to 3 different action groups when triggered.\n - Each action group can contain as many actions as desired.\n - Each action group can be linked to a notification action button or executed automatically when the automation is triggered.\n
\n\nNeed help? \n- FAQ: [Click Here](https://community.home-assistant.io/t/612326/2)\n- The Settings & Best Practice Guidelines: [Click Here](https://community.home-assistant.io/t/612326/3)\n- Community Support Including Updates: [Click Here](https://community.home-assistant.io/t/612326)\n\nRequired = *\n" domain: automation input: trigger_settings: name: Trigger * icon: mdi:cog-outline description: ⚠️ Calendar events must be added at least 15 minutes before the trigger time, otherwise the automation will not execute. collapsed: true input: calendar: name: Calendar * description: Select the calendar to be used for the automation. default: {} selector: entity: filter: - domain: - calendar multiple: false include_calendar_trigger: name: Use The Calendar Trigger - Key Word (Optional) description: 'Choose whether to use a "Keyword" to trigger the automation. **Note** - If you choose not to use a "Keyword", all calendar events will trigger the automation.' default: enable_key_word selector: select: options: - label: Don't use "Key Word" in calendar value: disable_key_word - label: Use "Key Word" in calendar value: enable_key_word multiple: false custom_value: false sort: false calendar_trigger: name: Calendar Trigger - Key Word In Calendar Summary & / or Description description: 'Input a single keyword or, for multiple keywords, use a comma-separated list. Enter these keywords into the calendar event summary or description to trigger this automation. Keywords can include letters, numbers, and symbols. Be mindful of your choices, as any event containing these keywords will trigger the automation. To prevent false triggers, it''s recommended to use **@** or **#** followed by the keyword in the calendar event (e.g., **@bins** or **#bins**) or for multiple keywords (e.g., **@bins, @rubbish**). For more information on how to use Trigger Keywords, [Click Here](https://community.home-assistant.io/t/612326/4)' default: [] selector: text: {} start_calendar_offset: name: Calendar Start - Offset description: You can specify an offset from the start of the calendar event for when the trigger should be activated. To trigger the automation before the start of the event, use a negative sign "-" followed by the time value. default: days: 0 hours: 0 minutes: 0 seconds: 0 selector: duration: enable_day: true end_calendar_offset: name: Calendar End - Offset description: You can specify an offset from the end of the calendar event for when the trigger should be activated. To trigger the automation before the end of the event, use a negative sign "-" followed by the time value. default: days: 0 hours: 0 minutes: 0 seconds: 0 selector: duration: enable_day: true start_notify_settings: name: Start Notify icon: mdi:calendar-start-outline collapsed: true input: include_start_notify: name: Use The Start Notify Options (Optional) description: Select "Enable" if you would like to receive notifications at the start of the calendar event. default: disable_start_notify_options selector: select: options: - label: Enable Start Notify Options value: enable_start_notify_options - label: Disable Start Notify Options value: disable_start_notify_options multiple: false custom_value: false sort: false start_notify_device: name: Start Notify - Devices To Notify description: Select the devices to receive notifications at the start of a calendar event. default: [] selector: device: filter: - integration: mobile_app multiple: true start_title: name: Start Notify - Title description: Specify the notification title for the start of the calendar event. default: '{{ trigger.calendar_event.summary }}' selector: text: {} start_message: name: Start Notify - Message description: Specify the notification message for the start of the calendar event. default: '{{ trigger.calendar_event.description }}' selector: text: {} start_notify_interruption_level: name: Interruption Level - iOS Only description: 'On devices running iOS 15 and later, you can configure the interruption level for your notifications to ensure they are delivered according to your preferences. Choose the desired interruption level from the dropdown list. Critical and time-sensitive notifications must be turned ON within the Home Assistant App, and time-sensitive notifications must be allowed in your Focus settings. For more information on interruption levels [Click Here](https://community.home-assistant.io/t/612326/155)' default: active selector: select: mode: dropdown options: - label: Default value: active - label: Critical Notifications value: critical - label: Time Sensitive Notifications value: time-sensitive - label: Quiet Notifications Without Waking Screen value: passive multiple: false custom_value: false sort: false start_notify_data: name: Android Only Options (Optional) description: '**High Priority** notifications ensure that you receive important alerts immediately. These notifications bypass normal delivery delays and are delivered instantly to your device. **Sticky Notification** ensure that important alerts are not dismissed when selected. They remain on your notification screen until you actively clear or swipe them away, ensuring that critical information stays visible until addressed. **Notification Channel** allow you to easily organize different notification settings, including notification sounds, vibrations, and other device-specific features. If you choose this option, please enter your desired channel name below.' default: [] selector: select: multiple: true options: - label: High Priority value: high_priority - label: Sticky Notification value: sticky - label: Notification Channel value: channel custom_value: false sort: false start_notify_channel: name: Notification Channel - Android Only description: 'If you have chosen to use a notification channel, simply enter the name of an existing channel to apply its pre-configured settings. If you don''t have a channel yet, you can create a new one by entering a name here. When your automation sends the first notification, it will create the channel on your device. After the channel is created, you can customize its notification settings to your preference directly on your device. For more information on notification channels [Click Here](https://community.home-assistant.io/t/612326/155)' default: [] selector: text: {} start_action_settings: name: Start Actions Buttons icon: mdi:gesture-tap collapsed: true input: include_start_action_buttons: name: Start Notify - Action Buttons Options (Optional) description: 'Enable the action buttons you would like to use. These buttons will be shown in the notification, allowing you to perform actions when clicked. **NOTE** - You do not need to select any notification action buttons to execute a start action. If you prefer to run a start action without using any action buttons, simply enable any ''Start Auto Action'' located in the ''Start Actions'' section below. ⚠️ Enter the names for all enabled **Action Buttons** below, including the **CANCEL Action Button**. Missing any button names may prevent the automation from functioning correctly and could result in not receiving the notification.' default: [] selector: select: options: - label: Enable action button 1 value: enable_start_action_button_1 - label: Enable action button 2 value: enable_start_action_button_2 - label: Enable action button 3 value: enable_start_action_button_3 multiple: true custom_value: false sort: false start_action_button_1: name: Start Notify - Action Button 1 description: Enter the button name to be displayed in the notification. This button will execute all actions entered into the "Start - Action 1" input located in the 'Start Actions' section below. default: [] selector: text: {} start_action_button_2: name: Start Notify - Action Button 2 description: Enter the button name to be displayed in the notification. This button will execute all actions entered into the "Start - Action 2" input located in the 'Start Actions' section below. default: [] selector: text: {} start_action_button_3: name: Start Notify - Action Button 3 description: Enter the button name to be displayed in the notification. This button will execute all actions entered into the "Start - Action 3" input located in the 'Start Actions' section below. default: [] selector: text: {} start_action_button_stop: name: Start Notify - CANCEL Action Button description: Enter the CANCEL button name to be displayed in the notification. This button will cancel all actions and stop the automation. It will be automatically included in the notification if you have enabled an action button above. default: [] selector: text: {} start_time_delay: name: Start Notify - Time Delay description: Specify the time delay after which the automation will resume its execution if an action button has not been pressed. default: hours: 0 minutes: 30 seconds: 0 selector: duration: {} include_start_action_button_confirmation: name: Start Notify - Action Button Confirmation Option (Optional) description: 'Select "Enable" if you would like to notify all devices when an action button has been pressed. This is useful when notifying multiple devices, informing others that an action has been selected. ⚠️ If Action Button Confirmation is enabled, you must include the **Confirmation Title**, **Confirmation Message** for each enabled action button, **Cancel Confirmation Message**, and **Time Delay Confirmation Message**. Missing any of these may prevent the automation from functioning correctly and could result in not receiving the notification.' default: disable_start_action_button_confirmation selector: select: options: - label: Enable Action Button Confirmation value: enable_start_action_button_confirmation - label: Disable Action Button Confirmation value: disable_start_action_button_confirmation multiple: false custom_value: false sort: false start_action_button_confirmation_title: name: Start Notify - Action Button Confirmation Title description: Specify the notification title when an action button is pressed or when the time delay has passed. default: [] selector: text: {} start_action_button_confirmation_message: name: Start Notify - Action Button 1 Confirmation Message description: Specify the notification message when action button 1 is pressed. default: [] selector: text: {} start_action_button_2_confirmation_message: name: Start Notify - Action Button 2 Confirmation Message description: Specify the notification message when action button 2 is pressed. default: [] selector: text: {} start_action_button_3_confirmation_message: name: Start Notify - Action Button 3 Confirmation Message description: Specify the notification message when action button 3 is pressed. default: [] selector: text: {} start_action_button_stop_confirmation_message: name: Start Notify - Action Button Cancel Confirmation Message description: Specify the notification message when the cancel button is pressed. default: [] selector: text: {} start_time_delay_confirmation_message: name: Start Notify - Time Delay Confirmation Message description: Specify the notification message when the time delay has passed. default: [] selector: text: {} start_auto_action_settings: name: Start Actions icon: mdi:code-tags collapsed: true input: include_start_auto_actions: name: Use The Start Auto Action Options (Optional) description: 'Enabling the auto option will allow the "Start Actions" below to run when the calendar event is triggered. When using action buttons in a notification, it is not necessary to enable an auto action for the start actions to work, as the action button pressed in a notification will run the selected action. However, if you miss the notification and don''t press an action button, and after the time delay has passed, enabling a start auto action option ensures the action still runs.' default: [] selector: select: options: - label: Enable start auto action 1 value: enable_start_action_1 - label: Enable start auto action 2 value: enable_start_action_2 - label: Enable start auto action 3 value: enable_start_action_3 multiple: true custom_value: false sort: false start_action_1: name: Start Action - Action 1 description: Enter the actions you would like to run at the start of a calendar event. These actions are also linked to the "Start Notify - Action Button 1" input located in the 'Start Actions Buttons' section above. default: [] selector: action: {} start_action_2: name: Start Action - Action 2 description: Enter the actions you would like to run at the start of a calendar event. These actions are also linked to the "Start Notify - Action Button 2" input located in the 'Start Actions Buttons' section above. default: [] selector: action: {} start_action_3: name: Start Action - Action 3 description: Enter the actions you would like to run at the start of a calendar event. These actions are also linked to the "Start Notify - Action Button 3" input located in the 'Start Actions Buttons' section above. default: [] selector: action: {} end_notify_settings: name: End Notify icon: mdi:calendar-end-outline collapsed: true input: include_end_notify: name: Use The End Notify Options (Optional) description: Select "Enable" if you would like to receive notifications at the end of the calendar event. default: disable_end_notify_options selector: select: options: - label: Enable End Notify Options value: enable_end_notify_options - label: Disable End Notify Options value: disable_end_notify_options multiple: false custom_value: false sort: false end_notify_device: name: End Notify - Devices To Notify description: Select the devices to receive notifications at the end of a calendar event. default: [] selector: device: filter: - integration: mobile_app multiple: true end_title: name: End Notify - Title description: Specify the notification title for the end of the calendar event. default: '{{ trigger.calendar_event.summary }}' selector: text: {} end_message: name: End Notify - Message description: Specify the notification message for the end of the calendar event. default: '{{ trigger.calendar_event.description }}' selector: text: {} end_notify_interruption_level: name: Interruption Level - iOS Only description: 'On devices running iOS 15 and later, you can configure the interruption level for your notifications to ensure they are delivered according to your preferences. Choose the desired interruption level from the dropdown list. Critical and time-sensitive notifications must be turned ON within the Home Assistant App, and time-sensitive notifications must be allowed in your Focus settings. For more information on interruption levels [Click Here](https://community.home-assistant.io/t/612326/155)' default: active selector: select: mode: dropdown options: - label: Default value: active - label: Critical Notifications value: critical - label: Time Sensitive Notifications value: time-sensitive - label: Quiet Notifications Without Waking Screen value: passive multiple: false custom_value: false sort: false end_notify_data: name: Android Only Options (Optional) description: '**High Priority** notifications ensure that you receive important alerts immediately. These notifications bypass normal delivery delays and are delivered instantly to your device. **Sticky Notification** ensure that important alerts are not dismissed when selected. They remain on your notification screen until you actively clear or swipe them away, ensuring that critical information stays visible until addressed. **Notification Channel** allow you to easily organize different notification settings, including notification sounds, vibrations, and other device-specific features. If you choose this option, please enter your desired channel name below.' default: [] selector: select: multiple: true options: - label: High Priority value: high_priority - label: Sticky Notification value: sticky - label: Notification Channel value: channel custom_value: false sort: false end_notify_channel: name: Notification Channel - Android Only description: 'If you have chosen to use a notification channel, simply enter the name of an existing channel to apply its pre-configured settings. If you don''t have a channel yet, you can create a new one by entering a name here. When your automation sends the first notification, it will create the channel on your device. After the channel is created, you can customize its notification settings to your preference directly on your device. For more information on notification channels [Click Here](https://community.home-assistant.io/t/612326/155)' default: [] selector: text: {} end_action_settings: name: End Actions Buttons icon: mdi:gesture-double-tap collapsed: true input: include_end_action_buttons: name: End Notify - Action Buttons Options (Optional) description: 'Enable the action buttons you would like to use. These buttons will be shown in the notification, allowing you to perform actions when clicked. **NOTE** - You do not need to select any notification action buttons to execute an end action. If you prefer to run an end action without using any action buttons, simply enable any ''End Auto Action'' located in the ''End Actions'' section below. ⚠️ Enter the names for all enabled **Action Buttons** below, including the **CANCEL Action Button**. Missing any button names may prevent the automation from functioning correctly and could result in not receiving the notification.' default: [] selector: select: options: - label: Enable action button 1 value: enable_end_action_button_1 - label: Enable action button 2 value: enable_end_action_button_2 - label: Enable action button 3 value: enable_end_action_button_3 multiple: true custom_value: false sort: false end_action_button_1: name: End Notify - Action Button 1 description: Enter the button name to be displayed in the notification. This button will execute all actions entered into the "End - Action 1" input located in the 'End Actions' section below. default: [] selector: text: {} end_action_button_2: name: End Notify - Action Button 2 description: Enter the button name to be displayed in the notification. This button will execute all actions entered into the "End - Action 2" input located in the 'End Actions' section below. default: [] selector: text: {} end_action_button_3: name: End Notify - Action Button 3 description: Enter the button name to be displayed in the notification. This button will execute all actions entered into the "End - Action 3" input located in the 'End Actions' section below. default: [] selector: text: {} end_action_button_stop: name: End Notify - CANCEL Action Button description: Enter the CANCEL button name to be displayed in the notification. This button will cancel all actions and stop the automation. It will be automatically included in the notification if you have enabled an action button above. default: [] selector: text: {} end_time_delay: name: End Notify - Time Delay description: Specify the time delay after which the automation will resume its execution if an action button has not been pressed. default: hours: 0 minutes: 30 seconds: 0 selector: duration: {} include_end_action_button_confirmation: name: End Notify - Action Button Confirmation Option (Optional) description: 'Select "Enable" if you would like to notify all devices when an action button has been pressed. This is useful when notifying multiple devices, informing others that an action has been selected. ⚠️ If Action Button Confirmation is enabled, you must include the **Confirmation Title**, **Confirmation Message** for each enabled action button, **Cancel Confirmation Message**, and **Time Delay Confirmation Message**. Missing any of these may prevent the automation from functioning correctly and could result in not receiving the notification.' default: disable_end_action_button_confirmation selector: select: options: - label: Enable Action Button Confirmation value: enable_end_action_button_confirmation - label: Disable Action Button Confirmation value: disable_end_action_button_confirmation multiple: false custom_value: false sort: false end_action_button_confirmation_title: name: End Notify - Action Button Confirmation Title description: Specify the notification title when an action button is pressed or when the time delay has passed. default: [] selector: text: {} end_action_button_confirmation_message: name: End Notify - Action Button 1 Confirmation Message description: Specify the notification message when action button 1 is pressed. default: [] selector: text: {} end_action_button_2_confirmation_message: name: End Notify - Action Button 2 Confirmation Message description: Specify the notification message when action button 2 is pressed. default: [] selector: text: {} end_action_button_3_confirmation_message: name: End Notify - Action Button 3 Confirmation Message description: Specify the notification message when action button 3 is pressed. default: [] selector: text: {} end_action_button_stop_confirmation_message: name: End Notify - Action Button Cancel Confirmation Message description: Specify the notification message when the cancel button is pressed. default: [] selector: text: {} end_time_delay_confirmation_message: name: End Notify - Time Delay Confirmation Message description: Specify the notification message when the time delay has passed. default: [] selector: text: {} end_auto_action_settings: name: End Actions icon: mdi:code-tags collapsed: true input: include_end_auto_actions: name: Use The End Auto Action Options (Optional) description: 'Enabling the auto option will allow the "End Actions" below to run when the calendar event is triggered. When using action buttons in a notification, it is not necessary to enable an auto action for the end actions to work, as the action button pressed in a notification will run the selected action. However, if you miss the notification and don''t press an action button, and after the time delay has passed, enabling an end auto action option ensures the action still runs.' default: [] selector: select: options: - label: Enable auto end action 1 option value: enable_end_action_1 - label: Enable auto end action 2 option value: enable_end_action_2 - label: Enable auto end action 3 option value: enable_end_action_3 multiple: true custom_value: false sort: false end_action_1: name: End Action - Action 1 description: Enter the actions you would like to run at the end of a calendar event. These actions are also linked to the "End Notify - Action Button 1" input located in the 'End Actions Buttons' section above. default: [] selector: action: {} end_action_2: name: End Action - Action 2 description: Enter the actions you would like to run at the end of a calendar event. These actions are also linked to the "End Notify - Action Button 2" input located in the 'End Actions Buttons' section above. default: [] selector: action: {} end_action_3: name: End Action - Action 3 description: Enter the actions you would like to run at the end of a calendar event. These actions are also linked to the "End Notify - Action Button 3" input located in the 'End Actions Buttons' section above. default: [] selector: action: {} global_conditions_settings: name: Global Conditions icon: mdi:earth collapsed: true input: global_conditions: name: Global Conditions description: Enter any global conditions you would like to apply to the automation. default: [] selector: condition: {} source_url: https://gist.github.com/Blackshome/40bfd92fb1fe6a9a9189325704a3c81b mode: parallel max_exceeded: silent variables: calendar: !input calendar include_calendar_trigger: !input include_calendar_trigger calendar_trigger: !input calendar_trigger start_calendar_offset: !input start_calendar_offset end_calendar_offset: !input end_calendar_offset include_start_notify: !input include_start_notify start_notify_device: !input start_notify_device start_title: !input start_title start_message: !input start_message start_notify_interruption_level: !input start_notify_interruption_level start_notify_data: !input start_notify_data start_notify_channel: !input start_notify_channel include_start_action_buttons: !input include_start_action_buttons start_action_button_1: !input start_action_button_1 start_action_button_2: !input start_action_button_2 start_action_button_3: !input start_action_button_3 start_action_button_stop: !input start_action_button_stop start_time_delay: !input start_time_delay include_start_action_button_confirmation: !input include_start_action_button_confirmation start_action_button_confirmation_title: !input start_action_button_confirmation_title start_action_button_confirmation_message: !input start_action_button_confirmation_message start_action_button_2_confirmation_message: !input start_action_button_2_confirmation_message start_action_button_3_confirmation_message: !input start_action_button_3_confirmation_message start_action_button_stop_confirmation_message: !input start_action_button_stop_confirmation_message start_time_delay_confirmation_message: !input start_time_delay_confirmation_message include_start_auto_actions: !input include_start_auto_actions start_action_1: !input start_action_1 start_action_2: !input start_action_2 start_action_3: !input start_action_3 include_end_notify: !input include_end_notify end_notify_device: !input end_notify_device end_title: !input end_title end_message: !input end_message end_notify_interruption_level: !input end_notify_interruption_level end_notify_data: !input end_notify_data end_notify_channel: !input end_notify_channel include_end_action_buttons: !input include_end_action_buttons end_action_button_1: !input end_action_button_1 end_action_button_2: !input end_action_button_2 end_action_button_3: !input end_action_button_3 end_action_button_stop: !input end_action_button_stop end_time_delay: !input end_time_delay include_end_action_button_confirmation: !input include_end_action_button_confirmation end_action_button_confirmation_title: !input end_action_button_confirmation_title end_action_button_confirmation_message: !input end_action_button_confirmation_message end_action_button_2_confirmation_message: !input end_action_button_2_confirmation_message end_action_button_3_confirmation_message: !input end_action_button_3_confirmation_message end_action_button_stop_confirmation_message: !input end_action_button_stop_confirmation_message end_time_delay_confirmation_message: !input end_time_delay_confirmation_message include_end_auto_actions: !input include_end_auto_actions end_action_1: !input end_action_1 end_action_2: !input end_action_2 end_action_3: !input end_action_3 global_conditions: !input global_conditions trigger: - platform: calendar id: t0 event: start entity_id: !input calendar offset: !input start_calendar_offset - platform: calendar id: t1 event: end entity_id: !input calendar offset: !input end_calendar_offset condition: - condition: or conditions: - condition: and conditions: - condition: trigger id: t0 - condition: template value_template: '{{ (''enable_start_notify_options'' in include_start_notify) or (''enable_start_action_1'' in include_start_auto_actions) or (''enable_start_action_2'' in include_start_auto_actions) or (''enable_start_action_3'' in include_start_auto_actions) }}' - condition: and conditions: - condition: trigger id: t1 - condition: template value_template: '{{ (''enable_end_notify_options'' in include_end_notify) or (''enable_end_action_1'' in include_end_auto_actions) or (''enable_end_action_2'' in include_end_auto_actions) or (''enable_end_action_3'' in include_end_auto_actions) }}' - condition: or conditions: - condition: or conditions: - condition: template value_template: '{% set keywords = calendar_trigger.split('','') %} {% set keywords = keywords | map(''trim'') | list %} {{ keywords | select(''in'', trigger.calendar_event.summary) | list | count > 0 }} ' - condition: template value_template: '{% set keywords = calendar_trigger.split('','') %} {% set keywords = keywords | map(''trim'') | list %} {{ keywords | select(''in'', trigger.calendar_event.description) | list | count > 0 }} ' - condition: template value_template: '{{ include_calendar_trigger == ''disable_key_word'' }}' - condition: and conditions: !input global_conditions action: - choose: - alias: Start trigger conditions: - condition: trigger id: t0 sequence: - choose: - alias: Check if the start of notification is enabled conditions: - condition: template value_template: '{{ include_start_notify == ''enable_start_notify_options''}}' sequence: - variables: action_button_1: '{{ ''BUTTON_1_'' ~ context.id }}' action_button_2: '{{ ''BUTTON_2_'' ~ context.id }}' action_button_3: '{{ ''BUTTON_3_'' ~ context.id }}' action_button_stop: '{{ ''BUTTON_STOP_'' ~ context.id }}' start_message_data: "{% set message = namespace(data={}) %} {% if start_notify_interruption_level in ['active', 'critical', 'time-sensitive', 'passive'] %}\n {% set message.data = dict(message.data, **{ 'push': {'interruption-level': start_notify_interruption_level }}) %}\n{% endif %} {% if 'high_priority' in start_notify_data %}\n {% set message.data = dict(message.data, **{ 'ttl': 0, 'priority': 'high' }) %}\n{% endif %} {% if 'channel' in start_notify_data %}\n {% set message.data = dict(message.data, **{ 'channel': start_notify_channel }) %}\n{% endif %} {% if 'sticky' in start_notify_data %}\n {% set message.data = dict(message.data, **{ 'sticky': \"true\" }) %}\n{% endif %} {{ message.data }}" start_message_data_action_button: "{% set message = namespace(data={}) %} {% set actions = [] %} {% if start_notify_interruption_level in ['active', 'critical', 'time-sensitive', 'passive'] %}\n {% set message.data = dict(message.data, **{ 'push': {'interruption-level': start_notify_interruption_level }}) %}\n{% endif %} {% if 'high_priority' in start_notify_data %}\n \ {% set message.data = dict(message.data, **{ 'ttl': 0, 'priority': 'high' }) %}\n{% endif %} {% if 'channel' in start_notify_data %}\n \ {% set message.data = dict(message.data, **{ 'channel': start_notify_channel }) %}\n{% endif %} {% if 'sticky' in start_notify_data %}\n {% set message.data = dict(message.data, **{ 'sticky': \"true\" }) %}\n{% endif %} {% if 'enable_start_action_button_1' in include_start_action_buttons %}\n {% set actions = actions + [{ 'action': action_button_1, 'title': start_action_button_1 }] %}\n{% endif %} {% if 'enable_start_action_button_2' in include_start_action_buttons %}\n {% set actions = actions + [{ 'action': action_button_2, 'title': start_action_button_2 }] %}\n{% endif %} {% if 'enable_start_action_button_3' in include_start_action_buttons %}\n {% set actions = actions + [{ 'action': action_button_3, 'title': start_action_button_3 }] %}\n{% endif %} {% if ('enable_start_action_button_1' in include_start_action_buttons) or \n ('enable_start_action_button_2' in include_start_action_buttons) or \n ('enable_start_action_button_3' in include_start_action_buttons) %}\n {% set actions = actions + [{ 'action': action_button_stop, 'title': start_action_button_stop }] %}\n{% endif %} {% if actions | length > 0 %}\n {% set message.data = dict(message.data, **{ 'actions': actions }) %}\n{% endif %} {{ message.data }}" - alias: Send a notification to each device repeat: for_each: !input start_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input start_title message: !input start_message data: '{{ start_message_data_action_button }}' - choose: - alias: Check if any start action buttons are enabled conditions: - condition: template value_template: '{{ (''enable_start_action_button_1'' in include_start_action_buttons) or (''enable_start_action_button_2'' in include_start_action_buttons) or (''enable_start_action_button_3'' in include_start_action_buttons) }}' sequence: - alias: Wait for a response from the action button wait_for_trigger: - platform: event event_type: mobile_app_notification_action event_data: action: '{{ action_button_1 }}' - platform: event event_type: mobile_app_notification_action event_data: action: '{{ action_button_2 }}' - platform: event event_type: mobile_app_notification_action event_data: action: '{{ action_button_3 }}' - platform: event event_type: mobile_app_notification_action event_data: action: '{{ action_button_stop }}' timeout: !input start_time_delay - choose: - alias: Check if confirmation message is enabled conditions: - condition: template value_template: '{{ ''enable_start_action_button_confirmation'' in include_start_action_button_confirmation }}' sequence: - if: - alias: Confirmation from the actions buttons condition: template value_template: '{{ wait.trigger.idx is defined }}' then: - choose: - alias: Check if action button 1 is pressed conditions: - condition: template value_template: '{{ action_button_1 in wait.trigger.event.data.action }}' sequence: - alias: Send a notification to each device repeat: for_each: !input start_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input start_action_button_confirmation_title message: !input start_action_button_confirmation_message data: '{{ start_message_data }}' - alias: Check if action button 2 is pressed conditions: - condition: template value_template: '{{ action_button_2 in wait.trigger.event.data.action }}' sequence: - alias: Send a notification to each device repeat: for_each: !input start_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input start_action_button_confirmation_title message: !input start_action_button_2_confirmation_message data: '{{ start_message_data }}' - alias: Check if action button 3 is pressed conditions: - condition: template value_template: '{{ action_button_3 in wait.trigger.event.data.action }}' sequence: - alias: Send a notification to each device repeat: for_each: !input start_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input start_action_button_confirmation_title message: !input start_action_button_3_confirmation_message data: '{{ start_message_data }}' - alias: Check if action stop button is pressed conditions: - condition: template value_template: '{{ action_button_stop in wait.trigger.event.data.action }}' sequence: - alias: Send a notification to each device repeat: for_each: !input start_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input start_action_button_confirmation_title message: !input start_action_button_stop_confirmation_message data: '{{ start_message_data }}' - alias: Perform the action button selected action choose: - conditions: '{{ wait.trigger.event.data.action == action_button_1 }}' sequence: !input start_action_1 - conditions: '{{ wait.trigger.event.data.action == action_button_2 }}' sequence: !input start_action_2 - conditions: '{{ wait.trigger.event.data.action == action_button_3 }}' sequence: !input start_action_3 - conditions: '{{ wait.trigger.event.data.action == action_button_stop }}' sequence: - stop: Stop the automation else: - alias: Send a notification to each device repeat: for_each: !input start_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input start_action_button_confirmation_title message: !input start_time_delay_confirmation_message data: '{{ start_message_data }}' - alias: Check if confirmation message is disabled conditions: - condition: template value_template: '{{ ''disable_start_action_button_confirmation'' in include_start_action_button_confirmation }}' sequence: - if: - alias: Confirmation from the actions buttons condition: template value_template: '{{ wait.trigger.idx is defined }}' then: - alias: Perform the action button selected action choose: - conditions: '{{ wait.trigger.event.data.action == action_button_1 }}' sequence: !input start_action_1 - conditions: '{{ wait.trigger.event.data.action == action_button_2 }}' sequence: !input start_action_2 - conditions: '{{ wait.trigger.event.data.action == action_button_3 }}' sequence: !input start_action_3 - conditions: '{{ wait.trigger.event.data.action == action_button_stop }}' sequence: - stop: Stop the automation - choose: - alias: Check if auto action 1 is enabled conditions: - condition: template value_template: '{{ ''enable_start_action_1'' in include_start_auto_actions }}' sequence: !input start_action_1 - choose: - alias: Check if auto action 2 is enabled conditions: - condition: template value_template: '{{ ''enable_start_action_2'' in include_start_auto_actions }}' sequence: !input start_action_2 - choose: - alias: Check if auto action 3 is enabled conditions: - condition: template value_template: '{{ ''enable_start_action_3'' in include_start_auto_actions }}' sequence: !input start_action_3 default: - choose: - alias: End Trigger conditions: - condition: trigger id: t1 sequence: - choose: - alias: Check if end of notification is enabled conditions: - condition: template value_template: '{{ include_end_notify == ''enable_end_notify_options'' }}' sequence: - variables: action_button_1: '{{ ''BUTTON_1_'' ~ context.id }}' action_button_2: '{{ ''BUTTON_2_'' ~ context.id }}' action_button_3: '{{ ''BUTTON_3_'' ~ context.id }}' action_button_stop: '{{ ''BUTTON_STOP_'' ~ context.id }}' end_message_data: "{% set message = namespace(data={}) %} {% if end_notify_interruption_level in ['active', 'critical', 'time-sensitive', 'passive'] %}\n {% set message.data = dict(message.data, **{ 'push': {'interruption-level': end_notify_interruption_level }}) %}\n{% endif %} {% if 'high_priority' in end_notify_data %}\n {% set message.data = dict(message.data, **{ 'ttl': 0, 'priority': 'high' }) %}\n{% endif %} {% if 'channel' in end_notify_data %}\n {% set message.data = dict(message.data, **{ 'channel': end_notify_channel }) %}\n{% endif %} {% if 'sticky' in end_notify_data %}\n {% set message.data = dict(message.data, **{ 'sticky': \"true\" }) %}\n{% endif %} {{ message.data }}" end_message_data_action_button: "{% set message = namespace(data={}) %} {% set actions = [] %} {% if end_notify_interruption_level in ['active', 'critical', 'time-sensitive', 'passive'] %}\n {% set message.data = dict(message.data, **{ 'push': {'interruption-level': end_notify_interruption_level }}) %}\n{% endif %} {% if 'high_priority' in end_notify_data %}\n \ {% set message.data = dict(message.data, **{ 'ttl': 0, 'priority': 'high' }) %}\n{% endif %} {% if 'channel' in end_notify_data %}\n \ {% set message.data = dict(message.data, **{ 'channel': end_notify_channel }) %}\n{% endif %} {% if 'sticky' in end_notify_data %}\n {% set message.data = dict(message.data, **{ 'sticky': \"true\" }) %}\n{% endif %} {% if 'enable_end_action_button_1' in include_end_action_buttons %}\n {% set actions = actions + [{ 'action': action_button_1, 'title': end_action_button_1 }] %}\n{% endif %} {% if 'enable_end_action_button_2' in include_end_action_buttons %}\n {% set actions = actions + [{ 'action': action_button_2, 'title': end_action_button_2 }] %}\n{% endif %} {% if 'enable_end_action_button_3' in include_end_action_buttons %}\n {% set actions = actions + [{ 'action': action_button_3, 'title': end_action_button_3 }] %}\n{% endif %} {% if ('enable_end_action_button_1' in include_end_action_buttons) or \n ('enable_end_action_button_2' in include_end_action_buttons) or \n ('enable_end_action_button_3' in include_end_action_buttons) %}\n {% set actions = actions + [{ 'action': action_button_stop, 'title': end_action_button_stop }] %}\n{% endif %} {% if actions | length > 0 %}\n {% set message.data = dict(message.data, **{ 'actions': actions }) %}\n{% endif %} {{ message.data }}" - alias: Send a notification to each device repeat: for_each: !input end_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input end_title message: !input end_message data: '{{ end_message_data_action_button }}' - choose: - alias: Check if any start action buttons are enabled conditions: - condition: template value_template: '{{ (''enable_end_action_button_1'' in include_end_action_buttons) or (''enable_end_action_button_2'' in include_end_action_buttons) or (''enable_end_action_button_3'' in include_end_action_buttons) }}' sequence: - alias: Wait for a response from the action button wait_for_trigger: - platform: event event_type: mobile_app_notification_action event_data: action: '{{ action_button_1 }}' - platform: event event_type: mobile_app_notification_action event_data: action: '{{ action_button_2 }}' - platform: event event_type: mobile_app_notification_action event_data: action: '{{ action_button_3 }}' - platform: event event_type: mobile_app_notification_action event_data: action: '{{ action_button_stop }}' timeout: !input end_time_delay - choose: - alias: Check if confirmation message is enabled conditions: - condition: template value_template: '{{ ''enable_end_action_button_confirmation'' in include_end_action_button_confirmation }}' sequence: - if: - alias: Confirmation from the actions buttons condition: template value_template: '{{ wait.trigger.idx is defined }}' then: - choose: - alias: Check if action button 1 is pressed conditions: - condition: template value_template: '{{ action_button_1 in wait.trigger.event.data.action }}' sequence: - alias: Send a notification to each device repeat: for_each: !input end_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input end_action_button_confirmation_title message: !input end_action_button_confirmation_message data: '{{ end_message_data }}' - alias: Check if action button 2 is pressed conditions: - condition: template value_template: '{{ action_button_2 in wait.trigger.event.data.action }}' sequence: - alias: Send a notification to each device repeat: for_each: !input end_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input end_action_button_confirmation_title message: !input end_action_button_2_confirmation_message data: '{{ end_message_data }}' - alias: Check if action button 3 is pressed conditions: - condition: template value_template: '{{ action_button_3 in wait.trigger.event.data.action }}' sequence: - alias: Send a notification to each device repeat: for_each: !input end_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input end_action_button_confirmation_title message: !input end_action_button_3_confirmation_message data: '{{ end_message_data }}' - alias: Check if action stop button is pressed conditions: - condition: template value_template: '{{ action_button_stop in wait.trigger.event.data.action }}' sequence: - alias: Send a notification to each device repeat: for_each: !input end_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input end_action_button_confirmation_title message: !input end_action_button_stop_confirmation_message data: '{{ end_message_data }}' - alias: Perform the action button selected action choose: - conditions: '{{ action_button_1 in wait.trigger.event.data.action }}' sequence: !input end_action_1 - conditions: '{{ action_button_2 in wait.trigger.event.data.action }}' sequence: !input end_action_2 - conditions: '{{ action_button_3 in wait.trigger.event.data.action }}' sequence: !input end_action_3 - conditions: '{{ action_button_stop in wait.trigger.event.data.action }}' sequence: - stop: Stop the automation else: - alias: Send a notification to each device repeat: for_each: !input end_notify_device sequence: - service: notify.mobile_app_{{ device_attr(repeat.item, 'name') | slugify }} data: title: !input end_action_button_confirmation_title message: !input end_time_delay_confirmation_message data: '{{ end_message_data }}' - alias: Check if confirmation message is disabled conditions: - condition: template value_template: '{{ ''disable_end_action_button_confirmation'' in include_end_action_button_confirmation }}' sequence: - if: - alias: Perform the action button selected action condition: template value_template: '{{ wait.trigger.idx is defined }}' then: - alias: Perform the action choose: - conditions: '{{ action_button_1 in wait.trigger.event.data.action }}' sequence: !input end_action_1 - conditions: '{{ action_button_2 in wait.trigger.event.data.action }}' sequence: !input end_action_2 - conditions: '{{ action_button_3 in wait.trigger.event.data.action }}' sequence: !input end_action_3 - conditions: '{{ action_button_stop in wait.trigger.event.data.action }}' sequence: - stop: Stop the automation - choose: - alias: Check if auto action 1 is enabled conditions: - condition: template value_template: '{{ ''enable_end_action_1'' in include_end_auto_actions }}' sequence: !input end_action_1 - choose: - alias: Check if auto action 2 is enabled conditions: - condition: template value_template: '{{ ''enable_end_action_2'' in include_end_auto_actions }}' sequence: !input end_action_2 - choose: - alias: Check if auto action 3 is enabled conditions: - condition: template value_template: '{{ ''enable_end_action_3'' in include_end_auto_actions }}' sequence: !input end_action_3