Level door lock?

@jemayes

Please let us know if you have any success with the Connect. I bought one and connected to my Level Lock + yesterday just to see if it makes it respond faster, but I don’t see any difference. Moreover, it seems the hub made the lock more sluggish. I’m still monitoring to understand if that’s the case.

I thought the Connect hub will enable remote lock settings management, but to my surprise it only enables lock/unlock when out of range and still shows Lock is out of range when BT is not connected. So there is no way to change any settings unless you are within Bluetooth range. I might just end up removing it completely as it doesn’t provide with any useful extra features.

Unfortunately, I’m still unable to add my Lock + to Home Assistant, tried a bunch times, but it never worked. Also, even if it integrates but I lose the Home Key, then I rather to keep the lock integrated in HomeKit directly and being able to use the Home Key.

On the other hand, I have a Level Bolt integrated in HA and it has been working almost perfectly.

I don’t know how you did this. I’ve been trying everything without any luck. Not fun.

I can’t figure it out either but it’s my only level lock. Only got the one.

Figured it out. You do need to try a usb Bluetooth antenna. I thought having my home assistant on my pi with built in Bluetooth would work. I even set it up right next to lock. Didn’t work. Once i ordered the Bluetooth usb antennae i got it working.

Can you outline how you got the Bolt to work? Thanks in advance.

Which one did you get?

Started this thread originally and still holding off buying. See there is an option for a “Connect”? Guess a puck that adds Wi-Fi capabilities and Bluetooth? Anyone take a look at this and is there any HA integration for it?

Same here but holding off until a Matter integration is available. Not planning to use Wifi but Thread. I know I probably have to wait for a while but I’m not in a hurry :slight_smile:

I got the Level Bolt with Connect to work, and just also got the local connection over HomeKit to work in parallel.

I can lock/unlock in multiple ways:

  1. Level app: Phone bluetooth » level bolt
  2. Level app: Level cloud » Connect » level bolt
  3. Home Assistant: HomeKit integration » ESP bluetooth proxy » level bolt

Only 1 & 3 are local connections. You can add to Google Home via Level’s Connect as well, which I did while I was waiting for my ESP32 boards to come in, but now I have it all set up within Home Assistant which can be controlled via Google Home, and it’s faster than the cloud approach.

I paired the bolt originally using a bluetooth dongle and taking the bolt out of the door and placing it right next to it, then I installed the ESP proxy after everything was set up properly.

The full process I did was:

  1. Connect the Level Bolt in the Level app via bluetooth and perform any firmware upgrades
  2. Plug in the Level Connect and install using the Level app and perform any firmware upgrades. This was tedious as it had issues all the time, but I eventually got it working. I did factory resets if I ever had it hanging and not working.
  3. Disassemble the Level Bolt or remove the battery, turning it off.
  4. Make sure a bluetooth dongle is installed and the integration is in Home Assistant
  5. Place the Level Bolt next to your Home Assistant dongle and re-assemble it, turning it on.
  6. Find the Level Bolt using the HomeKit integration and configure it.
  7. Install the Level Bolt in your door, and add an ESPHome bluetooth proxy nearby. Mine is in the closet next to the door, like 4 feet away.
2 Likes

I wanted to chime in to share my experience getting this to pair with HA.

First, I installed the connect thing to bridge it to wifi, but I couldn’t get it to pair. So, I reset the lock using the button inside and holding for 8-10 seconds to wait for the chime. Then I did the following:

  1. Setup the bolt only using the Level App.
  2. Went to HA Homekit to look for it.
  3. Saw it as A229949A (Door Lock)
  4. Tried to pair, long wait no luck. Error.
  5. Moved my pi4 running HA closer (using the internal BT chip)
  6. Cycled power on the lock by pulling the battery.
  7. See it again in HA, no luck pairing.
  8. Updated the lock to extend BT range…no luck.
  9. Pick up my pi off the floor next to the door and place it on an amazon box, brining it from like 4 ft to 2ft away from the lock.
  10. Cycle battery, pairs right away.

Some people have said “It needs to be close to pair.” For me, close meant close. Like, real close. Like…what’s the difference between the floor and up on a 2ft box? Don’t know, but that was the trick.

2 Likes

Sounds like with the connect Wi-Fi bridge it’s still a cloud solution so that’s a no joy for me. If nothing else want my access to my house to be local only.

My HA is on a Hyper-V server in my basement crawlspace and Z-WaveJS UI as a service on a separate PC. Works great for what I have now. Don’t think Bluetooth, HomeKit, not even sure about Matter is an option in this setup.

Does anyone have experience pairing the Level Bolt to HA after it was previously paired to HomeKit? Can you describe the process you took, in detail, if you don’t mind, or at least share whether it needed to be removed from HomeKit first or not? Thanks!

I have the Level Lock+, not the Bolt, but I’m happy to share my experience. I spent many hours toiling and tinkering, eventually discovering that it can only be officially paired to one of them. So you’ll need to choose either HomeKit or HASS. Each has advantages and disadvantages. I’m probably missing some; these are just off the top of my head.

