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

 找回密码
 立即注册
查看: 46220|回复: 31

[经验分享] 使用aihome插件HTTP模式将天猫精灵、小度音箱接入HA

  [复制链接]

9

主题

251

帖子

4380

积分

元老级技术达人

积分
4380
金钱
4114
HASS币
100
发表于 2019-5-5 15:33:00 | 显示全部楼层 |阅读模式
本帖最后由 xz0609 于 2019-6-29 07:52 编辑

修改日志

2019-05-06 cnk700i大佬更新插件了,重构逻辑,优化配置项,修复模式一token失效bug了,完美!大佬辛苦了!
2019-05-07 增加查询传感器代码。
2019-05-11 更新配置代码。之前base_url域名后面没加端口从而导致音箱平台授权失败。
2019-05-26 增加NGINX反代配置。
2019-06-04 叮咚mini2音箱接入HA

前言

aihome插件整合了天猫精灵和小度音箱2大平台,很不错,值得推荐!不过刚开始配置的时候有点蒙圈,配置有些复杂。

只用插件的模式一测试过(HA版本:0.92.2),其他2个模式没用过,不太清楚。

模式一有点难度,不会弄或者不想折腾可以用插件作者的模式三。

这里要感谢插件作者cnk700i的分享及帮助。


以下是作者的链接:

本论坛插件贴子

博客站插件说明

github插件下载

使用前提

1.要有公网IP和域名

2.音响平台的开发者账号(可以自己去申请)

天猫精灵

小度音箱

叮咚音箱作者说由于小京鱼平台在配置服务端点的客户端ID不能填写https://这几个字符,所以就我放弃了。
叮咚音箱接入请跳转到叮咚mini2音箱接入HA

HA平台配置

先去https://github.com/cnk700i/aihome下载插件
把aihome放到custom_components目录下。

没域名可以去阿里云买1个top域名再申请免费证书,也不贵,5年100+块钱吧。

不想花钱的话,可以用动态域名,hassio插件库内有Duck DNS插件能自动更新IP和签证书。

把下载好的域名证书放到/ssl目录下。

PS:HA平台开启ssl配置在使用百度tts插件的时候会无法使用,所以放弃使用了。还是推荐使用NGINX反代来配置https

  • 方法1,NGINX反代配置(推荐)

    • 1.configuration.yaml 文件配置
#注释掉base_url、ssl_certificate、ssl_key这三项。
http:
  #base_url: https://你的域名:你的端口
  #ssl_certificate: /ssl/你的域名证书certificate
  #ssl_key: /ssl/你的域名证书key

aihome:
  # 启用音箱平台,至少启用一个
  platform:
    - aligenie                            # 天猫精灵
    - dueros                              # 小度
    - jdwhale                             # 叮咚
  # 启用模式一
  http:
    expire_in_hours: 87600                 # token超时时间,单位小时,不设置则默认24h

PS:expire_in_hours是token超时时间,可以自己自行设置,我设置的是87600小时=10年(跟HA长效令牌时间一样)

  • 2.NGINX Home Assistant SSL proxy配置

1.去官方插件库里安装NGINX Home Assistant SSL proxy,
Hass.io —> ADD-ON STORE —> NGINX Home Assistant SSL proxy

2.修改domain、certfile、keyfile这3项的值。

{
  "domain": "你的域名",
  "certfile": "你域名cert文件",
  "keyfile": "你域名key文件",
  "hsts": "max-age=31536000; includeSubDomains",
  "customize": {
    "active": false,
    "default": "nginx_proxy_default*.conf",
    "servers": "nginx_proxy/*.conf"
  }
}

3.修改保存好后,开启插件。

  • 方法2,HA平台开启ssl配置

configuration.yaml 文件配置

#注释掉base_url、ssl_certificate、ssl_key这三项。
http:
  base_url: https://你的域名:你的端口                   #默认端口8123
  ssl_certificate: /ssl/你的域名证书certificate
  ssl_key: /ssl/你的域名证书key

aihome:
  # 启用音箱平台,至少启用一个
  platform:
    - aligenie                            # 天猫精灵
    - dueros                              # 小度
    - jdwhale                             # 叮咚
  # 启用模式一
  http:
    expire_in_hours: 8760                 # token超时时间,单位小时,不设置则默认24h
  • 开启logger调试模式(可选)
