為你的 iOS 家庭搭建最強的 Homebridge 支援﹣MiHomePlus 介紹「作者: MiHomePlus 算是暫時告一段落了」

2017-06-27 00:10:03 +08:00
 cctrv

為你的 iOS 家庭搭建最強的 Homebridge 支援﹣MiHomePlus 介紹

MiHomePlus 是我為 iOS 家庭編寫的 Android App,主要的作用就是作為 iOS 家庭的操作代理。

MiHomePlus 的工作原理是這樣的:

  1. MiHomePlus 調用 Android 「無障礙」特性,監視和控制米家 App。
  2. 當無障礙功能觸發「 TYPE_WINDOW_CONTENT_CHANGED 」事件時候,與另一項目 MiPlusServer 通信,把監視的設備狀態同步給 MiPlusServer。
  3. MIPlusServer 從 Homebridge 收取到操作通知時候,基於 Socket.io 通知 MiHomePlus 操作米家 App 去切換設備狀態。
  4. 在 Homebridge 基於 Switcheroo 插件提供的操作接口。
  5. MiPlusServer 是 Web 接口。

關聯項目

MiHomePlus

https://github.com/qoli/MiHomePlus

MiPlusServer

https://github.com/qoli/MiPlusServer

準備設備

  1. Pi 一枚。
  2. 閒置 Android 手機一個。

Pi 我用了 NanoPi,59 元那個 256MB 的版本就足夠了。然而 Android 手機最低要求是 4.2.1 版本的,基於 API 19,因為我是基於這個版本做的開發。

初始化 NanoPi 環境

我們需要在 NanoPi 搭建 Homebridge 和安裝 MIPlusServer。

安裝 Homebridge

參考這幾遍文章完成 Homebridge 的安裝。

  1. http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO/zh#.E5.87.86.E5.A4.87.E5.B7.A5.E4.BD.9C
  2. http://blog.yongliang.info/2017/0101_play_with_nanopi/
  3. http://djzhang.com/nozuonofun/realize-homekit-with-raspberry-pi-and-xiaomi-smart-devices/

建議安裝的 Homebridge 插件:

  1. homebridge-yeelight 控制燈
  2. homebridge-mi-aqara 改良版的 aqara 網關
  3. homebridge-switcheroo MIPlusServer 基於這個插件和 Homebridge 通信的。

homebridge-miio 這個插件聽說可以控制第一代 WIFI 插座,我沒裝,所以我不知道。

當你完成 Homebridge 的安裝后,我們就要開始進行 MIPlusServer 的安裝。

安裝 MIPlusServer

第一步,先 SSH Login 到你的 NanoPi,然後執行如下的命令

git clone https://github.com/qoli/MiPlusServer.git
cd ./MiPlusServer
npm i
chmod +x miServer.sh
chmod +x run.sh

第二步,編寫你的 config.js 配置檔案

touch config.js
nano config.js
配置檔
module.exports = {
  tgbot: false,
  token: "",
  adminChatID: ""
}

第三步,啟動 Telegram BOT (可選步驟)

如果你有啟用 Telegram Bot 作為監視 MIPlusServer 的運行必要,可以參考 https://neighborhood999.github.io/2016/07/19/Develop-telegram-bot/ 這個教程,來獲取 Telegram BOT 的 token。

暫時運行服務器
module.exports = {
  tgbot: false,
  token: "Your Token Here.",
  adminChatID: ""
}

接著,先按照配置檔保存一下,使用 ./miServer.sh 先讓服務器運行起來。

獲取 adminChatID

按照下圖的辦法,加上你自己的機器人,就輸入 id 命令。機器人就會向你返回你的 Chat id 了。

module.exports = {
  tgbot: false,
  token: "Your Token Here.",
  adminChatID: "Your chat id"
}

保存配置檔案即可。

第四步,運行服務器

screen -S miServer
./miServer.sh

