Simplified Zwave Lock Manager is now KeyMaster

The same code works on my Kwikset Zwave locks :slight_smile:

I must be doing something wrong but I’m so new to HomeAssistant I’m not sure how to debug it.

@firstof9 Did you do anything particular or had any pain points you could share to help me? :smiley:

Only thing you have to do is rename your lock(s).

Interesting. If you look in my code and find the frontdoor_statusreport sensor, you’ll see how it reads codes sent from the lock. I find it odd that companies would use the same codes. But if they’re using a standard then they should be compatible. Good to know Kwikset works though.

One thing I wish they would get right is the ability to delete a PIN, instead of just overwriting a slot with a random number. @ptdalen, is that still an issue? I’m thinking of changing my code so that when I want to delete a PIN, that I issue a “delete all codes” command and then issuing a call to examine every PIN that should be active and then change the state from enabled to disabled to enable again in order to re-add the PIN. I’m not a fan of having random PINS that will open my locks just living in the lock.

2 Likes

Great stuff. Anyone got it working with ID Lock? Does it work without Lovelace?

1 Like

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.