Z-Wave JS - Aeotec ZWA003 NanoMote Quad

This is a basic blueprint for the Aeotec NanoMote Quad remote, specifically for use with Z-Wave JS

Updated 2021-12-17 - Since OZW is depreciated and discussions in thread have already switch to Z-Wave JS - I’ve switched the blueprint to Z-Wave JS. It is tested and working with Home Assistant 2021.12

image

Use this blueprint to configure actions when a button is pressed, held and (or) released

blueprint:
  name: Aeotec Nano-Mote Quad
  description: Create automations for the Aeotec ZWA003 Nano-Mote Quad
  domain: automation

  input:
    nanomote_device:
      name: NanoMote Device
      description: A Nano-Mote device.
      selector:
        device:
          integration: zwave_js
          manufacturer: Aeotec Ltd.
          model: ZWA003

    button_1_pressed:
      name: Button 1 Pressed
      description: Actions to run when button 1 is pressed.
      default: []
      selector:
        action:

    button_1_held:
      name: Button 1 Held Down
      description: Actions to run when button 1 is held down.
      default: []
      selector:
        action:

    button_1_released:
      name: Button 1 Released
      description: Actions to run when button 1 is released.
      default: []
      selector:
        action:

    button_2_pressed:
      name: Button 2 Pressed
      description: Actions to run when button 2 is pressed.
      default: []
      selector:
        action:

    button_2_held:
      name: Button 2 Held Down
      description: Actions to run when button 2 is held down.
      default: []
      selector:
        action:

    button_2_released:
      name: Button 2 Released
      description: Actions to run when button 2 is released.
      default: []
      selector:
        action:

    button_3_pressed:
      name: Button 3 Pressed
      description: Actions to run when button 3 is pressed.
      default: []
      selector:
        action:

    button_3_held:
      name: Button 3 Held Down
      description: Actions to run when button 3 is held down.
      default: []
      selector:
        action:

    button_3_released:
      name: Button 3 Released
      description: Actions to run when button 3 is released.
      default: []
      selector:
        action:

    button_4_pressed:
      name: Button 4 Pressed
      description: Actions to run when button 4 is pressed.
      default: []
      selector:
        action:

    button_4_held:
      name: Button 4 Held Down
      description: Actions to run when button 4 is held down.
      default: []
      selector:
        action:

    button_4_released:
      name: Button 4 Released
      description: Actions to run when button 4 is released.
      default: []
      selector:
        action:

mode: single
max_exceeded: silent

trigger:
  - platform: event
    event_type: zwave_js_value_notification
    event_data:
      command_class_name: Central Scene
      device_id: !input nanomote_device

action:
  - variables:
      scene_id: "{{ trigger.event.data.label }}"
      attribute_id: "{{ trigger.event.data.value }}"
  - choose:
      - conditions: "{{ scene_id == 'Scene 001' }}"
        sequence:
          - choose:
              - conditions: "{{ attribute_id == 'KeyPressed' }}"
                sequence: !input button_1_pressed
              - conditions: "{{ attribute_id == 'KeyHeldDown' }}"
                sequence: !input button_1_held
              - conditions: "{{ attribute_id == 'KeyReleased' }}"
                sequence: !input button_1_released
      - conditions: "{{ scene_id == 'Scene 002' }}"
        sequence: 
          - choose:
              - conditions: "{{ attribute_id == 'KeyPressed' }}"
                sequence: !input button_2_pressed
              - conditions: "{{ attribute_id == 'KeyHeldDown' }}"
                sequence: !input button_2_held
              - conditions: "{{ attribute_id == 'KeyReleased' }}"
                sequence: !input button_2_released
      - conditions: "{{ scene_id == 'Scene 003' }}"
        sequence: 
          - choose:
              - conditions: "{{ attribute_id == 'KeyPressed' }}"
                sequence: !input button_3_pressed
              - conditions: "{{ attribute_id == 'KeyHeldDown' }}"
                sequence: !input button_3_held
              - conditions: "{{ attribute_id == 'KeyReleased' }}"
                sequence: !input button_3_released
      - conditions: "{{ scene_id == 'Scene 004' }}"
        sequence: 
          - choose:
              - conditions: "{{ attribute_id == 'KeyPressed' }}"
                sequence: !input button_4_pressed
              - conditions: "{{ attribute_id == 'KeyHeldDown' }}"
                sequence: !input button_4_held
              - conditions: "{{ attribute_id == 'KeyReleased' }}"
                sequence: !input button_4_released