Pairing to HomeKit - Advantages:

  • First party support. Plays nicely with everything else in your HomeKit & Apple ecosystem.
  • You can use the Level Lock app to add (and manage) additional NFC devices like keycards, your spouse’s phone, and an Apple Watch
  • If/when Apple actually builds out the ability to share a digital HomeKey, you’ll get this too.
  • Adding it as a passive device to HASS (inheriting states only) is super easy

Pairing to HomeKit - Disadvantages:

  • Getting full functionality in HASS requires lots of overhead
  • Cannot be directly controlled from HASS (I think?)
  • Cannot use a bluetooth proxy. Biggest downside IMO.

Pairing to HASS - Advantages:

  • Can use a bluetooth proxy!
  • Plays nicely with your other HASS accessories
  • Easy addition to your dashboards & automations

Pairing to HASS - Disadvantages:

  • Can’t add it to your Home app
  • NFC doesn’t work with phones (or Apple Watches) from family members. Unsure if the NFC reader can be leveraged to work like a typical HASS NFC reader.
  • If/when Apple finally releases their HomeKey product, you won’t be able to send a digital Key to your neighbor’s iPhone.

Fortunately, the bluetooth proxy wasn’t absolutely necessary for me, so I decided to pair it to HomeKit. I created some virtual helpers in HASS and paired them with some automations in the Home app to get the best of both worlds. Here’s what I did:

  1. In HASS, create an input_boolean to keep track of the lock’s state. It’s critical you don’t allow any HASS users to update this helper!
  2. In HASS, create a momentary switch to capture lock requests initiated by HASS. To avoid impatient users from hammering the dashboard button I use to trigger the lock, I use an 8-second toggle for the momentary switch to let me display a “please wait” state while we wait for the lock to do its thing. YMMV.
- platform: momentary
  name: Front Door Lock Trigger
  mode: "on"
  toggle_for: 8
  cancellable: False
  1. In HASS, create another momentary switch to capture unlock requests initiated by HASS. Same 8-second delay here.
- platform: momentary
  name: Front Door Unlock Trigger
  mode: "on"
  toggle_for: 8
  cancellable: False
  1. In HASS, expose the 3 above sensors to the HomeKit bridge so they’re available in the Home app
  2. In the Home app, create automations that update your input boolean whenever the Level Lock is either locked or unlocked
  3. In the Home app, create automations that lock or unlock the Level Lock when the relevant momentary switch is flipped
  4. In HASS, create an automation to trigger the proper momentary switch when HomeKit updates the input_boolean used to track the lock’s state locally:
alias: Front Door Lock Toggle
description: Triggers the proper momentary switch to lock/unlock the door when HomeKit toggles our input boolean.
trigger:
  - platform: state
    entity_id:
      - input_button.toggle_front_door_lock
    to: null
condition:
  - condition: state
    entity_id: switch.momentary_front_door_lock_trigger
    state: "off"
  - condition: state
    entity_id: switch.momentary_front_door_unlock_trigger
    state: "off"
action:
  - choose:
      - conditions:
          - condition: state
            entity_id: input_boolean.is_front_door_locked
            state: "on"
        sequence:
          - service: switch.turn_on
            target:
              entity_id: switch.momentary_front_door_unlock_trigger
            data: {}
      - conditions:
          - condition: state
            entity_id: input_boolean.is_front_door_locked
            state: "off"
        sequence:
          - service: switch.turn_on
            data: {}
            target:
              entity_id: switch.momentary_front_door_lock_trigger
mode: single
  1. Add a mushroom template card to your dashboard incorporating all of the above. My config is part of a single-column grid, so you may need to adjust for your dashboard layout:
  - type: custom:mushroom-template-card
    primary: Front Door Lock
    secondary: >-
      {%- if states.switch.momentary_front_door_lock_trigger.state | bool +
      states.switch.momentary_front_door_unlock_trigger.state | bool == 0 %} 
        {%- if states.input_boolean.is_front_door_locked.state | bool %}
        Locked
        {% else %}
        Unlocked
        {% endif %}
      {% else %}
        {%- if states.switch.momentary_front_door_unlock_trigger.state | bool %}
        Unlock requested, please wait.
        {% else %}
        Lock requested, please wait.
        {% endif %}
      {% endif %}
    icon: |-
      {%- if states.input_boolean.is_front_door_locked.state | bool %}
        mdi:lock
      {% else %}
        mdi:lock-open
      {% endif %}
    icon_color: >-
      {%- if states.switch.momentary_front_door_lock_trigger.state | bool +
      states.switch.momentary_front_door_unlock_trigger.state | bool == 0 %} 
        {%- if states.input_boolean.is_front_door_locked.state | bool %}
        green
        {% else %}
        red
        {% endif %}
      {% else %}
        yellow
      {% endif %}
    badge_icon: ''
    hold_action:
      action: more-info
    double_tap_action:
      action: none
    entity: input_boolean.is_front_door_locked
    multiline_secondary: true
    fill_container: true
    tap_action:
      action: call-service
      service: input_button.press
      target:
        entity_id: input_button.toggle_front_door_lock

Here’s what all of that gets you. Unlocked state:

When tapped from the unlocked state, it requests the door be locked and shows this pending state:

