ZWave-JS Kwikset 910 Manual status updater

I think I have a similar (minor) issue. Before last week, the lock status didn’t update when manually locking/unlocking. So I built a little node-red thing to translate the alarmType values into a more user-friendly status. And it worked!
Since the update, it appears that lock/unlock is displaying correctly. However, the alarmType value is stuck on “undefined”. It’s not the worst thing in the world, but I’d like to be able to get that information. I’m using zwavejs2mqtt. It sounds like I’m just out of luck, at least for now. Does that sound right?

Using Kwikset 910. I have been using this Blueprint successfully until I updated Z-Wave to 1.14 and above when the alarmtype stopped being updated. I am running 1.16 now and am having the same issue.

I believe its due to “it may be necessary to set group 1 association to the controller node”

How do I do that?

Unfortunately, I’m new enough that I really don’t trust myself to tell anyone how to do anything. I have the same lock, but I’m running zwavejs2mqtt, so it might be a different setup than what you have. For me, I looked at the individual node (device) in zwavejs2mqtt, and then the Groups tab let me manage associations.

What I can tell you is that for me, it didn’t seem to make a difference. I haven’t been able to get alarmType to update since upgrading over a week ago. I hope this comes back; it was nice to add another level to my own logging.

I found a workaround - monitor Z-Wave events, and you’ll be able to get more info.

1 Like

I found a workaround also…I moved the Kwikset lock back to HomeSeer where it works.

1 Like

Thank you @rickprime Using Z-Wave events as triggers has allowed me to make my door lock automations work correctly running latest OS, Core and Z-Wave JS

It took me a little bit to wrap my head around how to do it, it works exactly how I want it to now.

1 Like

Anyone have the issue where the lock is updating status on manual lock/unlock but it is NOT updating status when toggled through home assistant? If I manually run the zwavejs_refresh_values service, it does update.

1 Like

One of my 910’s is still being finicky. I’m running zwavejs2mqtt master, config updated, debug logging. When I manually operate the lock, there are no entries in the debug log. In Groups there is 1 association, “Lifeline ZStick Gen5 USB Controller”. I tried removing and readding the association and then reinterviewing. Still nothing printed in the debug log when I operate the lock manually. I’m actually not positive it used to work before I moved to zwavejs. Do some of these locks just not push status correctly?

Edit: excluded / included and now it’s working as expected. Shrug.

I saw your work and said, hey, I have one of those, too for this same lock.
Thought I would share mine, and if you are interested in tweaking the icons and pointing out who entered the code, I have that covered…
This goes under the template integration in the new way templates are supposed to be used going forward.

Hi. I’m not very good using code or anything so I need your help.
I have managed to add my Kwikset 910 to my HA using Z-Wave (HA Integration + Z-Wave JS addon) and it works great… except for manual status update. If I open/close the lock manually, it won’t update the status in my HA.

I’ve tried using the blueprint in this post, but it doesn’t seem to work anymore. Alarmlevel and alarmtype sensors are always in “unknown” state.
Do anybody knows how to make it work in 2022.6.7 ? I would appreciate if you give kind of a “full guide” or a step by step indication to achieve this!

Thanks.

They are disabled by default.
To enable them, select settings menu, then
devices and services
in the zwave-js card select devices
select your lock
under sensors the alarmlevel and alarmtype should be listed so you can enable them.

Alternatively, you can use an automation based on the zwave_js_notification event.

Here’s what I have…

  - name: "Garage Door Lock Log"
    unique_id: garage_door_lock_log
    state: >-
          {%- if is_state("sensor.garage_door_lock_alarmtype", "19") -%}
            Unlocked by Usercode
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "9") %}
            Lock Jammed
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "18") %}
            Unlocked
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "23") %}
            Lock Jammed
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "24") %}
            Locked by Z-Wave
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "25") %}
            Unlocked by Z-Wave
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "27") %}
            Auto-Relocked
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "21") %}
            Manually Locked
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "22") %}
            Manually Unlocked
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "161") %}
            Tampered!
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "167") %}
            Low Battery
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "168") %}
            Critical Battery
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "169") %}
            Battery Too Low to Operate
          {%- else -%}
            Unknown Level {{ states("sensor.garage_door_lock_alarmLevel") }} Type {{ state("sensor.garage_door_lock_alarmtype") }}
          {%- endif %}
    icon: >-
          {%- if is_state("sensor.garage_door_lock_alarmtype", "19") -%}
            mdi:lock-open
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "9") %}
            mdi:lock-alert
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "18") %}
            mdi:lock-open
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "23") %}
            mdi:lock-open-alert          
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "24") %}
            mdi:lock
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "25") %}
            mdi:lock-open
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "27") %}
            mdi:lock-clock
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "21") %}
            mdi:lock
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "22") %}
            mdi:lock-open
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "161") %}
            mdi:alert
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "167") %}
            mdi:battery-10
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "168") %}
            mdi:battery-alert-variant-outline
          {%- elif is_state("sensor.garage_door_lock_alarmtype", "169") %}
            mdi:battery-alert-variant-outline
          {%- else -%}
            mdi:lock-open
          {%- endif %}
    attributes:
      user_code: >
            {%- if is_state("sensor.garage_door_lock_alarmtype", "19") -%}
              {%- if is_state("sensor.front_door_lock_alarmLevel", "0") -%}
                Master Code
              {%- elif is_state("sensor.garage_door_lock_alarmLevel", "1") -%}
                Daniel
              {%- elif is_state("sensor.garage_door_lock_alarmLevel", "2") -%}
                May
              {%- elif is_state("sensor.garage_door_lock_alarmLevel", "3") -%}
                Paul
              {%- elif is_state("sensor.garage_door_lock_alarmLevel", "6") -%}
                Guest
              {%- else -%}
                Code: {{ sensor.garage_door_lock_alarmLevel }}
              {% endif %}
            {% else %}
              n/a
            {%- endif %}
      date: >
           {{ as_timestamp(states("input_datetime.garage_door_lock_last_changed"),0)| timestamp_custom("%A %b %-d", true) }}
      time: >
            {{ as_timestamp(states("input_datetime.garage_door_lock_last_changed"),0)| timestamp_custom("%-I:%M%p", true) }}

