跳转到主要内容

asyncio HomeKit客户端

项目描述

aiohomekit

CI codecov

此库实现了使用asyncio控制Homekit配件的HomeKit协议。

它主要用于与Home Assistant一起使用。我们针对与他们相同的python版本,并尝试遵循他们的代码标准。

目前我们不提供任何API保证。API稳定性和文档将在我们对Home Assistant内部工作情况满意后发生。

贡献

请注意,一些物流设备对HAP规范的解释较为宽松。一般来说,我们更喜欢匹配真实HAP控制器的行为,即使它们的行为没有严格规定。以下是我们不得不解决的某些问题的类型

  • 尽管JSON的精确格式在规范中未指定,但野外有一些设备无法在解析JSON时处理空格。例如,{"foo": "bar"}{"foo":"bar"}。这意味着我们从不使用“漂亮”的JSON编码。
  • 尽管规范中明确将布尔值定义为01truefalse,但一些设备只支持这四种中的三种。这意味着布尔值必须编码为01
  • 一些设备表明它们对缺少标题、标题顺序错误或存在额外标题非常敏感。因此,我们确保只有iOS发送的标题存在,并且大小写和顺序相同。
  • 一些设备对HTTP消息被分割成单独的TCP数据包非常敏感。因此,我们注意只将完整消息写入网络堆栈。

等等。一般来说,我们需要对发送的内容严格,对接收的内容宽松。

设备兼容性

aiohomekit主要通过Home Assistant与飞利浦Hue桥和Eve Extend桥进行测试。它在与许多其他设备的一些程度上已知可以工作,但这些目前尚未在任何地方明确记录。

您可以在home-assistant的问题列表中查看您的设备遇到的问题。

常见问题解答

我该如何使用它?

它作为aiohomekit发布在pypi上,但仍在早期开发阶段 - 请谨慎行事。

API的主要消费者是Home Assistant中的homekit_controller,因此这是了解API的最佳地方。

这个支持BLE配件吗?

不。我们最终希望通过aioble来实现,它提供了一个在Linux、macOS和Windows上工作的异步蓝牙抽象。

我可以用这个来制作HomeKit配件吗?

不,这只是一个客户端部分。您应该使用其他实现之一

为什么Home Assistant不使用库X而不是?

在编写本文时,这是唯一的Python 3.7/3.8异步HAP客户端,具有事件支持。

为什么aiohomekit不使用库X而不是?

尽可能,aiohomekit使用易于通过pip安装的库,作为轮子提供(包括通过piwheels在Raspberry Pi上),跨平台(包括Windows),并且已经被Home Assistant使用。它们不应该引入对不常见的系统库的硬依赖。这里的意图是避免在Home Assistant构建过程中的任何困难。

人们经常对手动编写的HTTP代码感到惊讶,并建议使用现有的HTTP库,如aiohttp。高级HTTP库几乎无法启动,因为

  • 在不进行猴子补丁的情况下添加HAP会话安全比较困难。
  • 它们不期望没有请求就有响应(即事件)。
  • 如上所述,一些设备非常敏感。我们不关心您的更改是否符合每个规范,只要它仍然使真实世界的设备崩溃。我们没有能力要求这些设备被修复。因此,我们努力在写入路径上实现字节数据的精确匹配。任何库都需要给我们这种灵活性。
  • 响应的部分实际上不是HTTP,尽管它们看起来像。

我们也不愿意对正在大量设备上运行的东西进行如此大的改动。有很大的可能引入回归问题。

当然,一个经过测试的工作原型(使用流行的、维护良好的库)将会很有趣,这些测试包括像Tado互联网桥(包括事件)这样的东西。

谢谢

没有homekit_python,这个库就不可能实现,它是HAP客户端和服务器部分的同步实现。

项目详情


发布历史 发布通知 | RSS订阅

下载文件

下载您平台对应的文件。如果您不确定该选择哪个,请了解有关 安装包 的更多信息。

源代码分发

aiohomekit-3.2.3.tar.gz (122.0 kB 查看哈希值)

上传时间 源代码

构建分发

aiohomekit-3.2.3-py3-none-any.whl (163.1 kB 查看哈希值)

上传时间 Python 3

由以下支持