使用 BroadLink 和 Amazon Echo 控制电灯

2016-11-02 02:22:46 +08:00
 sneezry

用语音控制电器是一件非常让人兴奋的事情,这给人一个和房子互动的新方式。但如果你的房子在装修前没有考虑配置智能家居,又觉得更换全部智能灯泡的成本不太容易接受,而恰好你喜欢自己动手折腾一些东西,那么这篇文章会非常适合你。

我选择的方案是 BroadLink 控制开关和 Amazon Echo 语音控制设备,按照我自己家的情况是更换了 5 个墙壁开关、购买了一个射频控制主机以及两个 Amazon Echo ,总成本差不多 1500 元,和一个飞利浦 Hue Go 智能灯差不多。

在开始之前你需要做一些准备:

  1. 一个美区的 AWS 账号
  2. 一部 Android 手机
如果你满足上面两个条件,就可以开始了。

首先根据你家里的情况选购 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需要使用完整的名称,所以要把代码里的DiscoveryControl什么的改为Alexa.ConnectedHome.Discovery。其次, demo 里的event.header.name SwitchOnOffRequest,这个根据关闭和开启的指令不同,应该改为 TurnOffRequest TurnOffRequest

OK ,不出意外,你现在已经可以用语音控制你家的电灯了,但我猜会有比较高的延迟,这是因为 Amazon 在用北美或欧洲的服务器呼叫你自己家里的机器,将信息传给 BroadLink 控制主机。我也遇到了这个问题,整个流程大部分时候超时,最后没办法把 Lambda 的超时时间改为了 30 秒。这种体验显然是不可接受的,所以需要最后再做一步操作进行优化。

我在 Azure 香港区架设了一个跳板,同时开启了 https 和 wss ,我家里的机器通过 wss 与跳板机保存长连接, Amazon 服务器将指令通过 https 的方式发给跳板机,跳板机再通过 wss 发给我家里的机器,这样大部分情况下延迟就可以做到 3 秒以内了。

最后我来梳理一下整个流程信息的传递过程,帮大家进一步理解。

  1. Amazon Echo 将声音发送到 Amazon 云端解析
  2. Amazon 云端将解析结果发给美国东部的 AWS Lambda 的 Smart Home Skill
  3. AWS Lambda 将结果通过 https 的方式发给香港的 Azure 跳板机
  4. Azure 跳板机将结果通过 wss 发送到我家里的机器
  5. 我家里的机器通过 Wifi 将结果发给 BroadLink 控制主机
  6. BroadLink 控制主机通过射频将结果发给 TC2 开关
  7. TC2 开关对电灯进行开关操作

最后的最后再扩展一下思路,可以组合多个指令进行场景设置,比如我让 Echo 打开投影仪的时候,客厅的电灯会自动熄灭,而关闭投影仪的时候,通过对时间的判断打开客厅的电灯。

11327 次点击
所在节点    分享创造
29 条回复
sneezry
2016-11-29 22:24:36 +08:00
@sneezry 对的
hyg
2017-03-16 15:02:52 +08:00
你好,我自己开发了一个 smart home skill 但是我最后用这个技能来关联 wink 账户的时候出现问题,大神能不能说一下账户关联的详细步骤?谢谢了
sneezry
2017-03-16 15:11:29 +08:00
@hyg 我没有连 wink ,直接在局域网里发的指令
hyg
2017-03-17 13:53:53 +08:00
@sneezry 嗯嗯,那你这个 aws 的返回的指令怎样接收?你说的“ Amazon 在用北美或欧洲的服务器呼叫你自己家里的机器,将信息传给 BroadLink 控制主机”自己家里的主机是指什么?怎样呼叫自己家里的主机?
sneezry
2017-03-17 17:52:02 +08:00
@hyg 树莓派
hyg
2017-03-18 09:13:29 +08:00
aws lambda 返回的这种的结果:
{
"header": {
"messageId": "8b4c4d52-bf1f-498e-ba2b-065c193f5080",
"namespace": "Alexa.ConnectedHome.Control",
"name": "TurnOffConfirmation",
"payloadVersion": "2"
},
"payload": {}
}
你说用 HTTPS 的方式来呼叫树莓派这怎样实现?
zpvip
2017-03-23 22:27:36 +08:00
@sneezry 请问 Smart Home 的 demo 代码要改成什么样子呢?能不能麻烦贴一个示例,要把那个 5aa5 aa55 5aa5 aa55 的数据包放在代码里吗?

谢谢!
Mark2017
2017-06-02 13:31:43 +08:00
@sneezry 你好,看了你的 blog,也粗看了一下 alexa smart home skill。有几个问题,还是不太明白。

主要的问题是不清楚 alexa echo 如何和“家里的机器进行关联的”;
即:用户说“ Alexa, turn on the TC2 ”,

1,alexa 服务器如何知道需要调用 smart home skill,
2,找到 smart home skill 后,如何知道将这个操作转发到,厂家的设备云端,并且指定了这个“家里的机器”?
3,发到终端的 json 数据,是否意味着,家里的机器和 alexa 有一个长连接,移植去等待终端的连接,这个连接是 avs 的还是 aws 的?


我看了 http://alexa.amazon.com/spa/index.html#appliances 或者是 alexa app,说是可以查询到设备,并且用 amazon.com 的用户账号关联,但这个关联,的结果是怎么样的?

如果有可能,麻烦邮件沟通: 113428895@qq.com
sneezry
2017-06-02 14:09:00 +08:00
@Mark2017 这个中间的过程确实比较麻烦,其实在 broadlink 的 gateway 前面我还放了个树莓派,在树莓派和 aws 之间我还放了个 vps。周末我会在 medium 上写一篇更加详细和完善的文章来讲这件事。

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

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

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

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

© 2021 V2EX