Schlage Connect Locks - HA Integration Needs Attention

hmm I guess I can throw up a docker container on my unraid box. Ideally my unraid box would just run hassio itself. May fight with it another time but just seems like a headache

Just a heads up to everyone who is using ptdalen code, if you update to 0.86 you will have to change a sensor name.

You have to change the date__time sensor, since the new update no longer allows two underscores together.

I changed mine to date_time_report and it seems to work fine. There are about 60 of them to replace, but if you use the search and replace on a notepad editor it should only take a couple of seconds.

1 Like

Iā€™ve updated my git repository with the fixes for 86.2 If youā€™re using an older version of HA, pull the previous version. Thanks for the heads up!

Does anyone know how to update OZW to identify the new Schlage BE469ZP? Iā€™m finally going end-to-end Zwave plus by moving to these Zwave Plus locks.

1 Like

@ptdalen

I am a Long time Vera user and am working on switching everything over to my new rPi/Hassio install. I still need to read through the documentation a little more thoroughly, but I am quite comfortable with Python/YAML/Jinja2.

I have several integrations up and running, and have managed to add several z-wave devices, including my Schlage connect deadbolt, but Iā€™m missing something with getting your integration working. I can lock/unlock, but I dont have cards giving me the ability to manipulate lock codes, etcā€¦ What all files / YAML configurations from your git repo do I need to get this going? If I missed instructions somewhere, my sincerest apologiesā€¦ Feel free to point me to them and I will happily read / follow them!

Do I just thee the door_locks.yaml? (Or the lock_package_for_one_deadbolt.txt file?) I renamed the entities to match what you have in the comments of your YAML file, and have added it to the newly created config/packages directory and added ā€œpackages: !include_dir_named packagesā€ to my main configuration.yaml. I also commented out the pushbullet stuff temporarily just to try to get the basics up and running, but plan to add that back after I get it to a point where I can edit lock codes, etcā€¦

What else am I missing to get this up and running? Any pointers/insight you have would be greatly appreciated!

-Kerry

Do you have all the input texts, booleanss, etc that get created? Are you in the latest version of HA? Did you install the package on a version prior to 85? I suspect that Iā€™ll have to update for Lovelace for new installs?

I realize that my last message was not a reply so you probably did not get a notice. So, if you had this up and running prior to 84.x, you should have had a panel for the lock codes, etc. When upgrading to 85.x, HA converted the current panels, to lovelace. Iā€™m not sure what would happen if you installed the package at this time, but my guess, based on your comments is ā€œnothingā€, so the panel would not be created. Iā€™m not at all a lovelace expert. I ended up converting the ā€œoldā€ converted lovelace to a swiper lovelace for the codes. Iā€™m not 100% sure Iā€™ll keep it that way, its a bit slow, probably because there are a lot of entities to manage. Anyway, 1st thing you need to do is verify that you have the 18 input_booleans, input texts, date_times, etc used for names, codes, and swiches, also the 18 scripts to delete the codes. Automations, too.

If you see all of those, then itā€™s a UI issue, if you dont see those then something else is wrong, and weā€™ll need to figure it out