logger:
  default: info
  logs:
    custom_components.aihome: debug

说明:遇到授权问题或者出错的时候开启;排除错误后,注释掉logs:跟custom_components.aihome: debug这2行就可以了,免得log日志文件变大。


PS1: expire_in_hours目前有bug:设置不生效,授权后还是只有默认的1800秒,已经联系作者了,暂时还没修复,后面有个曲线救国方法(注1)。 bug已修复,注1留给有需要的人。

PS2:这里有个坑,之前用社区插件库里的nginx-proxy-manager反向代理插件,http转https,天猫精灵的请求有数据,小度的请求没数据,后来再HA里配置好证书后才有。如果是nginx或者HA的配置问题,也请分享告知一下。

音箱平台配置

aihome插件配置跟F大的aligenie和Z大的dueros稍有不同

天猫精灵平台配置大致可以参考feversky大佬的帖子,传送门

下面是我的天猫精灵平台配置,参考下:

账户授权连接:https://你的域名:你的端口/auth/authorize
Client ID:https://open.bot.tmall.com
Client Secret:随便填
跳转 URL:https://open.bot.tmall.com/oauth/callback
Access Token URL:https://你的域名:你的端口/aihome_auth
开发者网关地址:https://你的域名:你的端口/aihome_service

小度音箱平台配置大致可以参考zhkufish大佬的帖子,传送门

下面是我的小度音箱平台配置,参考下:

response_type:code
*授权地址:https://你的域名:你的端口/auth/authorize
*Client_Id:https://xiaodu.baidu.com
Scope:为空,什么都不用填。
*Token地址:https://你的域名:你的端口/aihome_auth
*请求方式:POST
*ClientSecret:随便填
*WebService:https://你的域名:你的端口/aihome_service

customize配置

    1. packages/master_bedroom_lihgt.yaml下主卧灯的配置,可以参考下:
homeassistant:
  customize:
    light.master_bedroom_pendant_light:
      friendly_name: "主卧吊灯"
      aihome_device: True
      aligenie_deviceName: 吊灯
      aligenie_zone: 主卧
      aligenie_deviceType: light
      aligenie_actions: ["TurnOn", "TurnOff"]
      dueros_deviceType: 'LIGHT'
      dueros_actions: ['turnOn', 'turnOff']
    light.master_bedroom_down_light:
      friendly_name: "主卧筒灯"
      aihome_device: True
      aligenie_deviceName: 筒灯
      aligenie_zone: 主卧
      aligenie_deviceType: light
      aligenie_actions: ["TurnOn", "TurnOff"]
      dueros_deviceType: 'LIGHT'
      dueros_actions: ['turnOn', 'turnOff']
    1. packages/living_room_cover.yaml下客厅窗帘的配置,可以参考下:
homeassistant:
  customize:
    cover.living_room_cover:
      friendly_name: "客厅窗帘"
      aihome_device: True
      aligenie_deviceName: 窗帘
      aligenie_zone: 客厅
      aligenie_deviceType: curtain
      aligenie_actions: ["TurnOn", "TurnOff"]
      dueros_deviceType: 'CURTAIN'
      dueros_actions: ["turnOn", "timingTurnOn", "turnOff", "timingTurnOff", "pause"]

packages/phicomm_m1.yaml

homeassistant:
  customize:
    sensor.m1_temperature:
      friendly_name: "温度"
      aihome_sensor: True     # 上报传感器数据
    sensor.m1_humidity:
      friendly_name: "湿度"
      aihome_sensor: True     # 上报传感器数据
    sensor.m1_hcho:
      friendly_name: "甲醛"
    sensor.m1_pm2_5:
      friendly_name: "pm2.5"

    sensor.m12_temperature:
      friendly_name: "温度"
      aihome_sensor: True     # 上报传感器数据
    sensor.m12_humidity:
      friendly_name: "湿度"
      aihome_sensor: True     # 上报传感器数据
    sensor.m12_hcho:
      friendly_name: "甲醛"
    sensor.m12_pm2_5:
      friendly_name: "pm2.5"

