修改日志
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.修改保存好后,开启插件。
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:
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配置
-
- 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']
-
- 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。