『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 111530|回复: 135

[进阶教程] [智能音箱] 小度音箱接入HomeAssistant 采用自带OAuth访问控制

  [复制链接]

3

主题

90

帖子

636

积分

高级会员

Rank: 4

积分
636
金钱
541
HASS币
20
发表于 2018-11-13 15:48:04 | 显示全部楼层 |阅读模式
本帖最后由 zhkufish 于 2018-11-25 12:52 编辑

首先, 感谢feversky和huex 2位大神分享的代码. 第一次写教程帖子, 大家忽略排版, 将就一下.

原理上跟天猫精灵接入是一样的, 但是小度的好处是可以自定义名称.

我目前使用的是HomeAsisstant 0.81.6的版本, 其它版本我没有测试.

一.  首先, 保证homeassistant可以外网访问,  并且支持https
授权的过程遇到了个坑, 不知道是不什么原因, 直接用ha的8123默认端口, 一直授权失败. 后来配置了nginx做转发才授权成功. 如果有人遇到同样的问题的话, 我再把nginx的配置发上来吧. 如果出现授权失败的话, 可以尝试以下方法
ps: 用群晖的朋友可以尝试42楼的方法

1.安装nginx web服务器 (约6MB)

sudo apt-get install nginx -y

2.修改nginx的配置文件

sudo nano /etc/nginx/sites-available/default
把配置修改一下. 把{}里面的内容替换为你自己的信息
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
  listen 38123;
  listen 443 ssl http2;
  ssl_certificate {你的ssl证书路径};
  ssl_certificate_key {你的私钥路径};
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 10m;
  ssl_session_cache builtin:1000 shared:SSL:10m;
  ssl_buffer_size 1400;
  add_header Strict-Transport-Security max-age=15768000;
  ssl_stapling on;
  ssl_stapling_verify on;
  server_name {你的域名};
  access_log /var/log/nginx/{你的域名}_nginx.log combined;
  error_log /var/log/nginx/{你的域名}_nginx.error.log debug;
  index index.html index.htm index.php;
  if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
  
  #error_page 404 /404.html;
  #error_page 502 /502.html;
  charset utf-8; #默认编码方式
  client_max_body_size 75M;

  # 其他的请求全部交给Python的uWSGI来处理
  location / {
      proxy_pass [url=https://127.0.0.1:8123;]https://127.0.0.1:8123;[/url]
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
  }
}

然后执行 nginx -s reload
试一下在浏览器, 输入https://{你的域名} , 看看能否访问. 注意不需要带上端口了


https证书申请, 论坛已经有很多帖子了.  下面有3个链接, 3个不同的方法. 大家看哪个合适自己吧

二. dueros后台配置

Pasted Graphic.png


三. 将dueros.py放到/config/custom_components目录下面:
https://github.com/zhkufish/homeassistant-dueros

四. configuration.yaml 文件配置
dueros:
  expire_hours: 180  #授权过期时间. 该参数不是必填

五. 一些其它配置

必须 要有friendly_name(在customize.yaml里面), 否则可能会发现不了,
关于dueros_deviceType 和 dueros_actions 相关文档, 请在dueros的接口文档里面查询https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/discovery-message_markdown
switch.light:  
    friendly_name: 客厅灯  
    dueros_hidden: true   #如果不想小度添加某个设备,可以配置该参数
    dueros_deviceType: ['LIGHT']  #自定设备类型
    dueros_actions: ['turnOn', 'turnOff'] #自定设备可执行操作

目前已经测试可用功能1. 开关指令
2. 灯的颜色, 亮度 指令
3. 小米扫地机器人, 支持调整吸力强度(标准档和强劲档)
4. 窗帘 (只支持开和关, 不支持开到指定位置)
待完善功能:1. 延时指令功能(小度支持 5分钟后关灯 指令, 但是指令到homeassistant之后, 我不知道要怎么实现, 期待有大神指点一下)
2. 传感器查询指令有问题, (目前温度, 湿度等传感器的数据还无法识别)





