作為一個設計師,我用了一晚時間入門了 Android 開發並且為 HomeKit 提供了米家大部分設備的控制權

2017-06-20 08:56:59 +08:00
 cctrv

為你的米家提供完整的 HomeKit 接入方案

Homebridge 方案一直鑒於米家開放度不足,所以總是不能把所有的米家設備都控制起來,我已經不爽很久了。終於,我把它解決了。
設計師折騰系列上文:

https://tanronggui.xyz/t/336563#reply56

項目地址

https://github.com/qoli/MiHomePlus

演示視頻

http://staticshare.5mlstudio.com/img-5168-mov(2017-06-20T08:13:45+08:00).mov

操作原理

項目起因

天氣開始熱起來了,某日突發奇想,買了一個 NanoPi。

Nano Pi

搭建了很 Cool 的 HomeBridge。

後來數日后,歡喜地買了一個小米的空調伴侶。悲劇就從而而生了。

悲劇

小米的空調伴侶,竟然是不支持裝好的 Homebridge ! 我無法接受的我,開始了浪費生命的折騰。

Android ADB 腳本方案

鑒於我只是一個設計師而言,我首先想到的辦法,是基於 Android ADB 指令,透過數據線去操作 Android 手機作為代理。 在大約 30 分鐘 ~ 60 分鐘后,我寫出了像樣的腳本了。

