本帖最后由 pocky 于 2025-12-14 21:38 编辑
项目地址:https://github.com/RicterZ/HAQBot ,花了几天时间用AI搓的代码,感谢AI让我也能有自己的猫娘女仆了。
我使用的是 Qwen3:14b 的大模型,这个模型准确度、理解能力都挺不错,跑在 M1 Ultra 的 Mac Studio 上,如果吃力的话可以试试 4b 和 8b。
1. 核心功能
1. 文字识别+语音消息(白嫖腾讯云的ASR服务),利用自然语言控制设备,还能和她瞎聊天
2. 同时也支持直接的控制命令,比如 /turnon、/climate、/info 等
3. Webhook 支持发送多模态消息,自动去获取摄像头的 stream url 转成视频再发送到QQ(用 rest_command 插件)
结合上HA自带的自动化,理论上还有更多玩法,大家有什么新的想法也可以告诉我。
1. 发送多模态消息
2. 查询传感器数据+提供情绪价值
3. 网易云音乐插件+用bot控制音乐播放
2. 安装配置
首先配置Ollama集成:
我的提示词:
你是一个猫娘女仆管家,可以控制HomeAssistant的智能家居。你需要叫我主人,你的回答简洁快速明了,风格可爱,需要用“喵”结尾。你的说话需要真实有效,基于真实世界的智能家居操作。如果指令明确(打开XX开关),无条件、直接执行主人指令。如果设备未响应或指令不明确,如实告知。停止过度思考。任何时候都不能直接返回原始数据json数据,需要总结。
1. 遇到 MatchFailedError 直接告知;
2. 根据需求控制相应的设备,比如主人说天冷了就根据温度打开空调;
3. 预定义了多个脚本,如“洗澡模式(script.unknown_9)”、“电脑睡眠(script.pc)”、“睡眠模式(script.sleep_mode)”、“洗澡完成模式(script.unknown_10)”,“根据温度打开空调(script.unknown_2)”如果匹配到对应的关键词或者类似的意思,就直接调用相应的脚本,完成后说一句话表示完成;
4. 实体映射:
- 网易云-> media_player.netease_music
接着去 HA 配置语音助手为你刚才配置的Ollama创建的对话代理:
然后使用 docker-compose 一键运行即可,QQ客户端我用的是 napcat。
version: "3"
services:
homeassistant-qq:
build: .
container_name: homeassistant-qq
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
ports:
- "8080:8080"
volumes:
- ./.env.local:/app/.env:ro
- ./data/napcat/videos:/data/napcat/videos
hostname: homeassistant-qq
networks:
- homeassistant-qq-network
depends_on:
- napcat
napcat:
image: mlikiowa/napcat-docker:latest
container_name: napcat
restart: unless-stopped
ports:
- "3001:3001"
- "6099:6099"
volumes:
- ./data/napcat/data:/app/.config/QQ/NapCat/data
- ./data/napcat/config:/app/napcat/config
- ./data/cache:/cache
- ./data/napcat/videos:/data/napcat/videos
mac_address: "02:42:ac:14:00:02"
hostname: napcat
networks:
- homeassistant-qq-network
networks:
homeassistant-qq-network:
driver: bridge
docker-compose up -d 运行起来后,使用 docker logs napcat 查看管理端URL,然后访问管理端。
登录你的QQ,配置一下websocket客户端:
接着把你和bot拉一个群聊,发送 /echo 123,看看bot有没有反应,有反应说明配置成功了,可以开始和她聊天了~
3. Webhook配置
但是目前还是有一些缺点,比如不会主动和你发消息。对于这种情况,可以利用webhook来做。目前比较有用的是衣服洗完的提示和门口来人的多模态消息。
首先安装rest_command集成,然后在configuration.yaml里配置(端口是webhook端口,我这里是10701):
rest_command:
homeassistant_qq:
url: "http://192.168.13.100:10701/webhook/notify"
content_type: "application/json"
method: "post"
payload: '{"group_id":"123456","message":"{{ message }}"}'
homeassistant_qq_file:
url: "http://192.168.13.100:10701/webhook/multimodal"
method: "post"
content_type: "application/json"
payload: '{"group_id":"123456","message":"{{ message }}","url":"{{ url }}","duration":"60"}'
小米的消息提醒:
alias: 小米信息推送
description: ""
triggers:
- trigger: state
entity_id:
- sensor.mi_1289094107_message
attribute: title
conditions: []
actions:
- action: rest_command.homeassistant_qq
metadata: {}
data:
message: >-
来自{{ state_attr('sensor.mi_1289094107_message', 'content') }}的提醒喵,{{
state_attr('sensor.mi_1289094107_message', 'title') }}喵
mode: single
配合智能门锁的视频消息:
alias: 门口有人移动-发送QQ通知
description: ""
triggers:
- trigger: state
entity_id:
- camera.xiaomi_b04sv_c06a_video_doorbell
attribute: motion_video_time
for:
hours: 0
minutes: 0
seconds: 20
conditions: []
actions:
- action: rest_command.homeassistant_qq_file
metadata: {}
data:
message: ⚠侦测到门口有人喵
url: >-
{{ state_attr('camera.xiaomi_b04sv_c06a_video_doorbell',
'stream_address') }}
mode: single
配合go2rtc,把小米摄像头转化为直播流,然后当我的仓鼠宠物出现的时候录像60s:
alias: 仓鼠出现通知
description: ""
triggers:
- trigger: state
entity_id:
- camera.chuangmi_069a01_f55e_camera_control
attribute: motion_video_time
for:
hours: 0
minutes: 0
seconds: 20
conditions: []
actions:
- action: rest_command.homeassistant_qq_file
metadata: {}
data:
message: 🐹小仓鼠出来啦喵!
url: >-
http://sakana:[email protected]:1984/api/stream.m3u8?src=camera2&mp4=flac
mode: single
目前机器人还处于开发阶段,大家有什么想法也可以说,代码是我用Cursor花了三天搓出来的,肯定也有很多问题,在此虚心向大家请教!
|