Amazon Alexa智能家居技能

Amazon Alexa提供了一种智能家居API,可以更丰富地控制家庭自动化,而无需用户说出技能名称,例如:

  • “Alexa,关闭灯。”
  • “Alexa,将恒温器设置为制冷。”
  • “Alexa,车库门开了吗?”

配置需要相当大的努力。您的Home Assistant实例必须可以从Internet访问,并且您需要创建一个Amazon开发者账户和一个Amazon网络服务(AWS)账户。一个更简单的解决方案是使用Home Assistant Cloud

Emulated Hue集成提供了一种更简单的替代方案,使用诸如_“Alexa,打开厨房灯”_的语句。然而,由于一切看起来都像一个灯泡,因此它有一些限制。

Note

通过Home Assistant Cloud,您可以通过几个简单的点击将您的Home Assistant实例连接到Amazon Alexa。使用Home Assistant Cloud,您不必处理动态DNS,SSL证书或在路由器上打开端口。只需通过用户界面登录,即可与云建立安全连接。Home Assistant Cloud在30天的免费试用后需要付费订阅。

对于Home Assistant Cloud用户,文档可以在这里找到。

将Amazon Alexa智能家居技能与Home Assistant集成的步骤:

要求

  • Alexa智能家居API要求您的Home Assistant实例通过使用SSL/TLS证书的HTTPS在端口443上可从Internet访问。自签名证书将无法使用,但公共受信任证书或Amazon批准的证书颁发机构签署的证书应该能够使用。有关如何为Home Assistant设置加密的更多信息,请阅读我们的博客。运行Home Assistant时,使用Duck DNS插件是最简单的方法。
  • Amazon开发者账户。请在此处注册。
  • 需要一个Amazon网络服务(AWS)账户来托管您的Alexa智能家居技能的Lambda函数。AWS Lambda在每月最多1百万次请求和1GB的出站数据传输上免费使用。

创建一个Amazon Alexa智能家居技能

  • 登录到Alexa开发者控制台,您可以在登录页面上创建免费的账户。请注意,此账户必须与您在Alexa设备和应用上使用的Amazon账户相同。
  • 如果您还没有,转到Alexa技能页面,然后单击创建技能按钮开始流程。
  • 输入您喜欢的技能名称,然后选择您的技能的默认语言
  • 选择智能家居自行提供,然后点击右上角的创建技能按钮。

截图:创建智能家居技能

  • 在下一个屏幕中,确保在有效负载版本中选中v3并记下您的技能ID
  • 现在,您已经创建了智能家居技能的框架。在下一步中,我们将进行一些“真正的”开发者工作。请保持Alexa开发者控制台打开,我们稍后会更改技能配置。

创建一个AWS Lambda函数

我们将编写一小段代码,作为AWS Lambda函数托管,该函数将从Alexa智能家居技能重定向请求到您的Home Assistant实例,然后Home Assistant中的Alexa集成将处理请求并发送回响应。然后Lambda函数会将响应提供回Alexa智能家居技能。

好了,开始吧。您首先需要登录到您的AWS控制台,如果您还没有AWS账户,可以在这里创建一个具有12个月免费使用权的新用户。如果您的账户已经超过前12个月,则无需担心费用,因为AWS向所有用户每月提供最多100万次Lambda请求、1GB的出站数据和所有入站数据的免费使用。有关更多详细信息,请参见AWS Lambda定价

为Lambda创建一个IAM角色

您在登录到AWS控制台后需要做的第一件事是为Lambda执行创建一个IAM角色。AWS的访问控制非常严格,因此您必须特别定义和分配所需的权限。

  • 在顶部导航栏中单击服务,展开菜单以显示所有AWS服务,然后在安全、身份和合规部分下单击IAM以导航到IAM控制台。或者您也可以使用这个链接
  • 在左侧面板中单击角色,然后单击创建角色,选择AWS服务->Lambda,然后在向导的第一个页面中单击下一步:权限
  • 选择AWSLambdaBasicExecutionRole策略,然后单击下一步:标签。(提示:您可以使用搜索框过滤策略)

截图:将权限策略附加到IAM角色

  • 给您的新角色起一个名称,例如AWSLambdaBasicExecutionRole-SmartHome,然后单击页面底部的创建角色按钮。您现在应该能够在角色列表中找到您的新角色。

向Lambda函数添加代码

