This worked great! Thank you so much for posting this.
I understand that this was originally made for a specific schlage model, but is there any reason why it wouldn’t work for generic zwave locks? I have a yale lock I’m trying to manage with this but I’m having issues with trying to add a code.
Do different zwave locks have different alarm_type_general_actions
that could cause it not to work for your implementation?
Thanks
I don’t think it will work for generic locks. @ptdalen wrote the code that I based this project on, and at the heart of it is code specific to the Schlage lock.
Although it should work for most brands of Schlage zwave. My Schlage lock died a month ago and Schlage sent me a new one free of charge. When I added the new lock into the system, I was amazed that code worked without one change. In fact the PINS I had already specified for the lock automatically got added to the locks. The only keypad programming I did was the zwave include.
The same code works on my Kwikset Zwave locks
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?
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.
Great stuff. Anyone got it working with ID Lock? Does it work without Lovelace?
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?
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.