another attempt at fixing fan management
This commit is contained in:
		@@ -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 }}"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user