From a5142410deee0e755a713cf615c3c8d7556d940e Mon Sep 17 00:00:00 2001 From: Pavel Kachalouski Date: Sat, 20 May 2023 12:24:11 +0200 Subject: [PATCH] Added 3 automations: motion, dimmer and dial --- motion_activated_entity.yaml | 186 +++++++++++++++++++ philips_zigbee_dial.yaml | 181 +++++++++++++++++++ philips_zigbee_dimmer.yaml | 337 +++++++++++++++++++++++++++++++++++ 3 files changed, 704 insertions(+) create mode 100644 motion_activated_entity.yaml create mode 100644 philips_zigbee_dial.yaml create mode 100644 philips_zigbee_dimmer.yaml diff --git a/motion_activated_entity.yaml b/motion_activated_entity.yaml new file mode 100644 index 0000000..49ac7e8 --- /dev/null +++ b/motion_activated_entity.yaml @@ -0,0 +1,186 @@ +blueprint: + name: Turn on based on motion + description: + "Turn on a light, switch, scene, script or group based on motion detection,\ + \ and low light level.\n\ + \nRequired entities:\n - Motion sensor (single sensor or group)\n - Target entity\ + \ (light, switch, scene or script)\n\n\nOptional features:\n- You can set a cutoff\ + \ entity of which the value determines whether the illuminance level is low and\ + \ the automation needs to trigger. \n- You can define a blocking entity, which blocks\ + \ the automation from running when this entity's state is on. \n- You van define\ + \ a turn-off blocking entity, which blocks the entity from turning off after the\ + \ set delay. \n- Time limits can also be defined to limit the time before and after\ + \ the automation should trigger. \n- If you want the entity to turn off after a\ + \ certain amount of seconds, you can use the Wait Time input. \n- If you want another\ + \ entity than the target_entity to turn off after the delay, you can define a\ + \ separate Turn-off entity. \n- If you do not enable the optional entities the automation\ + \ will skip these conditions." + domain: automation + input: + motion_sensor: + name: Motion Sensor + description: This sensor will trigger the turning on of the target entity. + selector: + entity: + domain: binary_sensor + target_entity: + name: Target entity. + description: + The light, switch, scene to turn on (or script to run) when the + automation is triggered. + selector: + entity: {} + no_motion_wait: + name: Turn off wait time (seconds) + description: + Time in seconds to leave the target entity on after last motion + is detected. + default: 0 + selector: + number: + min: 0 + max: 600 + unit_of_measurement: seconds + illuminance_sensor: + name: (OPTIONAL) Illuminance sensor + description: This sensor will be used to determine the illumination. + default: + selector: + entity: + domain: sensor + device_class: illuminance + illuminance_cutoff: + name: (OPTIONAL) Illuminance cutoff value + description: + This input_number will be used to compare to the current illumination + to determine if it is low. + default: + selector: + number: + min: 0 + max: 100 + unit_of_measurement: lx + blocker_entity: + name: (OPTIONAL) Blocking entity + description: + If this entity's state is on, it will prevent the automation from + running. E.g. sleepmode or away mode. + default: + selector: + entity: {} + time_limit_after: + name: (OPTIONAL) Only run after time. + description: + Automation will only run when time is later than this input_datetime + value. + default: + selector: + entity: + domain: input_datetime + time_limit_before: + name: (OPTIONAL) Only run before time. + description: + Automation will only run when time is earlier than this input_datetime + value. + default: + selector: + entity: + domain: input_datetime + turn_off_blocker_entity: + name: (OPTIONAL) Turn-off Blocking entity + description: + If this entity's state is on, it will prevent the target entity + from turning off after the set delay. + default: + selector: + entity: {} + target_off_entity: + name: (OPTIONAL) Turn-off entity + description: + If defined, this entity will be turned off instead of the default + target entity. This can be helpful when using target entities of type scene + or script. + You cannot use Turn-off entity and Turn-off action, only one or the other. If both are defined, Turn-off entity will be used. + default: + selector: + entity: {} + target_off_action: + name: (OPTIONAL) Turn-off action + description: + If defined, this action will be run instead of the turning off the default target entity. This can be helpful when using taget entities of type scene or script. + You cannot use Turn-off entity and Turn-off action, only one or the other. If both are defined, Turn-off entity will be used. + default: + selector: + action: {} + source_url: https://github.com/apollo1220/blueprints/blob/main/motion_activated_entity.yaml +mode: restart +max_exceeded: silent +variables: + target_entity: !input "target_entity" + illuminance_currently: !input "illuminance_sensor" + illuminance_cutoff: !input "illuminance_cutoff" + blocker_entity: !input "blocker_entity" + time_limit_before: !input "time_limit_before" + time_limit_after: !input "time_limit_after" + no_motion_wait: !input "no_motion_wait" + turn_off_blocker_entity: !input "turn_off_blocker_entity" + target_off_entity: !input "target_off_entity" + target_off_action: !input "target_off_action" +trigger: + platform: state + entity_id: !input "motion_sensor" + to: "on" +condition: + - condition: template + value_template: + "{{ (states(target_entity) == 'on') or (illuminance_currently + == none) or (illuminance_cutoff == none) or (states[illuminance_currently].state + | int < illuminance_cutoff | int) }}" + - condition: template + value_template: + "{{ (blocker_entity == none) or (states[blocker_entity].state == + 'off') }}" + - condition: template + value_template: '{% set current_time = now().strftime("%H:%M") %} + + {% if time_limit_before != none and time_limit_after == none %} {{ states[time_limit_before].state + > current_time }} {% elif time_limit_before == none and time_limit_after != none + %} {{ states[time_limit_after].state < current_time }} {% elif time_limit_before + != none and time_limit_after != none %} {% set before_limit_is_on_next_day = states[time_limit_after].state + > states[time_limit_before].state %} {% if not before_limit_is_on_next_day %} {{ (states[time_limit_after].state + < current_time) and (states[time_limit_before].state > current_time) }} {% elif + before_limit_is_on_next_day %} {{ (states[time_limit_before].state > current_time) + or (states[time_limit_after].state < current_time) }} {% endif %} {% else %} true + {% endif %} + + ' +action: + - service: homeassistant.turn_on + entity_id: !input "target_entity" + - condition: template + value_template: "{{ no_motion_wait != none }}" + - wait_for_trigger: + platform: state + entity_id: !input "motion_sensor" + from: "on" + to: "off" + - delay: + seconds: "{{ no_motion_wait | int }}" + - condition: template + value_template: + "{{ (turn_off_blocker_entity == none) or (states[turn_off_blocker_entity].state + == 'off') }}" + - choose: + - conditions: + - condition: template + value_template: "{{ (target_off_entity != none) }}" + sequence: + - service: homeassistant.turn_off + entity_id: !input "target_off_entity" + - conditions: + - condition: template + value_template: "{{ (target_off_action != none) }}" + sequence: !input "target_off_action" + default: + - service: homeassistant.turn_off + entity_id: !input "target_entity" diff --git a/philips_zigbee_dial.yaml b/philips_zigbee_dial.yaml new file mode 100644 index 0000000..1e3aebb --- /dev/null +++ b/philips_zigbee_dial.yaml @@ -0,0 +1,181 @@ +blueprint: + name: Philips Tap Dial Switch + description: "Control lights with a Philips Hue Tap Switch. + Use the four buttons to control up to four light(s) with an on/off toggle. The dial can be used to dim the most recently used light. + " + domain: automation + input: + remote: + name: Philips Hue Tap Switch + selector: + device: + integration: zha + manufacturer: Signify Netherlands B.V. + model: RDM002 + first_light: + name: First Light + description: The light(s) to control with first button + selector: + target: + entity: {} + second_light: + name: (OPTIONAL) Second Light + description: The light(s) to control with second button + default: {} + selector: + target: + entity: {} + third_light: + name: (OPTIONAL) Third Light + description: The light(s) to control with third button + default: {} + selector: + target: + entity: {} + forth_light: + name: (OPTIONAL) Forth Light + description: The light(s) to control with forth button + default: {} + selector: + target: + entity: {} + current_light: + name: (OPTIONAL) Current Light + description: "Text helper to track the current light to dim. Set for the dimmer controls to change which light they are controlling according to the last one turned on." + default: + selector: + entity: + domain: input_text + dim_scale: + name: Diming Scale + description: Scale factor for the dimming. This value will be multiplied by the value given from the dial. So lower number, more gradual dimming. Larger number, faster dimming. + default: 1.0 + selector: + number: + min: 0.0 + max: 5.0 + step: 0.01 + source_url: https://github.com/apollo1220/blueprints/blob/main/philips_zigbee_dial.yaml +mode: restart +max_exceeded: silent +variables: + first_light: !input "first_light" + second_light: !input "second_light" + third_light: !input "third_light" + forth_light: !input "forth_light" + current_light: !input "current_light" + dim_scale: !input "dim_scale" + lights: + first_light: !input "first_light" + second_light: !input "second_light" + third_light: !input "third_light" + forth_light: !input "forth_light" +trigger: + - platform: event + event_type: zha_event + event_data: + device_id: !input "remote" +action: + - variables: + command: "{{ trigger.event.data.command }}" + args: "{{ trigger.event.data.args }}" + params: "{{ trigger.event.data.params }}" + scene: "{{ trigger.event.data.params.scene_id }}" + step_mode: "{{ trigger.event.data.params.step_mode }}" + step_size: "{{ trigger.event.data.params.step_size }}" + - choose: + - conditions: + - "{{ command == 'recall' }}" + - "{{ scene == 1 }}" + sequence: + - service: homeassistant.toggle + target: !input "first_light" + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: input_text.set_value + target: + entity_id: !input "current_light" + data: + value: first_light + - conditions: + - "{{ command == 'recall' }}" + - "{{ second_light != none }}" + - "{{ scene == 0 }}" + sequence: + - service: homeassistant.toggle + target: !input "second_light" + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: input_text.set_value + target: + entity_id: !input "current_light" + data: + value: second_light + - conditions: + - "{{ command == 'recall' }}" + - "{{ third_light != none }}" + - "{{ scene == 5 }}" + sequence: + - service: homeassistant.toggle + target: !input "third_light" + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: input_text.set_value + target: + entity_id: !input "current_light" + data: + value: third_light + - conditions: + - "{{ command == 'recall' }}" + - "{{ forth_light != none }}" + - "{{ scene == 4 }}" + sequence: + - service: homeassistant.toggle + target: !input "forth_light" + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: input_text.set_value + target: + entity_id: !input "current_light" + data: + value: forth_light + - conditions: + - "{{ command == 'step_with_on_off' }}" + - "{{ step_mode == 'StepMode.Up' }}" + sequence: + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: light.turn_on + target: "{{ lights[states(current_light)] }}" + data: + brightness_step_pct: "{{ step_size * dim_scale }}" + transition: 1 + default: + - service: light.turn_on + target: !input "first_light" + data: + brightness_step_pct: "{{ step_size * dim_scale }}" + transition: 1 + - conditions: + - "{{ command == 'step_with_on_off' }}" + - "{{ step_mode == 'StepMode.Down' }}" + sequence: + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: light.turn_on + target: "{{ lights[states(current_light)] }}" + data: + brightness_step_pct: "{{ -step_size * dim_scale }}" + transition: 1 + default: + - service: light.turn_on + target: !input "first_light" + data: + brightness_step_pct: "{{ -step_size * dim_scale }}" + transition: 1 diff --git a/philips_zigbee_dimmer.yaml b/philips_zigbee_dimmer.yaml new file mode 100644 index 0000000..2f8048f --- /dev/null +++ b/philips_zigbee_dimmer.yaml @@ -0,0 +1,337 @@ +blueprint: + name: Philips Dimmer Remote + description: 'Control lights with a Philips Hue Dimmer Switch. + + + The top "on" button will turn the lights on to the last set brightness + + (unless the force brightness is toggled on in the blueprint). + + + Dim up/down buttons will change the brightness smoothly and can be pressed + + and hold until the brightness is satisfactory. + + + The bottom "off" button will turn the lights off. + + If defined it will optionally control up to 5 different sets of lights using the double through quintuple press options. Whichever light was turned on last will be controlled by the dimmer buttons. + + ' + domain: automation + input: + remote: + name: Philips Hue Dimmer Switch + description: Pick either RWL020 (US) or RWL021 (EU) + selector: + device: + integration: zha + manufacturer: Philips + model: RWL020 + single_light: + name: Single Press Light + description: The light(s) to control with single press + selector: + target: + entity: {} + double_light: + name: (OPTIONAL) Double Press Light + description: The light(s) to control with double press (can also use switches) + default: {} + selector: + target: + entity: {} + triple_light: + name: (OPTIONAL) Triple Press Light + description: The light(s) to control with triple press (can also use switches) + default: {} + selector: + target: + entity: {} + quadruple_light: + name: (OPTIONAL) Quadruple Press Light + description: The light(s) to control with quadruple press (can also use switches) + default: {} + selector: + target: + entity: {} + quintuple_light: + name: (OPTIONAL) Quintuple Press Light + description: The light(s) to control with quintuple press (can also use switches) + default: {} + selector: + target: + entity: {} + force_brightness: + name: Force turn on brightness + description: + 'Force the brightness to the set level below, when the "on" button + on the remote is pushed and lights turn on.' + default: false + selector: + boolean: {} + brightness: + name: Brightness + description: Brightness of the light(s) when turning on + default: 100 + selector: + number: + min: 0.0 + max: 100.0 + mode: slider + step: 1.0 + unit_of_measurement: "%" + current_light: + name: (OPTIONAL) Current Light + description: + 'Text helper to track the current light to dim. Set for the dimmer controls to change which light they are controlling according to the last one turned on. + For instance, double press "on" and then the dimmer buttons will control the Double Press Light' + default: + selector: + entity: + domain: input_text + source_url: https://github.com/apollo1220/blueprints/blob/main/philips_zigbee_remote.yaml +mode: restart +max_exceeded: silent +variables: + double_light: !input "double_light" + triple_light: !input "triple_light" + quadruple_light: !input "quadruple_light" + quintuple_light: !input "quintuple_light" + force_brightness: !input "force_brightness" + current_light: !input "current_light" + lights: + single_light: !input "single_light" + double_light: !input "double_light" + triple_light: !input "triple_light" + quadruple_light: !input "quadruple_light" + quintuple_light: !input "quintuple_light" +trigger: + - platform: event + event_type: zha_event + event_data: + device_id: !input "remote" +action: + - variables: + command: "{{ trigger.event.data.command }}" + cluster_id: "{{ trigger.event.data.cluster_id }}" + endpoint_id: "{{ trigger.event.data.endpoint_id }}" + args: "{{ trigger.event.data.args }}" + - choose: + - conditions: + - "{{ command == 'on_press' }}" + sequence: + - choose: + - conditions: "{{ force_brightness }}" + sequence: + - service: homeassistant.turn_on + target: !input "single_light" + data: + transition: 1 + brightness_pct: !input "brightness" + default: + - service: homeassistant.turn_on + target: !input "single_light" + data: + transition: 1 + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: input_text.set_value + target: + entity_id: !input "current_light" + data: + value: single_light + - conditions: + - "{{ command == 'on_double_press' }}" + - "{{ double_light != none }}" + sequence: + - service: homeassistant.turn_on + target: !input "double_light" + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: input_text.set_value + target: + entity_id: !input "current_light" + data: + value: double_light + - conditions: + - "{{ command == 'on_triple_press' }}" + - "{{ triple_light != none }}" + sequence: + - service: homeassistant.turn_on + target: !input "triple_light" + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: input_text.set_value + target: + entity_id: !input "current_light" + data: + value: triple_light + - conditions: + - "{{ command == 'on_quadruple_press' }}" + - "{{ quadruple_light != none }}" + sequence: + - service: homeassistant.turn_on + target: !input "quadruple_light" + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: input_text.set_value + target: + entity_id: !input "current_light" + data: + value: quadruple_light + - conditions: + - "{{ command == 'on_quintuple_press' }}" + - "{{ quintuple_light != none }}" + sequence: + - service: homeassistant.turn_on + target: !input "quintuple_light" + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: input_text.set_value + target: + entity_id: !input "current_light" + data: + value: quintuple_light + - conditions: + - "{{ command == 'off_press' }}" + sequence: + - service: homeassistant.turn_off + target: !input "single_light" + data: + transition: 1 + - conditions: + - "{{ command == 'off_double_press' }}" + - "{{ double_light != none }}" + sequence: + - service: homeassistant.turn_off + target: !input "double_light" + - conditions: + - "{{ command == 'off_triple_press' }}" + - "{{ triple_light != none }}" + sequence: + - service: homeassistant.turn_off + target: !input "triple_light" + - conditions: + - "{{ command == 'off_quadruple_press' }}" + - "{{ quadruple_light != none }}" + sequence: + - service: homeassistant.turn_off + target: !input "quadruple_light" + - conditions: + - "{{ command == 'off_quintuple_press' }}" + - "{{ quintuple_light != none }}" + sequence: + - service: homeassistant.turn_off + target: !input "quintuple_light" + - conditions: + - "{{ command == 'step' }}" + - "{{ args == [0, 30, 9] }}" + sequence: + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: light.turn_on + target: "{{ lights[states(current_light)] }}" + data: + brightness_step_pct: 10 + transition: 1 + default: + - service: light.turn_on + target: !input "single_light" + data: + brightness_step_pct: 10 + transition: 1 + - conditions: + - "{{ command == 'step' }}" + - "{{ args == [0, 56, 9] }}" + sequence: + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: light.turn_on + target: "{{ lights[states(current_light)] }}" + data: + brightness_step_pct: 25 + transition: 1 + default: + - service: light.turn_on + target: !input "single_light" + data: + brightness_step_pct: 25 + transition: 1 + - conditions: + - "{{ command == 'up_press' }}" + sequence: + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: light.turn_on + target: "{{ lights[states(current_light)] }}" + data: + brightness_step_pct: 10 + transition: 1 + default: + - service: light.turn_on + target: !input "single_light" + data: + brightness_step_pct: 10 + transition: 1 + - conditions: + - "{{ command == 'step' }}" + - "{{ args == [1, 30, 9] }}" + sequence: + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: light.turn_on + target: "{{ lights[states(current_light)] }}" + data: + brightness_step_pct: -10 + transition: 1 + default: + - service: light.turn_on + target: !input "single_light" + data: + brightness_step_pct: -10 + transition: 1 + - conditions: + - "{{ command == 'step' }}" + - "{{ args == [1, 56, 9] }}" + sequence: + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: light.turn_on + target: "{{ lights[states(current_light)] }}" + data: + brightness_step_pct: -25 + transition: 1 + default: + - service: light.turn_on + target: !input "single_light" + data: + brightness_step_pct: -25 + transition: 1 + - conditions: + - "{{ command == 'down_press' }}" + sequence: + - choose: + - conditions: "{{ current_light != none }}" + sequence: + - service: light.turn_on + target: "{{ lights[states(current_light)] }}" + data: + brightness_step_pct: -10 + transition: 1 + default: + - service: light.turn_on + target: !input "single_light" + data: + brightness_step_pct: -10 + transition: 1