Simplified Zwave Lock Manager is now KeyMaster

UPDATE RELEASED

Just to be clear, since it’s not mentioned in this thread at all… Is forking to the updated OZW version a prerequisite to using this integration?

I’m using the standard HA release, so probably not.

I went through the setup mentioned in the Readme, but all I get is an empty tab after adding the code to lovelace. No cards or anything. Is there any other plugins besides the two mentioned that need to be added?

And just to confirm I’m doing the lovelace code right, there was no resources section so I added it after using HACS to install those two plugins.

##ui-lovelace.yaml 
title: Home
resources:
  - type: module
    url: /community_plugin/lovelace-card-tools/card-tools.js
  - type: module
    url: /community_plugin/lovelace-auto-entities/auto-entities.js
views:
  ....(Bunch of stuff on main tab, displays fine)
# Locks from FutureTense items

  - title: 'garageentry Codes and Configuration'
    path: keypad-garageentry
    icon: 'mdi:lock-smart'
    panel: false
    badges:
      - input_boolean.garageentry_lock_notifications
      - input_boolean.garageentry_dooraccess_notifications
      - input_boolean.garageentry_garageacess_notifications
      - entity: >-
          lock.schlage_allegion_be469zp_connect_smart_deadbolt_locked_garageentry
      - entity: >-
          binary_sensor._access_control_
      - entity: >-
          
    cards:
      - type: vertical-stack
        cards:
          - content: |
              ## Code 1
            type: markdown
          - type: entities
            entities:
              - entity: input_text.garageentry_name_1
              - entity: input_text.garageentry_pin_1
              - entity: input_boolean.enabled_garageentry_1
              - entity: input_boolean.notify_garageentry_1
              - type: divider
              - entity: binary_sensor.active_garageentry_1
              - type: divider
              - type: 'custom:fold-entity-row'
                head:
                  type: section
                  label: Advanced Options
                entities:
                  - entity: input_boolean.reset_advanced_garageentry_1
                  - type: divider
                  - entity: input_boolean.accesslimit_garageentry_1
                  - entity: input_number.accesscount_garageentry_1
                  - type: divider
                  - entity: input_boolean.daterange_garageentry_1
                  - entity: input_datetime.start_date_garageentry_1
                  - entity: input_datetime.end_date_garageentry_1
                  - type: divider
                  - input_boolean.sun_garageentry_1
                  - input_datetime.sun_start_date_garageentry_1
                  - input_datetime.sun_end_date_garageentry_1
                  - type: divider
                  - input_boolean.mon_garageentry_1
                  - input_datetime.mon_start_date_garageentry_1
                  - input_datetime.mon_end_date_garageentry_1
                  - type: divider
                  - input_boolean.tue_garageentry_1
                  - input_datetime.tue_start_date_garageentry_1
                  - input_datetime.tue_end_date_garageentry_1
                  - type: divider
                  - input_boolean.wed_garageentry_1
                  - input_datetime.wed_start_date_garageentry_1
                  - input_datetime.wed_end_date_garageentry_1
                  - type: divider
                  - input_boolean.thu_garageentry_1
                  - input_datetime.thu_start_date_garageentry_1
                  - input_datetime.thu_end_date_garageentry_1
                  - type: divider
                  - input_boolean.fri_garageentry_1
                  - input_datetime.fri_start_date_garageentry_1
                  - input_datetime.fri_end_date_garageentry_1
                  - type: divider
                  - input_boolean.sat_garageentry_1
                  - input_datetime.sat_start_date_garageentry_1
                  - input_datetime.sat_end_date_garageentry_1
      - type: vertical-stack
        cards:
          - content: |
              ## Code 2
            type: markdown
          - type: entities
            entities:
              - entity: input_text.garageentry_name_2
              - entity: input_text.garageentry_pin_2
              - entity: input_boolean.enabled_garageentry_2
              - entity: input_boolean.notify_garageentry_2
              - type: divider
              - entity: binary_sensor.active_garageentry_2
              - type: divider
              - type: 'custom:fold-entity-row'
                head:
                  type: section
                  label: Advanced Options
                entities:
                  - entity: input_boolean.reset_advanced_garageentry_2
                  - type: divider
                  - entity: input_boolean.accesslimit_garageentry_2
                  - entity: input_number.accesscount_garageentry_2
                  - type: divider
                  - entity: input_boolean.daterange_garageentry_2
                  - entity: input_datetime.start_date_garageentry_2
                  - entity: input_datetime.end_date_garageentry_2
                  - type: divider
                  - input_boolean.sun_garageentry_2
                  - input_datetime.sun_start_date_garageentry_2
                  - input_datetime.sun_end_date_garageentry_2
                  - type: divider
                  - input_boolean.mon_garageentry_2
                  - input_datetime.mon_start_date_garageentry_2
                  - input_datetime.mon_end_date_garageentry_2
                  - type: divider
                  - input_boolean.tue_garageentry_2
                  - input_datetime.tue_start_date_garageentry_2
                  - input_datetime.tue_end_date_garageentry_2
                  - type: divider
                  - input_boolean.wed_garageentry_2
                  - input_datetime.wed_start_date_garageentry_2
                  - input_datetime.wed_end_date_garageentry_2
                  - type: divider
                  - input_boolean.thu_garageentry_2
                  - input_datetime.thu_start_date_garageentry_2
                  - input_datetime.thu_end_date_garageentry_2
                  - type: divider
                  - input_boolean.fri_garageentry_2
                  - input_datetime.fri_start_date_garageentry_2
                  - input_datetime.fri_end_date_garageentry_2
                  - type: divider
                  - input_boolean.sat_garageentry_2
                  - input_datetime.sat_start_date_garageentry_2
                  - input_datetime.sat_end_date_garageentry_2
      - type: vertical-stack
        cards:
          - content: |
              ## Code 3
            type: markdown
          - type: entities
            entities:
              - entity: input_text.garageentry_name_3
              - entity: input_text.garageentry_pin_3
              - entity: input_boolean.enabled_garageentry_3
              - entity: input_boolean.notify_garageentry_3
              - type: divider
              - entity: binary_sensor.active_garageentry_3
              - type: divider
              - type: 'custom:fold-entity-row'
                head:
                  type: section
                  label: Advanced Options
                entities:
                  - entity: input_boolean.reset_advanced_garageentry_3
                  - type: divider
                  - entity: input_boolean.accesslimit_garageentry_3
                  - entity: input_number.accesscount_garageentry_3
                  - type: divider
                  - entity: input_boolean.daterange_garageentry_3
                  - entity: input_datetime.start_date_garageentry_3
                  - entity: input_datetime.end_date_garageentry_3
                  - type: divider
                  - input_boolean.sun_garageentry_3
                  - input_datetime.sun_start_date_garageentry_3
                  - input_datetime.sun_end_date_garageentry_3
                  - type: divider
                  - input_boolean.mon_garageentry_3
                  - input_datetime.mon_start_date_garageentry_3
                  - input_datetime.mon_end_date_garageentry_3
                  - type: divider
                  - input_boolean.tue_garageentry_3
                  - input_datetime.tue_start_date_garageentry_3
                  - input_datetime.tue_end_date_garageentry_3
                  - type: divider
                  - input_boolean.wed_garageentry_3
                  - input_datetime.wed_start_date_garageentry_3
                  - input_datetime.wed_end_date_garageentry_3
                  - type: divider
                  - input_boolean.thu_garageentry_3
                  - input_datetime.thu_start_date_garageentry_3
                  - input_datetime.thu_end_date_garageentry_3
                  - type: divider
                  - input_boolean.fri_garageentry_3
                  - input_datetime.fri_start_date_garageentry_3
                  - input_datetime.fri_end_date_garageentry_3
                  - type: divider
                  - input_boolean.sat_garageentry_3
                  - input_datetime.sat_start_date_garageentry_3
                  - input_datetime.sat_end_date_garageentry_3
      - type: vertical-stack
        cards:
          - content: |
              ## Code 4
            type: markdown
          - type: entities
            entities:
              - entity: input_text.garageentry_name_4
              - entity: input_text.garageentry_pin_4
              - entity: input_boolean.enabled_garageentry_4
              - entity: input_boolean.notify_garageentry_4
              - type: divider
              - entity: binary_sensor.active_garageentry_4
              - type: divider
              - type: 'custom:fold-entity-row'
                head:
                  type: section
                  label: Advanced Options
                entities:
                  - entity: input_boolean.reset_advanced_garageentry_4
                  - type: divider
                  - entity: input_boolean.accesslimit_garageentry_4
                  - entity: input_number.accesscount_garageentry_4
                  - type: divider
                  - entity: input_boolean.daterange_garageentry_4
                  - entity: input_datetime.start_date_garageentry_4
                  - entity: input_datetime.end_date_garageentry_4
                  - type: divider
                  - input_boolean.sun_garageentry_4
                  - input_datetime.sun_start_date_garageentry_4
                  - input_datetime.sun_end_date_garageentry_4
                  - type: divider
                  - input_boolean.mon_garageentry_4
                  - input_datetime.mon_start_date_garageentry_4
                  - input_datetime.mon_end_date_garageentry_4
                  - type: divider
                  - input_boolean.tue_garageentry_4
                  - input_datetime.tue_start_date_garageentry_4
                  - input_datetime.tue_end_date_garageentry_4
                  - type: divider
                  - input_boolean.wed_garageentry_4
                  - input_datetime.wed_start_date_garageentry_4
                  - input_datetime.wed_end_date_garageentry_4
                  - type: divider
                  - input_boolean.thu_garageentry_4
                  - input_datetime.thu_start_date_garageentry_4
                  - input_datetime.thu_end_date_garageentry_4
                  - type: divider
                  - input_boolean.fri_garageentry_4
                  - input_datetime.fri_start_date_garageentry_4
                  - input_datetime.fri_end_date_garageentry_4
                  - type: divider
                  - input_boolean.sat_garageentry_4
                  - input_datetime.sat_start_date_garageentry_4
                  - input_datetime.sat_end_date_garageentry_4
      - type: vertical-stack
        cards:
          - content: |
              ## Code 5
            type: markdown
          - type: entities
            entities:
              - entity: input_text.garageentry_name_5
              - entity: input_text.garageentry_pin_5
              - entity: input_boolean.enabled_garageentry_5
              - entity: input_boolean.notify_garageentry_5
              - type: divider
              - entity: binary_sensor.active_garageentry_5
              - type: divider
              - type: 'custom:fold-entity-row'
                head:
                  type: section
                  label: Advanced Options
                entities:
                  - entity: input_boolean.reset_advanced_garageentry_5
                  - type: divider
                  - entity: input_boolean.accesslimit_garageentry_5
                  - entity: input_number.accesscount_garageentry_5
                  - type: divider
                  - entity: input_boolean.daterange_garageentry_5
                  - entity: input_datetime.start_date_garageentry_5
                  - entity: input_datetime.end_date_garageentry_5
                  - type: divider
                  - input_boolean.sun_garageentry_5
                  - input_datetime.sun_start_date_garageentry_5
                  - input_datetime.sun_end_date_garageentry_5
                  - type: divider
                  - input_boolean.mon_garageentry_5
                  - input_datetime.mon_start_date_garageentry_5
                  - input_datetime.mon_end_date_garageentry_5
                  - type: divider
                  - input_boolean.tue_garageentry_5
                  - input_datetime.tue_start_date_garageentry_5
                  - input_datetime.tue_end_date_garageentry_5
                  - type: divider
                  - input_boolean.wed_garageentry_5
                  - input_datetime.wed_start_date_garageentry_5
                  - input_datetime.wed_end_date_garageentry_5
                  - type: divider
                  - input_boolean.thu_garageentry_5
                  - input_datetime.thu_start_date_garageentry_5
                  - input_datetime.thu_end_date_garageentry_5
                  - type: divider
                  - input_boolean.fri_garageentry_5
                  - input_datetime.fri_start_date_garageentry_5
                  - input_datetime.fri_end_date_garageentry_5
                  - type: divider
                  - input_boolean.sat_garageentry_5
                  - input_datetime.sat_start_date_garageentry_5
                  - input_datetime.sat_end_date_garageentry_5
      - type: vertical-stack
        cards:
          - content: |
              ## Code 6
            type: markdown
          - type: entities
            entities:
              - entity: input_text.garageentry_name_6
              - entity: input_text.garageentry_pin_6
              - entity: input_boolean.enabled_garageentry_6
              - entity: input_boolean.notify_garageentry_6
              - type: divider
              - entity: binary_sensor.active_garageentry_6
              - type: divider
              - type: 'custom:fold-entity-row'
                head:
                  type: section
                  label: Advanced Options
                entities:
                  - entity: input_boolean.reset_advanced_garageentry_6
                  - type: divider
                  - entity: input_boolean.accesslimit_garageentry_6
                  - entity: input_number.accesscount_garageentry_6
                  - type: divider
                  - entity: input_boolean.daterange_garageentry_6
                  - entity: input_datetime.start_date_garageentry_6
                  - entity: input_datetime.end_date_garageentry_6
                  - type: divider
                  - input_boolean.sun_garageentry_6
                  - input_datetime.sun_start_date_garageentry_6
                  - input_datetime.sun_end_date_garageentry_6
                  - type: divider
                  - input_boolean.mon_garageentry_6
                  - input_datetime.mon_start_date_garageentry_6
                  - input_datetime.mon_end_date_garageentry_6
                  - type: divider
                  - input_boolean.tue_garageentry_6
                  - input_datetime.tue_start_date_garageentry_6
                  - input_datetime.tue_end_date_garageentry_6
                  - type: divider
                  - input_boolean.wed_garageentry_6
                  - input_datetime.wed_start_date_garageentry_6
                  - input_datetime.wed_end_date_garageentry_6
                  - type: divider
                  - input_boolean.thu_garageentry_6
                  - input_datetime.thu_start_date_garageentry_6
                  - input_datetime.thu_end_date_garageentry_6
                  - type: divider
                  - input_boolean.fri_garageentry_6
                  - input_datetime.fri_start_date_garageentry_6
                  - input_datetime.fri_end_date_garageentry_6
                  - type: divider
                  - input_boolean.sat_garageentry_6
                  - input_datetime.sat_start_date_garageentry_6
                  - input_datetime.sat_end_date_garageentry_6