Blueprint preview

3 Likes

A small bug: the scene_value_id for the middle button should be 1, not 4.

1 Like

Sorry about that.

Thank you for the correction, I have fixed the blueprint.

1 Like

Someone else used your blueprint as the basis for another blueprint. In it, I noticed this variable definition:

  device_id: !input aeotec_nanomote

However, I don’t see device_id used in the automation. Is that something left over from this blueprint’s early development or is it something that will be used in a future version? Or does it serve as a placeholder because the selector for the Nanomote serves as a means of revealing the node’s id (which the user must enter manually)? Or some other reason?

1 Like

So right now, it’s just a place holder. Entering the node_id manually is the workaround – I’m hoping that in the future, it will be possible to obtain the node_id from the device selector.

I chose the device selector over the entity selector (which could provide the node_id) for two main reasons

  1. Some Z-Wave devices, such as this remote do not create an entity to trigger scene events from

  2. I had originally tried using the entity selector for this generic inovelli blueprint, however I could not narrow the list enough, to only included the correct scene enabled switches.

I am open to any constructive criticism you may have on this decision, or suggestions for improvement.

I have no suggestions regarding device_id and defer to your decision. I was in the process of streamlining the template and wondered why device_id wasn’t used.

I don’t have the appropriate gadgetry to test this but I believe it should work as well as the original version.

action:
- variables:
    scene_id: '{{ trigger.event.data.scene_id }}'
- condition: template
  value_template: >
    {{ trigger.event.data.node_id == (ozw_node_id | int) and 
       trigger.event.data.scene_value_id == 1 }}
- choose:
  - conditions: '{{ scene_id == 1 }}'
    sequence: !input 'button_1'
  - conditions: '{{ scene_id == 2 }}'
    sequence: !input 'button_2'
  - conditions: '{{ scene_id == 3 }}'
    sequence: !input 'button_3'
  - conditions: '{{ scene_id == 4 }}'
    sequence: !input 'button_4'

All four choices in choose had two common conditions so I moved them out of choose and to a separate condition. If it evaluates to false then there’s no reason for the action to execute choose. The template also employs the new shorthand notation for Template Conditions.


EDIT

Corrected improperly defined Template Condition.

1 Like

Thank you! I updated my local blueprint and reloaded automations… Everything works as expected.

I have updated the blueprint in the OP to include your efficiency improvements

I just updated the blueprint again.

There was a format error (my fault) when I copied the file.

@123 - I also made some minor changes. I had initially thought the everything was working after simply reloading the automations, however after a complete restart of Home Assistant, my automations built on this blueprint no longer worked.

For some reason, it does not like the condition: template inside of the action. There are no errors, it just does not make it to the sequence. I was able to still follow your lead and remove the repetitive code. Just with a slightly different approach.

Basically, I added the scene_value_id to the event_data trigger and moved the remaining condition to match the node_id, to before the action.

trigger:
  - platform: event
    event_type: ozw.scene_activated
    event_data:
      scene_value_id: 1
condition: "{{ trigger.event.data.node_id == (ozw_node_id | int) }}"
action:
  - variables:
      scene_id: "{{ trigger.event.data.scene_id }}"
  - choose:
    - conditions: "{{ scene_id == 1 }}" ## Pressed Button 1
      sequence: !input button_1
    - conditions: "{{ scene_id == 2 }}" ## Pressed Button 2
      sequence: !input button_2
    - conditions: "{{ scene_id == 3 }}" ## Pressed Button 3
      sequence: !input button_3
    - conditions: "{{ scene_id == 4 }}" ## Pressed Button 4
      sequence: !input button_4

That’s my mistake.

I did this:

- condition:
    condition: template
    value_template: >

but it should be like this:

- condition: template
  value_template: >

I’ve updated my post above.

It should work equally well the way you changed it (moved the condition completely out of the action).


NOTE

If you modify a blueprint, you minimally have to execute Reload Automations to make Home Assistant use the revised version (restarting Home Assistant will, of course, do the same).

1 Like

I just wanted to again say thank you for this. With these suggestions, I was able to remove 39 lines from my inovelli blueprint!