接下来,您需要创建一个Lambda函数。

  • 在顶部导航栏中单击服务,展开菜单以显示所有AWS服务,然后在计算部分下单击Lambda以导航到Lambda控制台。或者您可以使用这个链接 重要信息 - 仅在特定AWS区域支持Alexa技能。 您当前的服务器位置将显示在右上角(例如,俄亥俄州)。请根据您Amazon账户的区域,从下面的列表中选择一个可用的服务器(参考),而不是您实际的物理位置。在其他区域创建的Alexa Lambda函数将无法正常工作,并可能导致账户链接失败!例如,如果您的区域设置为英语(美国)而您居住在加利福尼亚州,则必须使用美国东部(维吉尼亚州),而非美国西部(俄勒冈州)。尽管设置过程将在不正确的区域完成,但技能将无法正常工作,且不会有明确的错误信息指示原因。

    • 英语(美国),英语(加拿大)或葡萄牙语(巴西)技能的**美国东部(维吉尼亚州)**区域
    • 英语(英国),英语(印度),德语(德国),西班牙语(西班牙)或法语(法国)技能的**欧洲(爱尔兰)**区域
    • 日语和英语(澳大利亚)技能的**美国西部(俄勒冈州)**区域。
  • 点击左侧导航栏中的函数,以显示您的Lambda函数列表。

  • 点击创建函数,选择从头开始创作,然后输入一个函数名称

  • 选择Python 3.9Python 3.8Python 3.7作为运行时

  • 展开更改默认执行角色下拉菜单,确保选择使用现有角色作为执行角色,然后从现有角色列表中选择您刚创建的角色。

  • 点击创建函数,然后您可以配置Lambda函数的详细信息。

  • 如果尚未展开,请扩展函数概述,然后在面板的左侧单击+ 添加触发器,然后从下拉列表中选择Alexa Smart Home以将Alexa Smart Home触发器添加到您的Lambda函数。

  • 然后,系统会提示您输入之前步骤中创建的技能的技能ID。(提示:您可能需要切换回Alexa开发者控制台以复制技能ID。)然后单击添加

  • 向下滚动到代码源,如果没有打开,请打开lambda_function.py

  • 清除示例代码,并从https://gist.github.com/matt2005/744b5ef548cc13d88d0569eea65f5e5b复制Python脚本(修改后的代码以支持Alexa的主动模式,详见下文)

  • 点击部署按钮以发布更新的代码。

  • 转到配置选项卡,然后选择环境变量。您需要添加1个环境变量,如果需要,可以添加3个可选变量。这可以通过选择编辑然后添加以下内容完成:

    • (必需) 键= BASE_URL, 值= 您的Home Assistant实例的Internet可访问URL。不要包括结尾的/
    • (可选) 键= NOT_VERIFY_SSL,值=True。您可以将此设置为True以忽略SSL问题,例如如果您没有有效的SSL证书或使用自签名证书。
    • (可选) 键= DEBUG,值=True。设置此变量以记录调试信息并允许LONG_LIVED_ACCESS_TOKEN。
    • (可选,不推荐) 键= LONG_LIVED_ACCESS_TOKEN,值= 您的Home Assistant长期访问令牌。为避免使用长期访问令牌,您将在后面的步骤中将Alexa智能家居技能与您的Home Assistant用户账户连接,这意味着您不需要在此添加它。然而,从登录流程中获得的访问令牌仅在30分钟内有效。使用此访问令牌测试Lambda函数可能会很困难。因此,为了您的方便,您可以从测试数据中删除访问令牌,在生成长期访问令牌中生成一个并放在这里,然后该函数将回退到从环境变量中读取令牌。(提示:您未为环境变量启用安全存储,因此您在此保存的令牌并不安全。您只应将其用于调试和测试目的。在完成调试后,应删除和清除长期访问令牌。)

截图:Lambda函数中的环境变量

  • 现在点击右下角的保存按钮。
  • 接下来,您需要复制页面顶部显示的ARN,这是此Lambda函数的身份。您将在后续Alexa智能家居技能配置中需要此ARN。

测试Lambda函数

现在,您已经创建了Lambda函数,但在测试之前,您必须设置Home Assistant配置的必要方面。将以下最小配置放入您的configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more]文件。它将向Alexa公开您所有受支持的设备和自动化。强烈建议检查配置部分并设置控制哪些设备和实体被公开。

alexa:
  smart_home:

在您的Home Assistant重启后,返回AWS Lambda控制台,您将进行一些测试。

  • 导航到测试选项卡,然后选择创建新事件
  • 命名您的事件,例如发现
  • 在名为事件JSON的代码框中输入以下数据:
{
  "directive": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover",
      "payloadVersion": "3",
      "messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
    },
    "payload": {
      "scope": {
        "type": "BearerToken"
      }
    }
  }
}
  • 点击右上角的创建

此测试事件是一个发现指令,您的Home Assistant实例将以Alexa可以交互的设备列表进行响应。由于此测试数据缺少payload.scope中的token,并且您的Lambda函数将从环境变量中读取LONG_LIVED_ACCESS_TOKEN

点击测试按钮。如果您没有设置LONG_LIVED_ACCESS_TOKEN,或者未启用DEBUG,则将获得INVALID_AUTHORIZATION_CREDENTIAL作为执行结果。

您可以登录到您的Home Assistant并生成长期访问令牌。在将长期访问令牌输入到环境变量LONG_LIVED_ACCESS_TOKEN并将DEBUG环境变量设置为True后,请记得在再次测试之前点击保存按钮。

这一次,您将在响应中收到设备列表。🎉

配置智能家居服务终端

现在删除长期访问令牌(如果要),复制您的Lambda函数的ARN,然后返回到Alexa开发者控制台。您将完成智能家居技能的配置。

  • 返回到Alexa开发者控制台,如果您不在Alexa技能页面,请转到该页面。
  • 找到您刚创建的技能,单击操作列中的编辑链接。
  • 在构建页面的左侧导航栏中单击智能家居
  • 2. 智能家居服务终端下填写默认终端,使用您从Lambda函数配置中复制的ARN

账户链接

