爱意满满的作品展示区。
cctrv

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

  cctrv · Jun 20, 2017 · 16515 views
This topic created in 3427 days ago, the information mentioned may be changed or developed.

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

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

https://www.v2ex.com/t/336563#reply56

項目地址

https://github.com/qoli/MiHomePlus

演示視頻

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

操作原理
  • 調用「無障礙」特性,監視和控制米家 App,當「 TYPE_WINDOW_CONTENT_CHANGED 」觸發時候,與 MiPlusServer 同步設備狀態。
  • 與 MiPlusServer 透過 Socket.io 觸發 MIHomePlus 進行狀態切換。
  • 在 Homebridge 基於 Switcheroo 插件提供操作接口。
  • 所以 MiPlusServer 本質是 Web 接口

項目起因

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

Nano Pi

IMG_5071

搭建了很 Cool 的 HomeBridge。

IMG_5099

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

悲劇

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

IMG_5176

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 方案。

image

尋覓新方案,基於 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

IMG_5178

FullSizeRende

Supplement 1  ·  Jun 21, 2017

一個關於 Socket.io Java 的問題

由於需要實時通信服務,所以我使用了 Socket.io.

現在注意到一個問題就是,當在大約 5 分鐘的時候。就會服務器發送到手機就沒響應了。

已經設定重鏈接。

請問各位大神有解決辦法嗎?這個問題卡有一段時間了。

另外,Pong Ping 代碼也寫了,維持在 2 秒一次心跳。

只要 App 重啟了,就可以正常通信了。真的好奇怪!!!但是重啟 App 的話,無障礙的開關必須手工重啟。

5 分鐘斷線

Supplement 2  ·  Jun 25, 2017

Socket 的問題解決方案

這個問題只有小米有

我在小米的手機測試到無奈了。 就拿錘子測試了一下。

在錘子相同的代碼運作正常。很久很久也正常。

後來經過刷 ROM 等一系列無意義的掙扎之後,突發奇想地在 Google 搜索了「MIUI Socket 5 分鐘 斷線」。竟然被我找到一個叫做「神隱模式」的說明。

原文:https://kknews.cc/tech/zpav83.html

如何設定神隱模式?

未命名.001

保持運作 22 分鐘以上妥妥的!

未命名.002

結語

國產機的坑,真的好難猜得到啊。

97 replies  •  2017-07-26 14:15:50 +08:00
mritd
mritd
Jun 20, 2017 via iPhone
1
老铁双击 666 完美,周末折腾
mritd
mritd
Jun 20, 2017 via iPhone
2
讲真,Ios 的米家跟屎一样,动不动闪退
imyip
imyip
Jun 20, 2017
4
佩服!!
designer
designer
Jun 20, 2017 via iPhone❤️1
5
极客美少女!
scnace
scnace
Jun 20, 2017 via Android❤️7
6
我拿起了我布满灰尘的树莓派 拍了拍上面的灰 叹了口气 又放下了…
brucewzp
brucewzp
Jun 20, 2017 via iPhone
7
前后端都写了,最后你跟我说你只是一个设计师?[滑稽]好东西赞一个[认真脸]
abmin521
abmin521
Jun 20, 2017 via Android
8
nano pi 不烧手吗
crossoverJie
crossoverJie
Jun 20, 2017
9
全栈现在包含设计师啦 现在的小姐姐都这么 6 了嘛 😱
manihome
manihome
Jun 20, 2017
10
全栈不仅包设计师还包产品。。。
alexskywin
alexskywin
Jun 20, 2017
11
不会安卓开发的前端不是设计师,完美诠释
kely
kely
Jun 20, 2017
12
我是一个假的前端,徘徊在被设计师支配的恐惧中
aksoft
aksoft
Jun 20, 2017
13
现在的女孩子这么厉害??谁能罩得住
cctrv
cctrv
OP
Jun 20, 2017
14


gongjianwei
gongjianwei
Jun 20, 2017 via Android
15
非常感谢
graetdk
graetdk
Jun 20, 2017
16
哈哈哈,厉害~
aliuwr
aliuwr
Jun 20, 2017
17
要脸不,还给不给中低端的前端 /后端 /产品活路?
Betacoefficient
Betacoefficient
Jun 20, 2017
18
@aliuwr 你丢脸不,能力居然差,还觉得人能力强,还要人给你活路,你求她啊,哈哈哈
Exyn0s
Exyn0s
Jun 20, 2017 via Android
19
小姐姐好強
tomczhen
tomczhen
Jun 20, 2017 via Android
20
嗯,其实 pi 也可以省掉
http://post.smzdm.com/p/553097
run2
run2
Jun 20, 2017
21
厉害了,

服务器 IP 端口什么的 可以通过 bonjour 来广播吧

