OZW - AEON Labs/Aeotec ZW130 WallMote Quad (all scenes supported)

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: []
1 Like

Here is an example of an automation for debugging all the events, by writing entries to the Home Assistant log file.

alias: >-
  OZW - Aeotec WallMote Quad living room controller scene activations
  (BP)
description: ''
use_blueprint:
  path: robinsmidsrod/ozw_aeotec_wallmote_quad.yaml
  input:
    ozw_entity: switch.living_room_wallmote_quad
    inactive_top_left_actions:
      - service: system_log.write
        data:
          message: inactive_top_left
    tap_top_left_actions:
      - service: system_log.write
        data:
          message: tap_top_left
    tap_top_right_actions:
      - service: system_log.write
        data:
          message: tap_top_right
    tap_bottom_left_actions:
      - service: system_log.write
        data:
          message: tap_bottom_left
    tap_bottom_right_actions:
      - service: system_log.write
        data:
          message: tap_bottom_right
    inactive_top_right_actions:
      - service: system_log.write
        data:
          message: inactive_top_right
    inactive_bottom_left_actions:
      - service: system_log.write
        data:
          message: inactive_bottom_left
    inactive_bottom_right_actions:
      - service: system_log.write
        data:
          message: inactive_bottom_right
    release_top_left_actions:
      - service: system_log.write
        data:
          message: release_top_left
    release_top_right_actions:
      - service: system_log.write
        data:
          message: release_top_right
    release_bottom_left_actions:
      - service: system_log.write
        data:
          message: release_bottom_left
    release_bottom_right_actions:
      - service: system_log.write
        data:
          message: release_bottom_right
    hold_top_left_actions:
      - service: system_log.write
        data:
          message: hold_top_left
    hold_top_right_actions:
      - service: system_log.write
        data:
          message: hold_top_right
    hold_bottom_right_actions:
      - service: system_log.write
        data:
          message: hold_bottom_right
    hold_bottom_left_actions:
      - service: system_log.write
        data:
          message: hold_bottom_left

Quick question.

On what flavour OZW is this blueprint relying?

I run QT OZW and I see only 4 scene ids (currently using node red to action).

I’m using QT OZW. There are only 4 scene identifiers. There are also 4 scene value ids. 0=inactive, 1=tap, 2=release, 3=hold. Together this equals 16 different actions.

Yes, makes sense. Thank you. I read too fast… hoped it was also possible to use the swipes…

Unfortunately the swipes are not supported by OZW, so until they are supported they won’t emit any scene events.

1 Like

I get an “Already running” error in my log when I press and hold to dim something up or down (using the hold actions in the blueprint). Any ideas what would be causing that?

Hello

When I try to select an OZW entity it says “No matching entities found”.

But I can see my “AEON Labs ZW130 WallMote Quad” in dashboard. However, It’s in “sleeping” state.

Am I missing something?

Change to mode: restart would probably fix it, or you have something that triggers delays in your actions.

You’re not using OZW (beta) integration, is my guess.

Am I right to believe that if I migrate from OpenZWave (Beta) to zwaveJS this won’t work? Thanks!

You are correct. This blueprint is not compatible with ZWaveJS. I have already upgraded to ZWaveJS, so I have a blueprint that works with ZWaveJS, I just haven’t gotten around to uploading it yet.

3 Likes

Hello,

I changed over to ZwaveJS and I’m wondering if you would share your blueprint that works with JS? Thanks!

2 Likes

I’ve published my ZWaveJS-based blueprint now. See the original post for a link.

1 Like