sensor:
  - platform: aircat
    name: m1
    mac: {'你的客厅M1_MAC地址':'livingroom_m1_brightness', '你的主卧M1_MAC地址':'masterbedroom_m1_brightness'}
    brightness_force_update: True

input_select:
  livingroom_m1_brightness:
    name: 亮度
    options:
      - 关闭
      - 夜间
      - 白天
  masterbedroom_m1_brightness:
    name: 亮度
    options:
      - 关闭
      - 夜间
      - 白天

packages/aihome_phicomm_m1.yaml

homeassistant:
  customize:
    sensor.livingroom_virtual_sensors:
      friendly_name: "客厅传感器"
      aihome_device: True
      aihome_sensor_group: group.livingroom_sensors
      aligenie_zone: 客厅 
      aligenie_deviceName: 传感器
      aligenie_deviceType: sensor # 可自动识别,可省略
      aligenie_actions: ['Query', 'QueryTemperature', 'QueryHumidity'] # 只测试查询温度、湿度
      dueros_deviceType: AIR_MONITOR # 无传感器类别,默认为空气监测器类设备,可省略
      dueros_actions: ["getTemperatureReading", "getHumidity"] # 只测试查询温度、湿度
    sensor.masterbedroom_virtual_sensors:
      aihome_device: True
      friendly_name: "主卧传感器"
      aihome_sensor_group: group.master_bedroom_sensors
      aligenie_zone: 主卧 
      aligenie_deviceName: 传感器
      aligenie_deviceType: sensor # 可自动识别,可省略
      aligenie_actions: ['Query', 'QueryTemperature', 'QueryHumidity'] # 只测试查询温度、湿度
      dueros_deviceType: AIR_MONITOR # 无传感器类别,默认为空气监测器类设备,可省略
      dueros_actions: ["getTemperatureReading", "getHumidity"] # 只测试查询温度、湿度

#音箱云平台使用
group:
  livingroom_sensors:
    name: '客厅传感器列表'
    view: no
    control: hidden
    entities:
      - sensor.m1_temperature
      - sensor.m1_humidity
  master_bedroom_sensors:
    name: '主卧传感器列表'
    view: no
    control: hidden
    entities:
      - sensor.m12_temperature
      - sensor.m12_humidity

sensor:
  - platform: template
    sensors:
      livingroom_virtual_sensors: # 新增虚拟传感器设备,该设备在音箱云平台展示
        value_template: "客厅传感器"
      masterbedroom_virtual_sensors: # 新增虚拟传感器设备,该设备在音箱云平台展示
        value_template: "主卧传感器"
  • 其他的请自己去作者的博客查看吧。

音箱测试

天猫精灵:到音箱平台的技能管理->测试验证,打开真机测试,点下面那个账户配置,就会跳转到你HA平台登陆界面,登陆后会自动发现设备(前提是HA平台自定义设置customize已经配置好)。

小度音箱:到音箱平台的配置服务,按需配置好后,先点 授权 会弹出你HA平台登陆界面,
登陆后会到音箱平台的测试验证->真机测试,打开最右边的技能调试模式。
下面那个模拟测试再点下面那个模拟测试,输入 发现设备 ,右边的响应里会有response返回(查看home-assistant.log也可以)。 或者对着小度音箱说:小度小度,发现设备。能发现设备,基本上就可以正常能用语音控制HA里配置了的设备了。

测试一下:

  • 1.对着音箱说:天猫精灵/小度小度,打开主卧筒灯。
  • 2.对着音箱说:天猫精灵/小度小度,关闭客厅窗帘。
  • 3.对着音箱说:天猫精灵/小度小度,查询客厅传感器温度/查询客厅传感器湿度。PS:一次只能查询一个状态。

注1

这里的改动有风险,不喜勿看。

我是在docker下安装的HA。

# 1.先进入docker下homeassistant容器里
docker exec -it homeassistant /bin/bash 

# 2.切换到homeassistant/auth/目录下
cd /usr/local/lib/python3.7/site-packages/homeassistant/auth/

# 3.备份const.py文件,以防乱删。
cp const.py const.py.bak

# 4.修改const.py文件,vi操作命令,请自行百度。
vi const.py
# 5.修改token,把默认的30分钟改成5256000,5256000分钟=10年。时间长短自己填吧。

"""Constants for the auth module."""
from datetime import timedelta

