“爱丽丝,开灯。” 基于openHAB的智能家居的语音控制。 无需编程和短信


2017年11月,日历上显示了数字11。 Aliexpress的销售如火如荼,他的手抓了一些东西要买。 选择落在“ Mi-light RGBW LED灯AC86-265V远程控制智能照明”上 。 结果,购买了两个最大功率为9瓦的副本和一个MiLight WiFi iBox集线器控制器。 来自中国的交付很快就到了,四个月后的2018年3月13日, Yandex.Dialogs平台开放 (该平台允许第三方开发人员向语音助手Alice添加技能)。 接下来,爱丽丝(Alice)将学习控制(不仅限于)您公寓中的照明,并且我们将分阶段,无需一行代码地为她提供帮助。

  1. 小米智能灯设置
  2. 安装openHAB
  3. 通过openHAB进行灯光控制
  4. 外部访问openHAB
  5. 国际金融贸易展览会
  6. 爱丽丝


1.设置小米的智能灯。


要做的第一件事是至少使用小米的应用程序来设置灯控制。 如果您已通过此阶段,请随时进行进一步的设置,以建立智能家庭服务器,甚至直接进行Alice和openHAB的集成。 但是,首先是第一件事。 灯本身不会连接到家庭路由器,为此,您需要一个iBox集线器,它最多可以控制四组光源。 您需要将其连接到网络,然后将灯连接到网络。

  1. 我们通过USB将iBox连接到电话,为iBox供电。
  2. 首次连接时,您需要重置集线器,因此请按RST
  3. 接下来,在手机上从适用于iOSAndroid的 Xiaomi安装该应用程序。 确保电话已连接到家庭Wi-Fi网络。
  4. 打开Mi-Light 3.0应用程序,单击+ 。 在这里,我们对“ 智能链接”选项卡感兴趣。
  5. 输入电话已连接并计划连接iBox的家庭Wi-Fi网络的名称和密码。
  6. 现在,您的iBox应该已连接到网络,并且SYSLINK指示灯应分别缓慢,快速闪烁。 如果不是,请再次按RST
  7. 如果指示灯闪烁,请在“ 开始配置”应用程序中单击,然后开始建立集线器连接的过程。
  8. 大约十秒钟后,闪烁将停止,然后SYS将再次开始缓慢闪烁,并且LINK将保持打开状态。 应用程序显示“已配置” 。 集线器已连接到网络。 如果它不在“ 设备列表”中 ,则只需单击“ 搜索设备”

您已经可以控制iBox本身的颜色和亮度,但是我们需要连接灯。 为此,请将灯绑定到集线器可用于控制的四个区域之一。

  1. 我们从中心Mi-Light的列表中打开应用程序Mi-Light 3.0 。 转到颜色部分。
  2. 在屏幕顶部,选择一个区域,将其设为Zone1 。 然后点击右上角的设备配对图标。 出现带有说明的LINK / UNLINK屏幕
  3. 现在,我们配置了要绑定到Zone1的那些灯,以后它们的管理将同步进行。 要分别控制每个灯的亮度和颜色,必须将它们分配到单独的区域。 因此,打开灯,在前三秒钟内,单击“ 链接”应用程序。 如果指示灯闪烁三下,则一切正常,同步成功。 您可以控制灯泡。


基本上,在此阶段,您已经有一个用于控制灯光的遥控器。 此外,您可以编写自己的照明控制系统,因为与集线器通信的协议早就为人所知(它曾经在limitlessled.com/dev上可用)。 在phpjavascriptpython中有现成的库。 但是只能从本地网络进行管理,这对于Alice显然是不够的。 让我们尝试解决这个问题。


2.安装openHAB


简要地说,什么是openHab 。 这是一个开源的智能家居管理服务器。 由社区开发,支持对大量设备的管理。 有一个移动客户端,可以管理来自亚马逊的Alexa和来自Google的助手。 基于Java的Eclipse SmartHome框架。 因此它甚至可以安装在冰箱上,主要是Java虚拟机在此冰箱上运行。 安装说明适用于LinuxWindowsMac OSRaspberry Pi ,以及各种网络存储SynologyQNAP 。 快速浏览第一个选项。

  1. 添加存储库密钥:

    wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' | sudo apt-key add - sudo apt-get install apt-transport-https 
  2. 添加存储库本身:

     echo 'deb https://dl.bintray.com/openhab/apt-repo2 stable main' | sudo tee /etc/apt/sources.list.d/openhab2.list 
  3. 我们将更新和安装服务器以及附加组件:

     sudo apt-get update sudo apt-get install openhab2 sudo apt-get install openhab2-addons sudo apt-get install openhab2-addons-legacy 
  4. 我们在重启设备后设置服务的自动启动并启动它:

     sudo systemctl start openhab2.service sudo systemctl status openhab2.service sudo systemctl daemon-reload sudo systemctl enable openhab2.service 
  5. 现在,我们等待的时间大约15-20分钟 (这并不夸张,这是一个关于Java速度的笑话,这是一个残酷的现实),同时它正在http://openhab-device:8080 Web接口出现在地址http://openhab-device:8080
  6. 在此页面上,我们对Paper UI项目感兴趣。 将来,我们将使用这种类型的界面。




