本帖最后由 姚远 于 2020-11-7 08:38 编辑
插件和技术都是使用cnk700i大神https://bbs.hassbian.com/thread-6291-1-1.html,我这里不是原创,只是看到好多同学接入hass不成功,我把自己接入的过程和大神的指点介绍出来,让大家少走一些弯路。 大神升级了havcs插件到v3版,请参看#45楼。有些同学使用nginx反代,其配置也请参看#22楼和#45楼
我理解的智能音箱的调度过程
注:这个过程并不是技术过程,只是逻辑上帮着理解的过程
说明
智能音箱的机制:智能音箱之所以智能,是音响通过外网连接到了各自官网的云平台上,并基于各自语音识别能力、云数据处理能力等,将“内容”返回给智能音箱;智能音箱再基于返回的内容播报语音或其他动作。所以,我们买回来智能音箱,一定要在其官网上注册账户,一个音箱必须绑定在一个帐户下,否则这个音响基本上不能使用。
我们要丰富自己智能音箱的能力,就要增加额外的“技能”。这个技能绑定在我们的官网账户上,从而绑定在了智能音箱下。新增的这个技能,既可以在商店中购买,也可以自建。购买就比较省事,加载到我们的“技能”中就可以了。自建比较灵活,我们一般就采用“调试模式”,不加载到“技能”中,自己知道可以用就行了,所以“技能”中是看不到的。大神的模式三,插件模式,指的就是新增技能“havcs”,所以需要注册,看得到技能;而大神的模式一,就是自建技能,不需要加载“havcs”,也看不到这个技能,直接是用就可以了。
模式一和模式三我都使用过。模式三,大神已经为我们建立好了与智能音箱官网的技能连接,所以省事,基本没有坑,但这也给大神的服务和费用造成了压力。模式一,则是一劳永逸,不再需要大神的服务器支撑,给大神减压减负。如果我们选择了模式一,那么就需要过几个大坑,外网穿透、https能力、智能音箱官网建立技能。每一个坑都是挑战,但也都是有窍门绕过。如果我们选择了模式三,则下面的内网穿透、https服务、智能音箱技能部分都不需要看,直接跳到homeassistant配置就可以了。
我看很多同学在这里绕来绕去,所以做了如上说明。总结是,
1 如果选择模式一,则需要准备好过坑:内网穿透、https服务、智能音箱建立技能,以及技能授权
2 如果选择模式三,则直接在homeassistant中配置,以上都不需要关心。但如果突然智能音箱不受控制,或是不能配置成功,多半是大神的服务器上的某个服务出问题了,耐心等待就是了,自己别瞎折腾。
大神模式一
1 内网穿透
智能音箱自建模式,需要我们的应用(homeassistant)与音箱官网建立双向网络连接。这样就需要其官网可以访问到我们的内网homeassistant主机上来。所以,一定要外网穿透进内网,并且可以访问到homeassistant主机。我不是这方面专家,只说说我用过的几个方法。
方法一,公网ip+端口映射
我们现在家庭网络基本上是光猫入户,连接我们自己的路由器,再经过路由器的wifi组成我们自己的内网。这样,外网就过了3个关卡,光猫、路由器、wifi,我们的homeassistant主机ip需要过三次转换才能和入户对应上。另一方面,外网入户前,运营商一般也是过了自己服务器经过一次或多次转换了,那我们和真正可以直连音箱官网的ip就不知道经历过多少次的转换,这样无法连接homeassistant主机和音箱官网。公网ip穿透模式,就是要把它“直接”打通。
1.1 向运营商申请公网ip,将运营商的多次转换问题解决掉。打电话申请,一般1个多小时即可以解决。
1.2 改变自己路由器配置,将光猫入口的转换问题解决掉。路由器配置,由原先的ap模式,改为ppoe拨号模式,由路由器代替光猫拨号。此时光猫只是一个光到网的物理信号转换,真正接入网络的是路由器。
1.3 端口映射,改变路由器--wifi到主机的转换问题。配置路由器端口映射,映射到“主机ip:主机端口”。比如,192.168.1.3:8123。
外网访问时,可输入自定义的外网访问端口号。我是改为公网ip之后,运营商把443端口封了,我就自己给了一个端口。在音箱技能平台上,加上这个端口号,一样可以访问到homeassistant主机,也可以授权成功。
1.4 外网动态ip,解决外网ip变化问题。这就是ddns的设置,花生壳什么的都可以。我使用的是梅林路由器,采用了插件aliddns。它是每隔一段时间扫描一次外网ip,并直接更新我设在阿里云的域名解析中的ip。
方法二,直接购买花生棒等产品。价格不贵,省的折腾,多少次转换都没有关系
这类产品直接插在路由器上,它会自己穿透到它们的服务器,进行外网ip到你路由器的转换。在它的产品页面设置好端口映射,将外网访问映射到homeassistant主机上就可以了。简单,省事,花钱不多。但是,我也折腾了好几天,直到现在都没有明白正确的设置是什么样子的,挺乱的。我是直接提交工单,请他们售后帮我一步一步设置下来就好了。设置之后,可通过https://域名,不需要再输入端口,即可直接在外网访问hass。
我是开始选择了花生棒,并购买了他们配置的https服务,但是小度技能无法正确授权,才改到“公网ip”模式。后来经过cnk700i大神的指导,这个方式也是可用的,只是homeassistant配置略有不同。后面我会给出我的配置。再次感谢cnk700i大神。
方法三,nginx反向代理
参考zhkufish大神的资料:https://bbs.hassbian.com/thread-5417-1-1.html
我是被搞的快吐了,也没有搞定。可能也是前面两个方法都成功了,不想再折腾了,就没有搞下去。自我感觉,这东西应该不错,可以装在homeassistant主机上构建智能音箱的接入,也可以搞到路由器上,建立多个应用的内网穿透。但这东东可能小白搞起来有点费劲
2 域名和https
方法一,爱折腾,又喜欢自己的域名的人
外网穿透到内网,只是链路通了。音箱技能平台要求必须是域名访问,还要求https安全访问。这就要申请域名,并申请ssl证书,将域名绑定ssl形成https访问。
我是综合网上好多教程,搞了好长时间,云山雾罩,磕磕碰碰搞下来的。总结下来,阿里云还是大家推荐最多的。因为自己不是做技术的,阿里云各种变换方式的推销、页面来回转换,这里很是费劲。其实步骤并不复杂。
2.1 阿里云注册用户,并登陆https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fhomenew.console.aliyun.com%2F
2.2 阿里云邮箱认证:https://dc.console.aliyun.com/next/index?spm=5176.12818093.0.ddomain.7e8f16d0Sf2BGO#/email-verify
2.3 信息模板审核:https://dc.console.aliyun.com/next/index?spm=5176.12818093.0.ddomain.488716d0SXAaCz#/info-template/InfoTemplate
2.4 选择一个域名并注册。要想一个好听好记的域名,要花点钱:https://wanwang.aliyun.com/domain/?spm=5176.76981.1001.1.7f1466b4SjuBlN
2.5 申请ssl证书,免费个人版:https://common-buy.aliyun.com/?spm=5176.2020520163.cas.1.208256a7119BTL&commodityCode=cas#/buy
2.6 ssl证书绑定域名,域名解析:特别注意ssl绑定的域名,就是后面使用的域名全称
以上很多步骤,网站都需要验证、审核,按照他的要求做就可以了,耐心等候他的审核再进行下一步的操作。整体下来,如果顺利大约要2天。我是搞搞停停,整了3个月
方法二,有钱又想省事的人。
我开始域名注册步骤搞不清楚,ssl绑定域名更是云里雾里,所以就买了花生棒和他的https服务。它的优点就是省事,缺点就是完全被它固定了,要用他的域名,要用他的https服务,还没有ssl证书给你。
花生棒是个硬件,插入家里的路由器,就可以内网穿透了;它会送给你一个域名,也可以在他这里买域名,域名有点难记,还不响亮;https只能在花生棒上使用,38元,终身使用,不贵,就是只能有一个域名和固定的443端口使用,也就是只能一个应用使用。一个棒,只能应用一个https服务,就是他比较贵的地方。而前面折腾注册域名的好处就是增加端口,一个域名可以服务于好几个应用。
3 homeassistant配置
这部分是小白最绕的地方,也是看到很多像我一样的小白掉到坑里出不来的一个重要环节。所以我接下来按照不同内网穿透模式,分为“公网ip穿透模式”、“花生棒ddns模式”,分别介绍我的经验。采用模式三的同学不要看这部分。
一、公网ip内网穿透模式
1 homeassistant配置https访问
因为我只使用https访问homeassistant,所以,直接在HASS服务器上配置。我使用的是树莓派作为homeassistant的主机,HASS版本是“Home Assistant 0.104.3”
下载ssl证书
1. 在阿里云网站下载之前注册的证书,“其他“版
2. 本地解压缩,并放置到HASS主机上
- 解压缩出来两个文件,pem和key
- 在hass主机建立存放目录
sudo mkdir /home/pi/ssl_keys
cd /home/pi/ssl_keys
- 将两个文件放到/home/pi/ssl_keys/目录下。注意两个文件的权限最好所有用户、均可读写执行
配置homeassistant,configuration.yaml
- 清理homeassistant中可能的错误。我之前忽略了一些缺失文件的安装,把他们都安装齐全,日志不再报错。
- 配置configuration.yaml。一共2个位置。
- 新版hass注意:此处配置可能有问题,请参考62楼解决方法
homeassistant:
auth_providers:
- type: homeassistant
- type: trusted_networks
trusted_networks:
- 192.168.0.0/24
- 127.0.0.1
http:
base_url: 域名解析中填写的域名
ssl_certificate: /home/pi/ssl_keys/cert.pem #ssl文件pem
ssl_key: /home/pi/ssl_keys/cert.key #ssl文件key
特别注意,一旦配置之后,ip不可再直接访问HASS,只可以使用域名+端口进行访问
2 homeassistant配置智能音箱插件
1. 下载老大的智能音箱插件,并安装到HASS
老大的小度智能音箱插件:https://github.com/cnk700i/havcs
安装位置:/home/pi/.homeassistant/custom_components/havcs
2. 配置configuration.yaml
我家使用的是小度play
havcs:
platform:
- dueros # 小度
http:
ha_url: https://localhost:8123
注意一定要使用https
3. 重新启动homeassistant,检查havcs是否成功
homeassistant中havcs已经成功部署,开发者工具——>服务——>havcs.reload,可以看到
3 外网https访问
- 重启homeassistant
- 使用https:域名(如果为了避开https443端口封闭而采用了https+端口方式访问,则需要https://域名:端口)进行访问
4 创建并使用智能音箱技能
我应用的是小度play,所以需要百度云技能:https://dueros.baidu.com/open
1 登陆百度云账号。注意,一定是我们智能音箱绑定的账号
2 创建技能
3 授权。在百度云技能中点击“授权”,百度云会打开homeassistant登陆页面,输入用户和密码,由我们的homeassistant对百度云的访问进行授权。如果授权不成功,反馈的信息太简单了,让我们摸不清前面哪里出了问题。这里同学们碰到的问题最多,也是我之前威而退步的主要关卡。总结下来,就是内网穿透问题、https设置问题、havcs插件设置问题。有如下几个可能
3.1 内网没有穿透。只要按照我前面的步骤做下来,在外网可以通过域名https方式访问,就说明内网穿透出来了,而且https配置是正确的。否则就要回头去检查为什么没有穿透出来,是哪里出了问题。
在通过域名访问主机时,浏览器这样的显示,就说明外网没有访问成功
3.2 百度云技能无法访问到homeassistant页面,我是域名填写不对,是前面阿里云中ssl绑定域名时候留下的坑。这个位置的全名就是ssl绑定域名的全称。这个大坑搞了我好几天才知道是阿里云ssl绑定错了。
3.3 https配置有问题。在百度云技能中,将token地址和webservice地址,按照百度云技能说明填写,如果授权可以成功,那就是说明技能这里填写有问题,没有调用havcs插件的授权。我是因为填写插件名字错误了,由alhome改为havcs就可以了。
4 百度云技能授权通过之后,就是开启“自建技能的应用”,开启“技能调试模式”
5 模拟测试,基本就等同于呼唤小度并发布命令
5.1 发现新设备:
编辑homeassistant中的havcs.yaml文件,增加新设备
加载到homeassistant,服务-havcs.reload,调用服务
呼唤小度音箱,“小度小度,发现新设备“
5.2 手机,小度音箱app,将新设备分配到房间
控制新设备
我们的自建技能就是在“技能调试模式”下使用的。因此,到此,公网ip模式接入智能音箱就全部设置完成了。
二、花生棒ddns模式
相对于公网ip模式,花生棒直接穿透内网并且购买了它的https,这个模式就简单的很多,不需要担心智能音箱云技能访问homeassistant主机问题,只要配置好homeassistant就可以了。这里也是有坑的
1 homeassistant配置https访问
注意:不要配置homeassistant: auth_providers,和http部分,一定不要配置。购买https服务之后,他ssl访问homeassistant机制不同了,不再需要auth_providers服务了。
2 homeassistant配置智能音箱插件
1. 下载老大的智能音箱插件,并安装到HASS
老大的小度智能音箱插件:https://github.com/cnk700i/havcs
安装位置:/home/pi/.homeassistant/custom_components/havcs
2. 配置configuration.yaml
我家使用的是小度play
havcs:
platform:
- dueros # 小度
http:
注意一定要注释掉havcs.http下面的内容
3. 重新启动homeassistant,检查havcs是否成功
homeassistant中havcs已经成功部署,开发者工具——>服务——>havcs.reload,可以看到
3 外网https访问
使用花生棒+https服务,外网可以很容易做到https访问。并且内网,仍然可以用ip:8123方式访问。
4 创建并使用智能音箱技能
与公网ip访问模式下的调试方法一样
大神模式三
大神模式三,是直接在homeassistant下配置havcs插件,直接应用就可以的模式。简单、快捷,几乎没有坑。现在唯一碰到的问题就是大神的服务器或他为我们建立的服务认证可能会偶尔有故障,我们只需耐心等待他的恢复就可以了。需要建立的步骤如下
1 申请注册大神的模式三应用
申请网站:https://ai-home.ljr.im/account/
需要永久记住这四个信息:用户名、密码;Appkey, Appsecret
2 homeassistant安装插件 1. 下载老大的智能音箱插件,并安装到HASS
老大的小度智能音箱插件:https://github.com/cnk700i/havcs
安装位置:/home/pi/.homeassistant/custom_components/havcs
2. 配置configuration.yaml
我家使用的是小度play
# {HA配置目录}/configuration.yaml
havcs:
platform: # 音箱平台服务网关,至少启用一个
- dueros # 小度
skill:
sync_device: False # 是否主动上报设备状态。不设置默认False(小度音箱才有效)
# mqtt相关设置,启用http代理服务及APP技能服务才生效
setting:
app_key: your_app_key # 注册账号获取的AppKey
app_secret: your_app_secret # 注册账号获取的AppSecret
entity_key: your_entity_key # 加密entity_id的key,自定义16个字符。不设置则不加密
device_config: device_yaml_full_path # 设备配置文件路径(完整路径)。不设置默认{HA配置目录}/havcs.yaml >>*新版本加入<<
3. 重新启动homeassistant,检查havcs是否成功
homeassistant中havcs已经成功部署,开发者工具——>服务——>havcs.reload,可以看到
3 外网https访问
不再需要外网访问了
4 创建并使用智能音箱技能
不再需要和百度云打交道了。大神已经为我们做好了
5 手机APP绑定havcs技能
大神模式三,需要在手机APP中绑定havcs技能,它是直接调用技能方式实现homeassistant和智能音箱衔接的。
1. 小度关联的百度账号
2. 搜索havcs,并绑定刚刚注册的账户
a) 输入刚刚的用户名、密码
b) 实现百度账号、小度信箱、havs的绑定
使用智能音箱
前面的所有工作,都是将家里的智能音箱和homeassistant整合在了一起,但是还有一些事情没有讲
1 启用智能音箱
智能音箱需要和其平台的帐户绑定才能使用。
注意,如果没有绑定平台账户是不能使用智能的。同样,这个账户,也是使用havcs插件的帐户。如果是使用模式三,一般不需要考虑太多,在手机APP中,申请havcs技能的时候,会默认绑定APP中的音箱;如果使用havcs模式一,则技能平台登陆账户,一定是智能音箱绑定的帐户。
一个音箱只能绑定到一个账户上,而一个账户则可以绑定多个音箱。我是一个房间一个音箱,都绑定在一个帐户下,由一个homeassistant控制。
2 发现新设备
无论什么方式,都需要做如下的步骤
1. 在havcs.yaml文件中增加新设备。如果使用了“传感器组”,还要在group.yaml和configuration.yaml两个文件中进行配置
#havcs.yaml
sensor.hallway:
havcs_device_name: 客厅环境
havcs_related_sensors:
- group.hallway_sensors
switch.zhu_wo_kai_guan_deng:
havcs_device_name: 主卧灯
switch.ci_wo_kai_guan_deng:
havcs_device_name: 小卧灯
switch.yang_tai_kai_guan_deng:
havcs_device_name: 阳台灯
light.bedroom1_night_light:
havcs_devics_name: 夜灯
light.ws2812:
havcs_device_name: 彩灯
# groups.yaml
#{HA配置目录}/group.yaml,虚拟传感器关联的传感器类分组
hallway_sensors:
view: no
name: '玄关传感器列表'
control: hidden
entities: # 真实传感器列表
- sensor.hallway_temperature
- sensor.hallway_humidity
# configuration.yaml
#{HA配置目录}/configuration.yaml,虚拟传感器
sensor:
- platform: template
sensors:
hallway: # 新增虚拟传感器设备,该设备在音箱云平台展示
value_template: "玄关环境"
2. 让智能音箱可以找到新设备
homeassistant中havcs已经成功部署,开发者工具——>服务——>havcs.reload
3. 智能音箱发现新设备
呼唤智能音箱,发现新设备:
小度小度
发现新设备
4. 智能音箱APP中,分配新设备位置
我是在每个房间都配置了小度play音箱,并将每个音箱都配置了位置。比如主卧室,次卧室,厨房。将新设备分配给每个位置之后,小度音箱会接到指令之后,默认控制自己位置范围内的设备。如果要控制其他位置设备,则需要下达指令时说出位置。比如,“打开玄关灯”
5. 呼唤智能音箱控制设备
智能音箱新增设备之后,会给出该设备可使用的指令和格式。呼唤音箱,下达指令时,根据它给出的格式下达,识别度更高一些。
3 更详细的配置参照大神的设置说明
https://ljr.im/articles/plugin-smart-speaker-connected-to-home-assistant-integration-plus/
|