开源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,甚是知道在上层应用的通信语言的不统一,带来的设备模型重影映射是多么繁琐。
- mazon’s Alexa Smart Home
- Apple’s HomeKit
- Google’s Weave
- 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 DOCKER=0 apps
提示:最新的adk增加了docker编译,依赖docker本地执行,如没有必要,建议直接本地编译DOCKER=0
。
完成编译后会在./Output/Linux-x86_64-pc-linux-gnu/Debug/IP/Applications/
编译生成Lightbulb.OpenSSL
和Lock.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 后报错,仔细阅读了源码还需要增加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。提示:如遇
AccessorySetupGenerator
存在,参考troubleshootings运行make tools DOCKER=0
。
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
AccessorySetupGenerator tool isn't available
AccessorySetupGenerator tool isn't available. Please run "make tools" from ADK root.
如提示,运行make tools DOCKER=0
。
Hi,
I have tried this command from the "compile" step and got this error.
command: $make TARGET=Linux DOCKER=0 apps
error:
PAL/Linux/HAPPlatform.c:41:5: error: unknown warning group '-Wdate-time', ignored
[-Werror,-Wunknown-pragmas]
HAP_DIAGNOSTIC_IGNORED_CLANG("-Wdate-time")
Do you have any solution for it?
I can only use English on my Linux environment, but you can reply in either English or Chinese.
Thank you.
Mitch
I'll try to reply after compiling, please wait a moment.
为啥重启后就失效了 需要手机重新添加设备呢
请问您知道商业homekit配件开发具体有哪些流程吗?
哈哈,确实不太清楚。
请问有遇到fatal error: 'openssl/kdf.h' file not found编译问题吗? 我已经安装了libssl-dev
$ dpkg -L libssl-dev |grep kdf
/usr/include/openssl/kdf.h
/usr/include/openssl/kdferr.h
最新ADK默认docker编译,依赖Docker环境,以及Docker环境下的其他依赖,如非必要,建议直接本地直接编译`DOCKER=0`