开源homekit adk 测试

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


开源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


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

8 条评论

  1. Mitch
    Mitch

    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

    1. Jay
      Jay

      I'll try to reply after compiling, please wait a moment.

  2. lakakala
    lakakala

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

  3. x
    x

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

    1. lijie
      lijie

      哈哈,确实不太清楚。

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

  5. lijie
    lijie

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

添加新评论