3.通过openHAB进行灯光控制


因此,我们有一个工作正常的智能家居服务器和小米的灯具,可以进行远程控制。 有必要将它们连接起来。 openHAB支持许多设备(包括这些灯)的活页夹(控制连接的电子设备的说明)。

  1. 转到附件绑定
  2. 安装Milight绑定
  3. 要添加我们的设备,请在ConfigurationThings部分中单击+
  4. 我们选择Milight Binding ,开始自动搜索设备。
  5. 我没有自动找到任何东西,因此我手动添加了“ 手动添加内容 ”。
  6. 我们选择要添加的iBox / iBox2集线器。
  7. 在打开的页面上,您需要填写IP网桥ID字段(所连接设备的MAC地址),例如,在路由器的控制面板中找到它们(我的集线器已在网络中注册,其中使用了HF-LPB100模块的名称)。 添加。
  8. 太好了, iBox / iBox2现在出现在带有“ Online ”字样的设备列表中。
  9. 再次单击 +并选择Milight Binding ,这次直接添加灯。
  10. 现在,您无需手动添加任何东西,只需从列表中选择一组灯(在我的情况下,这是Rgbww颜色(第1区)项)。
  11. 所选项目应出现在带有“ Online ”字样的事物列表中。

  12. 设备已配置,现在您需要向它们添加控件。 为此,请单击新添加的项目。
  13. 可以远程控制的灯参数列表将打开。 单击蓝色圆圈亮度
  14. 接下来,选择我们要与之关联的设备参数的控件,因为 我们还没有它们,请点击创建新项目
  15. 设置一个任意名称,例如Light_Switcher ,并将类型从Dimmer更改为Switch ,因为 我不必调节灯的亮度,我只想打开和关闭它。 我们只需将类别更改为光,以便控件在“ 控件”部分显示带有图标。 点击链接
  16. 转到“ 控制”部分,享受设备上亮度开关的操作。



4.外部访问openHAB


出于安全原因,在上述操作之后,仅可以从本地网络管理智能家居服务器。 这显然不足以完成我们的任务。 有几个配置选项 :配置VPN以从Internet访问本地网络,配置反向代理,或将服务器连接到myopenHAB.org上的myopenHAB Cloud服务。 由于在俄罗斯,Roskomnadzor的员工人数与VPN和代理服务器用户的人数成正比,因此我们将使用后者。
不要不必要地乘法

  1. 我们在myopenHAB网站上注册,登录并访问https://myopenhab.org/account 。 在此页面上,我们对两个字段感兴趣: openHAB UUIDopenHAB Secret 。 它们允许您组织服务器连接。 让我们弄清楚从哪里得到它们。
  2. 我们转到PaperUI openHAB控制面板。
  3. 打开“ 配置” →“ 附加组件” →“ 杂项”部分
  4. 安装openHAB Cloud Connector
  5. 配置服务中 ,应显示带有“ 通知和远程访问 ”模式的openHAB Cloud模块。
  6. 配置系统附加管理中,必须激活“ 访问远程存储库 ”开关。
  7. 安装插件后,我们要查找的数据将位于文件/ var / lib / openhab2 / uuid/ var / lib / openhab2 / openhabcloud / secret (如果未从软件包中安装 ,则为userdata / uuiduserdata / openhabcloud / secret )。 我们在myopenHAB的帐户设置中输入它们,然后单击Update 。 如果一切配置正确,则邮件地址左侧应显示“ 在线 ”字样。 这表明可以从Internet访问您的智能家居,但是Alice将无法立即使用它。 首先,您需要从外部访问以前配置的设备。
  8. 转到配置服务openHAB云配置
  9. IFTTT等公开给应用程序项目列表中激活亮度控件的复选框,然后单击保存
  10. 稍后 ,我们确认myopenhab.org/items页面上列出的所选项目的状态为“ ON ”。



