Actionable Notifications with binary Sensors

blueprint:
  name: Send actionable notifications for Android
  description: |
    Send actionable notifications to an Android device
    For each action, you can open an URL, an application on the device or load a lovelace view/dashboard.
    If you plan to use a lovelace view the format would be /lovelace/test where test is replaced by your defined path in the defined view.
    If you plan to use a lovelace dashboard the format would be /lovelace-dashboard/view where /lovelace-dashboard/ is replaced by your defined dashboard URL
    and view is replaced by the defined path within that dashboard.
    To pick the application to open, prefix app:// to the the package name.
    If the device does not have the application installed then the Home Assistant application will open to the default page.
    If you define an action and an URI for a button, URI will take precedence over action.
  domain: automation
  input:
    notify_device:
      name: Device to notify
      description: Device needs to run the official Home Assistant app to receive notifications
      selector:
        device:
          integration: mobile_app

    trigger_entity:
      name: Trigger entity
      description: Send the notification when this boolean turns on
      selector:
        entity:
          domain: binary_sensor

    notification_title:
      name: Notification title (Optional)
      description: The title of the notification
      default: ""

    notification_message:
      name: Notification message (Optional)
      description: The message of the notification
      default: ""
    
    persistent_notification:
      name: Create persistent notification?
      description: Persistent notifications cannot be dimissed by swiping away
      default: false
      selector:
        boolean:

# Action 1

    action_1_title:
      name: First action name
      description: Name of the first button
      default: ""
      
    action_1_uri:
      name: URI for action 1 (Optional)
      description: Optional URI for the first action
      default: ""

    first_action:
      name: Action 1
      description: "Action to run when the first action is clicked"
      default: []
      selector:
        action:

# Action 2

    action_2_title:
      name: Second action name
      description: Name of the second button
      default: ""

    action_2_uri:
      name: URI for action 1 (Optional)
      description: Optional URI for the second action
      default: ""

    second_action:
      name: Action 2
      description: Action to run when the second action is clicked"
      default: []
      selector:
        action:

# Action 3
    
    action_3_title:
      name: Third action name
      description: Name of the third button
      default: ""
      
    action_3_uri:
      name: URI for action 3 (Optional)
      description: Optional URI for the third action
      default: ""

    third_action:
      name: Action 3
      description: "Action to run when the third action is clicked"
      default: []
      selector:
        action:

mode: restart
max_exceeded: silent

variables:
  notify_device: !input notify_device
  trigger_entity: !input trigger_entity
  notification_title: !input notification_title
  notification_message: !input notification_message
  persistent_notification: !input persistent_notification
  action_1_title: !input action_1_title
  action_1_uri: !input action_1_uri
  first_action: !input first_action
  action_2_title: !input action_2_title
  action_2_uri: !input action_2_uri
  second_action: !input second_action
  action_3_title: !input action_3_title
  action_3_uri: !input action_3_uri
  third_action: !input third_action

trigger:
  platform: state
  entity_id: !input trigger_entity
  from: "off"
  to: "on"

action:
  # Reset trigger entity
  - service: input_boolean.turn_off
    entity_id: !input trigger_entity

  # Send actionable notification
  - domain: mobile_app
    type: notify
    device_id: !input notify_device
    title: "{{ notification_title }}"
    message: "{{ notification_message }}"
    data:
      tag: "{{ notification_title }}"
      persistent: "{{ persistent_notification }}"
      actions: >
        {% set titles = [action_1_title, action_2_title, action_3_title] %}
        {% set uris = [action_1_uri, action_2_uri, action_3_uri] %}
        {% set actions = namespace(data = []) %}

        {% for title in titles %}
          {% if title|length %}
            {% set uri = uris[loop.index - 1] %}
            {% set action_name = "action" + loop.index|string %}
            {% set action = {
              "action": "URI" if uri|length else action_name,
              "title": title,
              "uri": uri 
              }
            %}
            {% set actions.data = actions.data + [action] %}
          {% endif %}
        {% endfor %}
        {{ actions.data }}

  # Wait for the user to select an action
  - wait_for_trigger:
      platform: event
      event_type: mobile_app_notification_action

  # Do the action that the user selected
  - choose:
    - conditions: "{{ wait.trigger.event.data.action == 'action1' }}"
      sequence: !input first_action
    - conditions: "{{ wait.trigger.event.data.action == 'action2' }}"
      sequence: !input second_action
    - conditions: "{{ wait.trigger.event.data.action == 'action3' }}"
      sequence: !input third_action
4 Likes