# Garage Door Lock Log
  - name: "Garage Door Lock Log Message"
    unique_id: garage_door_lock_log_message
    state: '{{ states("sensor.garage_door_lock_log") }}'

  - name: "Garage Door Lock Log User"
    unique_id: garage_door_lock_log_user
    state: '{{ state_attr("sensor.garage_door_lock_log", "user_code") }}'

  - name: "Garage Door Lock Log Date"
    unique_id: garage_door_lock_log_date
    state: '{{ state_attr("sensor.garage_door_lock_log","date") }}'
true) }}'
    
  - name: "Garage Door Lock Log Time"
    unique_id: garage_door_lock_log_time
    state: '{{ state_attr("sensor.garage_door_lock_log","time") }}'
true) }}'

type: vertical-stack
cards:
  - type: horizontal-stack
    cards:
      - type: markdown
        content: '## Front Door'
        card_mod:
          class: top-level-card
        style: |
          ha-card {
          text-align: center;
          background-color: rgba(67,101,181,0.87);
          -webkit-box-shadow: 14px 14px 5px 0px rgba(7,5,130,1);
          -moz-box-shadow: 14px 14px 5px 0px rgba(7,5,130,1);
          box-shadow: 5px 5px 5px 0px rgba(7,5,130,1);
          }    
      - type: markdown
        content: '## Garage'
        card_mod:
          class: top-level-card
        style: |
          ha-card {
          text-align: center;
          background-color: rgba(67,101,181,0.87);
          -webkit-box-shadow: 14px 14px 5px 0px rgba(7,5,130,1);
          -moz-box-shadow: 14px 14px 5px 0px rgba(7,5,130,1);
          box-shadow: 5px 5px 5px 0px rgba(7,5,130,1);
          }    
  - type: grid
    columns: 2
    square: false
    card_mod:
      class: inline-card
    cards:
      - type: custom:button-card
        tap_action:
          action: toggle
        entity: lock.front_door_lock
        icon_height: 15px
        show_state: true
        show_name: false
        styles:
          icon:
            - color: |
                [[[
                  if (entity.state == 'locked') return 'lime';
                  else return 'red';
                ]]]
            - width: 10%
            - margin-top: 0%
        card_mod:
          class: inline-card
      - type: custom:button-card
        tap_action:
          action: toggle
        entity: lock.garage_door_lock
        icon_height: 25px
        show_state: true
        show_name: false
        styles:
          icon:
            - color: |
                [[[
                  if (entity.state == 'locked') return 'lime';
                  else return 'red';
                ]]]
            - width: 10%
            - margin-top: 0%
        card_mod:
          class: inline-card
      - type: glance
        entities:
          - entity: sensor.front_door_lock_log_date
          - entity: sensor.front_door_lock_log_time
          - entity: sensor.front_door_lock_log_message
          - entity: sensor.front_door_lock_log_user
        show_name: true
        show_icon: false
        columns: 1
        show_state: true
        state_color: true
        card_mod:
          class: inline-card
      - type: glance
        entities:
          - entity: sensor.garage_door_lock_log_date
          - entity: sensor.garage_door_lock_log_time
          - entity: sensor.garage_door_lock_log_message
          - entity: sensor.garage_door_lock_log_user
        show_name: true
        show_icon: false
        columns: 1
        show_state: true
        state_color: true
        card_mod:
          class: inline-card
      - type: glance
        tap_action:
          action: more-info
        entities:
          - entity: sensor.front_door_lock_battery
            name: Battery
        show_state: false
        icon_height: 25px
        show_name: true
        hold_action:
          action: none
        card_mod:
          class: inline-card
      - type: glance
        tap_action:
          action: more-info
        entities:
          - entity: sensor.garage_door_lock_battery
            name: Battery
        show_state: false
        icon_height: 25px
        show_name: true
        hold_action:
          action: none
        card_mod:
          class: inline-card
  - type: custom:button-card
    tap_action:
      action: toggle
    entity: cover.garage_door
    icon_height: 25px
    show_state: false
    show_name: false
    styles:
      icon:
        - color: |
            [[[
              if (entity.state == 'closed') return 'darkblue';
              else return 'yellow';
            ]]]
        - width: 15%
        - margin-top: '-2%'
    state:
      - value: open
        styles:
          card:
            - animation: blink 1.5s ease infinite
    card_mod:
      class: inline-card
  - type: custom:button-card
    entity: sensor.garage_status
    show_icon: false
    show_name: false
    show_state: true
    card_mod:
      class: inline-card

I have enabled them, both alarmlevel and alarmtype, However their state is always “unknown”…
so… I’m stuck there.