Iā€™m still learning lovelace, but here is the code that was autocreated when I updated HA to the latest version

  - badges: []
    cards:
      - entities:
          - input_text.door_keypad_1_name
          - input_text.door_keypad_1_code
          - input_select.door_keypad_1_access_schedule
          - input_datetime.door_keypad_1_date_start
          - input_datetime.door_keypad_1_date_end
          - input_boolean.door_keypad_1_front_switch
          - input_boolean.door_keypad_1_back_switch
          - input_boolean.door_keypad_1_garage_switch
          - script.door_keypad_1_delete
        title: Entry Code 1
        type: entities
      - entities:
          - input_text.door_keypad_2_name
          - input_text.door_keypad_2_code
          - input_select.door_keypad_2_access_schedule
          - input_datetime.door_keypad_2_date_start
          - input_datetime.door_keypad_2_date_end
          - input_boolean.door_keypad_2_front_switch
          - input_boolean.door_keypad_2_back_switch
          - input_boolean.door_keypad_2_garage_switch
          - script.door_keypad_2_delete
        title: Entry Code 2
        type: entities
      - entities:
          - input_text.door_keypad_3_name
          - input_text.door_keypad_3_code
          - input_select.door_keypad_3_access_schedule
          - input_datetime.door_keypad_3_date_start
          - input_datetime.door_keypad_3_date_end
          - input_boolean.door_keypad_3_front_switch
          - input_boolean.door_keypad_3_back_switch
          - input_boolean.door_keypad_3_garage_switch
          - script.door_keypad_3_delete
        title: Entry Code 3
        type: entities
      - entities:
          - input_text.door_keypad_4_name
          - input_text.door_keypad_4_code
          - input_select.door_keypad_4_access_schedule
          - input_datetime.door_keypad_4_date_start
          - input_datetime.door_keypad_4_date_end
          - input_boolean.door_keypad_4_front_switch
          - input_boolean.door_keypad_4_back_switch
          - input_boolean.door_keypad_4_garage_switch
          - script.door_keypad_4_delete
        title: Entry Code 4
        type: entities
      - entities:
          - input_text.door_keypad_5_name
          - input_text.door_keypad_5_code
          - input_select.door_keypad_5_access_schedule
          - input_datetime.door_keypad_5_date_start
          - input_datetime.door_keypad_5_date_end
          - input_boolean.door_keypad_5_front_switch
          - input_boolean.door_keypad_5_back_switch
          - input_boolean.door_keypad_5_garage_switch
          - script.door_keypad_5_delete
        title: Entry Code 5
        type: entities
      - entities:
          - input_text.door_keypad_6_name
          - input_text.door_keypad_6_code
          - input_select.door_keypad_6_access_schedule
          - input_datetime.door_keypad_6_date_start
          - input_datetime.door_keypad_6_date_end
          - input_boolean.door_keypad_6_front_switch
          - input_boolean.door_keypad_6_back_switch
          - input_boolean.door_keypad_6_garage_switch
          - script.door_keypad_6_delete
        title: Entry Code 6
        type: entities
      - entities:
          - input_text.door_keypad_7_name
          - input_text.door_keypad_7_code
          - input_select.door_keypad_7_access_schedule
          - input_datetime.door_keypad_7_date_start
          - input_datetime.door_keypad_7_date_end
          - input_boolean.door_keypad_7_front_switch
          - input_boolean.door_keypad_7_back_switch
          - input_boolean.door_keypad_7_garage_switch
          - script.door_keypad_7_delete
        title: Entry Code 7
        type: entities
      - entities:
          - input_text.door_keypad_8_name
          - input_text.door_keypad_8_code
          - input_select.door_keypad_8_access_schedule
          - input_datetime.door_keypad_8_date_start
          - input_datetime.door_keypad_8_date_end
          - input_boolean.door_keypad_8_front_switch
          - input_boolean.door_keypad_8_back_switch
          - input_boolean.door_keypad_8_garage_switch
          - script.door_keypad_8_delete
        title: Entry Code 8
        type: entities
      - entities:
          - input_text.door_keypad_9_name
          - input_text.door_keypad_9_code
          - input_select.door_keypad_9_access_schedule
          - input_datetime.door_keypad_9_date_start
          - input_datetime.door_keypad_9_date_end
          - input_boolean.door_keypad_9_front_switch
          - input_boolean.door_keypad_9_back_switch
          - input_boolean.door_keypad_9_garage_switch
          - script.door_keypad_9_delete
        title: Entry Code 9
        type: entities
      - entities:
          - input_text.door_keypad_10_name
          - input_text.door_keypad_10_code
          - input_select.door_keypad_10_access_schedule
          - input_datetime.door_keypad_10_date_start
          - input_datetime.door_keypad_10_date_end
          - input_boolean.door_keypad_10_front_switch
          - input_boolean.door_keypad_10_back_switch
          - input_boolean.door_keypad_10_garage_switch
          - script.door_keypad_10_delete
        title: Entry Code 10
        type: entities
      - entities:
          - input_text.door_keypad_11_name
          - input_text.door_keypad_11_code
          - input_select.door_keypad_11_access_schedule
          - input_datetime.door_keypad_11_date_start
          - input_datetime.door_keypad_11_date_end
          - input_boolean.door_keypad_11_front_switch
          - input_boolean.door_keypad_11_back_switch
          - input_boolean.door_keypad_11_garage_switch
          - script.door_keypad_11_delete
        title: Entry Code 11
        type: entities
      - entities:
          - input_text.door_keypad_12_name
          - input_text.door_keypad_12_code
          - input_select.door_keypad_12_access_schedule
          - input_datetime.door_keypad_12_date_start
          - input_datetime.door_keypad_12_date_end
          - input_boolean.door_keypad_12_front_switch
          - input_boolean.door_keypad_12_back_switch
          - input_boolean.door_keypad_12_garage_switch
          - script.door_keypad_12_delete
        title: Entry Code 12
        type: entities
      - entities:
          - input_text.door_keypad_13_name
          - input_text.door_keypad_13_code
          - input_select.door_keypad_13_access_schedule
          - input_datetime.door_keypad_13_date_start
          - input_datetime.door_keypad_13_date_end
          - input_boolean.door_keypad_13_front_switch
          - input_boolean.door_keypad_13_back_switch
          - input_boolean.door_keypad_13_garage_switch
          - script.door_keypad_13_delete
        title: Entry Code 13
        type: entities
      - entities:
          - input_text.door_keypad_14_name
          - input_text.door_keypad_14_code
          - input_select.door_keypad_14_access_schedule
          - input_datetime.door_keypad_14_date_start
          - input_datetime.door_keypad_14_date_end
          - input_boolean.door_keypad_14_front_switch
          - input_boolean.door_keypad_14_back_switch
          - input_boolean.door_keypad_14_garage_switch
          - script.door_keypad_14_delete
        title: Entry Code 14
        type: entities
      - entities:
          - input_text.door_keypad_15_name
          - input_text.door_keypad_15_code
          - input_select.door_keypad_15_access_schedule
          - input_datetime.door_keypad_15_date_start
          - input_datetime.door_keypad_15_date_end
          - input_boolean.door_keypad_15_front_switch
          - input_boolean.door_keypad_15_back_switch
          - input_boolean.door_keypad_15_garage_switch
          - script.door_keypad_15_delete
        title: Entry Code 15
        type: entities
      - entities:
          - input_select.door_keypad_16_access_schedule
          - input_text.door_keypad_16_name
          - input_text.door_keypad_16_code
          - input_boolean.door_keypad_16_front_switch
          - input_boolean.door_keypad_16_back_switch
          - input_boolean.door_keypad_16_garage_switch
          - script.door_keypad_16_delete
        title: One Time Use Code 1
        type: entities
      - entities:
          - input_select.door_keypad_17_access_schedule
          - input_text.door_keypad_17_name
          - input_text.door_keypad_17_code
          - input_boolean.door_keypad_17_front_switch
          - input_boolean.door_keypad_17_back_switch
          - input_boolean.door_keypad_17_garage_switch
          - script.door_keypad_17_delete
        title: One Time Use Code 2
        type: entities
      - entities:
          - input_select.door_keypad_18_access_schedule
          - input_text.door_keypad_18_name
          - input_text.door_keypad_18_code
          - input_boolean.door_keypad_18_front_switch
          - input_boolean.door_keypad_18_back_switch
          - input_boolean.door_keypad_18_garage_switch
          - script.door_keypad_18_delete
        title: One Time Use Code 3
        type: entities

    icon: 'mdi:lock-smart'
    path: keypads
    title: 'Door Lock Information, Codes and Configuration'

