hobbyquaker / node-red-contrib-zigbee

Node-RED Nodes for ZigBee Devices 🐝
MIT License
86 stars 15 forks source link

Change in zigbee-herdsman causes stop-work-condition for node-red-contrib-zigbee with message 'Error Resource temporarily unavailable Cannot lock port' #160

Open hogthrob opened 3 years ago

hogthrob commented 3 years ago

The result of integrating https://github.com/Koenkk/zigbee-herdsman/pull/442 into the main zigbee-herdsman module on which node-red-contrib-zigbee depends on, is that it stops working and continuously reports that the serial port could not be opened because it is locked (which is kind of true, but not the root cause).

A little debugging brought to light what the problem is: the zigbee-herdman method supportsLED is no longer existing, hence

https://github.com/hobbyquaker/node-red-contrib-zigbee/blob/c1118eb32918ff5d5f27603671dd4aec2bf3bc77/nodes/shepherd.js#L622

fails and the connect() code is failing, but it does not release the serial port, so subsequent retries report the locked serial port.

It is very unfortunate that the maintainers of zigbee-herdsman did not follow semver and bumped up the minor number of the package to indicate a removal of API functions. Would have prevented the upgrade breaking my node-red flows. But it is like it is.

I would suggest to leave the led alone and remove the code or to run this code only if the method supportsLED is present.

Hope this helps others to understand the problem and not to waste time to find out what they did to break things.

A quick workaround is to downgrade zigbee-herdsman using npm to version 0.13.169 or older. I just commented out the lines

https://github.com/hobbyquaker/node-red-contrib-zigbee/blob/c1118eb32918ff5d5f27603671dd4aec2bf3bc77/nodes/shepherd.js#L622-L632

Which also does the job but of course gets overwritten next time I update node-red...

kender65 commented 3 years ago

Hi @hogthrob ! Thanks for doing the research and providing your solution(s)! I discovered the same issue but didn't think about the error message causing the issue. I tried mutliple things but didn't get it running again until I tried your solution no. 2. Hopefully I don't have to do an update any time soon.