不想起床关灯 篇四:DC1 远程控制之路 – ha 与 小爱开放平台筑桥记
小编注:此篇文章来自#原创新人#活动,成功参与活动将获得额外100金币奖励。2020年新人计划正在进行,点击查看活动详情
如前篇所述,我们这一篇开始写ha与小爱开放平台之间的交互,我大致描述一下,有什么遗漏大家再一起讨论。
前期准备
- 需要一台装有homeassistant的设备A(我的是K3路由器)
- 需要一台中转服务器S1,安装nginx,frps(frp的配置我这里不再赘述),miai.
- 在设备A安装frpc.并将ha的服务端口转发至中转服务器S1,服务器地址$s1ip
- 需要申请小爱平台开发者账号,并创建一个自定义技能
- 需要一个已备案的域名 your_domain,并申请ssl证书
- 一台小爱音响,并进入开发者模式(如果你家的宽带有外网,其实可以用小爱开放的函数计算这种方式来连接你的设备A,这样就可以省略中转服务器s1和ssl证书,有兴趣可以一起讨论一下)
数据流
将ha与小爱开放平台交互,我想到的方案是:
配置
配置 ha外网访问的网址,并将$you_domin,$s1ip换成你具体的域名或地址
#cat ha_your_domain.conf
server {
listen 80;
server_name ha.$your_domain;
location / {
proxy_pass http://$s1ip:8123/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
location /api/websocket {
#端口写的和frpc.ini中一致
proxy_pass http://$s1ip:8123/api/websocket;
proxy_read_timeout 60s;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘Upgrade’;
}
}
配置与开发者平台交互的服务网站
#cat ai_your_domain.conf
这里18123是miai的监听端口
upstream ai.$your_domain {
server 127.0.0.1:18123 fail_timeout=0;
}
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
server_name ai.$your_domain;
root /var/www/vhosts/ai;
access_log /var/www/vhosts/ai/access_log main;
error_log /var/www/vhosts/ai/error.log;
ssl_certificate /etc/ssl/ai/1_$your_domain _bundle.crt;
ssl_certificate_key /etc/ssl/ai/2_$your_domain .key;
client_max_body_size 4G;
keepalive_timeout 600;
# send all requests to the
/validate
endpoint for authorization# auth_request /validate;
error_page 401 = @error401;
location @error401 {
return 302 https://ai.$your_domain/;
}
location / {
# forward authorized requests to your service protectedapp.yourdomain.com
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:18123;
}
if ($scheme != “https”) {
return 301 https://$host$request_uri;
}
location ~ /.well-known {
allow all;
}
}
安装miai. 我在github @liyumeng 的项目地址的基础上,融合另外一个项目@killingjacky xiaoai_hass_bridge 与ha的交互。修改了HA的交互方法,大家可以直接clone我修改好的项目,欢迎大家fork,或者star我
#git clone https://github.com/j1111011/MiAI.git
#cd MiAI
修改配置文件,先在HA界面生成一个长效访问令牌,
修改mi_config.py,将ha的 端口、地址、技能名称、以及支持的操作、还有长效访问令牌修改成你对应的。
vi swagger_server/controllers/mi_config.py
运行miai
python3 runserver.py
在小爱开放平台创建技能
我mi_config里配置的是“妈妈”,并将地址填入相应问题,如下图:
让小爱音响进入开发者模式
进入开发者模式之后,现在你可以对小爱说,进入妈妈 (这是进入了技能,小爱比较坑,要通过唤醒词进入技能,也可以配置NLP。)。然后打开灯。至此我DC1对应的开关就通电了。
mi_config 支持多种操作,以及多个目标,包括只读的,还有开关,大家有兴趣的可以一起研究一下。至此,我睡觉就不用起来关灯了。
结语
“小爱同学~“
“我在~”
“让妈妈关闭灯”