Closed nweave03 closed 3 years ago
yeah, that's what's happening.
Let me see what I can do.
I just pushed a updated sensor.py lets see if that helps now.
alright, i'm no longer seeing unknown
We are back to seeing the loop though, even though none of the codes are enabled.
It looks like you've disabled multiple slots at once, what happens when you try to just clear one slot at a time?
It looks like you've disabled multiple slots at once, what happens when you try to just clear one slot at a time?
oh, i'm not totally sure I'm following, but these were never enabled
in the first place. The lock itself had an initial state of 5 codes set, one in each slot. I just input those without ever turning them to enabled, and it was already in the loop. I have since tested by enabling the 4 with codes and it appears that the state of the enabled
flag makes no difference as to whether the system gets in the loop.
If you're referring to the debug logs as the loop, that's just the senor refreshing, that's supposed to loop. According the log at one point slot 5 did clear, it was near the end.
no, the log loop is reflecting the zwave loop of clearing and setting the code over and over again.
let me check my expectations of how this works.
In the state of the above screenshot. There should be a set of ********
in code_slot_1
, code_slot_2
, code_slot_4
, and code_slot_5
. The log report for code_slot_3
should be empty as no code is set. In addition to these log reports. I should see no zwave traffic for UserCodeCmd_Set
as there is no need to set a single code once these are in the correct state. UserCodeCmd_Get
, however, are expected to validate lock codes exist.
okay, I have been looking into how the automations actually work and I have noticed that the automation for when the active_<name>_<slot num>
is off it will set a code then clear it in a loop. see example below
That is what I am seeing. I also see that it triggers multiple times, I edited it on one of the slots and disabled it to see how often it triggers and logs and saw the following:
If I had to guess, I think this is attempting to scramble a lock code, then clear it. I don't know why though.
If I had to guess, I think this is attempting to scramble a lock code, then clear it. I don't know why though.
This is due to a bug in the old zwave
that only some locks codes get cleared and others do not. It's a workaround. Maybe a small delay (5-10s) between the scramble and the clear might help.
but why doesn't it stop once the code is clear?
Looking at the conditions, its still looping because the PIN synchronized
binary_sensor
is still "off". (Line 486)
When sync is 'off' the script does it's job to try and clear or set the pin, this weird loop only seems to happen with BE469 locks in zwave
in ozw
everything seems to be working fine.
that makes sense. I think the issue is that it takes too long to set the usercode between runnings of these two operations. It probably queues up multiple of these and whenever it succeeds, it has a set to a random code queued up already that restarts the whole thing and gets it into a loop.
Try adding - delay: '00:00:15'
between the lock.set_usercode service and the clear_usercode service
looking at the ozw section, it doesn't have this set to a random code, which is why there isn't a loop possibility there. If the ozw.clear_usercode
is reliable enough to succeed, then there is no problem. I think this whole loop boils down to the following:
lock.set_usercode
and lock.clear_usercode
)UserCodeCmd_Set
5 second
delay between executions of the synchronize_codeslot_<lock>_<slot>
executionsif any 2 UserCodeCmd_Set
operations (one for the random and one for the clear) take more than 5 seconds, it will queue up an additional 2 commands. An increase in delay will simply increase the number of commands queued. I think the synchronize_codeslot_<lock>_<slot>
needs to wait longer between executions.
or, i can just manually remove the random code set, it isn't necessary for my locks.
You can try changing the /5
to something higher, see if it helps. Maybe /10
or /15
I also think there is the possibility of a misfire here. Because the code cannot verify that the lock code is changed to the correct code, it assumes that any change is correct. In this case, because there is that random code assignment before a clear, it will conclude any of the random codes assigned are correct, even when they are not. This is why after toggles the code could end up being wrong and not working, despite the system thinking it is.
The code_slot sensor picks up if the slot is disabled and will report the sensor as empty if a random code is present. Which should then make the sync go 'on'.
okay, you're dead on here that the pin synchronized is never getting set. That is definitely not happening. I tried removing the random code and that also prevents the loop from happening, though i'm still testing if it actually clears the code or not (i think this is the bug you're referencing). I've increased the time all the way to /120
and it still gets stuck in the loop because the pin syncrhonized doesn't work. I also see every time that the code is toggled while off it concludes that ********
is whatever is currently in the PIN
slot, which is why it appears to be correct.
Can I just say, I hate these locks.
I can also confirm that these locks will often not respond to UserCodeCmd_Set
and their wake up is not great. It can and does take more than 30 seconds to correctly change a code. In addition something like 30% of the time when I am restarting, the lag in lock response delay makes the system conclude the node is dead. This happens even when I am toggling the lock open and shut during start up. I think it has something to do with the nonce response not happening in time so the security code says to conclude dead.
Is this something ozw
does better? Should I just bite the bullet and go to that?
just noticed /120
is invalid, max is /59
need to retest some stuff
Is this something
ozw
does better?
In ozw
restarting HA doesn't restart the zwave network, so yes startup is much happier.
Should I just bite the bullet and go to that?
That I cannot say, it's still technically beta, but I've been running it for months and it's pretty stable with my devices. YMMV.
Yeah I have read that, I also read they were planning a migration effort, that's what I was hoping for, since re-adding ~120 nodes is going to be annoying.
okay, looks like /59
is not enough, for some reason it appears that 2 of these are running? maybe a hold over from an older automation or something (there is only 1 second difference, which suggests for some reason two are running)
So I tried just removing the random set altogether. And that appears to work from the logs and the actual slot
But the PIN Synchronized
isn't being updated. That appears to be the continuing issue. I am still seeing it issue the UserCodeCmd_Set
but they are all clears, so its no longer looping, but the issue isn't completely solved.
Very strange, we see in the screen shot that the sensor is reporting it empty. So it should flip the binary_sensor to 'on'.
Can you verify that the binary_sensor.enabled_frontdoor2_1
is showing 'off' while the 'Enable' toggle is off?
yup, it is off
I was also looking at how Pin Synchronized
is defined:
and it also depends on the frontdoor2_code_slot_1
which appears to be an empty string
and active_frontdoor2_1
which is off
okay, so despite the fact that it appears to be empty by the higher level, if I look at the details I see testing
as the value. This was what it was set to when I was trying to prove that previous issue with the unavailable
-> unknown
where it just switched to whatever was in the PIN
.
is it incorrectly storing this previous value somewhere? Why doesn't it overwrite with the empty as a result of the lock code queries?
in fact, all of the code slots show something weird. They are all unknown
upon the info click
aha! its not empty string its \x00
is this a unicode to ascii error?
2020-11-11 22:46:26 DEBUG (SyncWorker_19) [custom_components.lock-manager.sensor] DEBUG: setting data to {'entity_id': 'lock.detached_garage_door_lock_locked', 'node_id': 121, 'code_slot_255': '', 'code_slot_254': '', 'code_slot_0': '', 'code_slot_1': '\x00', 'code_slot_2': '2659', 'code_slot_3': '', 'code_slot_4': '4468', 'code_slot_5': '6509', 'code_slot_6': '', 'code_slot_7': '', 'code_slot_8': '', 'code_slot_9': '', 'code_slot_10': '', 'code_slot_11': '', 'code_slot_12': '', 'code_slot_13': '', 'code_slot_14': '', 'code_slot_15': '', 'code_slot_16': '', 'code_slot_17': '', 'code_slot_18': '', 'code_slot_19': '', 'code_slot_20': '', 'code_slot_21': '', 'code_slot_22': '', 'code_slot_23': '', 'code_slot_24': '', 'code_slot_25': '', 'code_slot_26': '', 'code_slot_27': '', 'code_slot_28': '', 'code_slot_29': '', 'code_slot_30': ''}
\x00
looks like something it'd read from the lock. Very strange, let me see if I can correct for that anomaly.
I've pushed an updated sensor.py that should check for the odd ASCII code and handle it.
You can see it here:
nope, just needed to strip the code
in sensor.py
. something like this before saving in the data[sensor_name]
code = code.strip().strip('\x00')
found this on stackoverflow about it: https://stackoverflow.com/questions/38883476/how-to-remove-those-x00-x00
i'll try your method as well
i think i recognize this on older binary protocols. Since they must have a certain size in there, say 10 bytes, if there is only a need for 4, some protocols specify to null out the rest of the bytes. I think in this case, they just null padded it out to 6, since these locks support code sizes of up to 6, but that is a guess.
unfortunately your method crashed @firstof9
I was having issues with this as well. it seems to want it to be an int
and a string
at the same time. I had to add my strip at the bottom right before the data saving:
which is really odd, because it says it is using the Utilizing Zwave clear_usercode work around code.
which sets code
to an empty string, unless python suddently became pass by reference that should set it to a completely empty string. I wonder if its converting "" to an integer because it thinks code
is an integer?
which kinda begs a separate question of why it concludes nothing is enabled and doesn't override the previous settings of code since the logs say it is utilied on every single code slot that isn't there.
ah, its always false for antyhing that exists, i'm not sure that is working like you intended:
maybe something like
if isinstance(code, str):
code = code.strip().strip('\x00')
works better since I'm not sure how many locks report codes as strings vs integers.
its always false for antyhing that exists, i'm not sure that is working like you intended
crap you're right, I forgot the .state on it.
I've pushed another update, and typecast/converted the value.data to a string to fix that issue too.
got a crash
Doh, forgot the is not None
.
Pushed changes.
okay, so that isn't crashing, but it isn't working either. the PIN Synchronized
isn't completing
I can confirm that the strip method I outlined above does work with the PIN Synchronized
. I am not sure why your method does not work.
I missed a 2nd none type and pushed another update a few seconds ago, sorry.
okay, tested again, still the same, PIN Synchronized
isn't completing
Logs show that instead of an empty string it is returning the value of the PIN
, even when the code slot is disabled.
my guess is that you meant
if enabled.state == "off":
instead of
if not enabled.state:
on line 120
probably also on line 169
I'm not sure why \x00
is invoking the _invalid_code
lookup workaround. It will alternate between the BE469
and FE599
logic. It appears any time the FE599
workaround is invoked, it will then overwrite code
with "" thus making the entire call moot, see logs.
also if I do that, then it will believe a lock code is set for an enabled code, even when it is not because of the workarounds. It thinks it is synchronized and correct despite there being no code set at all (see code_slot_1
)
I think there is a more fundamental issue here. without the ability to distinguish between the following:
1) an attempt to clear a user code that fails 2) a randomly set user code before the clear attempt that is still present 3) a randomly set user code that fails
There really isn't a way to fix this on these locks. I have noticed multiple times it concludes that a code that is present is somehow not, and a code that is not present somehow is. These always revolve around this case. It can't work for these locks because those three cases appear identical.
I've been able to get some success with the following
Then I removed the random code set
Then I need to increase the time it takes for the synchronize_codeslot_frontdoor2_1
automation to beyond 30 seconds (I used 59). This is because the custom_components.lock-manager.sensor
update runs on a 30 second timer, and it is the only function that updates everything necessary for the PIN Synchronization
to actually be set correctly.
With all of that, the code doesn't attempt to do the wrong thing, or get into weird loops. However, the general unreliability of these locks still means that its a 50/50 shot whether the operation actually succeeds thanks to:
Which appears to be as stale and unverified as it warns because a simple zwave.refresh_node
constantly shows that the code is still present, or not present all the dang time. Luckily in these cases, the automations fire and attempt to correct for the issue, but their success is still not good.
I'd like to decrease the custom_components.lock-manager.sensor
update to something a lot more often so I can lower the synchronize_codeslot_frontdoor2_1
automation time along with it to hopefully get more attempts in here. it would also be good to see if there's a way to include a query of all lock code independent of lock code set operations.
I'd like to decrease the
custom_components.lock-manager.sensor
update to something a lot more often so I can lower thesynchronize_codeslot_frontdoor2_1
automation time along with it to hopefully get more attempts in here.
It's already set to 1 second refreshes. See line 50.
it would also be good to see if there's a way to include a query of all lock code independent of lock code set operations.
Codes are updated independently of set/clear code operations.
I've pushed a new sensor.py which should strip the \x00
and fixed a couple IF statements I screwed up.
Oh, then that isn't working, just check any of my longer log statements, they are still 30 seconds apart.
Also tried your current fix and it crashes
Also, I have tried a few things to see if I can get a clear_usercode
to work, looking (https://community.home-assistant.io/t/clear-user-code-delete-user/40423/7) and (https://github.com/OpenZWave/open-zwave/pull/1576/files). These locks, being schlage, need a special send of NULL
s to clear a code. I have attempted this in the developer tools using lock.set_usercode
, lock.clear_usercode
and I have attempted to do this in the yaml
None of these attempts clears a lock code. Based on what I am seeing, this is the reason behind the random code, because better a random code than not clearing a code. However, in my opinion, this is a bad solution, it means there is a random code that is unknown to anyone involved that is definitely present and set. In addition the actual zwave logs tell me that the lock is tentatively reporting itself as having no code there, even though it does. This isn't a fix for the zwave failure and it is unreasonable to expect your code to correct for this issue. This is a pure zwave bug that must be addressed by them. Given the lack of ability to distinguish between random lock code set failures and simply the old lock code remaining, that makes these locks untenable in this situation.
It looks like openzwave is attempting to fix this. I will be moving on to them, or possibly new locks, but from here, I don't see how a solution is possible, basic operations cannot be counted on to work when they claim they have, and that has definitely resulted in the system thinking user codes are present that are not and codes that are not present, thought to have been deleted, but definitely still work.
Describe the bug Lock-Manager is deleting and recreating a lock code in a loop. Not sure why.
Environment (please complete the following information):
Click to show log
**Logs** ``` 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_255 value: 30 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_254 value: False 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_0 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_1 value: ********** 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_2 value: ********** 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_3 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_4 value: ********** 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_5 value: ********** 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_6 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_7 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_8 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_9 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_10 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_11 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_12 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_13 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_14 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_15 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_16 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_17 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_18 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_19 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_20 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_21 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_22 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_23 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_24 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_25 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_26 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_27 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_28 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_29 value: 2020-11-06 22:18:18 DEBUG (SyncWorker_5) [custom_components.lock-manager.sensor] DEBUG: code_slot_30 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_255 value: 30 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_254 value: False 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_0 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_1 value: ********** 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_2 value: ********** 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_3 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_4 value: ********** 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_5 value: ********** 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_6 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_7 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_8 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_9 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_10 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_11 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_12 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_13 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_14 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_15 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_16 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_17 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_18 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_19 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_20 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_21 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_22 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_23 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_24 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_25 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_26 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_27 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_28 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_29 value: 2020-11-06 22:18:48 DEBUG (SyncWorker_8) [custom_components.lock-manager.sensor] DEBUG: code_slot_30 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_255 value: 30 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_254 value: False 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_0 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_1 value: ********** 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_2 value: ********** 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_3 value: ********** 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_4 value: ********** 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_5 value: ********** 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_6 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_7 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_8 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_9 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_10 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_11 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_12 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_13 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_14 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_15 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_16 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_17 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_18 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_19 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_20 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_21 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_22 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_23 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_24 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_25 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_26 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_27 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_28 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_29 value: 2020-11-06 22:19:18 DEBUG (SyncWorker_50) [custom_components.lock-manager.sensor] DEBUG: code_slot_30 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_255 value: 30 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_254 value: False 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_0 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_1 value: ********** 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_2 value: ********** 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_3 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_4 value: ********** 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_5 value: ********** 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: Ignoring code slot with * in value. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] Work around code in use. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] Utilizing BE469 work around code. 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_6 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_7 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_8 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_9 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_10 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_11 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_12 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_13 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_14 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_15 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_16 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_17 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_18 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_19 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_20 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_21 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_22 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_23 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_24 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_25 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_26 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_27 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_28 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_29 value: 2020-11-06 22:19:48 DEBUG (SyncWorker_43) [custom_components.lock-manager.sensor] DEBUG: code_slot_30 value: ```Screenshots
Additional context see discussion on bug #55