Locked state:

From the locked state, the card can be tapped in HASS for another pending state while the lock is doing its thing.

Best of both worlds, as long as you don’t need the BT proxy. My wife can tap her Apple Watch to the lock face to lock/unlock it, I can do the same with my iPhone, and everything is still accessible and controllable via HASS. :smiley:

1 Like

Wow, thank you so much for this detailed and incredibly helpful post! I haven’t had a chance to apply it to my situation yet, but when I do, I will post again to confirm for others whether it worked (or, if it didn’t, if I learned anything) with the Bolt. Cheers!

@brystmar Sorry, could you just confirm one thing that I think is clearly implied in your post, but about which I’m being dense / seeking concrete clarification? Am I correct in understanding that you did nothing to directly integrate the lock with HASS but instead created the virtual helpers, brought them into HomeKit (presumably using the HA HK integration), and then created automations in HK and HA, as detailed so well, to synchronize the two? Sorry for being so dense, and thanks again!

For my part, rather than carefully following the suggested steps that you and others in this thread detailed, I so far have added the lock to HA (I was watching a movie with my wife, glanced at HA as I am wont to do, and saw the ‘device discovered’ notification, so I went for it, and it was successfully added), but the results are not satisfactory - the state doesn’t accurately or consistently show in HA (it’s stuck on ‘locking’ for long periods of time until I manually cycle it, for instance). So, I think I’m going to remove it again and follow your approach once you confirm my understanding of it.

Thanks again!

That’s correct. Your lock can only be officially connected to one ecosystem: HomeKit, or HASS. From my Level Lock’s point of view, it is only connected to HomeKit. I created those other helpers and automations to work around this limitation.

Sounds like you aren’t getting the desired performance from the lock. This is typically due to one of two reasons:

  1. Your door alignment isn’t great. Ensure the door is always fully closed every time — easier said than done with kids. The lock mechanism isn’t strong enough to overcome much friction, so it will throw an error or just stay in the “locking” status indefinitely if it can’t turn the lock fully in either direction. My household has this problem too.

  2. Weak or inconsistent Bluetooth connection. If your HomeKit hub device (HomePod, Apple TV) is closer to the lock than your HASS Bluetooth adapter, you might have better luck pairing it to HomeKit. You can also try enabling the boost Bluetooth setting in the Level app. Otherwise you’ll need a Bluetooth proxy, and that will prevent you from using the solution I outlined above.

Hi once again - while I’m not completely done implementing your good ideas, I wanted to thank you again and give an update in case others read this thread in the future.

While I haven’t implemented your system to create delays (due to some challenges figuring out momentary switches with delays), I’ve created the boolean, brought that into HK (a first for me with HA), created HK automations to sync the boolean with the lock, and added the boolean to a HA dashboard. So, I’ve learned a lot, and it’s working “good enough” for a proof of concept already.

Thanks again for your help and encouragement, Thomas! All the best.

1 Like

Hi, this is REALLY cool.

I tried your code and had to make some changes (had to use states(‘entity’) rather than state.entity.state) but other than that worked brilliantly.

You missed the instruction to add an input_button and an automation to conditionally call the right monentary trigger too, but once I added that it all worked no problem.

THANK YOU SO MUCH this is just what I wanted.

Tony

1 Like

Glad it’s working for you @TonySeeley and @ajfi-droid2! Thanks for identifying the missing HA automation — I’m updating my post now to include that piece.

Wanted to add a quick disclaimer that much (most?) of the config in my above post was derived from suggestions by other HA community members, probably even from this thread. Community-driven solutions are the best solutions :slight_smile:

1 Like

It’s funny I found on line that the state.entity.state approach should have worked but it didn’t for me (not sure why), so my code looks like this.

      - type: custom:mushroom-template-card
        primary: Front Door
        entity: input_boolean.front_door
        secondary: |-
          {% if states('switch.momentary_front_door_lock_trigger') == 'off' and states('switch.momentary_front_door_unlock_trigger') == 'off' %}
            {% if states('input_boolean.front_door') == 'on' %}
              Locked
            {% else %}
              Unlocked
            {% endif %}
          {% else %}
            {% if states('switch.momentary_front_door_lock_trigger') == 'on' %}
              Lock requested, please wait.
            {% else %}
              Unlock requested, please wait.
            {% endif %}
          {% endif %}
        icon: |-
          {% if states('input_boolean.front_door') == 'on' %}
            mdi:lock
          {% else %}
            mdi:lock-open
          {% endif %}
        icon_color: |-
          {% if states('switch.momentary_front_door_lock_trigger') == 'off' and states('switch.momentary_front_door_unlock_trigger') == 'off' %}
            {% if states('input_boolean.front_door') == 'on' %}
              green
            {% else %}
              red
            {% endif %}
          {% else %}
            yellow
          {% endif %}
        hold_action:
          action: none
        double_tap_action:
          action: none
        multiline_secondary: true
        fill_container: true
        tap_action:
          action: call-service
          service: input_button.press
          target:
            entity_id: input_button.front_door_toggle

and it works brilliantly.

So thank you again :slight_smile: