转载:从米家到 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 模拟器/虚拟机来完成该操作。

强烈建议跟随视频教程


以下为原正文部分

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,你只需要一个树莓派的更多相关文章

  1. win7系统的右键菜单只显示一个白色框不显示菜单项 解决办法

    如上图所示,桌面或其他大部分地方点击右键菜单,都只显示一个白色框,鼠标移上去才有菜单项看,并且效果很丑 解决办法: 计算机-右键-属性-高级-性能-设置-视觉效果-淡入淡出或滑动菜单到视图,将其前面的 ...

  2. Android 只开启一个Activity实例

    在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种. 方法一:设置起动模式 一个Activity有四种启动模式 ...

  3. PPTP VPN 限制一个账号只允许一个用户来登录

    创建auth-up文件 vi /etc/ppp/auth-up chmod a+x /etc/ppp/auth-up auth-up脚本内容如下 #!/bin/sh # get the usernam ...

  4. form表单里如果只存在一个文本框,enter键提交

    在这里说一说浏览器里form表单的默认行为 我们都知道浏览器是存在很多默认行为的,可能是出于常用行为考虑又或者是历史原因.但有时候我们不需要这些默认行为.以下: 1).当form表单里只存在一个inp ...

  5. 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 ...

  6. VC只运行一个程序实例

    方法有很多,以下只是提供一种用的多的 一. 单文档程序 在程序App类的InitInstance中添加如下代码 BOOL CDDZApp::InitInstance() { /*只运行一个实例*/ / ...

  7. 设置IE8 多个Table只产生一个进程

    //设置IE8 多个Table只产生一个进程 using Microsoft.Win32; RegistryKey key = Registry.LocalMachine; RegistryKey s ...

  8. WinFrom 只启动一个exe,并且获得焦点

    只启动一个exe方法: using System; using System.Collections.Generic; using System.Runtime.InteropServices; us ...

  9. 预编译那些事#define后面只跟一个“参数”

    一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有时,希望当满足某条件时对一组语句进行编译,而当条 ...

随机推荐

  1. 【CodeForces】906 D. Power Tower 扩展欧拉定理

    [题目]D. Power Tower [题意]给定长度为n的正整数序列和模数m,q次询问区间[l,r]累乘幂%m的答案.n,q<=10^5,m,ai<=10^9. [算法]扩展欧拉定理 [ ...

  2. 让页面无刷新的AJAX、ASP.NET核心知识(9)

    AJAX简介 1.如果没有AJAX 普通的ASP.Net每次执行服务端方法的时候都要刷新当前页面,如果没有ajax,在youku看视频的过程中,就没法提交评论,页面会刷新,视频会被打断. 2.说说AJ ...

  3. 个人集群部署hadoop 2.7 + hive 2.1

    环境:centos 6.6 x64 (学习用3节点) 软件:jdk 1.7 + hadoop 2.7.3 + hive 2.1.1 环境准备: 1.安装必要工具 yum -y install open ...

  4. Python概念-反射之文化底蕴版:反正射了

    什么是反射 光在两种物质分界面上改变传播方向又返回原来物质中的现象,叫反射! 以上,是反射的物理定义,与python中的反射概念,完全没有任何关系 书归正传:反射 就是通过字符串的形式,操作对象相关的 ...

  5. Linux基础-编译安装Python

    终于涉及一点儿专业的了,说实话,对于目前的我难度还是挺大的,这句话送给未来的自己 挑战开始: 首先了解一下Python3.6,底层是由c++开发的,所以在linux下需要C++的支持,必然少不了gcc ...

  6. Hibernate5笔记5--关联关系映射

    关联关系映射: 关联关系,是使用最多的一种关系,非常重要.在内存中反映为实体关系,映射到DB中为主外键关系.实体间的关联,即对外键的维护.关联关系的发生,即对外键数据的改变. 外键:外面的主键,即,使 ...

  7. 安裝HA服務

    **************************************************************************************************** ...

  8. Linux的bg和fg命令 ---让程序在前台后台之间切换

    Linux的bg和fg命令 我们都知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务.而不能让程序在前台后台之间切换.而 Linux 提供了 fg 和 bg 命 ...

  9. python3 切换工作文件夹

    python3 默认的工作文件夹在Python安装路径下.如下为查看工作文件夹路径: >>> import os >>> os.getcwd() 'D:\\Work ...

  10. poj1976

    dp #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ...