Aeotec wallmote quad zw130

Hi guys, I’m trying to install my first Wallmote and I’ve run into some trouble. I’ve paired it several times and edited my zwvcfg_xxx file several times. I followed instructions from @Kevbre from this comment. Thanks to him for putting all the instructions in one, easy-to-read place. However, at no point have I gotten anything from button presses from my Wallmote both physically on the “mote” or in the OZW logs. I feel like It’s paired correctly but it’s just not responding to button presses. Any help would be appreciated because I have two more of these that I’d really like to get working well.

They are Scene controllers. Scene ID : X is the button. Scene Data : X is Press or Hold or Release.

Did you add the necessary device specific stuff to its entry in zwave config?


Stop the zwave network, add it where it says, start zwave network.
1 Like

If anyone is interested, I have created my own script inspired by the one created by @janus

Instead of changing states of entities it emits zwave.scene_activated events with the same structure as original ones:

  • Scene ids:
    • Slide 1 -> 3 (slide down on a left side): 11
    • Slide 2 -> 4 (slide down on a right side): 12
    • Slide 3 -> 1 (slide up on a left side): 13
    • Slide 4 -> 2 (slide up on a right side): 14
  • Scene data:
    • Start of slide: 0
    • End of slide: 1
#!/usr/bin/env python3

import json
import requests
from subprocess import Popen, PIPE
from urllib3.exceptions import InsecureRequestWarning

######  HA INFO ######
URI = 'http://localhost:8123/api/events/zwave.scene_activated'
TOKEN = 'TOKEN'
OZW_LOG = '/home/homeassistant/.homeassistant/OZW_Log.txt'
ENTITY_ID = 'zwave.aeon_labs_zw130_wallmote_quad'
NODE_ID = 42
######  HA INFO ######

requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
MATCHER = 'Node{0:03d},   Received: 0x01, 0x0e, 0x00, 0x04, 0x00, 0x31, 0x08, 0x70, 0x06,'.format(NODE_ID, hex(NODE_ID))
if TOKEN:
    HEADERS = {'Authorization': 'Bearer {0}'.format(TOKEN), 'content-type': 'application/json'}
else:
    HEADERS = {'content-type': 'application/json'}
log = Popen(('tail', '-f', '-n', '0', OZW_LOG), stdout=PIPE)
while True:
    line = log.stdout.readline()
    if not line:
        break
    line = line.strip().decode('utf-8')
    if not MATCHER in line:
        continue
    first_or_second = 0 if line[107:111] == '0x09' else 1
    button = line[122]
    data = {"entity_id": ENTITY_ID, "node_id": NODE_ID, "scene_id": int(button) + 10, "scene_data": first_or_second }
    resp = requests.post(URI, data=json.dumps(data), headers=HEADERS, verify=False)

NIce, if it emits only the slide scene data that would negate a problem i fought in both smarthings and HA… that slide also emits the tap command to HA. causes issues. Though I start to question how well one can remember what function does wyat. 8 is easy enough when most are off/on. Can you differentiate between slide down and up? on my fan button it would be nice to control speed by up/down. though I really only expect to swtich between Med/High, never really using low. Right now I use a Node Red flow to control speed, each tap acts like a pull of the chain… Low goes to Med, Med to High. High to Low. Off when commanded on sets it to Med.

It emits only events described above, without any additional ones (if you perform a slide correctly). I use slide up/down to open/close covers and it works perfectly.

I migrated to the new open-zwave integration which allowed me to implement another approach to the wallmote swipe. Its based on the other scripts/examples in this thread and the pattern described in https://community.openhab.org/t/wallmote-quad-zw130-sliding-does-not-work/91818/17:

  • automation to forward event payload from mqtt to python script.
  • python script parse payload
  • python script fire ‘ozw.scene_activated’ event

My automation:

- id: wallmote_swipe_handling
  trigger:
    platform: mqtt
    topic: "OpenZWave/1/node/+/instance/1/commandclass/112/value/+/"
  action:
    - service: python_script.wallmote_handler
      data_template:
        node_id: "{{trigger.payload_json['Node']}}"
        event: "{{trigger.payload_json['Event']}}"
        value: "{{trigger.payload_json['Value']}}"
        index: "{{trigger.payload_json['Index']}}"

And the python script:

event = data.get('event')
label = data.get('label')
index = data.get('index')
node_id = int(data.get('node_id'))