1 Like

Ty for this! Much appreciated! :+1:

@troy In case you’re wanting it, here’s a variant that works with the new zwave_js:

---
blueprint:
  name: Aeotec ZWA003 NanoMote Quad
  description: Create automations for the Aeotec ZWA003 NanoMote Quad using the
    OZW integration.
  domain: automation
  input:
    aeotec_nanomote:
      name: Aeotec NanoMote Quad
      description: The NanoMote Quad to interact with.
      selector:
        device:
          integration: zwave_js
          manufacturer: Aeotec Ltd.
          model: Aeotec NanoMote Quad
    button_1:
      name: Press Button One
      description: Action to run on button press.
      default: []
      selector:
        action: {}
    button_2:
      name: Press Button Two
      description: Action to run on button press.
      default: []
      selector:
        action: {}
    button_3:
      name: Press Button Three
      description: Action to run on button press.
      default: []
      selector:
        action: {}
    button_4:
      name: Press Button Four
      description: Action to run on button press.
      default: []
      selector:
        action: {}

mode: single

max_exceeded: silent

trigger:
  platform: event
  event_type: zwave_js_event
  event_data:
    command_class_name: Central Scene
    device_id: !input aeotec_nanomote

action:
  - variables:
      scene_id: "{{ trigger.event.data.property_key_name }}"
  - choose:
      - conditions: "{{ scene_id == '001' }}"
        sequence: !input button_1
      - conditions: "{{ scene_id == '002' }}"
        sequence: !input button_2
      - conditions: "{{ scene_id == '003' }}"
        sequence: !input button_3
      - conditions: "{{ scene_id == '004' }}"
        sequence: !input button_4

EDIT: Thanks for the streamlining, @freshcoast!

2 Likes

You don’t need the node id, just trigger off the device_id you already have.

trigger:
  platform: event
  event_type: zwave_js_event
  event_data:
    device_id: !input aeotec_nanomote
    command_class_name: Central Scene
2 Likes

Awesome thank you! I’m looking forward for my own switch over to Z-Wave JS – All these exciting things happening, and of course I’m busy with other things this week.

Thanks to everyone who has worked on this so far! I am trying to port this code over to use the older Minimotes with zwave_js, but haven’t been able to get it working yet.

The Minimotes send out an event_type: zwave_js_event, but of the data type: “value_notification” and scene_id values of 1, 3, 5, or 7 corresponding to the four buttons. (Odd 1, 3, 5, 7 for short press, even 2, 4, 6, 8 for long press.)
I can get everything working if I explicitly list the node_id, type: value_notification, and value, but not in the blueprints format.

Working test manually using Scene 1:
Screenshot from 2021-02-14 11-01-12

Button press info from Event Logs:
Screenshot from 2021-02-14 10-54-50

Any ideas on what I need to tweak? Thanks!

The blueprint is triggering on Central Scene. The minimote uses Scene Activation.

Added a blueprint for the minimote here.

1 Like

Hello,
I hope you could help me. i have just included this nanomote quad and i only get these entities…
Maybe you could assist me? i am using z-wave js using z-wave js to mqtt as bridge.~

i am so lost…
thank you

i did the event listening option and got this

Event 1 fired 5:53 PM:
{
    "event_type": "zwave_js_event",
    "data": {
        "type": "value_notification",
        "domain": "zwave_js",
        "node_id": 58,
        "home_id": 3889200754,
        "endpoint": null,
        "device_id": "b078e1d6a79f6ee6ba98789f0138ff1d",
        "command_class": 91,
        "command_class_name": "Central Scene",
        "label": "Scene 002",
        "property_name": "scene",
        "property_key_name": "002",
        "value": "KeyPressed"
    },
    "origin": "LOCAL",
    "time_fired": "2021-02-25T17:53:10.381458+00:00",
    "context": {
        "id": "6716c1c14579e2ff29ab9d8528800dec",
        "parent_id": null,
        "user_id": null
    }
}


nvm me… I realized how to do it! and on the way I understood how to create a blueprint! Thank you!

1 Like

Has anyone been able to create a zwavejs blueprint for the nanomote quad? If so would they be willing to share it on the forum. I wish I had the ability to create one but its just a bit outside my ability. Thanks!