使用aihome插件HTTP模式将天猫精灵、小度音箱接入HA 您所在的位置:网站首页 叮咚叮咚音箱版权 使用aihome插件HTTP模式将天猫精灵、小度音箱接入HA

使用aihome插件HTTP模式将天猫精灵、小度音箱接入HA

2023-12-17 01:09| 来源: 网络整理| 查看: 265

修改日志

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配置 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"] DNS劫持phicomm m1的配置,可以参考下:  

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。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有