I’m assuming the yaml is wrong since I do see errors like the below in the logs during a restart:

Failed to set the 'adoptedStyleSheets' property on 'ShadowRoot': Sharing constructed stylesheets in multiple documents is not allowed

Is this working with zwave idlock?

1 Like

Should work with any zwave lock.

Thanks for making this! I installed this the other day and I can’t quite get it to work. I can control the lock from HA and the user info/code says it’s connected on the lock tab in lovelace. However, none of my pin codes seem to be programmed into the lock. It’s a Kwikset 916. Any idea why that is happening? My entity names seem to match the names in the code.

Are you getting errors in your log?

I replied at first saying I worked through the errors but that was with the configuration.yaml file. I’ve deleted that reply because I realized you said the log, not configuration. I’m checking the log now.

I didn’t see any errors other than a dead node that I already knew about. Is there a way to ensure the code gets sent to the lock? Is it supposed to do it automatically? I see there is an automation called “add code”.

When you add a code do you get any errors?

I don’t see any errors. In the log in the UI, it even says the pin was changed. So it seems like it’s trying to update the pin but the lock acts like there is no pin. Entering my pin doesn’t do anything. I can push up to 9 numbers before the lock starts alarming.

Check your OZW_Log.txt for errors too

So I got rid of the dead node and cleared my log so I can start from scratch. I tried to set the pin number and I was able to find a couple errors in the log.