And here is an updated lovelace using the swiper card.

cards:
  - cards:
      - content: |
          ## Door Lock Info
          The first few cards show the door reports

          ## Code Management
          The next cards are for user code slot management
          Codes 1-10 are for Family Members
          Codes 11-15 are for Workers
          Codes 16-18 are one time use slots

          ##  The last few cards are for Z-Wave options
        type: markdown
      - entities:
          - lock.lock_front_door_lock
          - sensor.front_door_report
          - sensor.frontdoor_code
        title: Front Door Info
        type: entities
        show_header_toggle: false
      - entities:
          - lock.lock_back_door_lock
          - sensor.back_door_report
          - sensor.backdoor_code
        title: Back Door Info
        type: entities
        show_header_toggle: false
      - entities:
          - lock.lock_garage_door_lock
          - sensor.garage_door_report
          - sensor.garagedoor_code
        title: Garage Door Info
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_1_name
          - input_text.door_keypad_1_code
          - input_select.door_keypad_1_access_schedule
          - input_datetime.door_keypad_1_date_start
          - input_datetime.door_keypad_1_date_end
          - input_boolean.door_keypad_1_front_switch
          - input_boolean.door_keypad_1_back_switch
          - input_boolean.door_keypad_1_garage_switch
          - script.door_keypad_1_delete
        title: Entry Code 1
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_2_name
          - input_text.door_keypad_2_code
          - input_select.door_keypad_2_access_schedule
          - input_datetime.door_keypad_2_date_start
          - input_datetime.door_keypad_2_date_end
          - input_boolean.door_keypad_2_front_switch
          - input_boolean.door_keypad_2_back_switch
          - input_boolean.door_keypad_2_garage_switch
          - script.door_keypad_2_delete
        title: Entry Code 2
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_3_name
          - input_text.door_keypad_3_code
          - input_select.door_keypad_3_access_schedule
          - input_datetime.door_keypad_3_date_start
          - input_datetime.door_keypad_3_date_end
          - input_boolean.door_keypad_3_front_switch
          - input_boolean.door_keypad_3_back_switch
          - input_boolean.door_keypad_3_garage_switch
          - script.door_keypad_3_delete
        title: Entry Code 3
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_4_name
          - input_text.door_keypad_4_code
          - input_select.door_keypad_4_access_schedule
          - input_datetime.door_keypad_4_date_start
          - input_datetime.door_keypad_4_date_end
          - input_boolean.door_keypad_4_front_switch
          - input_boolean.door_keypad_4_back_switch
          - input_boolean.door_keypad_4_garage_switch
          - script.door_keypad_4_delete
        title: Entry Code 4
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_5_name
          - input_text.door_keypad_5_code
          - input_select.door_keypad_5_access_schedule
          - input_datetime.door_keypad_5_date_start
          - input_datetime.door_keypad_5_date_end
          - input_boolean.door_keypad_5_front_switch
          - input_boolean.door_keypad_5_back_switch
          - input_boolean.door_keypad_5_garage_switch
          - script.door_keypad_5_delete
        title: Entry Code 5
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_6_name
          - input_text.door_keypad_6_code
          - input_select.door_keypad_6_access_schedule
          - input_datetime.door_keypad_6_date_start
          - input_datetime.door_keypad_6_date_end
          - input_boolean.door_keypad_6_front_switch
          - input_boolean.door_keypad_6_back_switch
          - input_boolean.door_keypad_6_garage_switch
          - script.door_keypad_6_delete
        title: Entry Code 6
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_7_name
          - input_text.door_keypad_7_code
          - input_select.door_keypad_7_access_schedule
          - input_datetime.door_keypad_7_date_start
          - input_datetime.door_keypad_7_date_end
          - input_boolean.door_keypad_7_front_switch
          - input_boolean.door_keypad_7_back_switch
          - input_boolean.door_keypad_7_garage_switch
          - script.door_keypad_7_delete
        title: Entry Code 7
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_8_name
          - input_text.door_keypad_8_code
          - input_select.door_keypad_8_access_schedule
          - input_datetime.door_keypad_8_date_start
          - input_datetime.door_keypad_8_date_end
          - input_boolean.door_keypad_8_front_switch
          - input_boolean.door_keypad_8_back_switch
          - input_boolean.door_keypad_8_garage_switch
          - script.door_keypad_8_delete
        title: Entry Code 8
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_9_name
          - input_text.door_keypad_9_code
          - input_select.door_keypad_9_access_schedule
          - input_datetime.door_keypad_9_date_start
          - input_datetime.door_keypad_9_date_end
          - input_boolean.door_keypad_9_front_switch
          - input_boolean.door_keypad_9_back_switch
          - input_boolean.door_keypad_9_garage_switch
          - script.door_keypad_9_delete
        title: Entry Code 9
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_10_name
          - input_text.door_keypad_10_code
          - input_select.door_keypad_10_access_schedule
          - input_datetime.door_keypad_10_date_start
          - input_datetime.door_keypad_10_date_end
          - input_boolean.door_keypad_10_front_switch
          - input_boolean.door_keypad_10_back_switch
          - input_boolean.door_keypad_10_garage_switch
          - script.door_keypad_10_delete
        title: Entry Code 10
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_11_name
          - input_text.door_keypad_11_code
          - input_select.door_keypad_11_access_schedule
          - input_datetime.door_keypad_11_date_start
          - input_datetime.door_keypad_11_date_end
          - input_boolean.door_keypad_11_front_switch
          - input_boolean.door_keypad_11_back_switch
          - input_boolean.door_keypad_11_garage_switch
          - script.door_keypad_11_delete
        title: Entry Code 11
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_12_name
          - input_text.door_keypad_12_code
          - input_select.door_keypad_12_access_schedule
          - input_datetime.door_keypad_12_date_start
          - input_datetime.door_keypad_12_date_end
          - input_boolean.door_keypad_12_front_switch
          - input_boolean.door_keypad_12_back_switch
          - input_boolean.door_keypad_12_garage_switch
          - script.door_keypad_12_delete
        title: Entry Code 12
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_13_name
          - input_text.door_keypad_13_code
          - input_select.door_keypad_13_access_schedule
          - input_datetime.door_keypad_13_date_start
          - input_datetime.door_keypad_13_date_end
          - input_boolean.door_keypad_13_front_switch
          - input_boolean.door_keypad_13_back_switch
          - input_boolean.door_keypad_13_garage_switch
          - script.door_keypad_13_delete
        title: Entry Code 13
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_14_name
          - input_text.door_keypad_14_code
          - input_select.door_keypad_14_access_schedule
          - input_datetime.door_keypad_14_date_start
          - input_datetime.door_keypad_14_date_end
          - input_boolean.door_keypad_14_front_switch
          - input_boolean.door_keypad_14_back_switch
          - input_boolean.door_keypad_14_garage_switch
          - script.door_keypad_14_delete
        title: Entry Code 14
        type: entities
        show_header_toggle: false
      - entities:
          - input_text.door_keypad_15_name
          - input_text.door_keypad_15_code
          - input_select.door_keypad_15_access_schedule
          - input_datetime.door_keypad_15_date_start
          - input_datetime.door_keypad_15_date_end
          - input_boolean.door_keypad_15_front_switch
          - input_boolean.door_keypad_15_back_switch
          - input_boolean.door_keypad_15_garage_switch
          - script.door_keypad_15_delete
        title: Entry Code 15
        type: entities
        show_header_toggle: false
      - entities:
          - input_select.door_keypad_16_access_schedule
          - input_text.door_keypad_16_name
          - input_text.door_keypad_16_code
          - input_boolean.door_keypad_16_front_switch
          - input_boolean.door_keypad_16_back_switch
          - input_boolean.door_keypad_16_garage_switch
          - script.door_keypad_16_delete
        title: One Time Use Code 1
        type: entities
        show_header_toggle: false
      - entities:
          - input_select.door_keypad_17_access_schedule
          - input_text.door_keypad_17_name
          - input_text.door_keypad_17_code
          - input_boolean.door_keypad_17_front_switch
          - input_boolean.door_keypad_17_back_switch
          - input_boolean.door_keypad_17_garage_switch
          - script.door_keypad_17_delete
        title: One Time Use Code 2
        type: entities
        show_header_toggle: false
      - entities:
          - input_select.door_keypad_18_access_schedule
          - input_text.door_keypad_18_name
          - input_text.door_keypad_18_code
          - input_boolean.door_keypad_18_front_switch
          - input_boolean.door_keypad_18_back_switch
          - input_boolean.door_keypad_18_garage_switch
          - script.door_keypad_18_delete
        title: One Time Use Code 3
        type: entities
        show_header_toggle: false
      - entities:
          - input_select.lock_zwave_option_3_front
          - input_select.lock_zwave_option_4_front
          - input_select.lock_zwave_option_5_front
          - input_select.lock_zwave_option_7_front
          - input_select.lock_zwave_option_8_front
          - input_select.lock_zwave_option_9_front
          - input_select.lock_zwave_option_10_front
          - input_select.lock_zwave_option_11_front
          - input_select.lock_zwave_option_15_front
          - input_select.lock_zwave_option_16_front
        title: Front Door Configuration Options
        type: entities
        show_header_toggle: false
      - entities:
          - input_select.lock_zwave_option_3_back
          - input_select.lock_zwave_option_4_back
          - input_select.lock_zwave_option_5_back
          - input_select.lock_zwave_option_7_back
          - input_select.lock_zwave_option_8_back
          - input_select.lock_zwave_option_9_back
          - input_select.lock_zwave_option_10_back
          - input_select.lock_zwave_option_11_back
          - input_select.lock_zwave_option_15_back
          - input_select.lock_zwave_option_16_back
        title: Back Door Configuration Options
        type: entities
        show_header_toggle: false
        parameters:
          spaceBetween: 8
          scrollbar:
            hide: false
            draggable: true
            snapOnRelease: true
    type: 'custom:swipe-card'