# we only care about index == 10, the end of the swipe 'parameter'
# and for safety we also only look at valueChanged
if (index == '10') and event == 'valueChanged':
    value = int(data.get('value', '0'))
    # unpack byte 2 (button id)
    scene_id = value >> 24 & 0xff

    # unpack byte 3 (direction)
    scene_value_id = value >> 16 & 0xff
    # offset by 10 to avoid colissions
    scene_value_id = scene_value_id + 10

    scene_value_label = 'Swipe Down'
    if scene_value_id == 11:
        scene_value_label = 'Swipe Up'

    hass.bus.fire('ozw.scene_activated', {
        'node_id': node_id,
        'scene_id': scene_id,
        'scene_value_id': scene_value_id,
        'scene_value_label': scene_value_label,
    })

I’m super excited, as I had this wallmote for a while and now I’m finally able to neatly use the swipe events. Thanks to everyone contributing to this and related threads!

5 Likes

Thanks for sharing, that’s great!

Cool, thanks for your input or the script.
With me no event (ozw.scene_activated) is generated.

Is there anything else that needs to be customized in the script or automation?

In the OZW-Admin I don’t see any entries for the performed slide movement in the event log. Only one event is generated when a key is pressed. Is this the same with you?
The slide function is activated on the remote control.

I do not understand this sentence, can someone explain it differently for me please, looks important.

First, I’ll say thanks for re-raising this, I haven’t looked at this thread in a while and looking at your post triggered me to research this out some for I never have been able to get the slide function to work. Now I having it working :slight_smile: .

If you are interested in using the “slide” (aka swipe up/down) function of the wallmote, apparently the only way the wallmote reports a slide is by sending out a “Configuration Report” command class. To get the wallmote to send this report, you have to set the configuration parameter #4 of the wallmote to value 3 which is the “Send Central Scene Command Notification and Configuration report”.

There doesn’t appear to be any official documentation on what the value of these reports mean, but various users have experimented and found that there are two configuration parameters being reported: #9 and #10 and have deduced that part of the values reported for #9 and #10 tells you which button was swiped, and whether the swipe was up or down.

Unfortunately, the configuration setting is the easy part. Making use of the reports once received takes a lot more work. If you’re using something like SmartThings for example, I’m not sure the App even knows about these values, much less how to interpret them. Some users in this thread are using Python scripts for example to get these values out of the OZW Log, or by using openzwave via mqtt to get the value out of a monitored specific topic.

I see, so it sounds like the reason I can’t find this is because I’m using the ST hub.

Would it benefit me to simply get a Z-Wave USB Stick? I’m running this on Virtualbox on an old laptop.

When I try the community made device handler on ST it stops transmitting the full info to the ST Hub.

