Skip to main content

Zigbee integration for MajorDom — bridges Zigbee devices into the MajorDom language.

Project description

integration-zigbee

A MajorDom integration — bridges Zigbee devices into the MajorDom language.

Built for the MajorDom Hub, but it doesn't need it: this is a standalone, standardized library for Zigbee that you can use on its own (see Run it standalone below). Built on the MajorDom Integration SDK. The entry point is ZigBeeController (majordom_zigbee/controller.py), which the Hub — or the SDK's dev runner — instantiates and drives through its lifecycle: pairing → commands → teardown.

Documentation

Full integration-author docs — the controller lifecycle, data models, storing data, discovery, and a worked example — live at docs.majordom.io.

Development

poetry install && poetry run poe install
Task Description
poe check Full quality pipeline (ruff, ty, pytest, poetry build/check)
poe check --ci Same, plus git diff --exit-code

Work lands on develop; master is protected and released via Actions → Release. Tests drive the controller with the SDK's test doubles against a simulated zigpy device — no radio required (see tests/).

Run it standalone (without the Hub)

majordom-zigbee is a standalone library — import it into your own app, or run just this integration interactively (discover, pair, control, and inspect devices from a prompt) with no Hub. It needs a Zigbee coordinator radio (a SkyConnect, ConBee, or a zigpy-znp/bellows-supported dongle) at a serial path.

See Standalone mode for the interactive CLI, watch mode, and the programmatic API.

About this integration

  • Protocol / platform: Zigbee via zigpy (with bellows / zigpy-znp radio libraries).
  • Transport(s): Zigbee (IEEE 802.15.4).
  • Supported devices: Zigbee Home Automation devices — lights, plugs, switches, sensors.
  • Credentials needed to pair: none — devices join during an explicit pairing window.

Required harness

  • Hardware adapters: a Zigbee coordinator radio (SkyConnect / ConBee / a zigpy-supported dongle) — the Hub assigns its OS device path via dependencies.hardware_interfaces (e.g. /dev/ttyACM0).
  • Third-party software services: none — zigpy speaks to the radio directly.
  • OS / permissions: serial-port access to the radio.

Protocol stack (OSI)

OSI layer Protocol Implemented by
Application (7) Zigbee Cluster Library (ZCL) this integration (via zigpy)
Network (3) Zigbee NWK / APS library (zigpy · radio firmware)
Data link / Physical (1–2) IEEE 802.15.4 radio adapter (harness)

Progress

  • start_pairing_window implemented (Zigbee requires an explicit join window)
  • Discovery of joining devices; controller_did_receive_discovery called
  • Re-discovery of already-paired devices on reconnect (controller_did_connect_device)
  • Device pairing
  • Device schema mapped: endpoints/clusters → parameter list with per-parameter metadata
  • Hub → Device control (send_command — commands and attribute writes)
  • Device → Hub event subscription (controller_did_receive_events)
  • identify
  • unpair
  • fetch
  • Availability tracking while running (controller_did_lose_device / last_error)
  • Graceful shutdown in stop
  • Tests pass against a simulated zigpy device (tests/)

Parameter metadata sources & priority

Every parameter's UX metadata is resolved from several sources. Two independent axes, each with its own priority ladder (first match wins). See also the parameter-ux recipe.

Visibility / role / unit — resolved by classify_attribute() in zigbee_spec.py:

# Source What it is
1 OUR_ATTRIBUTE_UX (VISIBILITY_OVERRIDES, USER_READINGS, EVERYDAY_CONTROL_ATTRIBUTES) our hand curation — a human's call wins over everything
metadata / manufacturer-on-system-cluster forced system (safety; scaling constants & bounds stay hidden)
2 v2 quirk entity metadata per-device judgment from a loaded zhaquirks QuirkBuilder (quirk_ux_map()), runtime
3 ZHA_ATTRIBUTE_UX standard-cluster judgment harvested from zha (scripts/harvest_zha.py, vendored — zha is not a runtime dep)
4 fallback policy heuristic (reportable → user, writable → setting); logs a warning so uncurated attrs surface. Flip _FALLBACK_HIDE_UNCURATED to hide-by-default once coverage is validated on real devices.

Bounds (min/max/step) — a separate ladder (resolve_metadata_bounds()):

  1. the device's own limit attributes' runtime values (METADATA_SOURCES) — ground truth for this device;
  2. spec tables (ATTRIBUTE_MIN_STEP, wire-type range);
  3. wire-type default. A missing expected limit is logged (quirk detection).

Quirks. zhaquirks.setup() runs once at controller startup so joined devices are presented in quirked form (manufacturer clusters decoded into named/typed attributes; v2 entity metadata attached). This requires the zigpy 2.x stack.

Drift. scripts/check_zha_drift.py re-harvests zha and diffs against the vendored artifact via the SDK's diff_specs, tiering changes ADD / REMOVE / RECLASSIFY (high-risk — changes what current users already see). CI opens a Dependabot-style refresh PR on drift.

Notes

The device/parameter ids are derived from the device's IEEE address via the SDK's UUID helpers, so they're stable across restarts and namespaced per integration.

License

See LICENSE. For commercial licensing or partnership inquiries regarding MajorDom, contact us via parker-industries.org/partnership.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

majordom_zigbee-0.1.4.tar.gz (40.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

majordom_zigbee-0.1.4-py3-none-any.whl (41.3 kB view details)

Uploaded Python 3

File details

Details for the file majordom_zigbee-0.1.4.tar.gz.

File metadata

  • Download URL: majordom_zigbee-0.1.4.tar.gz
  • Upload date:
  • Size: 40.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for majordom_zigbee-0.1.4.tar.gz
Algorithm Hash digest
SHA256 fab7bd25753a9ec1b013063bab7af74d4d2e5ba106a5a1f73ff5315ad4729d8b
MD5 bcf6c0a231bdb9f5b50fede5f8a1ba50
BLAKE2b-256 d458ecff3edcde059f574d798b27b5fa09c47d0e84d509ad10fb9eae40e5067c

See more details on using hashes here.

Provenance

The following attestation bundles were made for majordom_zigbee-0.1.4.tar.gz:

Publisher: release.yml on MajorDom-Systems/integration-zigbee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file majordom_zigbee-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: majordom_zigbee-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 41.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for majordom_zigbee-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 3b6a880e17be0e7d4802d002f9b8f563f3bd24d19d448d4452df6dfbd5e34626
MD5 093edc07840d3bc84a1faaa3acb41a5e
BLAKE2b-256 db1d8d4f2cdaa2eced435046f9dd8ee0045030c1b083c72ae57cffc9c019c5e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for majordom_zigbee-0.1.4-py3-none-any.whl:

Publisher: release.yml on MajorDom-Systems/integration-zigbee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page