另求推荐个小巧的 android 盒子来做管理中枢
qceytzn
qceytzn
Jun 20, 2017
22
米家这个东西联网吗?你不担心隐私泄露?
amorphobia
amorphobia
Jun 20, 2017
23
@cctrv 如果我理解没错的话,没有 Android 设备的情况下,不小心买了“空调伴侣”,就不适用这个方法了,对吗?
queuey
queuey
Jun 20, 2017
24
这个界面设计,佩服之极
GPU
GPU
Jun 20, 2017
25
@tomczhen #20 楼主这个好像要 Pi 也要安卓机。
mysticzt123
mysticzt123
Jun 20, 2017
26
这不是全栈 是全能 好厉害的小姐姐
Tunar
Tunar
Jun 20, 2017 via Android
27
界面好看
U7Q5tLAex2FI0o0g
U7Q5tLAex2FI0o0g
Jun 20, 2017
28
啊 好厉害的小姐姐
21grams
21grams
Jun 20, 2017
29
一晚?
cctrv
cctrv
OP
Jun 20, 2017 via iPhone
30
@amorphobia 嗯,我這個是必須要 Android 的方案。
Pi 可以參考 20 樓的教程也替換為 Android。

不過 NanoPi 好便宜。才 59-79 而已。
cctrv
cctrv
OP
Jun 20, 2017 via iPhone
31
@21grams 對的啊。
一晚時間從沒寫過 Android 和 JAVA 到學會入門。
什麼功能完善的確花了額外 1 天(連續時間)
doggg
doggg
Jun 20, 2017
32
人漂亮,设计漂亮,技术也漂亮。膝盖给你就是。
doggg
doggg
Jun 20, 2017
33
有一群很棒的同事一起打理喜欢的事业应该每天都很有趣吧。
cctrv
cctrv
OP
Jun 20, 2017 via iPhone
34
@qceytzn 洩漏吧~我大約 1/3 的密碼還是社工庫能找到的⋯😰
對個人隱私沒什麼在乎的普通玩家⋯😂
cctrv
cctrv
OP
Jun 20, 2017 via iPhone
35
@doggg 可惜我是個人工作室⋯接接設計外包而已。
哈哈哈哈
AsisA
AsisA
Jun 20, 2017 via Android
36
233,这真是「不会写程序的设计师不是好作家」了,设计好,程序好,文章也好
cctrv
cctrv
OP
Jun 20, 2017 via iPhone
37
@tomczhen 這個辦法好啊。可惜我買 Pi 了。另外,我的手機是小米的。
amorphobia
amorphobia
Jun 20, 2017
38
@cctrv 别替换成 Android 啊,我有两个 pi 却没一个 Android [捂脸]
meathill
meathill
Jun 20, 2017
39
极客妹子很强力
onion83
onion83
Jun 20, 2017
40
我也希望拥有 “人体感情器” !
MASAILA
MASAILA
Jun 20, 2017
41
很强啊 看开头 还以为会是哪家开发平台的软问
aristotll
aristotll
Jun 20, 2017
42
amazing
imyip
imyip
Jun 20, 2017 via iPhone
43
我也希望像楼主那样打扮成漂漂亮亮
mingyun
mingyun
Jun 20, 2017
44
厉害了
leopku
leopku
Jun 20, 2017
45
666 的小姐姐
kingcos
kingcos
Jun 20, 2017
46
真厉害。。
mns
mns
Jun 21, 2017
47
设计师,,,
huyinjie
huyinjie
Jun 21, 2017 via iPhone
48
好强
flowerains
flowerains
Jun 21, 2017
49
很厉害了,关键是有心专研技术
yangff
yangff
Jun 21, 2017
50
感觉抓个包会比较简单吧…
虽然米家的设备经常有一种搞法是先发到小米的服务器再推送下来… 安全性做得还算不错的…
newton108
newton108
Jun 21, 2017
51
完爆 99% v2exer
kn007
kn007
Jun 21, 2017 via Android
52
扎心了,老铁。小姐姐,你为何这么 6
Yien
Yien
Jun 21, 2017 via iPhone
53
佩服!
aleung
aleung
Jun 21, 2017 via Android
54
树莓派装过 home assistant,但小米的开放性太低,玩不了什么,就放弃了。没想过通过无障碍特性可以模拟人工操作 mihome 应用,这个思路超赞!
badreamm
badreamm
Jun 21, 2017
55
一晚時間從沒寫過 Android 和 JAVA 到學會入門
扎心了 老姐
steveshi
steveshi
Jun 21, 2017
56
这个牛了……
Jasoncao
Jasoncao
Jun 21, 2017
57
@cctrv 流撇坏了
likaci
likaci
Jun 21, 2017
58
不错啊,不知道直接用 homebridge 连 Android 红外控制传统设备行不行的通
test4zhou
test4zhou
Jun 21, 2017
59
看了小姐姐 github 的项目,厉害!
denonw
denonw
Jun 21, 2017
60
赞
cxl008
cxl008
Jun 21, 2017
61
一直不忍心下单米家全套。。。。
xuan_lengyue
xuan_lengyue
Jun 21, 2017
62
示例视频看到最后有亮点…
xuan_lengyue
xuan_lengyue
Jun 21, 2017
63
看错了…
cctrv
cctrv
OP
Jun 21, 2017
64
@yangff
我的思路是,先去看看抓包。
抓包全部都是加鹽加密。我看到就不想破解了。
接著,去看看 adb 控制 Android,就是說的效率太低了。
最後才是無障礙服務……
cctrv
cctrv
OP
Jun 21, 2017❤️1
65
@likaci
homebridge-switcheroo 是走 API 接口的。所以沒問題。
不過,紅外接口的缺點是狀態判斷不準確。
gyteng
gyteng
Jun 21, 2017
66
没有 iPad 和 AppleTV 的情况下如何才能远程控制 HomeBridge 呢
yangxuan8282
yangxuan8282
Jun 21, 2017
67
@gyteng 用 vpn 应该可以,另外有网友说用 mqtt 也行
LeoNG
LeoNG
Jun 21, 2017
68
关于 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
jonechenug
Jun 21, 2017 via Android❤️1
69
这么多人,只有我一个人想要微信吗?
esmdxx1
esmdxx1
Jun 21, 2017 via iPhone
70
好
Lucups
Lucups
Jun 21, 2017
71
恕我直言,在大陆,楼主使用繁体字是不科学的。