Alexa需要将您的Amazon账户链接到您的Home Assistant账户。因此,Home Assistant可以确保只有经过身份验证的Alexa请求可以访问您家的设备。为了链接账户,您必须确保您的Home Assistant可以从Internet访问。

  • 返回到Alexa开发者控制台,如果您不在Alexa技能页面,请转到该页面。

  • 找到您刚创建的技能,单击操作列中的编辑链接。

  • 在构建页面的左侧导航栏中单击账户链接

  • 不要开启“允许用户通过您的应用程序或网站链接他们的账户到您的技能”开关。这将需要一个重定向URI,但这将不起作用。

  • 输入所需的所有信息。假设您的Home Assistant可以通过https://[YOUR HOME ASSISTANT URL][:PORT]访问,其中PORT是TCP端口。如果端口为443,则可以省略该端口。对于Alexa账户链接,默认情况下,标准端口为443。如果需要,请使用您的防火墙进行转发:

    • 授权URIhttps://[YOUR HOME ASSISTANT URL][:PORT]/auth/authorize

    • 访问令牌URIhttps://[YOUR HOME ASSISTANT URL][:PORT]/auth/token

      尽管可以分配其他端口,但最好使用端口443,因此请确保您的防火墙/代理通过端口443进行转发。

      请阅读Alexa开发者文档以获取有关账户链接的要求。

      Note

      尽管Alexa文档中有免责声明,但Let’s Encrypt证书仍被接受。

      Important

      您必须使用有效/受信任的SSL证书,以使账户链接正常工作。 自签名证书将无法使用,但您可以使用免费的Let’s Encrypt证书。

      • 客户端ID

        • 如果您在美国或巴西,则为https://pitangui.amazon.com/

        • 如果您在欧洲,则为https://layla.amazon.com/

        • 如果您在日本和澳大利亚,则为https://alexa.amazon.co.jp/(尚未验证)

          结尾的斜杠在这里很重要。

      • 客户端秘钥:输入您喜欢的任何内容,Home Assistant不会检查此字段

      • 您的身份验证方案:确保您选择了请求主体中的凭据。Home Assistant不支持HTTP Basic

      • 作用域:单击+ 添加作用域并输入smart_home,Home Assistant尚未使用它,我们将在未来允许更多细粒度访问控制时使用它。

      • 您可以将域列表默认访问令牌过期时间留空。

      截图:账户链接

      • 点击右上角的保存按钮。
      • 接下来,您将使用Alexa手机应用程序链接您的账户。
        • 在Alexa应用程序中,导航到更多 -> 技能和游戏 -> 您的技能 -> 开发者
        • 单击刚创建的智能家居技能。
        • 点击启用以使用
        • 将打开一个新窗口,指向您的Home Assistant登录屏幕。
        • 在您成功登录后,您将被重定向回Alexa应用。
        • Alexa现在应该自动开始查找您的设备!这可以通过您物理设备上的蓝色环来指示。
        • 如果没有,请要求Alexa发现设备
      • 现在,您可以从Echo或Alexa应用程序中向Alexa询问,“Alexa,打开卧室灯” 🎉

      Alexa智能家居集成配置

      示例配置:

      alexa:
        smart_home:
          locale: en-US
          endpoint: https://api.amazonalexa.com/v3/events
          client_id: YOUR_SKILL_CLIENT_ID
          client_secret: YOUR_SKILL_CLIENT_SECRET
          filter:
            include_entities:
              - light.kitchen
              - light.kitchen_left
            include_entity_globs:
              - binary_sensor.*_motion
            include_domains:
              - switch
            exclude_entities:
              - switch.outside
          entity_config:
            light.kitchen:
              name: "Alexa的自定义名称"
              description: "厨房的灯"
            switch.stairs:
              display_categories: LIGHT
      

      Configuration Variables

      alexa map Required

      Alexa配置

      smart_home map Required

      Alexa智能家居配置

      locale string (Optional, default: en-US)

      您的Alexa设备的区域设置。支持的区域设置为de-DEen-AUen-CAen-GBen-INen-USes-ESes-MXes-USfr-CAfr-FRhi-INit-ITja-JPnl-NLpt-BR。有关更多信息,请参见Alexa语言环境

      endpoint string (Optional)

      为了启用主动事件,您向Alexa事件网关发送消息,将其发送到与您的智能家居技能地理可用性相一致的事件端点。以下是端点列表及其覆盖的区域。有关更多信息,请参见主动事件

      • 北美:https://api.amazonalexa.com/v3/events
      • 欧洲:https://api.eu.amazonalexa.com/v3/events
      • 远东:https://api.fe.amazonalexa.com/v3/events
      client_id string (Optional)

      请参见主动事件以获取更多信息。

      client_secret string (Optional)

      请参见主动事件以获取更多信息。

      filter map

      过滤Alexa的域和实体。(配置过滤器)

      include_domains list (Optional)

      要包含的域列表(例如light)。

      exclude_domains list (Optional)

      要排除的域列表(例如light)。

      include_entity_globs list (Optional)

      包含所有匹配列出模式的实体(例如binary_sensor.*_motion)。

      exclude_entity_globs list (Optional)

      排除所有匹配列出模式的实体(例如binary_sensor.*_motion)。

      include_entities list (Optional)

      要包含的实体列表(例如light.attic)。

      exclude_entities list (Optional)

      要排除的实体列表(例如light.attic)。

      entity_config map (Optional)

      特定实体的配置。所有从属键是对应的实体ID或域,例如alarm_control_panel.woowoo

      `` map (Optional)

      特定实体的附加选项。

      name string (Optional)

      在Amazon Alexa应用中显示的实体名称。

      description string (Optional)

      在Amazon Alexa应用中显示的实体描述。

      display_categories string (Optional)

      显示类别和图标,每个实体在Alexa应用中显示的位置。用逗号分隔每个类别。第一个类别是主要的。例如:MUSIC_SYSTEM,STREAMING_DEVICE,SPEAKER。有关可用类别列表,请参见Alexa显示类别

      Alexa语言环境

      locale应与您Amazon Echo设备使用的位置和语言匹配。

      支持的区域设置包括:

      • de-DE
      • en-AU
      • en-CA
      • en-GB
      • en-IN
      • en-US
      • es-ES
      • es-MX
      • es-US
      • fr-CA
      • fr-FR
      • hi-IN
      • it-IT
      • ja-JP
      • nl-NL
      • pt-BR

      请参阅能力接口和支持的区域设置列表

      主动事件

      endpointclient_idclient_secret是可选的,仅在您希望启用Alexa的主动模式(即启用“发送Alexa事件”)时需要。如果您想启用主动模式,请注意以下几点:

      • 根据您的技能区域,有不同的端点URL。请检查可用的端点https://developer.amazon.com/docs/smarthome/send-events.html#endpoints
      • client_idclient_secret不是在使用“通过Amazon登录”设置的技能中使用的(在Alexa开发者控制台:构建>账户链接),而是来自“Alexa技能消息”(在Alexa开发者控制台:构建>权限>Alexa技能消息)。要获得它们,您需要启用“发送Alexa事件”权限。
      • 如果之前未启用“发送Alexa事件”权限,您需要使用Alexa应用解除链接并重新链接技能,否则Home Assistant将显示以下错误:“令牌无效且没有刷新令牌可用”。此外,您需要在每次禁用/启用Alexa技能后重新启动Home Assistant。

      配置过滤器

      默认情况下,不会排除任何实体。要限制公开给Alexa的实体,您可以使用filter参数。请注意,只有支持的平台才能添加。

      # 示例过滤器以包含指定的域并排除指定的实体
      alexa:
        smart_home:
          filter:
            include_domains:
              - alarm_control_panel
              - light
            include_entity_globs:
              - binary_sensor.*_occupancy
            exclude_entities:
              - light.kitchen_light
      

      Filters are applied as follows:

      1. 不使用过滤器
        • 包含所有实体
      2. 仅包含
        • 实体列表中的实体包含:include
        • 否则,实体匹配域包含:include
        • 否则,实体匹配通配符包含:include
        • 否则:排除
      3. 仅排除
        • 实体列表中的实体排除:exclude
        • 否则,实体匹配域排除:exclude
        • 否则,实体匹配通配符排除:exclude
        • 否则:包含
      4. 域和/或通配符包含(还可能有排除)
        • 实体列表中的实体包含:include
        • 否则,实体列表中的排除:exclude
        • 否则,实体匹配通配符包含:include
        • 否则,实体匹配通配符排除:exclude
        • 否则,实体匹配域包含:include
        • 否则:排除
      5. 域和/或通配符排除(没有域和/或通配符包含)
        • 实体列表中的实体包含:include
        • 否则,实体列表中的排除:exclude
        • 否则,实体匹配通配符排除:exclude
        • 否则,实体匹配域排除:exclude
        • 否则:包含
      6. 没有域和/或通配符的包含或排除
        • 实体列表中的实体包含:include
        • 否则:排除

      以下字符可用于实体通配符:

      * - 星号表示零个、一个或多个字符
      ? - 问号表示零个或一个字符

      如果您在设置集成时遇到问题,请参考故障排除

      Alexa显示类别

      配置显示类别以覆盖每个实体在Alexa应用中显示的显示类别和图标。这使得查找和监控设备变得更容易。

      light.kitchen_light:
        display_categories: LIGHT,SWITCH
      

      Note

      如摄像头、车库门和警报控制面板等设备需要特定的显示类别,以提供Amazon Alexa所有可用功能。覆盖默认显示类别将会限制Amazon Alexa提供的功能。

      请参见Alexa显示类别以获取完整列表

      支持的平台

      Home Assistant通过Alexa智能家居技能支持以下集成。对于Home Assistant Cloud用户,文档可以在这里找到。

      以下段落解释当前支持的平台的功能。

      警报控制面板

      布防和撤防警报控制面板实体。询问Alexa警报控制面板实体的状态。

      • “Alexa,将我的家设为外出模式。”
      • “Alexa,开启我的家。”
      • “Alexa,关闭我的家。”
      • “Alexa,我的家已经布防了吗?”

      布防

      警报控制面板状态必须处于disarmed状态才能布防。Alexa不支持在不先撤防的情况下从布防状态切换,例如,从armed_home切换到armed_night

      警报控制面板的状态armed_custom_bypass不被Alexa支持,并视为armed_home

      Note

      目前Alexa不支持使用语音PIN进行布防。因此,如果警报控制面板要求布防的codecode_arm_required属性为true,则在发现时该实体将不会被公开。 警报控制面板可能会将code_arm_required属性默认为true,即使平台不支持或要求使用它。使用实体自定义工具code_arm_required覆盖为false,以便在发现过程中公开警报控制面板。

      撤防

      用户必须选择在Alexa应用中使用按语音撤防的功能。Alexa将要求一个4位数字的语音个人识别码(PIN)来撤防。在Alexa应用中配置4位数字PIN,或使用已配置的警报控制面板的现有4位数字PIN码。

      截图:Alexa应用安全系统PIN

      要使用为警报控制面板配置的现有代码,code必须为4位数字,并且code_format属性必须为number。在发现之后,Alexa应用将提供使用现有code的能力,或创建其他4位数字的PIN以与Alexa一起使用。

      现有代码不会从Home Assistant传递给Alexa。在撤防时,Alexa会请求PIN。说出给Alexa的PIN将被转发到Home Assistant,并传递给alarm_control_panel.alarm_disarm操作。如果alarm_control_panel.alarm_disarm操作因任何原因失败,则假定PIN不正确,并向Alexa报告为无效PIN。

      警报,自动化,组

      将警报、自动化和组实体作为开关开启和关闭。

      • “Alexa,开启前门警报。”
      • “Alexa,关闭节能自动化。”
      • “Alexa,开启楼下。”

      二进制传感器

      需要启用主动事件

      具有device_class属性的二进制传感器,支持以下类型:doorgarage_dooropeningwindowmotionpresense

      device_class Alexa传感器类型
      door 接触
      garage_door 接触
      opening 接触
      window 接触
      motion 动作
      presense 动作

      询问Alexa接触传感器的状态。

      • “Alexa,卧室的窗户开了吗?”

      常规

      需要启用主动事件

      可以用作为接触或运动传感器公开的二进制传感器触发Alexa常规。

      使用实体自定义工具覆盖device_class属性,以将binary_sensor暴露给Alexa。

      按钮,输入按钮

      使用按钮名称或_“打开”_语句激活按钮和输入按钮。它们将在Alexa应用中作为场景显示。

      • “Alexa,响铃电话。”
      • “Alexa,打开响铃电话。”

      常规

      需要启用主动事件

      当按钮被按下时,可以触发Alexa常规。

      为了启用此功能,按钮将显示为具有“存在检测”功能。这使得此功能成为可能,因为Alexa不支持按钮类型的设备。要在按钮被按下时触发常规,请在”当”菜单中选择按钮,然后选择“人员”功能。

      截图:Alexa应用按钮常规触发器

      使用binary_sensor门铃公告

      需要启用主动事件

      请注意,Home Assistant可以通过具有device_class设置为doorbellevent实体本地支持门铃。

      entity_config中配置binary_sensordisplay_categoryDOORBELL,以获得在Alexa应用中访问门铃通知设置。请注意,Home Assistant可以通过一个event实体原生支持此功能。

      alexa:
        smart_home:
          entity_config:
            binary_sensor.alexa_doorbell:
              name: "前门"
              description: "门铃二进制传感器"
              display_categories: DOORBELL
      

      binary_sensor状态从off变化为on时,Alexa将在所有Echo设备上宣布_“有人在[实体名称]前面”_。

      另请参见事件实体

      使用二进制传感器的存在检测

      需要启用主动事件

      配置具有motionpresence属性的device_classbinary_sensor,并在entity_config中将display_category配置为CAMERA,以访问Alexa应用中的存在检测通知设置。

      alexa:
        smart_home:
          entity_config:
            binary_sensor.driveway_presence:
              name: "车道"
              description: "车道存在传感器"
              display_categories: CAMERA
      

      Alexa将在所有Echo设备上宣布_“检测到的人员在[实体名称]前面”_。

      Important

      每个Echo设备将需要启用通信和公告设置,并关闭勿扰功能。

      截图:Alexa应用人员检测通知

      图像处理实体也支持此通知。

      摄像头

      在Amazon Echo设备上查看摄像头流。

      • “Alexa,显示前门摄像头。”

      必须使用stream集成将摄像头流传输到Amazon Echo设备。

      Amazon Echo设备将向Home Assistant请求摄像头流。Home Assistant URL必须可以从Amazon Echo设备连接到的网络访问,并必须支持HTTPS在端口443上使用由Amazon批准的证书颁发机构签署的证书。这些要求可以使用Home Assistant Cloud或LetsEncrypt/DuckDNS满足。

      启用用于与Echo设备一起使用的摄像头的预加载流选项,以减少响应时间,并防止在6秒限制之前超时。

      气候

      支持单、双和三重设定点恒温器。恒温器的温度值也将在单独的温度传感器中公开。

      设置恒温器温度

      • “Alexa,将恒温器设置为20。”
      • “Alexa,将空调设置为75。”
      • “Alexa,让这里更温暖。”
      • “Alexa,让这里更凉快。”

      恒温器模式

      • “Alexa,将客厅恒温器设置为自动。”

      • DRY在Alexa应用中显示为DEHUMIDIFY

      • ECO在Home Assistant中作为preset处理,并不会在Alexa应用中显示。

      • FAN_ONLY在Alexa语音模型中不受支持,并在Alexa应用中显示为OFF

      要更改恒温器模式,必须使用确切的语句:

      • “Alexa,将[实体名称]设置为[模式语句]。”

      如果气候实体支持开/关,使用_“打开”“关闭”_语句与实体名称或模式语句一起使用。

      • “Alexa,开启[模式语句]。”
      • “Alexa,关闭[实体名称]。”

      Alexa支持以下气候恒温器模式的语句值:

      Home Assistant气候模式 Alexa模式语句
      AUTO “自动”“自动化”
      COOL “制冷”“冷却”
      HEAT “加热”“加热”
      ECO “生态”“经济”
      DRY “干燥”“去湿”
      OFF “关闭”

      覆盖物

      覆盖物应配置为适当的device_class

      device_classblindshadecurtain的覆盖物在Alexa应用中显示为室内百叶窗,device_classwindowawningshutter的覆盖物将显示为室外百叶窗。

      device_classgarage的覆盖物显示为车库门并支持通过语音PIN打开功能。

      请使用实体自定义工具覆盖device_class属性以正确公开cover给Alexa。

      打开/关闭/升高/降低

      Home Assistant配置覆盖物以提供_“升高”“降低”“打开”“关闭”_等语句的语义。除了语义 “开启” / _“关闭”_语句也有效。

      • “Alexa,打开车库门。”
      • “Alexa,关闭窗帘。”
      • “Alexa,降低阴影。”
      • “Alexa,升高屋顶!”

      根据覆盖物支持的功能分配语义。如果覆盖物支持倾斜功能,则语义_“打开”“关闭”分配给倾斜功能,而语义“升高”“降低”_则分配给位置功能。

      如果覆盖物不支持倾斜,则所有语义_“升高”“降低”“打开”“关闭”_都分配给位置功能。

      设置覆盖物位置

      支持设置位置的覆盖物可以使用百分比进行控制。

      • “Alexa,将[实体名称]位置设置为30%.”
      • “Alexa,将[实体名称]位置增加10%.”
      • “Alexa,将[实体名称]位置减少20%.”
      语言环境 友好名称同义词
      en-US “位置”“打开”

      当前,Alexa仅支持为en-US区域提供友好名称同义词。

      设置覆盖物倾斜

      支持倾斜位置的覆盖物可以使用百分比进行控制。

      • “Alexa,将[实体名称]的倾斜设置为30%”
      • “Alexa,将[实体名称]的倾斜增加10%”
      • “Alexa,将[实体名称]的倾斜减少20%”
      语言环境 友好名称同义词
      en-US “倾斜”“角度”“方向”

      当前,Alexa仅支持为en-US区域提供友好名称同义词。

      停止覆盖物操作

      要停止覆盖物操作,请说:

      • “Alexa,停止[实体名称]。”

      如果您的覆盖物支持STOP功能,则这将停止覆盖物操作。 如果您的覆盖物支持STOP_TILT功能,则这将停止覆盖物倾斜操作。 如果两个功能都启用,则将停止覆盖物和覆盖物倾斜。

      车库门

      device_classgarage的覆盖物在Alexa应用中支持通过语音PIN打开功能。请在Alexa应用中配置4位数字PIN码以打开车库门。

      截图:Alexa应用通过语音打开车库门

      事件实体

      需要启用主动事件

      门铃事件

      如果event实体的device_class设置为doorbell,则Home Assistant的event实体可以触发Alexa的门铃公告。 当event实体接收到更新时,Alexa将在所有Echo设备上宣布_“有人在[实体名称]前面”_。

      Note

      每个Amazon Echo设备将需要启用通信和公告设置,并关闭勿扰功能。

      截图:Alexa应用门铃通知

      风扇

      控制风扇速度、方向和摆动。

      风扇速度

      风扇设备必须支持基于百分比的速度,带有percentage属性。

      • “Alexa,将风扇速度设置为三。”
      • “Alexa,将风扇速度设置为50%.”
      • “Alexa,将风扇功率级别设置为50%.”
      • “Alexa,提高塔式风扇的速度。”
      • “Alexa,将塔式风扇的风速设置为最大。”

      风扇预设模式

      风扇设备必须支持preset_mode属性。

      • “Alexa,将风扇预设设置为生态。”
      • “Alexa,将风扇预设设置为智能。”
      • “Alexa,将风扇预设设置为自动。”

      当前,Alexa仅支持en-US区域的预设模式。

      风扇方向

      风扇设备必须支持direction属性。

      • “Alexa,将风扇方向设置为前进。”
      • “Alexa,将风扇方向设置为反向。”

      风扇摆动

      风扇设备必须支持oscillating属性。

      • “Alexa,塔式风扇是否处于摆动状态?”
      • “Alexa,为塔式风扇开启旋转。”
      • “Alexa,为台风扇打开摆动模式。”
      语言环境 友好名称同义词
      en-US “摆动”“旋转”“摆动”“转动”“前后移动”

      当前,Alexa仅支持为en-US区域提供友好名称同义词。

      加湿器

      控制电源、目标湿度和模式。

      加湿器目标湿度

      • “Alexa,将[实体名称]的湿度设置为50%.”

      加湿器模式

      加湿器设备必须支持mode属性。

      • “Alexa,将[实体名称]模式设置为生态。”

      图像处理

      需要启用主动事件

      存在检测通知

      所有image_processing实体支持Alexa应用中的存在检测通知设置。任何状态变化将触发通知。

      Alexa将在所有Echo设备上宣布_“检测到的人员在[实体名称]前面”_。

      截图:Alexa应用人员检测通知

      Note

      显示类别将默认设置为CAMERA,以启用Alexa应用中的存在检测通知设置。每个Echo设备将需要启用通信和公告设置,并关闭勿扰功能。

      输入数字和数字

      用Alexa控制input_numbernumber实体。为该实体配置minmaxstepunit_of_measurement属性。

      • “Alexa,将[实体名称]设置为45 [计量单位]。”
      • “Alexa,将[实体名称]增加2。”
      • “Alexa,将[实体名称]设置为最大。”

      以下表列出了具有min: -90, max: 90, step: 45, unit_of_measurement: degrees的输入数字或数字的可能友好名称同义词。

      风扇范围 友好名称同义词
      -90 “负九十”, “最小”, “最小值”
      -45 “负四十五”
      0 “零”
      45 “四十五”
      90 “九十”, “最大”, “最大值”

      unit_of_measurement将用于从全球Alexa目录选择受支持的单位标签。如果没有匹配项,它将被分配为预设控制器。

      支持的单位有:°C,°F,K,m,km,mi,yd,in,kg,g,oz,lb,L,ft³,m³,gal和%。

      灯光

      使用_“打开”“关闭”_语句控制灯光,调节亮度、颜色和色温。

      • “Alexa,打开浴室灯。”
      • “Alexa,关闭露台灯。”

      亮度

      支持亮度的灯光可以通过0到100百分点进行调整。

      • “Alexa,将卧室灯设置为50%.”
      • “Alexa,客厅灯设置为100%.”

      _“调光”_语句将减少灯光亮度25百分点。

      • “Alexa,调暗浴室灯。”

      色温

      使用以下友好名称调节支持色温的灯光:

      • “Alexa,将餐厅设置为更柔和。”
      • “Alexa,使客厅更温暖。”
      • “Alexa,将餐厅设置为更凉爽。”
      • “Alexa,使客厅的灯光更加白。”
      • “Alexa,使客厅的灯光温暖白。”
      • “Alexa,将厨房的灯光设置为日光。”

      以下表列出了支持色温的灯光可能的友好名称同义词。

      开尔文的色温 友好名称同义词
      2200 “温暖”“温暖白”
      2700 “白炽灯”“柔白”
      4000 “白色”
      5500 “日光”“日光白”
      7000 “冷”“冷白”

      使用_“更温暖”“更柔和”“更凉爽”“更白”_句子调节色温50mired(大约300-500摄氏度开尔文变化)。

      • “Alexa,将餐厅设置为更柔和。”
      • “Alexa,使客厅更温暖。”
      • “Alexa,将餐厅设置为更凉爽。”
      • “Alexa,使客厅的灯光更加白。”

      颜色

      使用CSS 基本颜色关键字扩展颜色关键字作为友好的颜色名称设置灯光颜色。

      • “Alexa,将前廊灯设置为蓝色。”
      • “Alexa,将卧室灯设置为红色。”
      • “Alexa,将厨房的颜色更改为深红色。”

      • “Alexa,锁上我的前门。”
      • “Alexa,解锁地下室。”

      解锁

      要解锁,Alexa将要求一个4位数字的语音个人识别码(PIN)进行解锁。在Alexa应用中配置4位数字PIN以解锁锁。

      媒体播放器

      更改频道

      • “Alexa,将客厅电视的频道更改为200。”
      • “Alexa,将电视的频道更改为PBS。”
      • “Alexa,下一频道在客厅电视上。”
      • “Alexa,电视的频道增加。”
      • “Alexa,电视的频道减少。”

      扬声器音量

      • “Alexa,将扬声器的音量设置为50。”
      • “Alexa,将立体声音量降低20。”
      • “Alexa,将客厅电视的音量降低。”
      • “Alexa,静音扬声器。”
      • “Alexa,取消静音扬声器。”
      • “Alexa,降低立体声的音量。”
      • “Alexa,扬声器音量上升20。”

      均衡器模式

      支持将媒体播放器的sound_mode更改为预设的sound_mode_list

      • “Alexa,将电视模式设置为电影。”

      Alexa仅支持以下模式:moviemusicnightsporttv

      输入

      支持将媒体播放器的source更改为预设的source_list

      • “Alexa,将客厅电视的输入更改为DVD。”

      Home Assistant会尝试将media_playersource_list转换为Alexa的有效source名称。Alexa仅支持以下输入名称:

      AUX 1AUX 2AUX 3AUX 4AUX 5AUX 6AUX 7BLURAYCABLECDCOAX 1COAX 2COMPOSITE 1DVDGAMEHD RADIOHDMI 1HDMI 2HDMI 3HDMI 4HDMI 5HDMI 6HDMI 7HDMI 8HDMI 9HDMI 10HDMI ARCINPUT 1INPUT 2INPUT 3INPUT 4INPUT 5INPUT 6INPUT 7INPUT 8INPUT 9INPUT 10IPODLINE 1LINE 2LINE 3LINE 4LINE 5LINE 6LINE 7MEDIA PLAYEROPTICAL 1OPTICAL 2PHONOPLAYSTATIONPLAYSTATION 3PLAYSTATION 4SATELLITESMARTCASTTUNERTVUSB DACVIDEO 1VIDEO 2VIDEO 3XBOX

      播放状态

      需要启用主动事件

      Note

      当前不支持向前寻址(跳过)或倒带(回退)意图。

      遥控器

      支持根据给定的activity_list更改遥控器的activity

      • “Alexa,将电视更改为PlayStation。”
      • “Alexa,将电视输入更改为PlayStation。”

      Note

      Alexa不允许使用以下词语作为活动名称:

      alarmalarmsall alarmsaway modebasscameradatedate todaydaydo not disturbdrop inmusicnight lightnotificationplayingsleep soundstimetimertoday in musictreblevolumeway f. m.

      场景

      通过场景名称或_“打开”语句激活场景。Home Assistant目前不支持停用或“关闭”_场景。

      • “Alexa,派对时间。”
      • “Alexa,打开派对时间。”

      脚本

      通过脚本名称或_“打开”语句运行脚本。通过“关闭”_语句停用正在运行的脚本。

      • “Alexa,派对时间。”
      • “Alexa,打开派对时间。”
      • “Alexa,关闭派对时间。”

      传感器

      需要启用主动事件

      目前仅配置了温度传感器。

      • “Alexa,厨房的温度是多少?”
      • “Alexa,楼上的温度是多少?”

      开关,输入布尔值

      支持_“开启”“关闭”_语句。

      • “Alexa,打开吸尘器。”
      • “Alexa,关闭灯光。”

      常规

      需要启用主动事件

      当开关和输入布尔值的状态发生变化时,可以触发Alexa常规。

      为了启用此功能,开关和输入布尔值将作为接触传感器在Alexa常规的状态菜单中显示。这是因为Alexa不支持从开关类型设备触发常规,仅支持从接触和运动传感器触发。在此菜单中,选择开关时,打开对应于开启关闭对应于关闭

      截图:Alexa应用开关常规触发器

      计时器

      使用_“开启”_语句启动计时器。

      • “Alexa,开启洗衣。”

      使用_“关闭”_语句取消计时器。

      • “Alexa,关闭洗衣。”

      暂停和重新启动Home Assistant中的计时器实体。

      • “Alexa,暂停微波炉。”
      • “Alexa,保持水浴。”
      • “Alexa,重新启动微波炉。”

      Important

      为了避免Alexa内置计时器功能的问题,计时器实体的友好名称中不应包含“计时器”一词。

      吸尘器

      支持_“打开”“关闭”_语句。暂停和恢复。

      • “Alexa,打开吸尘器。”
      • “Alexa,暂停吸尘器。”
      • “Alexa,重新启动吸尘器。”

      阀门

      阀门在Alexa中不被原生支持。因此在Alexa中,它们被表示为未知类型的设备。

      打开/关闭

      Home Assistant配置阀门以提供 “打开”“关闭” 的语句。

      • “Alexa,打开水阀。”
      • “Alexa,关闭燃气阀。”

      设置阀门位置

      支持设置位置的阀门可以使用百分比进行控制。

      • “Alexa,将[实体名称]位置设置为30%.”
      • “Alexa,将[实体名称]位置增加10%.”
      • “Alexa,将[实体名称]位置减少20%.”
      语言环境 友好名称同义词
      en-US “位置”“打开”

      当前,Alexa仅支持为en-US区域提供友好名称同义词。

      停止阀门

      支持stop关闭或打开的阀门将具有额外的切换控制,允许停止阀门的关闭或打开操作。

      热水器

      支持单、双和三重设定点恒温器。恒温器的温度值也将在单独的温度传感器中公开。

      设置目标温度

      • “Alexa,将锅炉的目标温度设置为50。”

      您可以询问Alexa当前的温度和当前的目标温度。

      • “Alexa,锅炉的目标温度是多少?”
      • “Alexa,锅炉的当前温度是多少?”

      操作模式

      可以通过UI设置操作模式。所有Home Assistant的操作模式都可以设置(仅限英语)。

      • “Alexa,将主锅炉设置为生态。”

      要更改热水器模式,必须使用确切的语句:

      • “Alexa,将[实体名称]设置为[模式语句]。”

      如果热水器实体支持开/关,使用_“打开”“关闭”_语句与实体名称或模式语句一起使用。

      • “Alexa,打开[模式语句]。”
      • “Alexa,关闭[实体名称]。”

      故障排除

      二进制传感器在常规触发中不可用

      具有device_class属性的二进制传感器,类型包括doorgarage_dooropeningwindowmotionpresense是支持的。

      使用实体自定义工具覆盖device_class属性以将binary_sensor公开给Alexa。

      令牌无效且没有可用的刷新令牌

      使用Alexa应用禁用并重新启用技能;然后重新启动Home Assistant。

      调试

      当日志级别设置为debug时,Alexa集成将记录有关状态更新和其他消息的额外信息。将相关行添加到configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more]中:

      如果使用Alexa与Alexa智能家居技能和像haaska这样的Lambda函数:

      logger:
        default: info
        logs:
          homeassistant.components.alexa: debug
      

      如果使用Home Assistant Cloud,则还需要调试hass_nabucasa.iot

      logger:
        default: info
        logs:
          homeassistant.components.alexa: debug
          hass_nabucasa.iot: debug