本帖最后由 ganguotu 于 2024-8-9 23:47 编辑
说到homeassistant和小度智能家居平台的联动,论坛里的很多小伙伴会提到“接入”、“反向接入”的字眼,实际上实现的效果大多是:通过小度音箱来语音控制 HA里的设备。
今天我来分享一个从HA发送语音命令,来控制小度智能音箱的方法(单指能连接wifi的小度智能音箱,蓝牙音箱未测试)。
首先安利一下小度家的智能音箱,作为小度智能平台的入口,它可以:
一、语音控制接入小度平台的众多第三方智能家居平台的设备
二、语音调用接入小度平台的众多媒体资源,播放流媒体音乐,带屏音箱可以语音操控看视频、看电视、换台
三、作为日常生活助手,日程管理、播报天气和新闻咨询
特别是小度带屏智能音箱的媒体控制能力,国内智能音箱无出其右,只要HA能操控小度智能音箱,就能尽情使用这些资源。
而接入HA平台,大家主要使用的也就是第一个功能,小度自己家的设备很少,但是它云云对接的智能家居平台是真的多。
我想三大运营商,也就是考虑到小度平台的这些优势,才会在宽带领域,纷纷和小度联合,推出超多数量的带屏智能音箱吧。
也正由于小度和三大运营商合作推出的大量智能音箱,现在二手平台的小度带屏智能音箱运营商版本,已经到了极低门槛,喜欢折腾的同学可以刷刷看。
下面直接开始操作:
一、获取控制参数。
1. 登录:首先要登录小度智能家居平台的网页版:
https://xiaodu.baidu.com/saiya/smarthome/index.html
2. 访问:按照提示扫码登录,登录绑定你小度音响的百度账号,接着浏览器访问
https://xiaodu.baidu.com/saiya/device/list
3. 获取参数:可以获取该账号下所有的的小度智能音箱终端信息,得到要控制的音箱的两个关键信息:client_id 和 cuid
获取智能音箱的两个关键信息
4. 获取cookie:f12打开开发者选项,到网络选项,刷新当前页面,可以得到cookie:bduss=xxxxx(很长的字符,都要复制下来)
获取Cookie
5. 发送控制请求:至此,得到了3个控制参数,可以发送post命令来控制你的小度智能音箱啦,试一下你的音箱能不能回应吧
(
记得修改对应的headers,其中,
client_id: client_id
dueros-device-id: cuid
):
curl --location --request POST 'https://dueros-h2.baidu.com/dlp/controller/send_to_server' \
--header 'client_id: 32位client_id' \
--header 'dueros-device-id: 16位cuid' \
--header 'content-type: application/json; charset=UTF-8' \
--header 'Cookie: BDUSS=yourbdussAAAAAAAAAAAAAAAAAAAAAABDUSSTEST' \
--data-raw '{
"to_server": {
"header": {
"dialogRequestId": "",
"messageId": "",
"name": "LinkClicked",
"namespace": "dlp.screen"
},
"payload": {
"initiator": {
"type": "USER_CLICK"
},
"token": "",
"url": "dueros://server.dueros.ai/query?q=几点了"
}
},
"uuid": ""
}'
6. 控制原理:来源见: https://mp.weixin.qq.com/s/0D4X6oL60vv7oiJvJiorkg
感谢该作者的贡献!但是注意了,新的小度APP好像已经换了websocket并且加密了,因为我已经抓不到这个接口了,也就是说这个接口,说不定哪一天就会被ban掉,且用且珍惜。
二、使用homeassistant控制小度音箱的详细设置:
1. configuration.yaml 添加:
rest_command:
xiaodu_command:
url: "https://dueros-h2.baidu.com/dlp/controller/send_to_server"
method: post
content_type: "application/json; charset=UTF-8"
headers:
client_id: your-client-id-here
dueros-device-id: your-cuid-here
Cookie: BDUSS=your-BDUSS-here
payload: '{"to_server": {
"header": {"dialogRequestId": "","messageId": "","name": "LinkClicked","namespace": "dlp.screen"},
"payload": {"initiator": {"type": "USER_CLICK"},"token": "",
"url": "dueros://server.dueros.ai/query?q={{ text|default("几点了") }}"}},"uuid": ""}'
input_text:
xiaodu_command_text :
name: 发给小度命令
initial: ''
2. automations.yaml 添加:
- id: '1234426292007'
alias: "发送小度命令"
trigger:
- platform: state
entity_id: input_text.xiaodu_command_text
not_to: ''
condition:
- condition: template
value_template: '{{ states(''input_text.xiaodu_command_text'') | trim | length > 0 }}'
action:
- service: rest_command.xiaodu_command
data:
text: '{{ states(''input_text.xiaodu_command_text'') | trim }}'
- service: input_text.set_value
target:
entity_id: input_text.xiaodu_command_text
data:
value: ''
mode: single
3. 添加实体卡片 输入文本命令 或 直接调用服务:
service: input_text.set_value
target:
entity_id: input_text.xiaodu_command_text
data:
value: 播放炸雷
完毕,可以尽情使用了,欢迎讨论反馈。
|