Zigbee2mqtt: Support for SMLIGHT keys via network

Hello,

Following my tutorial here:

https://community.gladysassistant.com/t/connexion-cle-smlight-a-zigbee2mqtt-sur-gladys-full-ssl-tls-mqtt-et-z2m-externe

I am opening this feature request regarding support for SMLIGHT keys over the network on gladys’ zigbee2mqtt :slight_smile:

Thanks

Hi @prohand,

Claude did this development in this PR:

I’m up for testing :smiley:

There is an amd64 build on this image:

ghcr.io/gladysassistant/gladys-preview:claude-z2m-network-adapter

Thanks :wink:

I’ll test it tonight and get back to you :wink:

Good news, this doesn’t break the existing installation

So on my dev installation I completely reset zigbee2mqtt and on startup of zigbee2mqtt I get this:

[2026-08-17 15:47:34] error: zh:zstack:znp: Socket error Error: connect ECONNREFUSED 192.168.xx.xx:7638
[2026-08-17 15:47:34] error: z2m: Error while starting zigbee-herdsman
[2026-08-17 15:47:34] error: z2m: Failed to start zigbee-herdsman
[2026-08-17 15:47:34] error: z2m: Check Zigbee2MQTT fails to start/crashes runtime | Zigbee2MQTT for possible solutions
[2026-08-17 15:47:34] error: z2m: Exiting…
[2026-08-17 15:47:34] error: z2m: Error: Error while opening socket
at Socket. (/app/node_modules/.pnpm/zigbee-herdsman@10.4.0/node_modules/zigbee-herdsman/src/adapter/z-stack/znp/znp.ts:160:24)
at Socket.emit (node:events:520:35)
at emitErrorNT (node:internal/streams/destroy:170:8)
at emitErrorCloseNT (node:internal/streams/destroy:129:3)
at processTicksAndRejections (node:internal/process/task_queues:90:21)
[2026-08-17 15:47:34] info: zh:zstack:znp: Port closed

/app/node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_writable.js:264
var er = new ERR_STREAM_WRITE_AFTER_END();
^
Error: write after end
at writeAfterEnd (/app/node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_writable.js:264:12)
at File.Writable.write (/app/node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_writable.js:300:21)
at DerivedLogger.ondata (/app/node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_readable.js:629:20)
at DerivedLogger.emit (node:events:520:35)
at addChunk (/app/node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_readable.js:279:12)
at readableAddChunk (/app/node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_readable.js:262:11)
at DerivedLogger.Readable.push (/app/node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_readable.js:228:10)
at DerivedLogger.Transform.push (/app/node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_transform.js:132:32)
at DerivedLogger._transform (/app/node_modules/.pnpm/winston@3.19.0/node_modules/winston/lib/winston/logger.js:337:12)
at DerivedLogger.Transform._read (/app/node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_transform.js:166:10)

The error is very likely coming from my production which is already connected to the network controller SLZB’s socket
Since there is a risk that my production is broken I won’t be able to go further in testing on my side

Edit: I’m looking into it but there is a second radio on the SLZB-MR01 so I’m setting it up to work with Zigbee

@pierre-gilles

I confirm that everything is okay :slight_smile:



Amazing, thanks for the tests!!

So if I understand correctly, we’ll be able to select the SMLIGHT via IP in Gladys with an internal Z2M?
Currently, my SMLIGHT configuration is linked to my external Z2M.

It would be great to have a direct link to connect to it when we need to update the firmware (like the link to Z2M).
If I push it even further, having a notification when there’s a new firmware (like on HA) :stuck_out_tongue_winking_eye:

Yes, that’s exactly it :wink: