连接HomeKit附件和控制器的Python代码

homekit的Python项目详细描述


homeKit python构建状态coverage statusgitter chat

使用此代码可以实现HomeKit附件或模拟 家庭套件控制器。

此存储库中显示的代码是基于2017-06-07的R1版创建的。

贡献者

(贡献者没有按特定顺序列出!)

安装

基于IP的附件的安装

只需使用pip3安装软件包即可:

pip3 install --user homekit[IP]

此安装仅适用于基于IP的附件,无需任何操作系统级安装,并且 也适用于Linux以外的操作系统(Mac OS X、Windows等)。

安装基于蓝牙LE的附件

此变体需要操作系统上的一些软件包才能通过dbus访问蓝牙le。这些可以 通过:

安装在基于Debian的操作系统上
apt install -y libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 libdbus-1-dev

之后,再次使用pip3就足够了:

pip3 install --user homekit[BLE]

两种附件的安装

在这种情况下,请为您的操作系统安装软件包,然后使用pip3:

pip3 install --user homekit[IP,BLE]

家庭套件附件

此软件包有助于创建自定义HomeKit附件。

演示在~/.homekit/demoserver.json中使用此json

{"name":"DemoAccessory","host_ip":"$YOUR IP","host_port":8080,"accessory_pairing_id":"12:00:00:00:00:00","accessory_pin":"031-45-154","peers":{},"unsuccessful_tries":0,"c#":0,"category":"Lightbulb"}

现在,让我们生成一个简单的灯泡附件作为演示:

#!/usr/bin/env python3importos.pathfromhomekitimportHomeKitServerfromhomekit.modelimportAccessory,LightBulbServiceif__name__=='__main__':try:httpd=HomeKitServer(os.path.expanduser('~/.homekit/demoserver.json'))accessory=Accessory('Licht')lightService=LightBulbService()accessory.services.append(lightService)httpd.accessories.add_accessory(accessory)httpd.publish_device()print('published device and start serving')httpd.serve_forever()exceptKeyboardInterrupt:print('unpublish device')httpd.unpublish_device()

如果一切正常,您应该可以将此附件添加到iOS设备上的家庭中。

家庭套件控制器

以下工具有助于访问HomeKit附件。

初始控制器存储

此工具初始化HomeKit控制器的存储文件。

用法:

python3 -m homekit.init_controller_storage -f ${PAIRINGDATAFILE}

选项-f指定包含控制器数据的文件名。

发现

此工具将列出所有可用的本地网络中的Le HomeKit IP附件。

用法:

python3 -m homekit.discover [-t ${TIMEOUT}][-u][--log ${LOGLEVEL}]

选项-t指定查询的超时时间。这是可选的,默认为10秒。

选项-u激活过滤器,仅显示未配对的设备。这是可选的,默认情况下不起作用。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

输出:

Name: smarthomebridge3._hap._tcp.local.
Url: http://192.168.178.21:51827
Configuration number (c#): 2
Feature Flags (ff): Paired (Flag: 0)
Device ID (id): 12:34:56:78:90:05
Model Name (md): Bridge
Protocol Version (pv): 1.0
State Number (s#): 1
Status Flags (sf): 0
Category Identifier (ci): Other (Id: 1)

提示:

  • 一些设备,如酷客p1eu插头需要蓝牙设置无线(如加入无线网络)之前。 使用手机或适当的应用程序执行此操作
  • 配对设备不应出现

探索

此工具将列出蓝牙LE设备范围内所有可用的家庭套件附件。

用法:

pip3 install --user homekit[IP]
0

选项-t指定查询的超时时间。这是可选的,默认为10秒。

选项-u激活过滤器,仅显示未配对的设备。这是可选的,默认情况下不起作用。

选项--adapter指定要使用的蓝牙设备。这是可选的,hci0是默认值。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

输出:

pip3 install --user homekit[IP]
1

确定

此工具将使用HomeKit附件的识别例程。它有三种操作模式。

识别未配对的家庭套件IP附件

用法:

pip3 install --user homekit[IP]
2

选项-d指定要标识的附件的设备ID。可通过发现获得

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

识别未配对的家庭套件ble附件

用法:

pip3 install --user homekit[IP]
3

选项-m指定要标识的附件的蓝牙le-mac id。可通过发现功能获得

选项--adapter指定要使用的蓝牙设备。这是可选的,hci0是默认值。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

识别配对的家庭套件附件

用法:

pip3 install --user homekit[IP]
4

选项-f指定包含配对数据的文件。

选项-a指定设备的别名。

选项--adapter指定要使用的蓝牙设备。这是可选的,hci0是默认值,仅 如果配对设备使用蓝牙LE,则使用此选项。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

配对

此工具将与新的IP附件配对。

用法:

pip3 install --user homekit[IP]
5

选项-d指定要配对的附件的设备ID。可通过"发现"获得。

选项-p指定HomeKit设置代码。可从附件获得。这必须看起来像xxx-xx-xxx (x是一个数字,破折号很重要)。

选项-f指定包含配对数据的文件。

选项-a指定设备的别名。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

需要带有配对数据的文件才能向附件发送任何其他命令。

配对

此工具将与新的蓝牙LE附件配对。

用法:

pip3 install --user homekit[IP]
6

选项-m指定要配对的附件的设备ID。可通过"发现"获得。

选项-p规范如果是HomeKit设置代码。可从附件获得。

选项-f指定包含配对数据的文件。

选项-a指定设备的别名。

选项--adapter指定要使用的蓝牙设备。这是可选的,hci0是默认值,仅 如果配对设备使用蓝牙LE,则使用此选项。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

需要带有配对数据的文件才能向附件发送任何其他命令。

列表配对

此工具将执行查询以列出附件的所有配对。这个 执行查询的控制器必须注册为admin。如果这是 不是这样,没有列出配对。

用法:

pip3 install --user homekit[IP]
7

选项-f指定包含配对数据的文件。

选项-a指定设备的别名。

选项--adapter指定要使用的蓝牙设备。这是可选的,hci0是默认值,仅 如果配对设备使用蓝牙LE,则使用此选项。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

这将打印与附件配对的每个控制器的信息:

pip3 install --user homekit[IP]
8

该信息包含配对ID、设备的公钥和控制器的权限。

准备"添加远程"配对

此工具将为add_additional_pairing命令准备所需的数据。

用法:

pip3 install --user homekit[IP]
9

选项-f指定包含配对数据的文件。

选项-a指定要添加的设备的别名。

选项--log指定命令的日志级别。这是可选的。 使用"调试"获得更多输出。

这将打印要输入家庭工具包的信息。添加附加配对 (通过第二个频道):

apt install -y libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 libdbus-1-dev
0

添加附加配对

此工具用于告诉HomeKit附件接受 附加控制器。

用法:

apt install -y libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 libdbus-1-dev
1

选项-f指定包含配对数据的文件。

选项-a指定要添加的设备的别名。

选项-i指定附加控制器的配对ID。

选项-k指定附加控制器的公钥。

选项-p指定附加控制器的访问权限,对于配对,这可以是用户管理员。 拥有更高的特权。

选项--log指定命令的日志级别。这是可选的。 使用"调试"获得更多输出。

这将打印要输入HomeKit的信息。完成添加远程配对(通过第二个频道):

apt install -y libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 libdbus-1-dev
2

完成添加远程配对。py

此工具完成了家庭套件附件配对的添加。

用法:

apt install -y libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 libdbus-1-dev
3

选项-f指定包含配对数据的文件。

选项-a指定要添加的设备的别名。

选项-c指定附件的连接类型(值为 IP和BLE)。

选项-i指定附件的设备ID。

选项-k指定附件的公钥。

选项-m指定蓝牙低能耗附件的MAC地址 配件。IP附件不需要此功能。

选项--log指定命令的日志级别。这是可选的。 使用"调试"获得更多输出。

删除配对

此工具将从附件中删除配对。

用法:

apt install -y libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 libdbus-1-dev
4

选项-f指定包含配对数据的文件。

选项-a指定设备的别名。

选项-i指定要删除的控制器配对ID。

选项--adapter指定要使用的蓝牙设备。这是可选的,hci0是默认值,仅 如果配对设备使用蓝牙LE,则使用此选项。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

获取附件

此工具将读取附件属性数据库。

用法:

apt install -y libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 libdbus-1-dev
5

选项-f指定包含配对数据的文件。

选项-a指定设备的别名。

选项-o指定输出的格式:

  • json将结果显示为打印精美的json
  • 压缩在一个屏幕上重新格式化输出以获得更多信息

选项--adapter指定要使用的蓝牙设备。这是可选的,hci0是默认值,仅 如果配对设备使用蓝牙LE,则使用此选项。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

使用compact输出,结果如下所示:

apt install -y libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 libdbus-1-dev
6

获取特征

此工具将从一个或多个特征中读取值。

用法:

apt install -y libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 libdbus-1-dev
7

选项-f指定包含配对数据的文件。

选项-a指定设备的别名。

选项-c指定要读取的特征。格式为<;aid>;<;cid>;。此选项可以重复到 使用一个调用检索多个特征(例如-c 1.9-c1.8)。

选项-m指定是否也应读取元数据。

选项-p指定是否也应读取权限。

选项-t指定是否也应读取类型信息。

选项-e指定是否也应读取事件数据。

选项--adapter指定要使用的蓝牙设备。这是可选的,hci0是默认值,仅 如果配对设备使用蓝牙LE,则使用此选项。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

例如,此命令读取酷客p1eu插头的2个特征:

apt install -y libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 libdbus-1-dev
8

结果将是一个json,其中包含每个请求特征的数据:

apt install -y libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0 libdbus-1-dev
9

放置特征

此工具将向一个或多个特征写入值。

用法:

pip3 install --user homekit[BLE]
0

选项-f指定包含配对数据的文件。

选项-a指定设备的别名。

选项-c指定要更改的特性。格式为<;aid>;<;cid>;<;value>;。这个选项可以是 通过一次呼叫重复更改多个特征(例如,-c 1.9 on-c1.8 22.3)。

选项--adapter指定要使用的蓝牙设备。这是可选的,hci0是默认值,仅 如果配对设备使用蓝牙LE,则使用此选项。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

例如,此命令将转动Kookeek p1eu插头:

pip3 install --user homekit[BLE]
1

如果操作成功,则不会给出输出或显示错误消息。

G2EVONS < /H2>

<强>!!蓝牙LE附件尚未实现!!

此工具将向附件注册并收听从附件发送回来的事件。

用法< /P>

pip3 install --user homekit[BLE]
2

选项-f指定包含配对数据的文件。

选项-a指定设备的别名。

选项-c指定要更改的特性。格式为<;aid>;<;cid>;。这个 可重复此选项,一次通话可收听多个特征。

选项--adapter指定要使用的蓝牙设备。这是可选的,hci0是默认值,并且 仅在配对设备使用蓝牙LE时使用。

选项--log指定命令的日志级别。这是可选的。使用"调试"获得更多输出。

例如,您可以收听Characteristics 1.8(on characteristics)、1.22(1 realtime-energy)和 Koogeek p1eu插头的1.23(2个当前小时数据),带:

pip3 install --user homekit[BLE]
3

这将导致

pip3 install --user homekit[BLE]
4

家庭套件附件

报告工作的设备

作者使用以下设备测试了代码:

  • 酷客p1eu插头(IP)(供应商)
  • 酷客DW1(BLE)(供应商
  • osram smart+classic e27多色(ble)(供应商)

用户已尝试(并且已成功,未经作者检查)使用以下设备:

  • 宜家tr_dfri(IP)(第13期)
  • 飞利浦顺化(IP)(问题13)
  • Leviton DH6HD-1BZ(IP)(第16期)
  • Lutron Caseta(IP)(智能网桥2/问题17
  • iHome ISP5(IP)(问题18)
  • 小米床头灯2(IP)(问题116)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java generateReleaseBuildConfig在库中出错   发布Apache CXF服务时出现异常(java配置,无Spring引导)   java Powermockito给了我一个空异常   JAVAutil。登录中。日志管理器。getLogger()返回null   我们可以使用java socketchannel与基于c的TCP服务器进行通信吗   java maven:找不到静态成员函数的符号   java InputStream不会检测到null,并且会一直进行ClientServer通信   尝试从链接列表中删除节点时发生java NullPointerException?   java无法在JTextPane中双击选择“带数字和下划线的文本”   用java打印文件类型   JavaFX与Java Swing在工业中的使用   Java中序列化对象大小与内存中对象大小   java在计时器上运行函数,同时允许鼠标操作   我的arraylist的Java contains()不在循环中工作   Java Akka Http路径匹配器   安卓 pie 9.0手机版:org。json。JSONException:java类型的值CLEARTEXT。无法将lang.String转换为JSONObject