2020-04-02 14:23:05.997 Info, Node004, Sending (Query) message (Callback ID=0x12, Expected Reply=0x04) - PowerlevelCmd_Get (Node=4): 0x01, 0x09, 0x00, 0x13, 0x04, 0x02, 0x73, 0x02, 0x25, 0x12, 0xa5
2020-04-02 14:23:06.000 Detail, Node004,   Received: 0x01, 0x04, 0x01, 0x13, 0x00, 0xe9
2020-04-02 14:23:06.000 Error, Node004, ERROR: ZW_SEND_DATA could not be delivered to Z-Wave stack
2020-04-02 14:23:06.018 Detail, Node004,   Received: 0x01, 0x07, 0x00, 0x13, 0x12, 0x00, 0x00, 0x02, 0xfb
2020-04-02 14:23:06.018 Detail, Node004,   ZW_SEND_DATA Request with callback ID 0x12 received (expected 0x12)
2020-04-02 14:23:06.018 Info, Node004, Request RTT 21 Average Request RTT 94
2020-04-02 14:23:06.018 Detail,   Expected callbackId was received
2020-04-02 14:23:06.041 Detail, Node004,   Received: 0x01, 0x07, 0x00, 0x13, 0x12, 0x00, 0x00, 0x04, 0xfd
2020-04-02 14:23:06.041 Detail, Node004,   ZW_SEND_DATA Request with callback ID 0x12 received (expected 0x00)
2020-04-02 14:23:06.041 Warning, Node004, WARNING: Unexpected Callback ID received
2020-04-02 14:23:06.061 Detail, Node004,   Received: 0x01, 0x22, 0x00, 0x04, 0x00, 0x04, 0x1c, 0x98, 0x81, 0x08, 0x8e, 0x73, 0x34, 0xea, 0xb3, 0x03, 0x16, 0x6a, 0x2c, 0x32, 0x05, 0x9c, 0x09, 0x41, 0x34, 0x84, 0xa7, 0xde, 0x4a, 0xa9, 0xa4, 0x17, 0xdd, 0x1d, 0xf7, 0x5e
2020-04-02 14:23:06.061 Info, Raw: 0x98, 0x81, 0x08, 0x8e, 0x73, 0x34, 0xea, 0xb3, 0x03, 0x16, 0x6a, 0x2c, 0x32, 0x05, 0x9c, 0x09, 0x41, 0x34, 0x84, 0xa7, 0xde, 0x4a, 0xa9, 0xa4, 0x17, 0xdd, 0x1d, 0xf7, 0x5e
2020-04-02 14:23:06.062 Detail, Node004, Decrypted Packet: 0x00, 0x63, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
2020-04-02 14:23:06.062 Detail, 
2020-04-02 14:23:06.062 Info, Node004, Response RTT 65 Average Response RTT 163
2020-04-02 14:23:06.062 Info, Node004, User Code Packet is 4
2020-04-02 14:23:06.062 Detail, Node004, Refreshed Value: old value=1821330, new value=6bd81254, type=raw
2020-04-02 14:23:06.062 Detail, Node004, Changes to this value are not verified
2020-04-02 14:23:06.062 Info, Node004, Received User Code Report from node 4 for User Code 1 (Available)
2020-04-02 14:23:06.062 Detail, Node004, Notification: ValueChanged
2020-04-02 14:23:15.997 Error, Node004, ERROR: Dropping command, expected response not received after 1 attempt(s)

