zigpy是一个独立于硬件的Zigbee 协议栈集成项目,用于将Zigbee标准规范实现为 Python 3 库。
通过 zigpy 进行 Zigbee 集成允许您使用与 zigpy 兼容的可用 Zigbee 无线电库模块之一来连接许多现成的 Zigbee 协调器适配器之一,以控制基于 Zigbee 的设备。目前支持控制 Zigbee 设备类型,例如二进制传感器(例如运动和门传感器)、传感器(例如温度传感器)、灯、开关、按钮、盖子、风扇、气候控制设备、锁和入侵者警报系统设备。请注意,目前不支持 Zigbee Green Power 设备。
许多不同硬件芯片制造商的 Zigbee 堆栈和硬件均通过无线电库获得支持,这些无线电库将其专有通信协议转换为通用 API,该 API 在所有 zigpy 无线电库之间共享。如果 zigpy 尚不支持其他制造商的某些 Zigbee 堆栈或 Zigbee 协调器硬件,则任何独立开发人员都可以为 zigpy 开发新的无线电库,将其专有通信协议转换为 zigpy 可以理解的通用 API 。
zigpy 包含实现 ZCL(Zigbee 集群库)和 ZDO(Zigbee 设备对象)应用程序状态管理的通用代码,该代码被各种无线电库使用,实现与不同制造商的无线电模块的实际接口。单独的无线电库使用不同的本机 UART 串行协议通过 USB 和 GPIO 与无线电硬件适配器/模块连接。
Home Assistant 的 ZHA 集成组件、Domoticz 的 Zigbee 插件和 Jeedom 的 Zigbee 插件(竞争性开源家庭自动化软件)都使用 zigpy 库作为依赖项,因此,如果查看的话,它们可以用作不同实现的参考将 Zigbee 解决方案集成到您的应用程序中。
zigpy 能够下载并执行 Zigbee 设备固件的 Zigbee OTAU(无线更新)。 Zigbee OTA 更新固件映像文件应符合标准 Zigbee OTA 格式,并且需要发布 OTA 提供商源 URL 以供公众使用。还支持从本地 OTA 更新目录进行更新,如果用户自己提供正确的 Zigbee OTA 格式的固件文件,则可以将其用作离线固件更新的选项。
目前,仅支持 IKEA、Inovelli、LEDVANCE/OSRAM、SALUS/Computime 和 SONOFF/ITEAD 设备从 zigpy OTA 提供商代码中的现有在线 OTA 提供商自动下载。如果设备制造商公开发布其固件映像并且开发人员为其提供所需的下载代码,则 zigpy 将来可能会添加对其他制造商设备的其他 OTA 提供商的支持。
有关如何安装和测试 zigpy 或向该项目贡献错误报告和代码的具体说明,请参阅 CONTRIBUTING.md 文件中的指南:
此 CONTRIBUTING.md 文件将包含有关使用 zigpy、测试新版本、故障排除和错误报告的信息,以及面向开发人员的库 + 代码说明等。该文件还包含简短的摘要以及直接或间接依赖于 zigpy 库的其他相关项目的链接。
您可以作为最终用户、测试人员(贡献建设性问题/错误报告的高级用户)或作为贡献代码的开发人员为该项目做出贡献。
zigpy 的无线电库是独立的项目,拥有自己的存储库,包括波纹管(用于与 Silicon Labs 基于 EmberZNet 的无线电通信)、 zigpy-deconz (用于与 Dresden Elektronik 的基于 deCONZ 的无线电通信)和zigpy-xbee (用于与基于 XBee 的无线电通信) Zigbee 无线电), zigpy-zigate用于与基于 ZiGate 的无线电进行通信, zigpy-znp或zigpy-cc用于与具有 Z-Stack ZNP 协调器固件的基于德州仪器 (TI) 的无线电进行通信。
笔记! zigpy 是否支持 Zigbee 3.0 主要取决于您的 Zigbee 协调器硬件及其固件。某些 Zigbee 协调器硬件支持 Zigbee 3.0,但可能附带不支持 Zigbee 3.0 的旧固件,在这种情况下,您可能需要自己手动升级固件。其他一些 Zigbee 协调器硬件可能根本不支持支持 Zigbee 3.0 的固件,但仍然可以完全满足您的需求,(这种情况很常见,因为许多(如果不是大多数)Zigbee 设备尚未支持 Zigbee 3.0 或正在支持 Zigbee 3.0。与 Zigbee 协调器硬件及其固件支持的 Zigbee 配置文件向后兼容。作为一般规则,较新发布的 Zigbee 协调器硬件通常可以支持 Zigbee 3.0 固件,并且由其制造商提供此类固件。
新的标记版本包也通过 PyPI 上的“zigpy”项目发布
PyPI 上的“zigpy-homeassistant”项目中仍提供较旧的标记版本包
无线电库的标记版本包通过 PyPI 上的单独项目发布