ACCESS_TOKEN_EXPIRATION = timedelta(minutes=30)
MFA_SESSION_EXPIRATION = timedelta(minutes=5)

GROUP_ID_ADMIN = 'system-admin'
GROUP_ID_USER = 'system-users'
GROUP_ID_READ_ONLY = 'system-read-only'

改为:

"""Constants for the auth module."""
from datetime import timedelta

ACCESS_TOKEN_EXPIRATION = timedelta(minutes=5256000)
MFA_SESSION_EXPIRATION = timedelta(minutes=5)

GROUP_ID_ADMIN = 'system-admin'
GROUP_ID_USER = 'system-users'
GROUP_ID_READ_ONLY = 'system-read-only'

# 6.查看是否修改成功
cat const.py

# 7.退出
exit

最后重启homeassistant,到音箱平台上重新授权获取token。




评分

参与人数 2金钱 +40 HASS币 +10 收起 理由
xieahui + 20 最后小度还是上了HTTPS
+ 20 + 10 舒服的排版,楼主辛苦了!

查看全部评分

E5-2650L-V2+华南X79+16GB*2
回复

使用道具 举报

8

主题

2073

帖子

6053

积分

论坛元老

流水无味

Rank: 8Rank: 8

积分
6053
金钱
3980
HASS币
145

灌水之王

发表于 2019-5-5 17:32:23 | 显示全部楼层
感谢分享,  !上次关注过
回复

使用道具 举报

9

主题

251

帖子

4380

积分

元老级技术达人

积分
4380
金钱
4114
HASS币
100
 楼主| 发表于 2019-5-5 18:12:25 | 显示全部楼层
xieahui 发表于 2019-5-5 17:32
感谢分享,  !上次关注过

感谢回复!
https用nginx反代坑了我好几天。
现在可以用了,就可以折腾其他东西了。
E5-2650L-V2+华南X79+16GB*2
回复

使用道具 举报

9

主题

251

帖子

4380

积分

元老级技术达人

积分
4380
金钱
4114
HASS币
100
 楼主| 发表于 2019-5-6 23:34:46 | 显示全部楼层
5月6号插件更新了,请到作者github下载新插件,修复了expire_in_hours不生效的bug,另外配置项优化了,配置更简单!
E5-2650L-V2+华南X79+16GB*2
回复

使用道具 举报

0

主题

16

帖子

230

积分

中级会员

Rank: 3Rank: 3

积分
230
金钱
214
HASS币
0
发表于 2019-5-30 09:49:45 | 显示全部楼层
楼主,阿里那里,技能审核你是怎么解决的?我这审核失败。。。。
回复

使用道具 举报

9

主题

251

帖子

4380

积分

元老级技术达人

积分
4380
金钱
4114
HASS币
100
 楼主| 发表于 2019-5-30 13:14:25 | 显示全部楼层
zobinqy 发表于 2019-5-30 09:49
楼主,阿里那里,技能审核你是怎么解决的?我这审核失败。。。。

不记得了,好像随便填了下资料,申请个人开发者,过几天就成功了。
E5-2650L-V2+华南X79+16GB*2
回复

使用道具 举报

0

主题

16

帖子

230

积分

中级会员

Rank: 3Rank: 3

积分
230
金钱
214
HASS币
0
发表于 2019-5-30 15:48:04 | 显示全部楼层
xz0609 发表于 2019-5-30 13:14
不记得了,好像随便填了下资料,申请个人开发者,过几天就成功了。

好吧,我再试一下
回复

使用道具 举报

175

主题

2967

帖子

7606

积分

超级版主

我就是六神

Rank: 8Rank: 8

积分
7606
金钱
4614
HASS币
398

活跃会员教程狂人灌水之王

QQ
发表于 2019-6-5 05:31:26 来自手机 | 显示全部楼层
不需要审核啊
回复

使用道具 举报

4

主题

58

帖子

227

积分

论坛积极会员

积分
227
金钱
169
HASS币
0
发表于 2019-7-4 04:23:01 来自手机 | 显示全部楼层
终于有详细的了
回复

使用道具 举报

12

主题

262

帖子

1386

积分

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1124
HASS币
0
发表于 2019-7-4 10:51:12 | 显示全部楼层
很详细,感谢
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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