开源homekit adk 测试

旧城冷巷雨未停 提交于 2019-12-23 02:39:47

开源homekit adk 测试

摘要 :本文尝试体验苹果新鲜开源的homekit adk,实现在ubuntu成功编译运行后在iPhone 实现设备的添加、控制,以及siri的语音控制。

由amazon、apple、google、zigbee alliance牵头的project connected home over ip项目成立了,旨在统一智能硬件在应用层的通信协议,多年智能家居从业,从早期私有协议,再到各家所谓的data models、tls(things language specification)、物模型、miot-spec,甚是知道在上层应用的通信语言的不统一,带来的设备模型重影映射是多么繁琐。

  1. mazon’s Alexa Smart Home
  2. Apple’s HomeKit
  3. Google’s Weave
  4. Zigbee Alliance’s Dotdot data models

巧的是第二天zigbee 联盟就来公司就行了宣讲。很多人会觉得很别扭,上层的应用通信语言的统一为什么会有zigbee联盟的加入,熟悉zigbee协议的应该知道,发展了10多年的zigbee在zigbee3.0后才逐渐进入人们视野。很大程度上是得益于zigbee3.0设备的zcl revision7,基于硬件属性统一了硬件之间的通信语言,打通不同硬件厂商的设备的通信。而zcl则是zigbee 联盟的物联网统一语言规范dotdot的over zigbee应用,显然地,zigbee 并不满足于此,这一次四位大佬的相聚相信会取其大家特长,打通设备之间的网关、iot平台、应用之间的标准通信语言。

利好的是由于google的加入,该项目组的从规范、到源码都会开源。很多人会由此质疑苹果的决心,于是就有了苹果的homekit hdk开源。

本文尝试体验苹果新鲜开源的homekit adk,实现在ubuntu成功编译运行后在iPhone 实现设备的添加、控制,以及siri的语音控制。

context

这里直接在ubuntu18.04 上面编译测试。看起来苹果官方主要在树莓派或mac上面测试,所以ubuntu上面无可避免会趟坑。

$uname -a
Linux thinkpad-550 5.0.0-37-generic #40~18.04.1-Ubuntu SMP Thu Nov 14 12:06:39 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

dependency

成功编译homekit adk之前,需要安装如下依赖。

$sudo apt-get install clang libavahi-compat-libdnssd-dev libsqlite3-dev libfaac-dev libasound-dev libopus-dev libavahi-compat-libdnssd-dev

compile

安装依赖之后从apple开源github clone 源码,着手编译。

$git clone https://github.com/apple/HomeKitADK.git
$cd HomeKitADK
$make TARGET=Linux apps

完成编译后会在./Output/Linux-x86_64-pc-linux-gnu/Debug/IP/Applications/编译生成Lightbulb.OpenSSLLock.OpenSSL可执行文件。

$tree ./Output/Linux-x86_64-pc-linux-gnu/Debug/IP/Applications/
./Output/Linux-x86_64-pc-linux-gnu/Debug/IP/Applications/
├── Lightbulb
│   ├── App.o
│   ├── DB.o
│   └── Main.o
├── Lightbulb.a
├── Lightbulb.OpenSSL
├── Lock
│   ├── App.o
│   ├── DB.o
│   └── Main.o
├── Lock.a
└── Lock.OpenSSL

运行Lightbulb.OpenSSl,此时尝试从iPhoneHome 尝试添加设备在输入setup code 后[报错](No setup code found in key-value store.),仔细阅读了源码还需要增加setup keystore,这部分通过Tools\provision_raspi.sh 生成。

尝试在sdk 根目录执行

$rm -r ./Output/Linux-x86_64-pc-linux-gnu/Debug/IP/Applications/.HomeKitStore
$./Tools/provision_raspi.sh --category 5 --setup-code 111-22-333 ./Output/Linux-x86_64-pc-linux-gnu/Debug/IP/Applications/.HomeKitStore

提示:如上111-22-333 即为iPhone Home/家 添加设备过程中需要的setup code。

test

在ubuntu上执行./Lightbulb.OpenSSL

$cd ./Output/Linux-x86_64-pc-linux-gnu/Debug/IP/Applications/
$./Lightbulb.OpenSSL

在iPhone上运行Home/家->+(右上角)->Add or Scan Accessory->I Don’t Have a Code or Cannot Scan->选择Acme Light Bulb->Uncertified Accessory/Add Anyway->输入如上生成的8位setup code 111-22-333 完成设备添加。

成功添加设备后便可以在首页点击控制,或者通过siri语音控制。如下是打开/关闭灯泡 ubuntu打印的日志。

2019-12-22'T'06:01:23'Z'	Info	HandleLightBulbOnWrite: false
2019-12-22'T'06:01:23'Z'	Info	HandleLightBulbOnWrite: true

troubleshootings

clang: Command not found

提示报错:

make[1]: clang: Command not found
sudo apt-get install clang

fatal error: ‘dns_sd.h’ file not found

完整报错信息如下:

PAL/Linux/HAPPlatformServiceDiscovery+Init.h:14:10: fatal error: 'dns_sd.h' file not found

安装依赖包。

sudo apt-get install libavahi-compat-libdnssd-dev

ldd error

链接报错:

/usr/bin/ld: cannot find -lsqlite3
/usr/bin/ld: cannot find -lasound
/usr/bin/ld: cannot find -lsqlite3
/usr/bin/ld: cannot find -lasound
/usr/bin/ld: cannot find -lopus
/usr/bin/ld: cannot find -lfaac
/usr/bin/ld: cannot find -lopus
/usr/bin/ld: cannot find -lfaac

安装如下依赖

sudo apt-get install libsqlite3-dev libfaac-dev libasound-dev libopus-dev libavahi-compat-libdnssd-dev

No setup code found in key-value store.

运行

2019-12-22'T'04:08:57'Z'	Error	[com.apple.mfi.HomeKit.Platform:AccessorySetup] No setup code found in key-value store.
2019-12-22'T'04:08:57'Z'	Fault	fatal error - HAPPlatformAccessorySetupLoadSetupInfo @ PAL/Linux/HAPPlatformAccessorySetup.c:50

需要提前生成设备安装秘钥存储文件。

$rm -r ./Output/Linux-x86_64-pc-linux-gnu/Debug/IP/Applications/.HomeKitStore
$./Tools/provision_raspi.sh --category 5 --setup-code 111-22-333 ./Output/Linux-x86_64-pc-linux-gnu/Debug/IP/Applications/.HomeKitStore
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!