![螢幕快照 2017-06-17 上午 6.00.00]( http://ok7ct2124.bkt.clouddn.com/2017-06-20-螢幕快照 2017-06-17 上午 6.00.00.png)

把 ADB 方案集成到 HomeKit

在集成到 Homebridge 時候就遇到大問題了。調用腳本操作時候一切都好,但是就是無法在 HomeKit 使用。我上網檢查了文檔,發現 HomeKit 最長允許 2s 以內的指令,然而,我這個模擬方案,指令時長達到 30s 以上。 所以,只能放棄此 ADB 方案。

尋覓新方案,基於 Android Accessibility

我作為人生從沒開發過 Android / iOS 的設計師。只會前端 / Nodejs / PHP 這三個語言。 經過我一番搜索之後,我看到 Accessibility 相關的代碼好像特別簡單。 所以,我決定下載一個 Android Studio 來啟動我的 Android 之旅。

寫起來,發現 Android 開發其實不難

經過了 2 天時間,我終於把能用的 Android App 寫好了。我沒有覺得太多坑,我只是覺得英文資料太多,看起來很累而已。除了每次編譯的速度真的很慢之外,其他都還挺好的。

在寫的過程中,我都很少去看文檔,主要依賴 Google 知識點,閱讀別人的源代碼,很快地,就把核心功能組裝好了。又花了 120 分鐘時間,把服務器通信部分也組裝好了。

又花了好多好多時間,把 Socket IO 也折騰好了。

服務器端﹣Nodejs

Nodejs 部分最為簡單了,畢竟還是熟悉的嘛~簡單的接口就折騰好了。

Homebridge 接口

Homebridge 使用了 homebridge-switcheroo 作為通信插件,搞定。

一切的都搞定了,除了程序配置化

演示視頻:

http://staticshare.5mlstudio.com/img-5168-mov(2017-06-20T08:13:45+08:00).mov

14967 次点击
所在节点    分享创造
97 条回复
cxl008
2017-06-21 11:24:48 +08:00
一直不忍心下单米家全套。。。。
xuan_lengyue
2017-06-21 12:27:20 +08:00
示例视频看到最后有亮点…
xuan_lengyue
2017-06-21 12:27:55 +08:00
看错了…
cctrv
2017-06-21 14:30:18 +08:00
@yangff
我的思路是,先去看看抓包。
抓包全部都是加鹽加密。我看到就不想破解了。
接著,去看看 adb 控制 Android,就是說的效率太低了。
最後才是無障礙服務……
cctrv
2017-06-21 14:31:46 +08:00
@likaci
homebridge-switcheroo 是走 API 接口的。所以沒問題。
不過,紅外接口的缺點是狀態判斷不準確。
gyteng
2017-06-21 15:08:38 +08:00
没有 iPad 和 AppleTV 的情况下如何才能远程控制 HomeBridge 呢
yangxuan8282
2017-06-21 15:37:48 +08:00
@gyteng 用 vpn 应该可以,另外有网友说用 mqtt 也行
LeoNG
2017-06-21 16:03:37 +08:00
关于 Socket.io

我最近也在做智能家居的一个项目,不过是 iOS 端的,遇到了和楼主类似的情况,而且是 100%可以重现的:
1. 打开,app 退到后台,锁屏。
2. ....... 干等,或者抠鼻屎,随你。
3. 再次打开 app,和 UDP 服务器之间的通讯,指令发送、心跳等等,一切都 ok。唯独,和 WiFi 模块之前的通过挂掉了。由于和硬件的通讯是局域网内的广播。所以不知是否是这个有影响。这个问题一直困扰了我很就,各种谷歌,Apple forum 去找,还真让我发现了一个:https://forums.developer.apple.com/thread/45283, 当时想着终于可以甩锅了,但是仔细斟酌(良心发现),发现情况不太一样。也同你一样,写了 Ping 请求保持手机 wifi 模块不休眠,然而没什么用。

之前,我是每次发送 UDP 都会判断是否绑定了端口,是否连接,按理说,这个没问题。但是如果手机锁屏后重新打开,在重连的过程中,发现没有 close socket,所以我在每次 reopen 的时候,都会手动 close。这样就没再出现过这种情况了。至于为什么,我暂时也不太清楚。端口被占用也考虑过,但是想了想不应该唯独 udp 广播有问题。所以想不通了。。。。

一点个人经验,希望能帮到你。
jonechenug
2017-06-21 16:26:15 +08:00
这么多人,只有我一个人想要微信吗?
esmdxx1
2017-06-21 16:56:10 +08:00
Lucups
2017-06-21 17:15:51 +08:00
恕我直言,在大陆,楼主使用繁体字是不科学的。

看得累,不利于知识传播分享,尤其是在一些低分辨率屏幕上,繁体字没法看。
故建议楼主改用简体字。
cctrv
2017-06-21 18:43:39 +08:00
@gyteng
HomeKit 必須 iPad 或 AppleTV。
HomeBridge 我記得有一個相關項目 Home-Assistant,你看看這個。http://www.keepwn.com/technology/build-home-cloud-center-for-IT/


@LeoNG
所以?
我大約 4 分鐘就先自行 close 來做一次重新連接就可能好了?
我遲些有空試試,因為做了這個項目。
我的外包的上帝在催死我了。

@jonechenug
微信可以啊~ 反正是 WebAPI。
你把 HomeKit 扔了,用這個 Android App + Server,你打開網頁都可以控制開關呢。反正我用 GET 來調用服務。


@Lucups
所以嘛~ 習慣繁體字就好了。
謝謝你的建議咯。我是不會改的。^-^
DingSoung
2017-06-21 18:44:22 +08:00
@cctrv 下面三张 iOS 的截图的 app 叫什么, 这些东西的硬件是怎么联网的
cctrv
2017-06-21 19:16:03 +08:00
qaulau
2017-06-21 19:38:29 +08:00
楼上一堆看到美女头像就认为是女的的,应该是单身久了的,难道只有我觉得楼主是抠脚大汉,而且是有信仰的抠脚大汉…
cctrv
2017-06-21 21:41:27 +08:00
@qaulau 沒關係~ 我們又不會見面。
不過我有微博和 ins
jonechenug
2017-06-21 23:46:54 +08:00
/吐血,不是微信控制,是楼主的微信号
Katy34
2017-06-22 10:14:47 +08:00
牛逼 666
azh7138m
2017-06-22 11:28:58 +08:00
被设计师支配的恐惧(瑟瑟发抖的萌新
goldenlove
2017-06-22 14:42:43 +08:00
默默地围观了楼主个人网站....佩服。
求 ins 围观地址~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/369700

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX