OH2 Z-Wave refactoring and testing... and SECURITY

I’ve just made an update to the binding - sorry it’s taken a few days but I’ve been very busy with trying to iron out some updates on ZigBee which were required elsewhere.

I’ve made some changes to the way the hold-off timer works to try and reduce synchronisation issues - no guarantees that it’s solved of course, so please let me know your milage…

Probably not, but without sifting through the history I couldn’t be sure.

It sounds like you need to look at your logs to find out what’s happening? It doesn’t sound like this would be binding related if lights are randomly turning on and off - delays could be attributed to the binding, but probably caused by something external such as a device timing out. Again though, logs are your friend as they will help you work out what’s going on - otherwise, you, or I, can just guess :sunglasses:.

@chris just installed the binding with very positive results. At first I thought something was wrong, as debug logging was very light and seemed to stop after 2 minutes ( this is with 60+ mains devices), but this was because everything initialized quickly without needing retries, which was probably a bulk of the logging before. Commands are very snappy and do not seem to have any lag, which they did before. Also, previously I had a ton of zwave threads always present (transaction manager i think), which would persist even when the binding was stopped, now I only have a single thread (ZWaveSerialHandler.java). I’ll poke at it today some more, but right now this looks very promising!

Did you also change OH ? I think there were recent changes in ESH w.r.t. the serial interface.

I’m running stock 2.3.0 and now this latest binding, too. Yes it’s snappy but that it has been before as well.

I’m running 2.4, but a few weeks old, need to update to a newer build, but for this test I only changed the zwave binding. I’m guessing the lag previously was due to controlling a room which may have 4 or 5 devices that all turn on or off together, this seemed to cause a lot of retires and transactions, now this happens right away.

Agreed - I don’t necessarily expect that this version should be faster than previous. Mostly I expect that any “slowness” is caused by retries or congestion - but I’m always happy to be shown any logs that show any concrete problems to be solved…

For this version, I’d just be happy if it continues to run without the thread-lock issue! Let’s see :roll_eyes:.

Just submitted a ticket with my successful log file, I also pasted a thread dump of two zwave threads that hang around after the binding is stopped. Very excited!

Got it - thanks.

I have groups of all blinds on one floor. sending commands to 8 devices in a group result in quite some delay

My Kitchen has 6 lights (3 dimmers and 3 switches), sending a command to the group item results in all turning on under 2 seconds for for me, one of the dimmers seems to take a second longer then the rest.

I do have a somfy zwave device which exposes 5 virtual zwave devices for blinds, these have a more significant delay coordinating the blinds together, but in my case this is due to the somfy radio protocol from the somfy device to the blinds, as the binding sends a command and receives an ack within 2-3 seconds.

I’m using scene switches to toggle scenes to e.g. turn off all lights and lower all the blinds etc at a time.
That’s sometimes resulting in (just guessing, didn’t count) ~20 consecutive zwave commands.
That always has been a bit laggy and I believe still is, but that’s also due to slow OH HW (RPi3).

since I am at around 70 zwave devices meanwhile and a whole lot of other stuff in openhab I also consider that my PI2 might be a bootleneck.
Also system health looks fine with low cpu etc. it’s worth a try to just let OH run on my desktop client once to see what the effect would be :slight_smile:

I switched to a asus tinker board and am very happy with the performance for the price.

@chris , This morning it looks like I have a few stuck threads, maybe the result of a overnight network heal. Let me know if you want a log file for this.

"Thread-6298" Id=36159 in WAITING on lock=java.util.concurrent.FutureTask@1ff95c9
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
    at java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager.sendTransaction(ZWaveTransactionManager.java:1131)
    at org.openhab.binding.zwave.internal.protocol.ZWaveController.sendTransaction(ZWaveController.java:520)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:249)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1090)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"pool-59-thread-66" Id=36179 in WAITING on lock=org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter@12e2789
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:502)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter.call(ZWaveTransactionManager.java:1059)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter.call(ZWaveTransactionManager.java:1)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

"Thread-6319" Id=36202 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6320" Id=36203 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6321" Id=36204 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6322" Id=36205 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6323" Id=36206 in WAITING on lock=java.util.concurrent.FutureTask@13dba80
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
    at java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager.sendTransaction(ZWaveTransactionManager.java:1131)
    at org.openhab.binding.zwave.internal.protocol.ZWaveController.sendTransaction(ZWaveController.java:520)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:249)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6324" Id=36209 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6327" Id=36217 in WAITING on lock=java.util.concurrent.FutureTask@16c53dd
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
    at java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager.sendTransaction(ZWaveTransactionManager.java:1131)
    at org.openhab.binding.zwave.internal.protocol.ZWaveController.sendTransaction(ZWaveController.java:520)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:249)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1072)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6328" Id=36218 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6329" Id=36219 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6330" Id=36222 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6331" Id=36223 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6333" Id=36225 in WAITING on lock=java.util.concurrent.FutureTask@1b16cc1
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
    at java.util.concurrent.FutureTask.get(FutureTask.java:191)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager.sendTransaction(ZWaveTransactionManager.java:1131)
    at org.openhab.binding.zwave.internal.protocol.ZWaveController.sendTransaction(ZWaveController.java:520)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:249)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"pool-59-thread-91" Id=36229 in WAITING on lock=org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter@2a8f29
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:502)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter.call(ZWaveTransactionManager.java:1059)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter.call(ZWaveTransactionManager.java:1)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

"Thread-6336" Id=36234 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"pool-59-thread-97" Id=36236 in WAITING on lock=org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter@b91f97
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:502)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter.call(ZWaveTransactionManager.java:1059)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter.call(ZWaveTransactionManager.java:1)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

"Thread-6339" Id=36239 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6342" Id=36247 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6343" Id=36248 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6344" Id=36249 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6345" Id=36250 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"pool-59-thread-105" Id=36252 in WAITING on lock=org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter@e75d8f
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:502)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter.call(ZWaveTransactionManager.java:1059)
    at org.openhab.binding.zwave.internal.protocol.ZWaveTransactionManager$1TransactionWaiter.call(ZWaveTransactionManager.java:1)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

"Thread-6346" Id=36254 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6348" Id=36259 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

"Thread-6349" Id=36260 in TIMED_WAITING
    at java.lang.Thread.sleep(Native Method)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:276)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.processTransaction(ZWaveNodeInitStageAdvancer.java:222)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.doHealStages(ZWaveNodeInitStageAdvancer.java:1083)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer.access$4(ZWaveNodeInitStageAdvancer.java:1051)
    at org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer$1.run(ZWaveNodeInitStageAdvancer.java:178)

Thanks - I’ll take a look. From a quick look though, I don’t think this is an issue. The transaction threads are likely fine (unless they stay there indefinitely) as there will be transactions in the queue if things are happening.

Most of these are related to the initialisation / heal - I would have expected these to finish, but battery devices especially may hold this open for a long time. I might name these threads so we can get a better idea of what’s up and make sure there is only one per node.

Oh, and I guess the fact that there’s no “complaints” is a good sign that (so far) we’ve not seen the Queue Full lock? :sunglasses:

They have held constant for at least the last hour, so I’m assuming they are stuck, but I will let it run today and see if they clear. I do have one battery device (lock), the rest are mains devices.

I think so! Do you know exactly what the message would be if that happened? I’ll search for it in the logs just to be sure, but so far I have not seen it.

What do you mean by “stuck”? I don’t think it’s necessarily a problem - for battery devices especially, they might never complete the heal, and so long as there’s only ever 1 heal task per device, it should be ok I think?

Yes - you get the Queue Full exception and everything stops - I think you’d know as your system would stop working.