看得累,不利于知识传播分享,尤其是在一些低分辨率屏幕上,繁体字没法看。
故建议楼主改用简体字。
cctrv
cctrv
OP
Jun 21, 2017
72
@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
DingSoung
Jun 21, 2017
73
@cctrv 下面三张 iOS 的截图的 app 叫什么, 这些东西的硬件是怎么联网的
cctrv
cctrv
OP
Jun 21, 2017 via iPhone
74
qaulau
qaulau
Jun 21, 2017 via Android
75
楼上一堆看到美女头像就认为是女的的,应该是单身久了的,难道只有我觉得楼主是抠脚大汉,而且是有信仰的抠脚大汉…
cctrv
cctrv
OP
Jun 21, 2017
76
@qaulau 沒關係~ 我們又不會見面。
不過我有微博和 ins
jonechenug
jonechenug
Jun 21, 2017 via Android
77
/吐血,不是微信控制,是楼主的微信号
Katy34
Katy34
Jun 22, 2017
78
牛逼 666
azh7138m
azh7138m
Jun 22, 2017 via Android
79
被设计师支配的恐惧(瑟瑟发抖的萌新
goldenlove
goldenlove
Jun 22, 2017
80
默默地围观了楼主个人网站....佩服。
求 ins 围观地址~
DingSoung
DingSoung
Jun 22, 2017
81
你后面三张 iOS 截图是什么 APP 的呀
wingyiu
wingyiu
Jun 22, 2017
82
一晚几个小时哦
Thoxvi
Thoxvi
Jun 22, 2017 via Android
83
@jonechenug 这里有个假装不想要的
dven
dven
Jun 23, 2017
84
NanoPi NEO2,sunxi/Allwinner H5 A53 Quad ?
其實用緊繁體字都冇咩稀奇,喺廣州都幾常見下
dven
dven
Jun 23, 2017
85
@qaulau
人地靚女來噶


@GPU
@cctrv
如果喺我可能中意摞 Linux 跑多 D 咯


@aksoft
技術并冇國界,更唔分男女
loveminds
loveminds
Jun 23, 2017 via Android
86
😂比小敏更能折腾的妹子出现了
cctrv
cctrv
OP
Jun 23, 2017 via iPhone
87
有人已經找到我微信了
19tj
19tj
Jun 24, 2017
88
那个……你一定没有男朋友吧……
ihainan
ihainan
Jun 24, 2017
89
老早就关注了小姐姐的微博……小姐姐棒棒。
Poko
Poko
Jun 24, 2017
90
夭寿啦,没有活路啦
litpen
litpen
Jun 25, 2017
91
不行,我也要努力了,不能呆在没有发展的公司里等死了!
cctrv
cctrv
OP
Jun 25, 2017
92
我終於,找到神奇的 Socket Bug 的問題所在了。
ZiLong
ZiLong
Jun 25, 2017
93
不就是膝盖么
Kalv8n
Kalv8n
Jul 2, 2017 via Android
94
@cctrv 求 ins
LeoNG
LeoNG
Jul 3, 2017
95
@cctrv #92 棒棒哒~
fumichael
fumichael
Jul 4, 2017
96
哇,好酷的工作。
GeekCat
GeekCat
Jul 26, 2017
97
忽然觉得被一个设计师在代码上给打败了。。。。
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1842 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 222ms · UTC 06:13 · PVG 14:13 · LAX 22:13 · JFK 01:13
♥ Do have faith in what you're doing.