blueprint: name: Open Windows/Doors Notification description: Notify when windows or doors are open based on weather state or temperature thresholds. domain: automation input: openings: name: Windows & Doors description: Select windows and doors to monitor selector: entity: domain: binary_sensor multiple: true weather_sensor: name: Weather Sensor description: Optional weather entity to trigger notification selector: entity: domain: weather weather_trigger_states: name: Weather Trigger States description: Select weather states that should trigger notification default: - storm - rain selector: text: multiline: true temperature_sensor: name: Temperature Sensor description: Optional temperature entity to trigger notification selector: entity: domain: - sensor - weather device_class: temperature temp_above: name: Notify if Temperature Above description: Optional threshold to trigger notification default: 22 selector: number: min: -50 max: 50 unit_of_measurement: °C temp_below: name: Notify if Temperature Below description: Optional threshold to trigger notification default: 17 selector: number: min: -50 max: 50 unit_of_measurement: °C notify_target: name: Notification Target selector: target: {} custom_message: name: Custom Notification Message default: "{{ entity_name }} is open! Trigger: {{ trigger_state }}" selector: text: {} trigger: - platform: state entity_id: !input weather_sensor to: "{{ !input weather_trigger_states.split(',') | map('trim') | list }}" - 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: selected_openings: !input openings selected_temp_sensor: !input temperature_sensor selected_weather: !input weather_sensor selected_notify_target: !input notify_target selected_custom_message: !input custom_message open_entities: > {{ states | selectattr('entity_id','in',selected_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: notify.notify data: target: "{{ selected_notify_target }}" message: > {% for entity_name in open_entities %} {{ selected_custom_message | replace('{{ entity_name }}', entity_name) | replace('{{ trigger_state }}', trigger_state) }} {% endfor %}