智慧家庭 - 通过 Amazon Alexa 控制连接至 HomeAssistant 的智能设备

参考资料:

本文索引:

前言

要使用 Amazon Alexa 控制接入 HomeAssistant 的智能设备,有以下可能的办法:

  • Home Assistant Cloud: 官方推崇的方式,通过启用 AlexaHomeAssistant Skill,结合 Home Assistant Cloud 服务可实现开箱即用的集成,不差钱的可选择这种方案
  • HAASKA(Home Assistant Alexa Skill Adaptor): 社区的开源项目,用 python 编写适用于 Alexa SkillAWS Lamba 函数包,实现了 Home Assistant Smart Home APIAlexa Smart Home Skill API 之间的桥梁作用,需要一系列进阶的配置,动手能力的强可选用此方案。
  • Emulated Hue Bridge: 纯本地方式,将 Alexa-based 设备作为 Emulated Hue Bridge 网关接入 HA,通过 Hue API 与 HA 中的设备进行交互,最简单的方案,但功能非常有限

接下来将分别展示这些方案的实现过程。

通过 Home Assistant Cloud 实现

配置 Home Assistant Cloud

Home Assistant Cloud 是由 NABU CASA 提供的云服务,可试用 31 天。

创建 Home Assistant Cloud 账号

进入 HA 的 Configuration Tab,点击 Create Account

注册完成后,在相同的界面登录,进入到管理界面:

激活 Alexa Home Assistant Skill

进入 Alexa Skills 列表,搜索 Home Assistant,点击激活,之后登录刚刚注册的 Home Assistant Cloud 账号。

之后,在 HA 的 configuration.yaml 中进行配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cloud:
alexa:
filter:
include_entities:
- light.yeelight_ct2_7c49eb1551e8
include_domains:
- switch
exclude_entities:
- switch.outside
entity_config:
light.yeelight_ct2_7c49eb1551e8:
name: Lamp
description: The lamp with a green cover
switch.stairs:
display_categories: LIGHT

以上 cloud 节点是配置如何向 Alexa 暴露 HA 中的实体,与之前讨论的 homekit 组件配置方法类似,具体可参考: Alexa via Home Assistant Cloud

完成之后重启 HA,对 Alexa 说一声 “Alexa, turn on the lamp.” 试试看。


通过 HAASKA 实现(TBD)

由于 AmazonAlexa Skill 的限制条件(例如只能使用 HTTPS),要通过 HAASKA 实现通过 Alexa 控制 HomeAssistant,需要确保以下条件得到满足:

  • Home Assistant 实例的版本高于 0.78
  • 路由器可配置端口转发
  • Home Assistant 必须以 HTTPS 向外暴露: Amazon 的要求
  • 如果家中的 WAN 不是静态 IP 地址,则需要配置 DDNS
  • 成为 Amazon 开发者并创建一个 AWS 账号: HAASKA 将使用 AWS Lamba 服务,AWS 支持每月 100 万免费请求。

准备 HAASKA

可直接至 Release 页面下载 HAASKAZip 包。接着,在 configuration.yaml 文件中添加以下组件的配置节:

1
2
3
4
api:

alexa:
smart_home:

然后导航至 HomeAssistant 的 UI 界面上的 Profile 页面,在底部的 Long-Lived Access Tokens 中创建一个长生存期的 Access Token:

完成之后,记录下返回的 Token 以作后用,它形如:

1
eyJ0eXAiOiJKV1QiLCJhbGciOi......

配置 Amazon AWS

首先导航至 Login with Amazon Console,点击 Create a New Security Profile:


通过 Emulated Hue Bridge 的方式实现

原理

这种办法是使用 HA 的 Emulated Hue Bridge 组件暴露 Hue API,让 Alexa-based 设备误以为 HA 是一个 Philips Hue Hub

实现

编辑 configuration.yaml 配置文件:

1
2
3
# Amazon Alexa
emulated_hue:
host_ip: 192.168.1.140

保存更改,重启 HA 服务

1
$ docker container restart home-assistant

重新使用 Echo -> Start Home 查找设备,即会将所有与 HA 关联的设备列出。