
Unknown error right after a plugin restartNo transport, write directive to XXX.XXX.XXX.XXX:8080' ignoredError: (FindModule) Domoticz/DomoticzEx modules not found in interpreterError: <plugin's name> : You need to setup the URL Base to access the Domoticz JSON/APIBuilding wheel for cryptography (PEP 517) ... errorImportError: PyO3 modules may only be initialized once per interpreter processexternally-managed-environment (Debian 12 or newer)Error: <plugin's name> : ModuleNotFoundError: No module named 'cchardet'AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms'Cannot run the event loop while another loop is running with several plugin instancesModuleNotFoundError although the modules are installedZ4D requires Python 3.11 or Domoticz version ... not supporteddetected dubious ownership in repository or You have uncommitted changesDomoticz widget creation failed ... Check that Domoticz can Accept New HardwareThe errors specific to ZiGate coordinators (Decode8000, Communication error when transmiting a previous command, No DNS record configured for Zigate model, no decoder registered for MsgType) are in the FAQ for ZiGate.
The first source of support is this Wiki.
You can also get support and ask questions :
To get a useful answer quickly, give from the start:
By default, the plugin writes its logs in its own file: domoticz/plugins/Domoticz-Zigbee/Logs/PluginZigbee_XX.log, where XX is the hardware idx of the plugin in DomoticZ (for example PluginZigbee_05.log). A new file is started every night, and the last 7 are kept.
Errors, warnings and status messages also go to the DomoticZ log; debug messages only go to the plugin log file. See Debug mode for the details and the related settings.
Yes: see Debug mode to enable the debug messages of the part of the plugin you are interested in, for one device or for all. For pairing and connection difficulties, see also Troubleshooting pairing or connection.
Yes: add one instance of the plugin (one DomoticZ hardware) per coordinator. Each instance has its own Zigbee network, its own WebUI port and its own files. One instance manages all the devices paired to its coordinator: don’t create one DomoticZ hardware per device.
There is one known problem: with DomoticZ 2026.x and Python 3.11 (for example Debian 12 / Raspberry Pi OS Bookworm), the second instance fails to start with Cannot run the event loop while another loop is running. Use Python 3.12 or newer: see E16.
Some times, when you reboot your system, the USB Port (like dev/ttyUSB0) can change its number which cases a communication error with the coordinator. This is more an OS issue, but there are few hints :
/dev/serial/by-id/... path of the coordinator as Serial Port in the plugin settings: it doesn’t change between reboots.For example : If you power off an Ikea bulb (with the physical switch) and then switch it on again, the status of the bulb is not updated in DomoticZ. And having the same issue with a remote controller which also doesn’t update it’s current state to DomoticZ.
If you encounter problems like the above example, it is most likely the automatic reporting is not configured correctly from the device end. Please follow below steps to fix this issue:
Some brands (Philips, Gledopto) don’t report their status at all: the plugin polls them, see Philips Gledopto. Ikea remote controls must have the coordinator in their group, see Ikea Tradfri.
The plugin adds its entry to the DomoticZ Custom menu itself when it starts (setting Enable Plugin WebUI from Domoticz Custom menu, enabled by default). If you don’t see it:
See Plugin integration for the details, including the cases where the automatic entry doesn’t work (DomoticZ over https, reverse proxy).
Changing the channel in the WebUI Settings page and restarting the plugin doesn’t move an existing network to another channel. Use one of the methods of Change the Zigbee channel: the live channel change from WebUI > Admin > Coordinator keeps the paired devices (older battery devices may need a reset to follow).
Before changing the Zigbee channel, check which Wi-Fi channels are used around you: changing the Wi-Fi channel of your box is often simpler. See Zigbee and Wi-Fi and Real-time interference scan.
No. The DomoticZ Replace function doesn’t work with the widgets of the plugin: after a replace, some widgets of the new device stop being updated.
To replace a dead device by a new one and keep the history of its widgets, pair the new device, then use the Tools/replace_device.py tool of the plugin: see Replacing a Zigbee device while keeping its Domoticz history.
The plugin no longer supports ZiGate coordinators. Pick a Texas Instruments, Silicon Labs, ConBee/RaspBee or Bouffalo Lab coordinator in Compatible coordinators, then follow Replace or migrate the coordinator: coming from a ZiGate, the devices have to be paired again.
domoticz/plugins/Domoticz-Zigbee.I can see in the log file some messages like that
Error: Zigbee: [ 70] Hard time getting Coordinator Version — likely a communication issue
or, after the plugin had started:
Error: Zigbee: Connection to coordinator lost, OSError (device disconnected or in use by another process), plugin restart might be required
This indicates a communication problem between the plugin and the coordinator. If the coordinator still doesn’t answer after a while, the plugin restarts itself and tries again. Cross-check the following in the DomoticZ Hardware settings of the plugin (see Plugin settings):
/dev/serial/by-id/... path).If it still doesn’t work, test the coordinator without DomoticZ and the plugin, with the zigpy command line tool installed with the plugin. Stop the plugin, activate the Python virtual environment of DomoticZ, then run an energy scan, for example for a Texas Instruments coordinator on /dev/ttyUSB0:
zigpy radio znp /dev/ttyUSB0 energy-scan
Use ezsp for Silicon Labs and deconz for ConBee/RaspBee. If this doesn’t work either, the problem is between the system and the dongle (port, rights, firmware). See also Real-time interference scan.
Please refer to Dealing with not-optimized devices and, to write a configuration file for it, device customization.
The WebUI shows Plugin Upgrade process completed without errors., but after the restart the plugin still shows the old version. Look at the output of the update for one of these cases:
You are on 9.1.004 or 9.1.005. These versions updated the Python modules before the plugin code, so the update fails. Update the code by hand once, from the plugin folder, then run the update from the WebUI again to install the Python modules:
cd domoticz/plugins/Domoticz-Zigbee
git pull
From 9.1.006 on, the WebUI update works again.
stable7, stable8). The WebUI updates the branch you are on, but can’t switch to another one: the question [y/N] of the switch script gets no answer and ends with Aborted by user. No changes made.. Switch branches on the command line: see Upgrading from stable8 to stable9 or Upgrading from stable7 to stable9, and Know your branch.dubious ownership, uncommitted changes): see E19.See Plugin update for the manual update.
Raising the transmit power of the coordinator lets it talk louder, but doesn’t make it hear the devices better: a battery device that is too far away still can’t reach it. Zigbee is a mesh network, and the solution is usually in the mesh:
See Build a good ZigBee mesh network, Real-time interference scan and Transmit power.
Unknown error right after a plugin restartThe WebUI is served by the plugin: while the plugin restarts, the WebUI can’t get any answer, and shows errors. Wait a minute or two after a restart before using the WebUI again.
If the error stays, check that the plugin is running in the logs. To investigate, enable the WebServer debug in WebUI > Tools > Debug (see Debug mode), reproduce the problem and look at the plugin log.
This answer applies to plugin 9.1.008 and above, with a zigpy coordinator (Texas Instruments, Silicon Labs, ConBee/RaspBee, Bouffalo Lab).
Before 9.1.008, the zigpy topology scan had a bug: each scan kept the readings of the first one, so the reports could show all the devices linked to the coordinator only, or links to devices that had left the network. If you are on an older version, update the plugin first.
From 9.1.008:
A battery device doesn’t route: it appears only through the router it is attached to, its parent. To see where the battery devices are attached, use the Associated devices button of the topology panel, and the Mesh graph.
You pair a device: it joins, leaves a few seconds later, joins again, and so on. Pairing never completes, even close to the coordinator. The devices already paired keep working. This happens on networks where many devices have been paired and removed over time.
The cause: the coordinator’s link key table is full. A Texas Instruments coordinator (Z-Stack) keeps one Trust Center Link Key (TCLK) entry for each Zigbee 3.0 device it has let into the network. The table has a fixed size, set when the firmware is built. With the Koenkk Z-Stack firmware it holds 200 entries (400 on a CC2674P10). Removing a device from the plugin doesn’t free its entry, and neither does a device leaving the network. When the table is full, the coordinator can’t give a new device its key: the device gives up, leaves, and tries again.
The fix: rewrite the table without the devices that no longer exist. Restoring a coordinator backup rewrites the whole table from the backup’s device list, so remove the old devices from the backup and restore it:
Stop the plugin, then make a backup of the coordinator with zigpy-cli, as described in Manual backup and restore with zigpy-cli. Keep an untouched copy of the file. Replace /dev/ttyUSB0 with the port of your coordinator.
zigpy radio znp /dev/ttyUSB0 backup coordinator-backup.json
cp coordinator-backup.json coordinator-backup.orig.json
devices list has an ieee_address (16 hex characters, as the plugin shows it). The entries that have a link_key are the table entries: if there are close to 200, the table is full.ieee_address is not one of your current devices (see the device list in the WebUI). Keep the JSON valid (watch the commas).With the plugin still stopped, restore the edited file onto the same coordinator, then start the plugin and pair the device again. The restore is in the same zigpy-cli section, and in the zigpy-cli documentation:
zigpy radio znp /dev/ttyUSB0 restore coordinator-backup.json
The zigpy-znp tools do the same: python -m zigpy_znp.tools.network_backup and network_restore, see zigpy-znp backup and restore. If the restore goes wrong, restore the untouched copy.
Be careful in step 3: a device that still exists and that you removed from the file loses its link key, and must be paired again.
The table fills up again over time if you pair and remove many devices. Repeat the cleanup when it happens.
No transport, write directive to XXX.XXX.XXX.XXX:8080' ignoredTime to time I see the following error message. Is that a big issue ? How can I get rid of it ?
Error: ZigBee: No transport, write directive to 'XXX.XXX.XXX.XXX:8080' ignored.
This error comes from DomoticZ. It appears when a WebUI page was left open and its connection timed out: when the page tries to refresh, DomoticZ has no connection to send the answer to. You can ignore it.
Error: (FindModule) Domoticz/DomoticzEx modules not found in interpreterError: (FindModule) Domoticz/DomoticzEx modules not found in interpreter.
This error appears when stopping the plugin. Ignore it.
A ModuleNotFoundError or No module named ... error at startup (for example No module named 'zigpy' or No module named 'z4d_certified_devices') means that the Python modules of the plugin are not installed in the Python environment DomoticZ uses. Don’t install the modules one by one: requirements.txt installs all of them, with the versions the plugin needs.
Install them in the Python virtual environment of DomoticZ, from the plugin folder (see Plugin installation):
source /home/pi/Domoticz_Python_Environment/bin/activate
cd /home/pi/domoticz/plugins/Domoticz-Zigbee
python3 -m pip install -r requirements.txt --upgrade
If the modules are installed but still not found, see E17.
Error: <plugin's name> : You need to setup the URL Base to access the Domoticz JSON/APIThis error appears when the DomoticZ parameter API base url is not correctly filled. More infos on step 2 Plugin settings.
Building wheel for cryptography (PEP 517) ... errorWhen doing the command pip3 install -r requirements.txt or python3 -m pip install -r requirements.txt --upgrade you get this error.
ERROR: Failed building wheel for cryptography
Failed to build cryptography
ERROR: Could not build wheels for cryptography which use PEP 517 and cannot be installed directly
upgrade or install the python module wheel, in the Python virtual environment of DomoticZ
python3 -m pip install wheel --upgrade
ImportError: PyO3 modules may only be initialized once per interpreter processError: Zigbee: Call to function 'onStart' failed, exception details:
Error: Zigbee: Traceback (most recent call last):
...
Error: Zigbee: File ".../cryptography/exceptions.py", line 9, in <module>
Error: Zigbee: from cryptography.hazmat.bindings.rust import exceptions as rustexceptions
Error: Zigbee: ImportError: PyO3 modules may only be initialized once per interpreter process
This is related to a cryptography module more recent than the plugin supports. The plugin pins the versions it needs in constraints.txt (cryptography<=40.0.2), which requirements.txt applies. Reinstall the modules in the Python virtual environment of DomoticZ, from the plugin folder:
python3 -m pip install -r requirements.txt --upgrade
If the error persists, a more recent cryptography is probably installed system wide and found first: use a Python virtual environment, see Using Python Virtual Environment.
externally-managed-environment (Debian 12 or newer)error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
Debian 12 (Bookworm) and newer, and the matching Raspberry Pi OS releases, refuse pip install on the system Python. Don’t use --break-system-packages: install the modules in a Python virtual environment for DomoticZ, as described in Using Python Virtual Environment and Plugin installation.
Error: <plugin's name> : ModuleNotFoundError: No module named 'cchardet'This error appears when you have several plugin instances and the charset-normalizer module is not the version the plugin expects. The plugin pins it in constraints.txt (currently charset-normalizer==2.0.11).
Check your version, in the Python virtual environment of DomoticZ:
python3 -m pip show charset-normalizer
If it is not the pinned version, reinstall the modules of the plugin, from the plugin folder (requirements.txt applies constraints.txt):
python3 -m pip install -r requirements.txt --upgrade
AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms'Error: Zigbee: (Zigbee) failed to load 'plugin.py', Python Path used was '...:/usr/lib/python3/dist-packages:...'.
Error: Zigbee: Traceback (most recent call last):
...
Error: Zigbee: File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 3279, in <module>
Error: Zigbee: lib.OpenSSLadd_all_algorithms()
Error: Zigbee: AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms'
The root cause is a conflict between the pyOpenSSL of the system (/usr/lib/python3/dist-packages/OpenSSL) and the cryptography module installed for the plugin ref.
Use a Python virtual environment for DomoticZ, so that the plugin doesn’t load the system modules, and install the modules of the plugin in it (requirements.txt applies the cryptography<=40.0.2 pin of constraints.txt): see Using Python Virtual Environment.
Error: Zigbee: (Zigbee) failed to load 'plugin.py', Python Path used was '...:/usr/lib/python3/dist-packages:...'.
Error: Zigbee: Traceback (most recent call last):
...
Error: Zigbee: File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 1577, in X509StoreFlags
Error: Zigbee: CB_ISSUER_CHECK = lib.X509V_FLAG_CB_ISSUER_CHECK
Error: Zigbee: AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
It is the same kind of conflict as E13, between the pyOpenSSL of the system and the modules installed for the plugin. The best fix is a Python virtual environment for DomoticZ (see Using Python Virtual Environment). Removing the system package also works, if no other software needs it:
sudo apt remove -y python3-openssl
Cannot run the event loop while another loop is running with several plugin instancesencountered a runtime error: Cannot run the event loop while another loop is running
With DomoticZ 2026.x and Python 3.11 (for example Debian 12 / Raspberry Pi OS Bookworm), the second instance of the plugin fails to start with this error. It is a Python 3.11 problem, reported to DomoticZ in domoticz/domoticz#6763. Restarting the failed instance (or waiting for it to restart by itself) usually gets both instances running.
DomoticZ itself writes a note about it at start-up on Python 3.11:
Status: Zigbee: Note: Python 3.11 detected. Plugins using asyncio inside sub-interpreters (shared="true" not set) can leak event-loop state between plugins on Python < 3.12 due to a global cache in CPython's _asyncio extension. If multiple asyncio-based plugins are active, prefer Python 3.12+ or set shared="true" in the plugin's XML manifest.
The fix is to run DomoticZ with Python 3.12 or newer (for example Debian 13 Trixie, which comes with Python 3.13), with the Python modules of the plugin installed for that version.
ModuleNotFoundError although the modules are installedThe modules were installed for another Python than the one DomoticZ uses: another Python version, or the system Python instead of the virtual environment. The plugin may also report that a module has the wrong version (for example zigpy 0.83.0 found where 2.1.0 is required): an older copy of the modules is found first.
PluginSystem: Started, Python version '3.13.5'.<venv>/bin/python3 --version). If not, create it again with python3.xx -m venv and reinstall the modules.VIRTUAL_ENV and PATH in the service). At start-up, the plugin writes VIRTUAL_ENV is set to: ... and PYTHONPATH is set to: ... in the DomoticZ log.PYTHONPATH from an older installation, the modules of that folder are found first. Remove the PYTHONPATH line, see Older setups with PYTHONPATH.If your virtual environment is in a mess, the simplest is to delete it and create it again, see Using Python Virtual Environment.
Z4D requires Python 3.11 or Domoticz version ... not supportedThe plugin (stable9) requires Python 3.11 or newer and DomoticZ 2025.1 or newer, with the Extended Framework. DomoticZ 2026.3 is the recommended version.
Z4D requires Python 3.11, found 3.x: DomoticZ runs an older Python. Upgrade your system, or install a newer Python and make DomoticZ use it.Domoticz version ... not supported, please upgrade to a more recent: upgrade DomoticZ (check your version in Setup > About).See Plugin installation.
detected dubious ownership in repository or You have uncommitted changesfatal: detected dubious ownership in repository at '/home/pi/domoticz/plugins/Domoticz-Zigbee'
Error: You have uncommitted changes. Please commit or stash them first.
The plugin folder belongs to another user than the one running the update. It happens when the update runs as root (DomoticZ started as root, or a sudo command) on a folder owned by your user, or the other way round. git then refuses the folder, or sees every file as modified although you didn’t change anything.
Give the plugin folder to the user DomoticZ runs as, then run the update again. For example, if DomoticZ runs as pi:
cd /home/pi/domoticz/plugins/Domoticz-Zigbee
sudo chown -R pi:pi .
git status
git status must then show no modified file. If it still shows files you really changed, put them aside with git stash -u (see Upgrading from stable8 to stable9), or reset them as described in Plugin update.
Domoticz widget creation failed ... Check that Domoticz can Accept New HardwareError: Zigbee: Domoticz widget creation failed for <NwkId>/<Ep> <widget type> (unit <unit>). Check that Domoticz can Accept New Hardware, and see the Domoticz log for the reason it refused.
DomoticZ refused to create a widget for a device. The plugin keeps the device and tries again a few times; if it still fails, it stops trying until the next restart.