Skip to content

Zigbee Home Automation

Home Assistant's built-in Zigbee connection for compatible lights, sensors and controls.

Short name
ZHA
Connection
Local Zigbee coordinator
Integration
Built into Home Assistant

Documentation checked .

What it is

Zigbee Home Automation (ZHA) is Home Assistant's built-in integration for a Zigbee network. It uses a compatible coordinator to pair supported devices and expose their controls, sensor readings and events directly in Home Assistant.

My Setup

How ZHA Connects My Keypad, Outputs and Sensors

ZHA brings a mix of Zigbee devices directly into my Home Assistant build. I use it for a CentraLite keypad connected to Alarmo, relay outputs involved in irrigation, switched devices and electrical measurements. Occupancy and contact sensors also provide information in my dashboards.

Those devices do not all serve the same purpose. Some provide an input, some carry out a requested action, and others report a measurement. Home Assistant combines those functions with the rest of the system, while ZHA handles the Zigbee connection.

My setup also includes a local custom quirk for the keypad. It adapts the device's reports into useful Home Assistant entities, with specific limits on what the battery, interaction and tamper indications mean.

The coordinator and Home Assistant

Home Assistant runs on my Raspberry Pi. My ZHA configuration uses a USB-connected Zigbee coordinator with an Ember-compatible radio connection. ZHA works with the coordinator through the Zigbee software stack and exposes the supported controls, events and measurements in Home Assistant.

Zigbee device ↔ coordinator ↔ ZHA ↔ Home Assistant entity or automation

This path does not require an MQTT broker or a separate Z-Wave JS server. Those are other connection paths in my build, described in the MQTT and Z-Wave JS articles.

My Hue bridge has its own connection to Home Assistant. Zigbee devices joined to that bridge are not automatically part of the ZHA network. A device joins one Zigbee network at a time; Home Assistant can still combine devices from those separate networks in an automation.

What I connect through ZHA

These roles come from my configured devices, dashboard references and automation definitions. The table separates what a connection reports from what I use that information to do.

Scroll the table horizontally to compare all four columns.

ZHA connections in my build
ConnectionInformationHow I use itLimit or dependency
CentraLite 3400 keypadAlarm commands, panel state and supporting sensors.Physical alarm interaction connected to Alarmo through automations.My local custom quirk adapts device behavior; keypad state and Alarmo state need coordination.
Tuya TS0004 relayControllable outputs, including outputs exposed as light entities.Irrigation-related actions coordinated with Rachio, plus status notifications.An output state is not a measurement of water flow or completed watering.
Metering plugs and switched outputsSwitch state and supported electrical measurements.Dashboard controls and power readings in equipment-monitoring notifications.The reported measurements and their freshness depend on the device.
Occupancy and contact sensorsOccupancy, opening and supporting sensor reports.Sensor information in Home Assistant dashboards.A registered sensor or dashboard reference does not establish an automation use.
GLEDOPTO GL-C-008A Zigbee device used as a repeater in my build.Supports the Zigbee network rather than serving primarily as a lighting feature here.Its role does not establish which route any particular device is currently using.

My ZHA dashboards include alarm controls, switched outputs, occupancy and opening states, and measurements such as power, energy, battery and temperature. The functions available vary by device; pairing successfully does not mean every manufacturer-specific feature is exposed.

The CentraLite keypad and Alarmo

Commands in, alarm state back

My keypad automation receives ZHA events and maps the relevant commands to Alarmo arm or disarm actions. A separate automation responds to Alarmo state changes and updates the keypad's ZHA alarm-control entity for the corresponding mode.

Keypad command → ZHA event → Home Assistant automation → Alarmo
Alarmo state change → Home Assistant automation → keypad panel state

These are two directions of communication. Receiving a keypad request is different from Alarmo accepting it, and updating a keypad entity is different from verifying the physical keypad's response. When checking the workflow, both directions matter.

What my custom quirk changes

My local CentraLite 3400 quirk adapts several device-specific reports. It derives a battery percentage from reported voltage, adds an indication of keypad interaction and creates a timed tamper indication from the device's zone notifications.

