用语音控制电器是一件非常让人兴奋的事情,这给人一个和房子互动的新方式。但如果你的房子在装修前没有考虑配置智能家居,又觉得更换全部智能灯泡的成本不太容易接受,而恰好你喜欢自己动手折腾一些东西,那么这篇文章会非常适合你。
我选择的方案是 BroadLink 控制开关和 Amazon Echo 语音控制设备,按照我自己家的情况是更换了 5 个墙壁开关、购买了一个射频控制主机以及两个 Amazon Echo ,总成本差不多 1500 元,和一个飞利浦 Hue Go 智能灯差不多。
在开始之前你需要做一些准备:
首先根据你家里的情况选购 BroadLink 的 TC2 射频开关,之所以选择 BroadLink 是因为它的价格比较便宜,同时由于协议简单,比较容易进行二次开发。当然如果你找到了更适合自己的设备也是可以的,这里只是需要一个将电灯开关转化为 Wifi 信号的设备。
需要注意的是, BroadLink TC2 射频开关是单控单火线开关,如果你对单控单火线不了解,建议先补习一下相关的知识,或者直接询问专业的人士。如果不满足单控,可以将家里的双控电路改为单控电路,这个改起来并不麻烦,我就是自己改的,但如果你对电路不了解请务必请专业人士帮忙。如果不满足单火线,可以购买火线零线共存的射频开关,但需要注意购买 BroadLink 控制主机支持的型号,具体可以询问商家。另外有部分无线控制多位开关只有两根控制线,这样的开关是需要对控制线进行特殊铺设的,如果你家里已经布好了电源线,那么就需要搞清楚是否可以使用这种开关。
购买 BroadLink TC2 的同时还需要购买 BroadLink Pro 控制主机, TC2 是把射频信号转换为电信号的设备,而 Pro 主机是把 Wifi 信号转换为射频信号的设备。
射频开关安装完毕后,就可以下载 BroadLink 官方的手机 App 对开关进行设置。如果一切顺利,你就可以使用手机控制电灯了。
下一步需要对 BroadLink 进行二次开发。在 Android 手机中安装一款网络数据包查看工具,使用 BroadLink App 对开关发送指令后,查看数据包数据。正常情况下会看到如下格式的数据:
5aa5 aa55 5aa5 aa55 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 2a27 6a00 7d20 2f6c 8d0d 43b4
0100 0000 0ec5 0000 2b20 a8bf f18e e1d5
...
已经有人这个数据的格式进行过详细的分析,在此我就不分析了。但由于 BroadLink 协议的特殊性,这条指令重放是有效的,所以完全可以单纯将这条数据和相应的操作记录下来,随时发生到 BroadLink 的控制主机。所以不出意外,你已经拿到了 Wifi 控制电灯的接口。
下面开始设置 Amazon Echo 。
Amazon Echo 已经有了很多 Smart Home 的应用(官方叫 Skill ),但遗憾的是并没有我们可以使用的,所以需要自行开发适合我们的 Smart Home Skill 。
Amazon Echo Smart Home Skill 只支持 Lambda Function ,这也是需要 AWS 账号的原因。
开发 Smart Home Skill 可以参考Five Steps Before Developing a Smart Home Skill,文章里面讲解得非常详细,并且配有截图。
在创建完 Lambda 后, AWS 会自动生成一个 Smart Home 的 demo 代码,需要注意这个代码跑不通,首先由于没有声明 namespace ,event.header.namespace
需要使用完整的名称,所以要把代码里的Discovery
和Control
什么的改为Alexa.ConnectedHome.Discovery
。其次, demo 里的event.header.name
是 SwitchOnOffRequest
,这个根据关闭和开启的指令不同,应该改为 TurnOffRequest
和 TurnOffRequest
。
OK ,不出意外,你现在已经可以用语音控制你家的电灯了,但我猜会有比较高的延迟,这是因为 Amazon 在用北美或欧洲的服务器呼叫你自己家里的机器,将信息传给 BroadLink 控制主机。我也遇到了这个问题,整个流程大部分时候超时,最后没办法把 Lambda 的超时时间改为了 30 秒。这种体验显然是不可接受的,所以需要最后再做一步操作进行优化。
我在 Azure 香港区架设了一个跳板,同时开启了 https 和 wss ,我家里的机器通过 wss 与跳板机保存长连接, Amazon 服务器将指令通过 https 的方式发给跳板机,跳板机再通过 wss 发给我家里的机器,这样大部分情况下延迟就可以做到 3 秒以内了。
最后我来梳理一下整个流程信息的传递过程,帮大家进一步理解。
最后的最后再扩展一下思路,可以组合多个指令进行场景设置,比如我让 Echo 打开投影仪的时候,客厅的电灯会自动熄灭,而关闭投影仪的时候,通过对时间的判断打开客厅的电灯。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.