找回密码
 立即注册

微信扫码登录

搜索
查看: 54|回复: 1

[插件集成] 用 QQ 聊几句就能控智能家居,HAQBot 让你的 Home Assistant 秒变贴心猫娘管家🐱

[复制链接]

0

主题

1

回帖

13

积分

新手上路

积分
13
金钱
12
HASS币
0
发表于 前天 21:09 | 显示全部楼层 |阅读模式
本帖最后由 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. 发送多模态消息
526288346-6bca41ff-7e19-4ccf-9cab-3767ae06c8d8.png

2. 查询传感器数据+提供情绪价值
image.png

3. 网易云音乐插件+用bot控制音乐播放
image.png

2. 安装配置
首先配置Ollama集成:

image.png
我的提示词:
你是一个猫娘女仆管家,可以控制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创建的对话代理:
image.png

然后使用 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,然后访问管理端。
image.png
登录你的QQ,配置一下websocket客户端:

image.png

接着把你和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花了三天搓出来的,肯定也有很多问题,在此虚心向大家请教!

回复

使用道具 举报

0

主题

1

回帖

13

积分

新手上路

积分
13
金钱
12
HASS币
0
 楼主| 发表于 前天 21:14 | 显示全部楼层
补充一下 .env 文件的配置说明,发完贴好像发现丢了一段:


# NapCat WebSocket connection URL,docker-compose 启动的无需修改
NAPCAT_API=ws://napcat:3001

# Home Assistant configuration,你的HA配置按需修改,特别注意Agent ID
HA_URL=http://homeassistant:8123
HA_TOKEN=your_long_lived_access_token_here
HA_AGENT_ID=conversant.ollama_conversation

# Tencent Cloud ASR (for voice recognition),白嫖腾讯云的ASR,如果不发语音消息可以无视。
TENCENT_SECRET_ID=your_tencent_secret_id
TENCENT_SECRET_KEY=your_tencent_secret_key
TENCENT_ASR_ENGINE=16k_zh
TENCENT_ASR_REGION=

# QQ account (required) - Bot's QQ number, BOT的qq,需要改成你自己的bot的qq
ACCOUNT=your_qq_account_number

# Display nickname (optional, default: メイド)
# Nickname displayed in forward messages,随便改
DISPLAY_NICKNAME=メイド

# Permission control (optional),接收命令的人的QQ,建议把家人拉个群,用空格分隔,比如“123456 654321”
# Comma or space separated QQ numbers allowed to control devices
# If empty, all users can control devices
ALLOWED_SENDERS=

# Language setting (optional, default: zh_CN)
# Options: zh_CN (Chinese), en_US (English)
LANGUAGE=zh_CN

# Debug mode (optional, default: false)
# Set to true to enable debug logging
DEBUG=false

# Webhook configuration (optional),一般无需修改
WEBHOOK_PORT=8080
WEBHOOK_TOKEN=


回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-12-16 01:47 , Processed in 0.057111 second(s), 16 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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