The quirk includes a startup grace period to suppress enrollment-related notifications. Its behavior is specific to the device handling implemented here; it is not a general claim about every CentraLite firmware version.

The ZHA Device Handlers project explains the quirk mechanism and upstream device support. That link points to the upstream project, not a published repository for my local keypad changes.

Irrigation outputs and equipment monitoring

Rachio state into Zigbee output control

My irrigation configuration combines Rachio switch states with outputs on a Tuya TS0004 Zigbee relay. Home Assistant automations use Rachio state to select actions that turn the relevant ZHA outputs on or off. Related logic also checks those states at startup and periodically.

Some relay outputs appear as light entities in Home Assistant, so the automations use light actions to operate them. The entity type describes how the control is exposed in software; in this setup, those outputs participate in irrigation rather than room lighting.

Other configured paths use output-state changes for notifications, or combine relay and Rachio state with equipment information for counters. Those are software observations. A relay state alone does not prove that water is flowing, a valve moved or a watering cycle completed.

Metering alongside other equipment data

ZHA power readings are included in a configured notification alongside power information from other equipment integrations. My metering devices also expose supported electrical measurements such as energy, current and voltage for inspection in Home Assistant.

Power and energy answer different questions: power describes a reported rate of consumption, while energy represents accumulated consumption. Having those entities available does not establish that every reading is used in the Energy dashboard, or that every measurement has been calibrated.

My configuration also uses a ZHA switch-state input in an automation with a helper condition and a switching action. This is the same wider pattern: Home Assistant evaluates the logic, and each integration handles its own devices.

Reports, radio coverage and device support

Local Zigbee is one part of the workflow

ZHA provides a local connection to the joined devices. A wider routine still depends on Home Assistant and any other integration it calls. A working Zigbee relay connection does not establish that the Rachio side is available, just as a received keypad command does not establish that Alarmo changed state.

Network coverage and quirks solve different problems

I use the GLEDOPTO device as a Zigbee repeater. Router devices can help carry traffic through the mesh, but the existence of a router does not prove that a particular device is using it or has a healthy route. Coordinator placement, interference and powered routers remain part of connection troubleshooting.

A quirk adapts how a device's messages are interpreted. It cannot repair an unreachable radio device. Conversely, improving radio coverage will not correct a manufacturer-specific report that needs different handling.

Fresh reports matter

A saved battery value, a displayed contact state or an available control can outlast the last useful device report. Check for a fresh update when diagnosing a missing action. Battery-operated devices may also need waking for pairing or configuration work, following their own instructions.

Before changing coordinators, preserve the network backup and follow the supported migration process. Keep custom quirk code with the configuration needed to restore it. Network recovery and the continued behavior of a local customization are separate checks.

Checking the full path from device to result

The useful checks depend on where the information stops:

The official ZHA documentation covers pairing, interference, device support and coordinator migration. In my build, ZHA supplies the direct Zigbee connection; Home Assistant makes those controls and measurements useful alongside the rest of the home.

What it can do

  • Direct pairing

    Join supported Zigbee devices to the network managed by ZHA.

  • Device entities

    Expose supported lighting, switching and sensor functions.

  • Automation events

    Use supported remote and device events in Home Assistant automations.

  • Device-specific handling

    Quirks can translate non-standard behavior and expose manufacturer-specific functions.

Install and connect

  • A supported Zigbee coordinator accessible to Home Assistant.
  • Devices ready to join that coordinator's Zigbee network.
  1. Prepare the coordinator

    Connect a supported radio and keep it away from interference sources where practical.

  2. Add ZHA

    Use Settings > Devices & services > Add integration > Zigbee Home Automation, or accept its discovery.

  3. Pair a device

    Open the integration's add-device flow and put the device into its manufacturer's pairing mode.

  4. Check the exposed functions

    Verify its controls and reports. For missing features, check the device-handlers project before assuming full compatibility.

Limits and caveats

Sources and next steps