type: horizontal-stack

Details on the required setup for the card can be found here.

I do see the input boolean/datetime, and the scripts when I scroll through the available entities for automations, so that seems promising. I am, however, seeing an error message in the log file:

WARNING (MainThread) [homeassistant.components.sensor.template] Could not render template Front Door Report, the state is unknown.

I did attempt adding some of the lovelace code posted in this thread by @mcoleman001, but Im getting an error "Custom element doesnā€™t exist: layout-card. I did find the layout-card.js and place it in my config/www directory and add it as a resource in my lovelace configuration file, but that didnā€™t resolve the errorā€¦ If anyone has suggestions Iā€™d really appreciate itā€¦ or if you have a different lovelace config just to get it semi-functional while I continue down the sharp learning curve to figure all this out, I am open to all suggestions! :slight_smile:

EDIT - I see you posted some lovelace code aboveā€¦ I will give that a shot and see what happens!

Thanks in advance for your assistance!

So your first post with the auto-created lovelace config works perfectly (minus the extra locks I dont have). Iā€™ll give getting the swiper card version working nextā€¦ thanks again!

Good deal. I like the swiper card a bit better than the standard, mostly because it kind of ā€œhidesā€ the codes. Security through obscurity, haha. Obviously the codes are easy enough to get to, but at least they are not just showing on the main UI panel.