![螢幕快照 2017-06-26 下午 4.33.47]( http://ok7ct2124.bkt.clouddn.com/2017-06-27-螢幕快照 2017-06-26 下午 4.33.47.png)

你看到這樣的信息就正確了。

隨後,你應該看到這個屏幕。那麼就可以按下「 CTRL + A ; CTRL + D 」來退出 screen 屏幕。我教你記住的口訣,控制你的 AD 鈣奶

現在,你的 NanoPi 服務器就初始化完成了。

安裝 MiHomePlus App 到 Android

安裝 App

打開 https://github.com/qoli/MiHomePlus/releases 下載 MiHomePlus 當前的發佈版本。

不過當前 App 我正在被標記為 0.1 版本,可能會有一些問題。也有可能在運行中就退出了。但是,我測試過,可以成功運行 1 天了。第二天我就沒遇到問題,只是我把他拿回來繼續開發了。

啟動 App

在啟動 App 后,首先,我們進行設定。

App 設定

第一步,米家 App 的調整

啟動米家的 App,把需要監視的設備都放在同一個房間中。Homebridge 插件能控制的就不要放進來了。

注意

在當前版本下,在一個屏幕之外的設備無法監控。

按照圖片的步驟,把監控的設備都整理到 AndroidAPI 的房間中,當然,你可以叫其他的名字,例如「MiPlusDevices」。 然後,你的米家就應該像圖二一樣的狀態。

第二步,打開 Web 設定頁面

打來瀏覽器,我的 NanoPi 是 http://192.168.1.104:3002。 所以,打開 http://192.168.1.104:3002/setting

填寫房間名稱和設備列表,設備列表要使用「;」半角分號分開哦。在我這裡,主要就監視了這 4 個設備。

注意

監控設備的名字必須和米家 App 顯示的名字一樣哦。

  1. 空調伴侶 ﹣ 坑爹的空調伴侶不能被 Homebridge 控制!!!
  2. 電腦燈﹣這個是使用了第一代的智能插座。
  3. 落地燈﹣我也忘記這是什麼插座了,不連接網關的。
  4. 空氣淨化器﹣還是第一代智能插座……

OK,就這些了哦。

![螢幕快照 2017-06-26 下午 11.02.27]( http://ok7ct2124.bkt.clouddn.com/2017-06-27-螢幕快照 2017-06-26 下午 11.02.27.png)

第三部,設定 Homebridge 配置檔

示例代碼:
{
      "accessory": "Switcheroo",
      "type": "switch",
      "name": "空調伴侶",
      "host": "http://192.168.1.104:3002/device/%E7%A9%BA%E8%AA%BF%E4%BC%B4%E4%BE%B6",
      "on": "/ON",
      "off": "/OFF",
      "on_body": "ON",
      "off_body": "OFF"
    }
  1. name﹣這個你真可以隨便叫,只會影響在 iOS 家庭 App 的顯示名字;
  2. host﹣請務必輸入「 http://192.168.1.104:3002/device/設備名字」設備名字一定要經過 URLEncode。
  3. 有多少個設備就把上面的示例代碼添加多少次。

給大家一個 URLEncode 的網址: https://www.urlencoder.org

第四步,設定 MiHomePlus !

  1. 選擇「 App 設定」
  2. 設定伺服器地址。

我的 NanoPi 就是 192.168.1.104 嘛。所以輸入了 http://192.168.1.104:3002。 保存后使用「讀取配置檔案」,就會看到按鈕下方的文字更新過來了。數據就會保存在 App 裡面了。

第五步,關閉小米的神隱模式(小米的才需要)

這個神隱模式嘛,一開始我是不知道的。在開發過程中,每 5 分鐘就遇到 Socket.io 無故斷線,只有重啟才能恢復。後來轉用錘子開發,發現沒有遇到這個問題。我就上網 Google 了一下,才發現小米的神隱模式這個功能導致的。

第六步,啟動 App

做了這麼多事情,終於開始了! 把你的 Android 拿去充電吧。反正我的紅米第一代,不充電可以運行一天。

享受完整 HomeKit 帶來的快感吧。

Telegram BOT ?

你啟動了這個選項的話。 就可以收到一些 MiHomePlus 的狀態。

8071 次点击
所在节点    分享创造
20 条回复
amorphobia
2017-06-27 00:33:52 +08:00
赞一个,牛!
Citrus
2017-06-27 00:34:38 +08:00
6666666
可惜没这么多智能设备给我控制。。。
huyinjie
2017-06-27 01:30:20 +08:00
666666
TashinV
2017-06-27 01:55:10 +08:00
这么强的文章居然没有人关注。。
cctrv
2017-06-27 02:45:27 +08:00
V2EX 有一個 Bug

帶空格的中文 URL 在預覽時候正常。
發佈時候就失敗了。

ynyounuo
2017-06-27 03:47:17 +08:00
@cctrv 一直有这个问题,带中文空格的那种链接换成 URL encode 的形式就好…
aleung
2017-06-27 07:58:47 +08:00
用 accessibility, 在 Android 熄屏后还能控制吗?
hellowwo
2017-06-27 08:14:22 +08:00
为啥不用中文简体呢
v1024
2017-06-27 08:30:04 +08:00
滋 ci
imyip
2017-06-27 08:40:25 +08:00
我想了解下关于 nanopi 安装使用 Homebridge 的稳定性
cctrv
2017-06-27 10:27:42 +08:00
@imyip 測試 5 天不重啟都沒事。沒有 Forever 守護。直接 node 啟動 js。
Tink
2017-06-27 10:30:50 +08:00
可以可以,前一篇帖子也关注了
Neo
2017-06-27 18:01:16 +08:00
没有 pi,可以用 docker 或者虚拟机吗?
cctrv
2017-06-27 19:00:33 +08:00
@Neo http://post.smzdm.com/p/553097/
拿 Android 來實現自己玩自己
cctrv
2017-06-28 07:41:32 +08:00
@ynyounuo 關鍵是預覽時候不會處罰這個問題。正文就會
ynyounuo
2017-06-28 08:49:05 +08:00
@cctrv 发布后会做一系列处理,跟预览还是有区别的,中英文中间加空格啊什么的,总之不是太完善。
cctrv
2017-06-28 10:28:45 +08:00
@ynyounuo 对的对的,总把我坑到了。还不让修改了。
ZengLeiPro
2017-06-28 10:51:02 +08:00
这种方法成熟吗?智能家居最怕的就是不断折腾。
cctrv
2017-06-28 14:52:24 +08:00
@ZengLeiPro 模擬控制的方法就是好在不用折騰了
byuan04
2017-06-29 10:59:12 +08:00
nice

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

https://www.v2ex.com/t/371255

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

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

© 2021 V2EX