So I removed my z wave stick, lock, etc and factory reset the lock and z wave stick. It’s still doing the same thing. I used the dev tools to call the service lock.set.usercode and got the following error.

You have to populate the required data as shown below the service call.

I’m obviously new at this. I noticed my error shortly after I posted. I still got an error, though. I also found that I can change the codes elsewhere in HA. That’s all I really wanted the lock manager for so I ended up getting rid of it and now everything works.

I’m really jazzed about trying this with my new lock. However, I already have an existing, extensively used input boolean called “input_boolean.allow_automation_execution”, as it happens.

Can this be made more specific in your code? Like 'input_boolean.lock_manager_allow_automation_execution`? Same with the binary sensor? ‘binary_sensor.lock_manager_allow_automation’? Should I just do a find/replace in your code?

Thanks!

1 Like

Mod the template file(s) :wink:

I just realized I was not getting any notifications when different users opened our front door lock, I assume this is because a recent update broke something. When I look at my lock tab I see the following

Door Lock

I can still see the automation’s but they do not fire because they are not part of the automations.yaml

I also see there is an update but I do not really want to go through installing the whole thing again, I can still disable codes and change them from Home Assistant. It would be nice to get the notifications back when a user enters their code. I know there is an input.boolean.frontdoor_notify for each user but I am not sure how to implement this so it triggers a notification.

I have most of my automations setup now in Node Red so if that is an option I am all ears

Thanks in advance