So I havenā€™t implemented any of the original code for this setup. Would I now basically just copy and paste this updated code of yours and change my lock names? Also what yaml file does this get pasted in? ui-lovelace.yaml?

This is the best place to start

But yes, basically get the package you need, put it in packages, and rename your entities appropiately. The code is pretty well commented, so it should be easy to follow.

The only recent change is that the lovelace needs to be added afterwards. Iā€™ll eventually figure out how to get the lovelace included, or will update my package comments, accordingly.

My lock entity id is lock.back_door, how do I modify the following part of the code to match?

          node_id: >-
            {{ states['lock']['lock_front_door_lock'].attributes.node_id }}

Here you go:

node_id: >-
            {{ states['lock']['back_door'].attributes.node_id }}
2 Likes

@ptdalen any idea how to get the new Schlage BE469ZP lock added to the OZW so that it gets recognized?

I wish I did. It sounds like it may not be a supported device yet?

Iā€™m suprised it does not ā€œjust workā€ Iā€™m definitely no programmer, or expert, just good at reading other people code. :slight_smile:

So, what happens when you try to add it?

I poked around here

And did not see anything specific for that lock.

comes up as unknown, I believe it has all the same capabilities, just using the Wave Plus chip, but it shows with a ZP at the end and throws up identifying it.

Hmm, does it ā€œworkā€ can it lock/unlock? Did you have a previous version of this lock