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

 找回密码
 立即注册
查看: 4773|回复: 7

[智能音箱] 小爱最好的拦截器-而且开源

[复制链接]

1

主题

24

帖子

762

积分

高级会员

Rank: 4

积分
762
金钱
738
HASS币
0
发表于 2023-5-18 20:35:20 | 显示全部楼层 |阅读模式
本帖最后由 haodadajipai 于 2023-5-18 20:41 编辑

https://github.com/LGinC/xiaoai

论坛大佬一直不开源,于是提需求让群友给写了一个。

注意
仅使用于已破解的小爱音箱,系统版本1.72可以使用,理论上其他版本也可以,只要开放了ssh

使用方法
我系统的可读写分区是在/data, 启动后自动执行的脚本是/data/init.sh 因此是将可执行程序xiaoai通过ssh拷贝到/data目录下,然后在init.sh中加入 /data/xiaoai > /dev/null 2>&1 &

完整的init.sh内容如下

#!/bin/ash

/data/xiaoai > /dev/null 2>&1 &
同时将config.yaml也拷贝和xiaoxi同一目录下,即/data/config.yaml

config.yaml配置解析
配置项 说明
port web服务监听的端口,web服务会提供/tts和/music/play两个api
instructions 指令集合
match_type 匹配类型,可选值有All 全匹配, Regex 正则表达式 默认为All,如为默认值则可不加此配置项
content 指令内容,如果是全匹配则要求语音识别内容和指令内容一致,正则表达式则为匹配有值则算通过
command_type 命令类型,可选值有Shell和Wol,Shell则表示会将command通过ash执行,Wol则是发送wol数据包,command里填写目标机器的MAC
command 命令内容,支持content通过正则匹配到的内容作为command的参数
result_exec_type 结果执行方式,默认为TTS,文本转语音, 可选值为Music,即将result的内容作为播放音乐的url传入
result 如果是$开头则表示是通过json path从command的执行结果中提取指定的值,这就要求command的执行结果要是json



config.yaml示例

port: 8082
instructions:
  - content: 打开PC
    command_type: Wol
    command: 3A:7C:3F5:1E:8B
    result: 好的

  - content: 关闭PC
    command: curl --insecure -connect-timeout 2 -m 4 -s http://192.168.1.100:30000?pass=sdfscs
    result: 已关闭

  - match_type: Regex
    content: 播放(.*)的歌$
    command: curl --get --data-urlencode "keyword={p0}" –connect-timeout 2  http://192.168.2.102:3030/music # {p0}表示匹配到的第一个替换到这里,{p1} {p2}以此类推
    result: $.url # $开头表示用json path获取值,需要command返回结果为json
    result_exec_type: Music

  - content: 重启
    command: reboot


原理
通过每隔1s读取/tmp/mico_aivs_lab/instruction.log文件,看文件里是否有语音识别结果
如果有则先执行ubus call mediaplayer player_play_operation  "{\"action\":\"pause\"}"让小爱闭嘴
把识别结果和配置文件中的指令进行匹配,匹配成功则执行对应的命令
web api
POST /tts {"text": ""}
text的值就是小爱会说的话

POST /music/play {"url": ""}
url就是小爱要放的音乐的url

评分

参与人数 4金钱 +56 收起 理由
sorrypqa + 10 论坛有你更精彩!
windgo + 16 感谢楼主分享!
+ 20 分是加给这位群友的~~
aiqienanguatou + 10 感谢楼主分享!有什么玩法么

查看全部评分

回复

使用道具 举报

3

主题

164

帖子

1544

积分

金牌会员

Rank: 6Rank: 6

积分
1544
金钱
1380
HASS币
10
发表于 2023-5-18 21:26:09 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

175

主题

2967

帖子

7606

积分

超级版主

我就是六神

Rank: 8Rank: 8

积分
7606
金钱
4614
HASS币
398

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

QQ
发表于 2023-5-23 22:04:45 | 显示全部楼层
违主动了
回复

使用道具 举报

8

主题

870

帖子

5218

积分

论坛元老

Rank: 8Rank: 8

积分
5218
金钱
4348
HASS币
0
发表于 2023-5-24 18:12:27 | 显示全部楼层
谢谢分享。赞
回复

使用道具 举报

1

主题

23

帖子

782

积分

高级会员

Rank: 4

积分
782
金钱
759
HASS币
10
发表于 2023-5-30 22:25:43 | 显示全部楼层
会写rust,太牛了。
回复

使用道具 举报

1

主题

5

帖子

30

积分

新手上路

Rank: 1

积分
30
金钱
25
HASS币
0
发表于 2023-6-1 20:07:27 | 显示全部楼层
不能联网的不能用这个修复吧
回复

使用道具 举报

25

主题

640

帖子

2913

积分

金牌会员

Rank: 6Rank: 6

积分
2913
金钱
2263
HASS币
40
发表于 2023-6-10 23:06:40 | 显示全部楼层
这个有办法把给小爱的指令发送到HA或Node Red吗
回复

使用道具 举报

1

主题

41

帖子

476

积分

中级会员

Rank: 3Rank: 3

积分
476
金钱
435
HASS币
0
发表于 2023-12-2 11:13:04 | 显示全部楼层
能给个编译好了的文件吗,谢谢
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-26 08:56 , Processed in 0.068678 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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