从米家到 HomeKit,你只需要一个树莓派
2017.10.21 该教程针对 Raspbian Stretch (8 月起基于新版 Debian 的系统)更新,请注意文章中提示 Stretch 必要的操作。目前没有现象表明 Raspbian Stretch 会对以下步骤造成影响。
2017.7.7 新版视频教程更新,修正错误,并改用 homebridge-mi-aqara,新用户请参考新版视频教程。以下原文未更新新版,仅做关键错误修正。手动更新仅需修改以下几步:
1. 在 ./homebridge/config.json 配置文件中 platform "AqaraPlatfom" 改为 "MiAqaraPlatform",注意,如果你想让两个插件同时运行,"AqaraPlatform" 和 "MiAqaraPlatform" 信息不能重复(即不能把一个网关同时绑定给两个插件)否则会报错退出。
2. 文章中的这一步操作
sudo npm install -g homebridge-aqara
应改为
sudo npm install -g homebridge-mi-aqara
然后你需要把 homebridge-aqara 卸载,否则可能报错未填写信息。
sudo npm uninstall -g homebridge-aqara
如果你无法控制插座和网关灯
这说明你的 password 填写错误,请注意 HomeKit 获取设备数据(例如你的开关是否打开)无需密码,成功配置 HomeKit 不代表你的密码正确,且该密码 [区分大小写,重要],在 iOS 米家 App 中获取到的 Key 应该为全部大写,则你应该修改 config.json 中的密码(不修改 sid)为大写,这一点在两个版本的视频教程中都按照了「作者有误导性的要求的(作者只要求了 MAC 地址全部小写,但让人看起来像是密码和 sid 都要小写,因为 sample 也是全部小写的,可能作者本身使用 Android 环境)」全部使用小写,请根据自己情况填写大小写。
这里再特别提醒,不是一定要大写,是区分大小写。
如果你在 iOS 获取密码,并且在配置文件中填写大写密码,你确定什么也没做错,仍然无法控制,你可以请求你身边的 Android 朋友帮助让他们登陆你的账号重新刷新密码(该操作无需在局域网内,有小米账号密码即可),Android 客户端会自动获取小写密码,保存后在配置文件中填写小写即可。如果你没有方便的 Android 手机也可以使用 Android 模拟器/虚拟机来完成该操作。
强烈建议跟随视频教程
- YouTube(新版)或 优酷(新版)。
- YouTube 或 优酷。
以下为原正文部分
iOS Home App 还是米家?
HomeKit 相信各位都非常熟悉了,得益于它原生自带,在 iOS 上可以说是十分优秀的。无论是你可以告诉 Siri 我回家了,早上好等这样的文字激活你设置好的场景,还是可以直接从控制中心看到和控制你所有支持的设备,比起其他第三方智能家居 App 使用体验都更佳。
米家则是小米很早就推出的智能家庭系统,其最大的特点是便宜和基础。它的很多设备说实话,可以做到绝大多数目前支持 HomeKit 的设备正在卖,并高价卖的功能。如 D-link 推出的 180 度家庭摄像机,售价 1600 多。除了可以直接看完 180 度,无需旋转机器,还可以设置网格内点特别关注功能以外,其他对比小米,或者国内很多品牌真的没有什么特点可言,因此米家也成为了用户进入智能家庭领域的入门首选。
小米曾经自己推出米家 - HomeKit 的工具,只可惜限定了小米路由器硬盘版,且十分不稳定,不知道看到这篇文章的还有没有使用该插件的朋友。而小米自己的米家 App 不仅无法快速控制(部分设备支持)且 App 内有商城广告等信息,界面冗杂。因此是时候我们动起手来将它手动桥街到 HomeKit 了,这里使用的是小米公司的合作企业 (?) 绿米开放的 API。
完成以下的操作,你只需要一个树莓派,或者永不关机(或者你需要的时候不关机的)Mac Windows 或 Linux 设备。整个过程可能需要 30 分钟,我特别录制了一个完整的从 0 到全的教程视频,以 macOS 举例。Windows 可以在 GitHub 找到 HomeBridge 项目并了解如何安装,并安装对应的插件,然后在 Windows 中使用与视频类似的方法完成。
操作之前
1. 文中提到的树莓派是英国树莓派基金会开发的 Linux 单板机电脑,售价便宜,其目的是用于教育行业降低学校教学生编程的成本。也得益于此,很多人也用它来做小型开发。这里用它主要是看中了它一直不关机功耗较低的特点,HomeBridge 本身可以在任何系统运行(包含 Windows)但是如果你将一台自用的电脑一直开机,不仅对硬件有些损耗,电消耗也是较大的。
2. 你最好有一定使用 Linux 或者 macOS 终端的基础,这样接下来的操作你不仅不会觉得困难,反而会感到非常熟悉。如果没有也不要紧,请紧跟视频教程操作。
3. 以下看似复杂的操作其实做起来都很简单,你知道第一次做好之后,以后只需要当你树莓派关机之后重启的时候重新打开一下 Homebridge 就好了(甚至你可以写一个开机自启动连这步都不需要)你就可以一直享受 HomeKit 带给你的方便。
项目地址
核心 HomeBridge 和 插件 HomeBridge-Mi-Aqara
文字教程
以下直接做一个上面视频的文字版本,流程也按照视频上的来:
大家好,这个视频是教你如何将米家的设备通过树莓派 HomeBridge 连接到你 iOS 设备的 Home App 上的,首先我们要明确它支持的设备。
[门窗传感器] 是类似 Apple 在销售的 Elgato Eve Door & Window 是很类似的,它是由一个磁铁一样的,当磁铁激活的时候也就是门和墙壁靠近连接上,它就认为你关门了,如果磁铁断开就表明你开着门。
[圆形的开关] 主要是和小米的米家其他设备联动,但是很遗憾这个不支持今天要讲的 HomeKit。
[温湿度传感器] 可能北方用的比较多,南方大概会少一些,字面意思理解就可以。
两个 插座 有基础班和 Zigbee 版,你需要购买因为只支持 Zigbee 版,Zigbee 是刚刚说的传感器的传输协议,也是为什么只有 Zigbee 版才能支持今天说的 HomeKit 的原因。
还有就是 Yeelight 的几个设备,但是你可能需要了解另一篇文章。因为 HomeBridge 实际上支持众多插件,Yeelight 与接下来用到的插件不相同,可以参考少数派稍早前选过的文章,虽然方法类似但是也是有区别的。
另外支持的设备还有 Aqara 墙壁开关,上述设备可以在小米之家,小米官网,米家 App 中购买。
在你使用这些传感器之前,你需要购买这个 149 元的网关,这是使用这些传感器的基础,是必备的,不能单独只购买传感器,如果你已经有网关了,可以单独购买这些传感器增加它们的监测点。
其实 Apple 在卖的 Elgato 系列为什么这么贵呢?有一个原因是它自带网关,HomeBridge 其实就是有点类似网关的东西。
在开始之前,你一定要能够用 SSH 登陆上你的 Pi,注意 2016 年 11 月的新版本系统之后,树莓派默认禁用 SSH,你需要手动开启。如果你没有屏幕,请将 SD 卡连上读卡器,找到 boot 这个分区,创建一个叫做 ssh 的空白文件,方法是 cd
到该文件夹,然后执行下面命令。
sudo touch ssh
好的,我们回到刚刚的 GitHub 项目(HomeBridge)找到 Wiki,点击右边的 More,找到 Running HomeBridge on a Raspberry Pi。第一步是安装 C++ 14,如果你知道你是 Raspberry Jessie 版本,这不可以跳过,如果你不清楚你的版本,运行这个命令检测一下 gcc -v
如果你是 4.9.2 就可以不用管了,否则执行以下命令:
sudo apt-get install gcc
接下来安装 NodeJS,Wiki 上有很大一部分是手动方法,你只需要输入以下命令就可以。如果你发现速度很慢,你可能需要更改中国软件源,参考文章:Raspbian 中国软件源。
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
接下来是安装 Avahi,当然也只需要简单的复制一行代码就可以:
sudo apt-get install libavahi-compat-libdnssd-dev
最后安装 HomeBridge 本体和插件:
如果你使用 Raspbian Stretch 则必须加上 --unsafe-perm 参数:
sudo npm install -g --unsafe-perm homebridge
或者
npm install homebridge
然后安装所需要的插件
- sudo npm install -g --unsafe-perm homebridge-mi-aqara
安装好后便可以直接输入 homebridge
回车看能否正常运行,如果你看到灰色底和数字 031-45-154 就可以按 Ctrl+C(注意以下涉及到 Ctrl 的,均为 Mac 也需要使用 Ctrl 而不是 Command)停止运行。接下来执行以下命令创建一个文件夹:
mkdir ~/.homebridge (可能提示已经创建 则可以忽略本步骤)
cd ~/.homebridge (定位到该文件夹)
nano config.json (如果你喜欢 vi 编辑器也可以)
然后复制进入以下文字:
{"bridge":{"name":"Homebridge","username":"CC:22:3D:E3:CE:23","port":51826,"pin":"233-62-666"},"platforms":[{"platform":"MiAqaraPlatform","sid":[""],"password":[""]}]}
其中 name 是你在 iOS 家庭 App 上可以看到的桥(你一般不会看到)的名字,我建议就叫 Homebridge,username 需要是类似 MAC 的格式,但是文字可以随意填写,所以你也不需要更改了。port 随意,确保不要被占用。pin 随意,为密码,需要是 8 位数字,格式为 xxx-xx-xxx,比如 123-45-678。下面的 platform 不能修改,sid 和 password 是什么,这就需要在手机上操作了,首先按 Ctrl+O 回车保存。
在手机上打开米家 App,点击你的网关,右上角三个 ···,并狂按底部空白区域(视频说掉了,重要),直到出现局域网通信协议和套装版本,主版本,网管信息为止。
点击局域网通信协议,打开,并刷新一个密码,大小写请保持,并记录该文本。
返回,点击网关信息,找到 mac: 后的文字,如本截图中的 28:6C:07:85:B3:0E,去掉 : 并全部改为小写,也记录这段文字,如本截图中的文字处理后的结果就是 286c0785b30e。
第一个文字就是你的 sid,第二个就是 password。如果你有多个网关用逗号链接,比如 cb30a01c1bcc4b3c, dc41b12d2cdd5c4d, ed52c23e3dee6d5e,password 同理。打开刚刚在树莓派编辑的 config.json 输入上面获得的文字,并 Ctrl+O 保存。7 月 5 日更新注意,下面这张图 sid 和 password 填反了。
然后你就可以再次直接运行 homebridge
了,你会发现它包含以下文字:Loading 1 platforms... Initializing AqaraPlatform platform..,并有一个你设置好的新密码,电脑上的操作就到这里了(不要关闭终端窗口)。
打开 iPhone, iPad 等设备上的家庭 App,点击添加配件,点击 Homebridge,手动输入你设置的八位密码(一般来说用相机扫描不太能成功……)并可以配对成功。
接下来你就可以手动设置你的设备,更改名字,位置和类型,下面的包含在个人收藏可以让你在控制中心快速访问这些配件。
全部配置完毕后,你的 Home 已经全部配置成功。
你可以在控制中心快速控制或者查看设备状态。
在 Home App 中长按会有更多选项界面。
最后你会发现,你的 HomeBridge 一旦 SSH 窗口关闭就会停止,你可以安装 screen 来解决这个问题。apt-get 安装即可:sudo apt-get install screen
安装完毕后 screen -S(注意是大写)窗口名字可以随意取,如:screen -S homebdg
然后在这里面运行 homebridge
,
即使关闭 SSH,只要树莓派开机都会保持运行,或者你也可以直接设置为开机启动,详细可单独搜索方法,教程到这里也就结束了。
如果在过程中遇到任何问题,欢迎在评论提出。如果文章有毛病,也可以向我提修改建议 :)
从米家到 HomeKit,你只需要一个树莓派的更多相关文章
- win7系统的右键菜单只显示一个白色框不显示菜单项 解决办法
如上图所示,桌面或其他大部分地方点击右键菜单,都只显示一个白色框,鼠标移上去才有菜单项看,并且效果很丑 解决办法: 计算机-右键-属性-高级-性能-设置-视觉效果-淡入淡出或滑动菜单到视图,将其前面的 ...
- Android 只开启一个Activity实例
在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种. 方法一:设置起动模式 一个Activity有四种启动模式 ...
- PPTP VPN 限制一个账号只允许一个用户来登录
创建auth-up文件 vi /etc/ppp/auth-up chmod a+x /etc/ppp/auth-up auth-up脚本内容如下 #!/bin/sh # get the usernam ...
- form表单里如果只存在一个文本框,enter键提交
在这里说一说浏览器里form表单的默认行为 我们都知道浏览器是存在很多默认行为的,可能是出于常用行为考虑又或者是历史原因.但有时候我们不需要这些默认行为.以下: 1).当form表单里只存在一个inp ...
- 35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n
35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现in ...
- VC只运行一个程序实例
方法有很多,以下只是提供一种用的多的 一. 单文档程序 在程序App类的InitInstance中添加如下代码 BOOL CDDZApp::InitInstance() { /*只运行一个实例*/ / ...
- 设置IE8 多个Table只产生一个进程
//设置IE8 多个Table只产生一个进程 using Microsoft.Win32; RegistryKey key = Registry.LocalMachine; RegistryKey s ...
- WinFrom 只启动一个exe,并且获得焦点
只启动一个exe方法: using System; using System.Collections.Generic; using System.Runtime.InteropServices; us ...
- 预编译那些事#define后面只跟一个“参数”
一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有时,希望当满足某条件时对一组语句进行编译,而当条 ...
随机推荐
- Google推荐的15条HTML 5代码军规----来看看你知道几个,我一个都不知道。。。
Google规范的原文链接大家可以访问:http://google-styleguide.googlecode.com/svn/trunk/htmlcssguide.xml 1.协议头: 建议在指向图 ...
- shell操作典型案例--FTP操作
从FTP服务器上下载文件或上传文件到FTP服务器是生产环境中比较常见的场景之一. shell操作FTP的方式整理如下: 思路一:使用shell调用ftp等客户端 使用FTP方式,通过shell调用ft ...
- php 获取唯一字符串与文件扩展名函数
/** * 生成唯一字符串 * @return string */ function getUniqueStr(){ return md5(uniqid(microtime(true),true)); ...
- NodeJS让前端与后端更友好的分手
学问 最近“上层建筑”在兴起国学热,所以公司几个月前决定开发一款名叫“学问”的有关于国学的app. APP的详情页面还是由web来显现具体内容,有些类似于新闻页,图文混排什么的web是最适 ...
- Interval Minimum Number
Given an integer array (index from 0 to n-1, where n is the size of this array), and an query list. ...
- aarch64_a2
asterisk-sounds-core-en_GB-1.5.0-2.fc26.noarch.rpm 2017-02-14 08:24 26K fedora Mirroring Project ast ...
- C# 去除文件非法字符名
string resultFileName = MD5Encrypt(NavigateUrl).Replace("=",string.Empty) + ".txt&quo ...
- git内部原理
Git 内部原理 无论是从之前的章节直接跳到本章,还是读完了其余章节一直到这——你都将在本章见识到 Git 的内部工作原理 和实现方式. 我们发现学习这部分内容对于理解 Git 的用途和强大至关重要. ...
- 如何成为技术大牛——阿里CodeLife
天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码? 几个误区 跟着大牛,就可以成为大牛.首先,大牛时间很宝贵,不可能花很多时间去指导你:其次,简单的模仿大牛,只能学到表面知识,不可能成为大牛: ...
- 【Android开发日记】之入门篇(十二)——Android组件间的数据传输
组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...