开源homekit adk 测试

linux,ubuntu 2019-12-22 3087 次浏览 次点赞


开源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的语音控制。

I. 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

II. dependency

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

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

III. 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.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 后报错,仔细阅读了源码还需要增加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

IV. 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

V. 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


本文由 lijie 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处,点赞6

6 条评论

  1. lakakala
    lakakala

    为啥重启后就失效了 需要手机重新添加设备呢

  2. x
    x

    请问您知道商业homekit配件开发具体有哪些流程吗?

    1. lijie
      lijie

      哈哈,确实不太清楚。

  3. ppt
    ppt

    请问有遇到fatal error: 'openssl/kdf.h' file not found编译问题吗? 我已经安装了libssl-dev

    1. lijie
      lijie

      $ dpkg -L libssl-dev |grep kdf
      /usr/include/openssl/kdf.h
      /usr/include/openssl/kdferr.h

  4. lijie
    lijie

    最新ADK默认docker编译,依赖Docker环境,以及Docker环境下的其他依赖,如非必要,建议直接本地直接编译`DOCKER=0`

添加新评论