diff --git a/blueprints/automation/wd-close-weather-notification.yaml b/blueprints/automation/wd-close-weather-notification.yaml index e94f007..f4152a5 100644 --- a/blueprints/automation/wd-close-weather-notification.yaml +++ b/blueprints/automation/wd-close-weather-notification.yaml @@ -1,59 +1,106 @@ blueprint: - name: Open Windows/Doors Monitor - description: Monitors selected windows/doors and lists the ones that are open. + name: Open Windows/Doors Notification + description: Notify when windows or doors are open based on weather state or temperature thresholds. domain: automation input: - opening_sensors: - name: Window/Door Sensors - description: Select the sensors to monitor + openings: + name: Windows & Doors + description: Select windows and doors to monitor selector: entity: domain: binary_sensor multiple: true - notify_services: - name: Notification Services - description: Enter notify services separated by commas, e.g. notify.mobile_app_phone,notify.telegram - default: notify.notify + 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 opening_sensors + 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: - open_sensors: > - {% set devices = [] %} - {% for sensor in opening_sensors %} - {% if is_state(sensor, 'on') or is_state(sensor, 'open') %} - {% set _ = devices.append(states[sensor].name) %} - {% endif %} - {% endfor %} - notify_list: > - {% set services = !input notify_services | replace(' ', '') | split(',') %} - {{ services }} + 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 %} - - choose: - - conditions: "{{ open_sensors | length > 0 }}" - sequence: - - repeat: - count: "{{ notify_list | length }}" - sequence: - - service: "{{ notify_list[repeat.index0] }}" - data: - title: "Open Windows/Doors" - message: > - The following windows/doors are open: - {% for d in open_sensors %} - - {{ d }} - {% endfor %} - - conditions: "{{ open_sensors | length == 0 }}" - sequence: - - repeat: - count: "{{ notify_list | length }}" - sequence: - - service: "{{ notify_list[repeat.index0] }}" - data: - title: "Window/Door Status" - message: "All selected windows/doors are closed." + - 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 %} \ No newline at end of file