Usually I would get this with the correct component_id:
“event_type”: “smartthings.button”,
“data”: {
“component_id”: “button1”,
“device_id”: “9b0e0155-a9e8-4887-ab4f-80c578dc3937”,
“location_id”: “xx”,
“value”: “pushed”,
“name”: “LR Aeotec Remote”,
“data”: {}

Now I only get the following, which is missing the component_id:
“event_type”: “smartthings.button”,
“data”: {
“component_id”: “main”,
“device_id”: “9b0e0155-a9e8-4887-ab4f-80c578dc3937”,
“location_id”: “xx”,
“value”: “pushed”,
“name”: “LR Aeotec Remote”,
“data”: {}

Is there another method I can use to change this parameter such as USB connection to PC. On the Hub I can see these:

They look like all the arameters except #4

I stopped using the ST Hub several months ago, and now use the USB Stick with ZWave2MQTT.

Okay, but why?

Two main reasons:

  1. The round trip times to the cloud and back were too slow (as much as 10-12 secs).
  2. I have a couple of devices, Wallmote being one of them, that has multiple instances
    and only one instance could be seen by HA.

Just got a Aeotec Wallmote Quad and found this thread. I don’t want to use any of the swipe features I just want the four buttons to work. What would be the recommended way to make it work?

Hi Micha,

Did you get the wallmote to work? I am having almost the same issues - the buttons are not linked through the actions.

2020-07-07 21:32:41.491 Info, Node005, Received Central Scene set from node 5: scene id=1 in 0 seconds. Sending event notification.
2020-07-07 21:32:41.491 Warning, Node005, No ValueID created for Scene 1
2020-07-07 21:32:42.226 Detail, Node005, Received: 0x01, 0x0b, 0x00, 0x04, 0x00, 0x05, 0x05, 0x5b, 0x03, 0x5d, 0x00, 0x02, 0xf7
2020-07-07 21:32:42.226 Detail,
2020-07-07 21:32:42.227 Info, Node005, Received Central Scene set from node 5: scene id=2 in 0 seconds. Sending event notification.
2020-07-07 21:32:42.227 Warning, Node005, No ValueID created for Scene 2
2020-07-07 21:32:42.826 Detail, Node005, Received: 0x01, 0x0b, 0x00, 0x04, 0x00, 0x05, 0x05, 0x5b, 0x03, 0x5e, 0x00, 0x03, 0xf5
2020-07-07 21:32:42.826 Detail,
2020-07-07 21:32:42.826 Info, Node005, Received Central Scene set from node 5: scene id=3 in 0 seconds. Sending event notification.
2020-07-07 21:32:42.826 Warning, Node005, No ValueID created for Scene 3
2020-07-07 21:32:43.400 Detail, Node005, Received: 0x01, 0x0b, 0x00, 0x04, 0x00, 0x05, 0x05, 0x5b, 0x03, 0x5f, 0x00, 0x04, 0xf3
2020-07-07 21:32:43.400 Detail,
2020-07-07 21:32:43.400 Info, Node005, Received Central Scene set from node 5: scene id=4 in 0 seconds. Sending event notification.
2020-07-07 21:32:43.400 Warning, Node005, No ValueID created for Scene 4

Regards

@Blade1024 Did you update the zwcfg file with the device specific entries for the Wallmote?

Z-Wave Device Specific Settings - Find WallMote in there.

Hi,

Thank you! And yes, I am getting somewhere :wink: At least it is start popping up in the logs as an event - previously there was nothing. Cannot get it to trigger anything yet though. Core sees it, event is in, but it fires up nothing. Sorry for dummy questions - just learning the system.

> 2020-07-09 04:05:34 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event zwave.scene_activated[L]: entity_id=zwave.aeotec_unknown_type_0002_id_0082, node_id=5, scene_id=2, scene_data=0>
> 2020-07-09 04:05:34 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=zwave.aeotec_unknown_type_0002_id_0082, old_state=<state zwave.aeotec_unknown_type_0002_id_0082=initializing; node_id=5, node_name=Aeotec Unknown: type=0002, id=0082, manufacturer_name=Aeotec, product_name=Unknown: type=0002, id=0082, query_stage=CacheLoad, is_awake=False, is_ready=False, is_failed=False, is_info_received=True, max_baud_rate=40000, is_zwave_plus=True, capabilities={'zwave_plus', 'routing', 'beaming'}, sentCnt=1, sentFailed=1, retries=0, receivedCnt=153, receivedDups=0, receivedUnsolicited=153, sentTS=2020-07-09 03:41:33:232 , receivedTS=2020-07-09 04:04:29:311 , lastRequestRTT=0, averageRequestRTT=0, lastResponseRTT=0, averageResponseRTT=0, battery_level=100, wake_up_interval=0, application_version=2.03, friendly_name=wallmote_1_services @ 2020-07-09T05:41:31.938823+02:00>, new_state=<state zwave.aeotec_unknown_type_0002_id_0082=initializing; node_id=5, node_name=Aeotec Unknown: type=0002, id=0082, manufacturer_name=Aeotec, product_name=Unknown: type=0002, id=0082, query_stage=CacheLoad, is_awake=False, is_ready=False, is_failed=False, is_info_received=True, max_baud_rate=40000, is_zwave_plus=True, capabilities={'zwave_plus', 'routing', 'beaming'}, sentCnt=1, sentFailed=1, retries=0, receivedCnt=154, receivedDups=0, receivedUnsolicited=154, sentTS=2020-07-09 03:41:33:232 , receivedTS=2020-07-09 04:05:34:367 , lastRequestRTT=0, averageRequestRTT=0, lastResponseRTT=0, averageResponseRTT=0, battery_level=100, wake_up_interval=0, application_version=2.03, friendly_name=wallmote_1_services @ 2020-07-09T05:41:31.938823+02:00>>

And I don’t see really it matching the automation.yaml with the log. It is everything, but the ordinary switch… What do you reckon is happening here?

(hass) hass@ubuntu:~/.homeassistant$ cat home-assistant.log | grep switch.aeotec_unknown_type_0002_id_0082_switch
2020-07-09 03:41:31 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=switch.aeotec_unknown_type_0002_id_0082_switch_5, old_state=None, new_state=<state switch.aeotec_unknown_type_0002_id_0082_switch_5=off; node_id=5, value_index=0, value_instance=1, value_id=72057594126614528, friendly_name=wallmote_1_switch_5 @ 2020-07-09T05:41:31.996072+02:00>>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event call_service[L]: domain=group, service=set, service_data=object_id=all_switches, name=all switches, visible=False, entities=['switch.aeotec_unknown_type_0002_id_0082_switch_5']>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=group.all_switches, old_state=None, new_state=<state group.all_switches=off; entity_id=('switch.aeotec_unknown_type_0002_id_0082_switch_5',), order=2, auto=True, friendly_name=all switches, hidden=True @ 2020-07-09T05:41:32.007825+02:00>>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=switch.aeotec_unknown_type_0002_id_0082_switch, old_state=None, new_state=<state switch.aeotec_unknown_type_0002_id_0082_switch=off; node_id=5, value_index=0, value_instance=2, value_id=144115188164542464, friendly_name=Aeotec Unknown: type=0002, id=0082 Switch @ 2020-07-09T05:41:32.025364+02:00>>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event call_service[L]: domain=group, service=set, service_data=object_id=all_switches, name=all switches, visible=False, entities=['switch.aeotec_unknown_type_0002_id_0082_switch_5', 'switch.aeotec_unknown_type_0002_id_0082_switch']>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=group.all_switches, old_state=<state group.all_switches=off; entity_id=('switch.aeotec_unknown_type_0002_id_0082_switch_5',), order=2, auto=True, friendly_name=all switches, hidden=True @ 2020-07-09T05:41:32.007825+02:00>, new_state=<state group.all_switches=off; entity_id=('switch.aeotec_unknown_type_0002_id_0082_switch_5', 'switch.aeotec_unknown_type_0002_id_0082_switch'), order=2, auto=True, friendly_name=all switches, hidden=True @ 2020-07-09T05:41:32.007825+02:00>>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=switch.aeotec_unknown_type_0002_id_0082_switch_2, old_state=None, new_state=<state switch.aeotec_unknown_type_0002_id_0082_switch_2=off; node_id=5, value_index=0, value_instance=3, value_id=216172782202470400, friendly_name=wallmote_1_switch_2 @ 2020-07-09T05:41:32.052842+02:00>>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event call_service[L]: domain=group, service=set, service_data=object_id=all_switches, name=all switches, visible=False, entities=['switch.aeotec_unknown_type_0002_id_0082_switch_5', 'switch.aeotec_unknown_type_0002_id_0082_switch', 'switch.aeotec_unknown_type_0002_id_0082_switch_2']>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=group.all_switches, old_state=<state group.all_switches=off; entity_id=('switch.aeotec_unknown_type_0002_id_0082_switch_5', 'switch.aeotec_unknown_type_0002_id_0082_switch'), order=2, auto=True, friendly_name=all switches, hidden=True @ 2020-07-09T05:41:32.007825+02:00>, new_state=<state group.all_switches=off; entity_id=('switch.aeotec_unknown_type_0002_id_0082_switch_5', 'switch.aeotec_unknown_type_0002_id_0082_switch', 'switch.aeotec_unknown_type_0002_id_0082_switch_2'), order=2, auto=True, friendly_name=all switches, hidden=True @ 2020-07-09T05:41:32.007825+02:00>>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=switch.aeotec_unknown_type_0002_id_0082_switch_3, old_state=None, new_state=<state switch.aeotec_unknown_type_0002_id_0082_switch_3=off; node_id=5, value_index=0, value_instance=4, value_id=288230376240398336, friendly_name=wallmote_1_switch_3 @ 2020-07-09T05:41:32.085984+02:00>>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event call_service[L]: domain=group, service=set, service_data=object_id=all_switches, name=all switches, visible=False, entities=['switch.aeotec_unknown_type_0002_id_0082_switch_5', 'switch.aeotec_unknown_type_0002_id_0082_switch', 'switch.aeotec_unknown_type_0002_id_0082_switch_2', 'switch.aeotec_unknown_type_0002_id_0082_switch_3']>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=group.all_switches, old_state=<state group.all_switches=off; entity_id=('switch.aeotec_unknown_type_0002_id_0082_switch_5', 'switch.aeotec_unknown_type_0002_id_0082_switch', 'switch.aeotec_unknown_type_0002_id_0082_switch_2'), order=2, auto=True, friendly_name=all switches, hidden=True @ 2020-07-09T05:41:32.007825+02:00>, new_state=<state group.all_switches=off; entity_id=('switch.aeotec_unknown_type_0002_id_0082_switch_5', 'switch.aeotec_unknown_type_0002_id_0082_switch', 'switch.aeotec_unknown_type_0002_id_0082_switch_2', 'switch.aeotec_unknown_type_0002_id_0082_switch_3'), order=2, auto=True, friendly_name=all switches, hidden=True @ 2020-07-09T05:41:32.007825+02:00>>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=switch.aeotec_unknown_type_0002_id_0082_switch_4, old_state=None, new_state=<state switch.aeotec_unknown_type_0002_id_0082_switch_4=off; node_id=5, value_index=0, value_instance=5, value_id=360287970278326272, friendly_name=wallmote_1_switch_4 @ 2020-07-09T05:41:32.147848+02:00>>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event call_service[L]: domain=group, service=set, service_data=object_id=all_switches, name=all switches, visible=False, entities=['switch.aeotec_unknown_type_0002_id_0082_switch_5', 'switch.aeotec_unknown_type_0002_id_0082_switch', 'switch.aeotec_unknown_type_0002_id_0082_switch_2', 'switch.aeotec_unknown_type_0002_id_0082_switch_3', 'switch.aeotec_unknown_type_0002_id_0082_switch_4']>
2020-07-09 03:41:32 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=group.all_switches, old_state=<state group.all_switches=off; entity_id=('switch.aeotec_unknown_type_0002_id_0082_switch_5', 'switch.aeotec_unknown_type_0002_id_0082_switch', 'switch.aeotec_unknown_type_0002_id_0082_switch_2', 'switch.aeotec_unknown_type_0002_id_0082_switch_3'), order=2, auto=True, friendly_name=all switches, hidden=True @ 2020-07-09T05:41:32.007825+02:00>, new_state=<state group.all_switches=off; entity_id=('switch.aeotec_unknown_type_0002_id_0082_switch_5', 'switch.aeotec_unknown_type_0002_id_0082_switch', 'switch.aeotec_unknown_type_0002_id_0082_switch_2', 'switch.aeotec_unknown_type_0002_id_0082_switch_3', 'switch.aeotec_unknown_type_0002_id_0082_switch_4'), order=2, auto=True, friendly_name=all switches, hidden=True @ 2020-07-09T05:41:32.007825+02:00>>
(hass) hass@ubuntu:~/.homeassistant$ cat home-assistant.log | grep 2ae465ea727744f694c95a4eac926150
(hass) hass@ubuntu:~/.homeassistant$ cat automations.yaml
- id: '1594151162172'
  alias: New Automation
  description: ''
  trigger:
  - device_id: 2ae465ea727744f694c95a4eac926150
    domain: switch
    entity_id: switch.aeotec_unknown_type_0002_id_0082_switch
    platform: device
    type: turned_on
  condition: []
  action:
  - device_id: ca2efa9350004724ad9287ac19de8a98
    domain: light
    entity_id: light.zipato_unknown_type_0002_id_0003_level
    type: turn_on
- id: '1594266945516'
  alias: Turn off the light
  description: ''
  trigger:
  - device_id: 2ae465ea727744f694c95a4eac926150
    domain: switch
    entity_id: switch.aeotec_unknown_type_0002_id_0082_switch
    platform: device
    type: turned_off
  condition: []
  action:
  - device_id: ca2efa9350004724ad9287ac19de8a98
    domain: light
    entity_id: light.zipato_unknown_type_0002_id_0003_level
    type: turn_off

This will toggle your light when you push button 1. You can find the mappings for each button, and subsequent action (tap, hold and release) at the same link I provided above.

Automation:

- id: '1530442018643'
  alias: Wallmote Button 1 tap
  trigger:
  - event_data:
      entity_id: zwave.aeotec_unknown_type_0002_id_0082
      scene_data: 0
      scene_id: 1
    event_type: zwave.scene_activated
    platform: event
  action:
  - data:
      entity_id:  light.zipato_unknown_type_0002_id_0003_level
    service: light.toggle

I think I understand what you are doing here. You are listening on the event bus and its data rather than on the device itself. It is not transparent if you are creating the automation from the GUI, but it is a concept I appreciate very much :wink: Again, sorry for the dummy questions.

I tried the automation and it works really well. Thank you for helping!

Regards Matvey