摘要 :本文尝试体验苹果新鲜开源的homekit adk,实现在ubuntu成功编译运行后在iPhone
家
实现设备的添加、控制,以及siri的语音控制。
由amazon、apple、google、zigbee alliance牵头的project connected home over ip项目成立了,旨在统一智能硬件在应用层的通信协议,多年智能家居从业,从早期私有协议,再到各家所谓的data models、tls(things language specification)、物模型、miot-spec,甚是知道在上层应用的通信语言的不统一,带来的设备模型重影映射是多么繁琐。
巧的是第二天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的语音控制。
这里直接在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
成功编译homekit adk之前,需要安装如下依赖。
$sudo apt-get install clang libavahi-compat-libdnssd-dev libsqlite3-dev libfaac-dev libasound-dev libopus-dev libavahi-compat-libdnssd-dev
安装依赖之后从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.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 后[报错](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。
在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
提示报错:
make[1]: clang: Command not found
sudo apt-get install clang
完整报错信息如下:
PAL/Linux/HAPPlatformServiceDiscovery+Init.h:14:10: fatal error: 'dns_sd.h' file not found
安装依赖包。
sudo apt-get install libavahi-compat-libdnssd-dev
链接报错:
/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
运行
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