A fully-featured blueprint for the Aeotec/AEON Labs WallMote Quad (ZW130) scene controller.
Supports tap, hold, release (long tap) and inactive scene events for all four buttons. Just select a switch entity that contains the correct OZW node_id and the rest is done.
Unmaintained: I’ve switched to ZWaveJS, and you can find my new blueprint for the same feature here: ZWaveJS - AEON Labs/Aeotec ZW130 WallMote Quad (all scenes supported)
blueprint:
name: OZW - Aeotec WallMote Quad scene controller
description: |
Perform actions when Aeotec WallMote Quad buttons are interacted with.
The release action is equivalent to a long tap.
A release action is always triggered after a hold action, which makes
them a bit tricky to use. The hold action is repeated as long as the
button is held down.
The inactive actions you probably do not want to define, as it is
triggered after every scene activation is finished.
domain: automation
input:
ozw_entity:
name: OZW Entity
description: The Aeotec WallMote Quad controller to listen for events on.
selector:
entity:
domain: switch
integration: ozw
tap_top_left_actions:
name: Tap Top Left Actions
selector:
action:
default: []
tap_top_right_actions:
name: Tap Top Right Actions
selector:
action:
default: []
tap_bottom_left_actions:
name: Tap Bottom Left Actions
selector:
action:
default: []
tap_bottom_right_actions:
name: Tap Bottom Right Actions
selector:
action:
default: []
release_top_left_actions:
name: Release Top Left Actions
selector:
action:
default: []
release_top_right_actions:
name: Release Top Right Actions
selector:
action:
default: []
release_bottom_left_actions:
name: Release Bottom Left Actions
selector:
action:
default: []
release_bottom_right_actions:
name: Release Bottom Right Actions
selector:
action:
default: []
hold_top_left_actions:
name: Hold Top Left Actions
selector:
action:
default: []
hold_top_right_actions:
name: Hold Top Right Actions
selector:
action:
default: []
hold_bottom_left_actions:
name: Hold Bottom Left Actions
selector:
action:
default: []
hold_bottom_right_actions:
name: Hold Bottom Right Actions
selector:
action:
default: []
inactive_top_left_actions:
name: Inactive Top Left Actions
selector:
action:
default: []
inactive_top_right_actions:
name: Inactive Top Right Actions
selector:
action:
default: []
inactive_bottom_left_actions:
name: Inactive Bottom Left Actions
selector:
action:
default: []
inactive_bottom_right_actions:
name: Inactive Bottom Right Actions
selector:
action:
default: []
mode: single
trigger:
- platform: event
event_type: ozw.scene_activated
variables:
logger: blueprint.ozw_scene_activation
ozw_entity: !input ozw_entity
action:
- choose:
# IF triggered node_id is ozw_entity node_id
- conditions:
- condition: template
value_template: "{{ trigger.event.data.node_id == state_attr(ozw_entity, 'node_id') }}"
sequence:
- choose:
# IF inactive top left
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 1 and trigger.event.data.scene_value_id == 0 }}"
sequence: !input inactive_top_left_actions
# IF inactive top right
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 2 and trigger.event.data.scene_value_id == 0 }}"
sequence: !input inactive_top_right_actions
# IF inactive bottom left
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 3 and trigger.event.data.scene_value_id == 0 }}"
sequence: !input inactive_bottom_left_actions
# IF inactive bottom right
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 4 and trigger.event.data.scene_value_id == 0 }}"
sequence: !input inactive_bottom_right_actions
# IF tap top left
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 1 and trigger.event.data.scene_value_id == 1 }}"
sequence: !input tap_top_left_actions
# IF tap top right
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 2 and trigger.event.data.scene_value_id == 1 }}"
sequence: !input tap_top_right_actions
# IF tap bottom left
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 3 and trigger.event.data.scene_value_id == 1 }}"
sequence: !input tap_bottom_left_actions
# IF tap bottom right
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 4 and trigger.event.data.scene_value_id == 1 }}"
sequence: !input tap_bottom_right_actions
# IF release top left
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 1 and trigger.event.data.scene_value_id == 2 }}"
sequence: !input release_top_left_actions
# IF release top right
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 2 and trigger.event.data.scene_value_id == 2 }}"
sequence: !input release_top_right_actions
# IF release bottom left
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 3 and trigger.event.data.scene_value_id == 2 }}"
sequence: !input release_bottom_left_actions
# IF release bottom right
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 4 and trigger.event.data.scene_value_id == 2 }}"
sequence: !input release_bottom_right_actions
# IF hold top left
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 1 and trigger.event.data.scene_value_id == 3 }}"
sequence: !input hold_top_left_actions
# IF hold top right
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 2 and trigger.event.data.scene_value_id == 3 }}"
sequence: !input hold_top_right_actions
# IF hold bottom left
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 3 and trigger.event.data.scene_value_id == 3 }}"
sequence: !input hold_bottom_left_actions
# IF hold bottom right
- conditions:
- condition: template
value_template: "{{ trigger.event.data.scene_id == 4 and trigger.event.data.scene_value_id == 3 }}"
sequence: !input hold_bottom_right_actions
# ELSE: unhandled scene_id/scene_value_id
default:
- service: system_log.write
data:
level: debug
logger: "{{ logger }}"
message: "Activated scene '{{ trigger.event.data.scene_label }}' ({{ trigger.event.data.scene_id }}) with value '{{ trigger.event.data.scene_value_label }}' ({{ trigger.event.data.scene_value_id }}) for node '{{ ozw_entity }}' ({{ trigger.event.data.node_id }})"
# ELSE: unhandled ozw event
default: []