Zigbee Home Automation

Zigbee Home Automation integration for Home Assistant allows you to connect many off-the-shelf Zigbee based devices to Home Assistant, using one of the available Zigbee radio modules compatible with zigpy (an open source Python library implementing a Zigbee stack, which in turn relies on separate libraries which can each interface a with Zigbee radio module a different manufacturer).

There is currently support for the following device types within Home Assistant:

  • Binary Sensor
  • Sensor
  • Light
  • Lock
  • Switch
  • Fan

ZHA exception and deviation handling

Zigbee devices that deviate from or do not fully conform to the standard specifications set by the Zigbee Alliance may require the development of custom ZHA Device Handlers (ZHA custom quirks handler implementation) to for all their functions to work properly with the ZHA integration in Home Assistant. These ZHA Device Handlers for Home Assistant can thus be used to parse custom messages to and from Zigbee devices.

The custom quirks implementations for zigpy implemented as ZHA Device Handlers for Home Assistant are a similar concept to that of Hub-connected Device Handlers for the SmartThings Classics platform as well as that of Zigbee-Shepherd Converters as used by Zigbee2mqtt, meaning they are each virtual representations of a physical device that expose additional functionality that is not provided out-of-the-box by the existing integration between these platforms.

Known working Zigbee radio modules


To configure the component, select ZHA on the Integrations page and provide the path to your Zigbee USB stick.

Or, you can manually confiure zha section in configuration.yaml. The path to the database which will persist your network data is required.

# Example configuration.yaml entry
  usb_path: /dev/ttyUSB2
  database_path: /home/homeassistant/.homeassistant/zigbee.db

If you are use ZiGate, you have to use some special usb_path configuration:

  • ZiGate USB TTL or DIN: /dev/ttyUSB0 or auto to auto discover the zigate
  • PiZigate : pizigate:/dev/serial0
  • Wifi Zigate : socket://[IP]:[PORT] for example socket://

Configuration Variables



One of ezsp, xbee, deconz or zigate.

Default value:




Path to the serial device for the radio.



Baud rate of the serial device.

Default value:




Full path to the database which will keep persistent network data.



Enable quirks mode for devices where manufacturers didn’t follow specs.

Default value:


To add new devices to the network, call the permit service on the zha domain. Do this by clicking the Service icon in Developer tools and typing zha.permit in the Service dropdown box. Next, follow the device instructions for adding, scanning or factory reset.


Add Philips Hue bulbs that have previously been added to another bridge

Philips Hue bulbs that have previously been added to another bridge won’t show up during search. You have to restore your bulbs back to factory settings first. To achieve this, you basically have the following options.

Philips Hue Dimmer Switch

Using a Philips Hue Dimmer Switch is probably the easiest way to factory-reset your bulbs. For this to work, the remote doesn’t have to be paired with your previous bridge.

  1. Turn on your Hue bulb you want to reset
  2. Hold the Dimmer Switch near your bulb (< 10 cm)
  3. Press and hold the (I)/(ON) and (O)/(OFF) buttons of the Dimmer Switch for about 10 seconds until your bulb starts to blink
  4. Your bulb should stop blinking and eventually turning on again. At the same time, a green light on the top left of your remote indicates that your bulb has been successfully reset to factory settings.


Follow the instructions on https://github.com/vanviegen/hue-thief/ (EZSP-based Zigbee USB stick required)

ZHA Start up issue with Home-Assistant Docker/Hass.io installs on linux hosts

On Linux hosts ZHA can fail to start during HA startup or restarts because the zigbee USB device is being claimed by the host’s modemmanager service. To fix this disable the modemmanger on the host system.

To remove modemmanager from an Debian/Ubuntu host run this command:

sudo apt-get purge modemmanager