现在可以通过支持OAuth2授权的openHAB Cloud API从Internet进行灯控制。 但是,不幸的是,客户是预先确定的,这些客户包括Alexa,Google Assistant和IFTTT服务。 爱丽丝不在此列表中。 但这不是问题!


5. IFTTT


如果是的话。

一种服务,使您可以从多个服务构建一系列操作。 如果另一个服务中的事件触发器已起作用,则有条件地以一个服务中的操作进行响应。 IFTTT支持大量服务,包括令我们感兴趣的myopenHAB。 但是不支持爱丽丝。 通常,任何人都可以在那里为他们的服务创建模块,首先,您需要联系销售部门并找出支持IFTTT的年付款额。 我们的目标是免费使用该服务,以便能够将请求从Alice重定向到openHAB。

  1. 我们在ifttt.com网站上注册,然后转到AppletsNew Applet
  2. 单击+此之后 ,您需要选择事件将在其中触发的服务。 因为 爱丽丝的服务不在清单中,我们需要选择可以接收她命令的物品。 这是一个Webhooks服务。 单击连接
  3. 接下来,从列表中选择一项“ 接收Web请求 ”触发器。
  4. 指定事件的名称,例如light_on ,然后单击Create
  5. 现在我们需要选择响应,单击+ that 。 我们选择的openHAB ,即插即用。
  6. 在打开的窗口中,前面提到的OAuth2授权,点击允许
  7. 唯一的发送命令响应可用。
  8. 从下拉列表中,选择灯控件(例如Light_Switcher),然后将单词“ ON ”指定为light on命令。 我们创造。

要进行检查,我们需要在Webhooks服务上调用触发器。 怎么做? 发送POST请求。

  1. 我们在IFTTT 网站查找Webhooks服务,然后转到与之相关的文档。
  2. 在打开的页面上,我们需要执行一个命令,将{event}替换为light_on
  3. 单击“ 测试”后,您的灯应亮起。

仍然需要为light_off事件创建类似的配方,该配方会将OFF命令发送到灯光控件。 然后教爱丽丝根据我们的要求调用这些触发器。




6.爱丽丝


按照我的意愿,如果您使用Yandex.Dialogs平台,Alice将打开灯 。 该平台于今年3月开放,允许任何人通过编写适当的代码来向Alice添加技能。 目前, 目录中已经介绍了大量技能。 技能的发展是有关哈布雷的另一篇文章的主题,在这里,我们“ 没有一行代码” 。 因此,我们将使用可用的开发。

  1. 我们安装了Yandex搜索应用程序Beta版 ,仅当前支持用户技能
  2. 我们说爱丽丝打开魔法咒语”魔术 / 魔术的能力使我们能够执行对IFTTT服务器的POST请求。
  3. 单击添加,然后指定地址以打开该表单:

     https://maker.ifttt.com/trigger/light_on/with/key/{user_id} 
  4. 下一步是说出某个词组或单词,爱丽丝将通过在指定地址处完成请求来响应(我的爱丽丝回答“开灯”)。

如果现在单击相应的按钮或表达建议,则Yandex服务器的请求将转到技能服务器,从那里到IFTTT,再到myopenHAB,myopenHAB会将数据传输到您的本地实例,并直接访问灯毂,灯将打开。 我们将立即添加类似的命令以关闭照明。


您需要了解,仅打开Alice并说“ 打开灯 ”是不够的。 Yandex对我们的智能家居团队一无所知,有关它们的数据存储在“ 魔术 ”技能数据库中。 因此,您首先需要通过说“ 打开魔术咒语 ”来调用该技能,然后才可以用声音打开和关闭灯光。

聚苯乙烯


通过IFTTT集成Alice和openHAB的方法不会限制您的想象力。 您可以使用“ 魔术 ”功能来控制智能家居语音中的任何内容。 例如,openHAB具有Samsung SmartTV的活页夹,使您可以控制电视的声音和频道。 Alice和Webhooks的交互是对所有IFTTT服务的语音接口的实现,“ 魔术 ”允许您执行其中任何一个的命令。 或者,您根本不使用Alice,而是编写您的前端,例如,一个移动应用程序将通过所有相同的Webhooks执行IFTTT请求。 是的,并且不必使用IFTTT,以此类推,您可以配置“ 魔术 ”来满足对服务器的请求。

Source: https://habr.com/ru/post/zh-CN412261/


All Articles