dueros.py.zip

5.2 KB, 下载次数: 242

插件代码

评分

参与人数 5金钱 +70 HASS币 +20 收起 理由
neroxps + 20 两个小度吃灰中,感谢大佬
咸味土豆 + 10 在下对你的景仰犹如滔滔长江之水,连绵不绝.
killadm + 10 厉害了 word 楼主!
huex + 10 大神666!
+ 20 + 20 膜拜大神!

查看全部评分

回复

使用道具 举报

1

主题

61

帖子

323

积分

中级会员

Rank: 3Rank: 3

积分
323
金钱
262
HASS币
0
发表于 2018-11-13 16:30:53 | 显示全部楼层
本想自己写,楼主就写好了,试了下授权失败   {"status":1,"msg":"access fetch error"}
回复

使用道具 举报

3

主题

90

帖子

636

积分

高级会员

Rank: 4

积分
636
金钱
541
HASS币
20
 楼主| 发表于 2018-11-13 16:39:40 | 显示全部楼层
xtjatypm 发表于 2018-11-13 16:30
本想自己写,楼主就写好了,试了下授权失败   {"status":1,"msg":"access fetch error"} ...

那看来还是需要用nginx来转发, 在路由器上的端口映射直接用443 映射到8123 能成功吗
回复

使用道具 举报

1

主题

61

帖子

323

积分

中级会员

Rank: 3Rank: 3

积分
323
金钱
262
HASS币
0
发表于 2018-11-13 16:42:41 | 显示全部楼层
我是frp转的,443转8123, 同样天猫精灵可以
回复

使用道具 举报

1

主题

61

帖子

323

积分

中级会员

Rank: 3Rank: 3

积分
323
金钱
262
HASS币
0
发表于 2018-11-13 16:45:51 | 显示全部楼层
xtjatypm 发表于 2018-11-13 16:42
我是frp转的,443转8123, 同样天猫精灵可以

授权已经可以打开hass web了,说明转发没问题的, 应该是和baidu后台通信接口的问题
回复

使用道具 举报

3

主题

90

帖子

636

积分

高级会员

Rank: 4

积分
636
金钱
541
HASS币
20
 楼主| 发表于 2018-11-13 16:57:01 | 显示全部楼层
xtjatypm 发表于 2018-11-13 16:45
授权已经可以打开hass web了,说明转发没问题的, 应该是和baidu后台通信接口的问题 ...

是的, 估计是百度那边获取accessToken的请求都没有进来, 后来打算用nginx拦截转发看下日志, 没想到居然授权成功了. , 我在百度的群里问了那个度秘了, 都没有回复我
回复

使用道具 举报

8

主题

2073

帖子

6053

积分

论坛元老

流水无味

Rank: 8Rank: 8

积分
6053
金钱
3980
HASS币
145

灌水之王

发表于 2018-11-13 17:14:38 | 显示全部楼层
先定再看,刚需啊哈哈哈
回复

使用道具 举报

4

主题

531

帖子

4001

积分

论坛元老

Rank: 8Rank: 8

积分
4001
金钱
3460
HASS币
120
发表于 2018-11-13 18:39:36 | 显示全部楼层
本帖最后由 killadm 于 2018-11-14 01:05 编辑

感谢楼主,小度在家部署成功了,除了nginx费点事外其他的都很简单



回复

使用道具 举报

9

主题

123

帖子

478

积分

中级会员

Rank: 3Rank: 3

积分
478
金钱
355
HASS币
0
发表于 2018-11-13 20:43:12 | 显示全部楼层
相关设备 是会自动同步到小度音箱控制吗?  之前天猫精灵是要人工web页面添加的
回复

使用道具 举报

7

主题

86

帖子

609

积分

高级会员

Rank: 4

积分
609
金钱
523
HASS币
0
发表于 2018-11-13 21:39:46 | 显示全部楼层
mark一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-22 00:37 , Processed in 1.231384 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表