使用aihome插件HTTP模式将天猫精灵、小度音箱接入HA | 您所在的位置:网站首页 › 叮咚叮咚音箱版权 › 使用aihome插件HTTP模式将天猫精灵、小度音箱接入HA |
修改日志
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超时时间,单位小时,不设置则默认24hPS: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 实验室设备网 版权所有 |