blueprint: name: Open Windows/Doors Notification description: Notify when windows or doors are open based on weather or temperature thresholds. domain: automation input: openings: name: Windows & Doors selector: entity: domain: binary_sensor multiple: true weather_sensor: name: Weather Sensor selector: entity: domain: weather weather_trigger_states: name: Weather Trigger States (comma-separated) default: storm, rain selector: text: multiline: true temperature_sensor: name: Temperature Sensor selector: entity: domain: - sensor - weather device_class: temperature temp_above: name: Notify if Temperature Above default: 22 selector: number: min: -50 max: 50 unit_of_measurement: °C temp_below: name: Notify if Temperature Below default: 17 selector: number: min: -50 max: 50 unit_of_measurement: °C notify_service: name: Notification Service description: Enter the notify service (e.g., notify.mobile_app_myphone, notify.alexa_media_livingroom) default: notify.notify selector: text: {} custom_message: name: Custom Message Template default: "{{ entity_name }} is open! Trigger: {{ trigger_state }}" selector: text: {} trigger: - platform: state entity_id: !input weather_sensor to: !input weather_trigger_states - platform: numeric_state entity_id: !input temperature_sensor above: !input temp_above - platform: numeric_state entity_id: !input temperature_sensor below: !input temp_below condition: - condition: state entity_id: !input openings state: 'on' action: - variables: open_entities: > {{ states | selectattr('entity_id','in', !input openings) | selectattr('state','eq','on') | map(attribute='attributes.friendly_name') | list }} trigger_state: > {% if trigger.platform in ['numeric_state','state'] %} {{ trigger.to_state.state }} {% else %} unknown {% endif %} - service: "{{ !input notify_service }}" data: message: > {% for entity_name in open_entities %} {{ !input custom_message | replace('{{ entity_name }}', entity_name) | replace('{{ trigger_state }}', trigger_state) }} {% endfor %}