diff --git a/fan-management.yaml b/fan-management.yaml index 5601dd2..615a253 100644 --- a/fan-management.yaml +++ b/fan-management.yaml @@ -1,107 +1,77 @@ blueprint: - name: Bathroom Fan Controller + name: Bathroom Fan Manager description: > - Turns on the fan when any bathroom light is on (after a delay), keeps it on - after all lights are off for a specified time, and also runs the fan on a - regular cadence (e.g., every hour for 5 minutes). + Turns fan on with bathroom lights (after optional delay), keeps it on while any light is on, and turns it off after all lights are off and a timeout. domain: automation input: - fan_entity: - name: Bathroom Fan - description: The fan to control + fan: + name: Fan Entity selector: entity: domain: fan - bathroom_lights: - name: Bathroom Lights - description: One or more lights in the bathroom + + lights: + name: Bathroom Light Entities selector: entity: domain: light multiple: true - delay_after_light_on: - name: Delay After Light On - description: Delay before turning on the fan once any light is turned on + + delay_before_fan_on: + name: Delay Before Turning Fan On + description: Time to wait after any light turns on before turning on the fan. default: 0 selector: - duration: - time_fan_stays_on_after_lights_off: - name: Duration Fan Stays On After Lights Off - description: How long the fan should stay on after all lights are off - default: 00:05:00 - selector: - duration: - cadence_enabled: - name: Enable Cadence Mode - description: Enable periodic fan activation - default: true - selector: - boolean: - cadence_interval: - name: Cadence Interval - description: Time between fan activations - default: 01:00:00 - selector: - duration: - cadence_duration: - name: Cadence Duration - description: How long the fan stays on during each cadence - default: 00:05:00 - selector: - duration: + number: + min: 0 + max: 300 + unit_of_measurement: seconds -mode: parallel -max: 5 + time_fan_stays_on_after_lights_off: + name: Time Fan Stays On After All Lights Are Off + description: Time to keep the fan running after all lights are off. + default: 300 + selector: + number: + min: 0 + max: 3600 + unit_of_measurement: seconds + +mode: restart trigger: - platform: state - entity_id: !input bathroom_lights - from: 'off' - to: 'on' + entity_id: !input lights + to: + - "on" + - "off" - - platform: template - value_template: > - {{ expand(inputs.bathroom_lights) | selectattr('state','eq','on') | list | count == 0 }} - - - platform: time_pattern - minutes: "/5" - -condition: [] +variables: + fan_entity: !input fan + lights: !input lights action: - choose: - # When any light turns on, start fan after delay - conditions: - condition: template value_template: > - {{ trigger.platform == 'state' and trigger.to_state.state == 'on' }} + {{ expand(lights) | selectattr('state', 'eq', 'on') | list | count > 0 }} sequence: - - delay: !input delay_after_light_on + - delay: + seconds: !input delay_before_fan_on - service: fan.turn_on target: - entity_id: !input fan_entity - - # When all lights are off, delay then turn off fan + entity_id: "{{ fan_entity }}" - conditions: - condition: template value_template: > - {{ expand(inputs.bathroom_lights) | selectattr('state','eq','on') | list | count == 0 }} + {{ expand(lights) | selectattr('state', 'eq', 'on') | list | count == 0 }} sequence: - - delay: !input time_fan_stays_on_after_lights_off - - service: fan.turn_off - target: - entity_id: !input fan_entity - - # Cadence mode - - conditions: + - delay: + seconds: !input time_fan_stays_on_after_lights_off - condition: template value_template: > - {{ trigger.platform == 'time_pattern' and cadence_enabled }} - sequence: - - service: fan.turn_on - target: - entity_id: !input fan_entity - - delay: !input cadence_duration + {{ expand(lights) | selectattr('state', 'eq', 'on') | list | count == 0 }} - service: fan.turn_off target: - entity_id: !input fan_entity + entity_id: "{{ fan_entity }}"