Basic Home Alarm Setup with Zipato Keypad

Dear all, I’ve been following this thread with interest.

Right now I’m in the process of getting my HA based alarm system up and running, Fibaro motion sensors working like a charm. Currently triggering my Sonos to play an alarm sound until my siren comes (in back-order duh). Actually using the alternative alarm setup as described here: Alternative Home Assistant Alarm

I also ordered 2 of the Zipato (Benext) Tag readers and frankly am having a bit of trouble.

I managed to securely connect one to my HA setup, renamed the node to Tag_Reader_I. So far so good, but when I press any of the buttons on the keypad (‘home’ or ‘away’) I seem to only get errors in the logfile:

> 2018-01-13 19:09:19.759 Detail, Node007,   Received: 0x01, 0x0d, 0x00, 0x04, 0x00, 0x07, 0x07, 0x88, 0x03, 0x66, 0x00, 0x00, 0x01, 0x2c, 0x36
> 2018-01-13 19:09:19.760 Detail, 
> 2018-01-13 19:09:19.761 Info, Node007, ApplicationCommandHandler - Unhandled Command Class 0x88

So not even at the point of figuring out how to get the codes/tags recognized. Let alone syncing with the HA alarm state :-).

Does anybody recognise this behaviour? suggestions?

Many thanks in advance!

Setup: HA 0.60.1 / PI3 / Python 3.6.4.

If you are using openzwave, could you look in your openzwave cache xml file, locate your Node007 entry and list here the manufacturer id and product id? That would tell us what your openzwave thinks Node007 is.

Hi @merredin thanks for your reply. I made some progress in the meanwhile:

It turns out one of the tag readers is defective, I cannot get the ‘set code’ segments to display for this device. When I tried the other one it does register. So that was a day and a half gone before I figured that out :-). I think this caused the ‘unhandled command class error’.

Following your guidance (loading the lock zwave platform and changing the lock/zwave.py code) I am able to register tags via HA. So that is great as well, many thanks for that. One question around setting pin codes, suppose you want to set the pin to 1234, do you simply register 0x31 0x32 0x33 0x34 + trailing 0x00’s through HA? I was having some trouble with that, but need to try again tonight.

So next step is making sure the reader syncs status as described in this thread.

Thanks for you help, I’ll let you know once it’s all up & running.

@merredin Thanks for pointing to the Pull Request. I have to check that. My instalaltion is using the Dev branch since I have the Eurotronic Spirits. Unfortunately the PR is not merged yet, so I will have to use the dev flavor instead of ozwdev.

Considering the sync state I have a very simple approach in my setup.
I use sensor.keypad_access_control as the trigger. This has states “Access Control - KeyPad Unlock” or “Access Control - KeyPad Lock”.

The keypad always sends an event to HA when a button has been send, no matter if it was the same button again or not. The reason why the automation is not triggered is that trigger trigger only fires if the state is different from the old state. So if you press the same button again, then you do get an event in HA, but the automnation is not triggered since the state has not changed.

The solution here is to use a state trigger and only define the entity_id and not define to and from. Then check the state in a condition.

- alias: Set Alarm Home
  trigger:
    - platform: state
      entity_id: sensor.keypad_access_control
  condition:
    - condition: state
      entity_id: sensor.keypad_access_control
      state: Access Control - KeyPad Unlock
  action:
    - service: alarm_control_panel.alarm_disarm
      entity_id: alarm_control_panel.ha_alarm

- alias: Set Alarm Away
  trigger:
    - platform: state
      entity_id: sensor.keypad_access_control
  condition:
    - condition: state
      entity_id: sensor.keypad_access_control
      state: Access Control - KeyPad Lock
  action:
    - service: alarm_control_panel.alarm_arm_away
      entity_id: alarm_control_panel.ha_alarm

This is also mentioned in the documentation for the state trigger

Triggers when the state of tracked entities change. If only entity_id given will match all state changes, even if only state attributes change.

1 Like

Woah looks like this has moved on a far bit since I last checked :smiley:

Did you guys manage to get the keypad to start beeping once say the door opens, to give you an audible warning that you need to go over and disarm? Or is that still not possible as the keypad is asleep and HA can’t send it messages?

What’s this syntax? All my automations start with a trigger and the action is last.

Ooh is this a siren that can do chimes as well as sirens based on different actions? I’ve been trying to find one as my Neo Coolcam one seems to only be able to do one or the other once it’s set up.

edit having googled it, it looks like it’s identical to my Neo! So how do you make it do different noises? Mine only has 1 switch which sets off the siren.

Copy/pasted from my automations that I have been built using the automation editor in the web interface.

I believe it is a dictionary so the order of each level (trigger/action) makes no difference. But I agree it is counter-intuitive to read.

1 Like

Ahh interesting - I’ve always built my by hand so I’d not seen it done that way before :smiley:

Hi,
I managed to edit my zwave.py file by using your changes but when I reboot HA I get this in the log:

Error while setting up platform zwave
Traceback (most recent call last):
File “/usr/lib/python3.6/site-packages/homeassistant/helpers/entity_platform.py”, line 82, in async_setup
SLOW_SETUP_MAX_WAIT, loop=hass.loop)
File “/usr/lib/python3.6/asyncio/tasks.py”, line 358, in wait_for
return fut.result()
File “/usr/lib/python3.6/asyncio/futures.py”, line 245, in result
raise self._exception
File “/usr/lib/python3.6/asyncio/tasks.py”, line 180, in _step
result = coro.send(None)
File “/usr/lib/python3.6/site-packages/homeassistant/components/lock/zwave.py”, line 130, in async_setup_platform
descriptions = load_yaml_config_file(
NameError: name ‘load_yaml_config_file’ is not defined

I have also added this to the configurations.yaml file:
lock:

  • platform: zwave

I am running this under Hass.io 0.65.5

Do you know what my be causing this?

Hi again,

I added this to the the zwave.py file:

import os
from homeassistant.config import load_yaml_config_file

then I changed to this:

descriptions = load_yaml_config_file(
os.path.join(os.path.dirname(file), ‘services.yaml’))

Now it continues but stops with this error:

  File "/usr/lib/python3.6/site-packages/homeassistant/components/lock/zwave.py", line 193, in async_setup_platform
    descriptions.get(SERVICE_SET_USERCODE), schema=SET_USERCODE_SCHEMA)
TypeError: async_register() got multiple values for argument 'schema'

Does someone know what’s causing this in this section of the code:

hass.services.async_register(
    DOMAIN, SERVICE_SET_USERCODE, set_usercode,
    descriptions.get(SERVICE_SET_USERCODE), schema=SET_USERCODE_SCHEMA)
hass.services.async_register(
    DOMAIN, SERVICE_GET_USERCODE, get_usercode,
    descriptions.get(SERVICE_GET_USERCODE), schema=GET_USERCODE_SCHEMA)
hass.services.async_register(
    DOMAIN, SERVICE_CLEAR_USERCODE, clear_usercode,
    descriptions.get(SERVICE_CLEAR_USERCODE), schema=CLEAR_USERCODE_SCHEMA)

hi @souI I have the Neo Coolcam sirene and use it to play different sounds based on the state of the alarm (ie.disarming, arming, succesfully armed etc).

I use the following in my script to change the sound before switching it on (example):

- service: zwave.set_config_parameter
  data_template: {
    "node_id": 10,
    "parameter": 5,
    "value": "Alert"
    }

The different values you can use are:

"Doorbell"
"Fur Elise"
"Doorbell Extended"
"Alert"
"William Tell"
"Rondo Alla Turca"
"Police Siren"
"Evacuation"
"Beep Beep"
"Beep"
2 Likes

hI @anasazi I also implemented the changes to the lock/zwave.py as indicated by @merredin but did not encounter these issues. Also not after upgrading to 0.65.

You should not have to alter anything else in the zwave.py file, just be very careful not to miss anything. Essentially you comment out the “network = hass.data[zwave.const.DATA_NETWORK]” line at 130 and then add the same line in the 3 functions (set_usercode(), get_usercode() and clear_usercode()).

Be careful with using ‘tabs’ instead of spaces for indenting your code, python is finicky about that.

Mate that’s fantastic thank you! Will give it a go :smiley:

Hi,

Is it possible for you to share your complete zwave.py so that I can compare with mine?

You sure that’s right? I’ve found the manual and it looks like the values for the Alarm Music Index has to be a number between 1-10, not a name?

@soul yes this works, took me a long time to figure out. I tried the number value in the beginning but that didn’t work. Then found somewhere someone saying that you need to use the names and that turned out to work. But try both and see which works for you :slight_smile:

If I use the z-wave config panel I can change the siren between alarm and doorbell mode, but if I try to set the alarm index (parameter 5) it doesn’t seem to save.

Tailing the OZW_Log.txt I get a log entry when changing the default type (alarm/doorbell) from HA, but if I try to set the alarm index no logs at all.

Got this in my zwcfg file

				<Value type="list" genre="config" instance="1" index="5" label="Alarm Music Index" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="1" max="10" vindex="9" size="1">
					<Help>This parameter defines the alarm music index for siren play different music when alarm occurs. There are 10 different music for user selection</Help>
					<Item label="1" value="1" />
					<Item label="2" value="2" />
					<Item label="3" value="3" />
					<Item label="4" value="4" />
					<Item label="5" value="5" />
					<Item label="6" value="6" />
					<Item label="7" value="7" />
					<Item label="8" value="8" />
					<Item label="9" value="9" />
					<Item label="10" value="10" />
				</Value>

could it be wrong?

hmm that file is a cache of my current set up. maybe I’ve got the wrong device database entry somewhere?