发帖
8 1 0

【AiPi-PalChatV1语音开发板】Home Assistant 语音助手

无垠的广袤
论坛元老

41

主题

73

回帖

4856

积分

论坛元老

积分
4856
QQ
小安AI 428 8 2025-8-8 21:49:16
[i=s] 本帖最后由 无垠的广袤 于 2025-8-8 22:31 编辑 [/i]

【AiPi-PalChatV1语音开发板】Home Assistant 语音助手

本文介绍了 小安AI - AiPi-PalChatV1 语音开发板通过 MCP 接入 Home Assistant 并实现智能家居终端设备读取和控制的项目设计。

项目介绍

  • 环境搭建:Docker、HA、EMQX 部署、MQTT 配置;
  • 小智 MCP:HACS 、HA MCP 、Xiaozhi MCP 安装;
  • 建立连接:小智与HA连接,配置 HA 语音助手、公开实体;
  • 工程测试:流程图、关键代码、MQTTX 通信测试;
  • 效果演示:温度传感器的语音读取、开关及 LED 的语音控制、Shell 终端打印 MQTT 消息等。

环境搭建

包括 Docker、HA、EMQX 部署、MQTT 配置等,为 Xiaozhi 的连接提供基础。

Docker

  • 下载并安装 Docker Desktop 软件;

镜像源更换

为了便于后续 EMQX 和 HA 平台部署,需要添加镜像源以加速下载。

  • 依次进入 设置 - Docker Engine 添加如下代码
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "debug": true,
  "experimental": false,
  "insecure-registries": [
    "registry.docker-cn.com",
    "docker.mirrors.ustc.edu.cn"
  ],
  "registry-mirrors": [
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc",
    "https://do.nark.eu.org",
    "https://dc.j8.work",
    "https://dockerproxy.com",
    "https://gst6rzl9.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "http://mirrors.ustc.edu.cn/",
    "https://mirrors.tuna.tsinghua.edu.cn/",
    "http://mirrors.sohu.com/"
  ]
}

选择 Apply 即可。

HA 部署

  • 打开命令行终端并执行指令
docker pull homeassistant/home-assistant:latest
  • 待拉取 HA 镜像完成;
  • 磁盘根目录创建 homeassistant 文件夹,新建 docker-compose.yaml 文件,并添加如下代码
version: '3'
services:
  homeassistant:
    image: homeassistant/home-assistant:latest
    container_name: homeassistant
    restart: always
    volumes:
      - /data/homeassistant/config:/config
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "8123:8123"
  • 保存文件,并在终端打开该文件夹,执行 docker compose up -d 指令,完成 HA 容器创建。
  • 进入 Containers 容器页面,点击 homeassistant 端口链接,进入 HA 浏览器页面,创建并登录账户;

EMQX 部署

在添加软件镜像源的基础上,终端执行指令

docker pull emqx/emqx:latest

拉取最新版 emqx 镜像

终端执行指令

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest

创建并运行 emqx 容器;

若提示端口被占用报错,可删除已创建的 emqx 容器,进入 Images 标签页,点击 emqx/emqx 镜像对应的启动按钮,手动配置容器名称、Host端口等参数,端口填写 0 ,系统随机分配可用端口。

配置 EMQX

(1)进入 Containers 容器页面,点击 emqx 端口链接,进入 emqx 浏览器页面,初始登录账户名 admin 密码 public

(2)依次打开 访问控制 - 客户端认证 - 创建 - Password-Based - 内置数据库 - (默认配置)- 创建

(3)用户管理 - 新建用户 - 自定义用户名和密码 .

MQTT 配置

(1)命令行终端输入 ipconfig 获取本地计算机 IPv4 地址,如 192.168.31.160

(2)配置 Home Assistant ,依次点击设置 - 设备与服务 - 添加集成 - 搜索 MQTT - 填写代理信息。

代理栏输入计算机 IP 地址,端口 1883,用户名和密码为 EMQX 中创建的用户信息。

(3)进入 HA 所在文件夹,打开 configuration.yaml 配置文件,添加温度传感器和开关设备

mqtt:
  sensor:
    - name: "Temperature"
      state_topic: "ha/adc/temp"
      suggested_display_precision: 1
      unit_of_measurement: "°C"
      value_template: "{{ value_json.temperature }}"
  switch:
    - name: "Switch"
      unique_id: "led_switch"
      command_topic: "ha/switch/cmd"
      state_topic: "ha/switch/state"
      payload_on: "ON"
      payload_off: "OFF"
      retain: true

保存更改并 重新加载配置 以应用更改。

(4)进入 HA 概览页面,编辑仪表盘,添加温度传感器和开关卡片。

小智 MCP

包括 HACS 、HA MCP、Xiaozhi MCP 的安装与参数配置等。

HACS 安装

使用命令行安装;

  • 进入HA容器终端,

ha_terminal.jpg

  • 执行如下指令,
wget -O - https://get.hacs.vip | bash -

获取 HACS 压缩文件并自动安装

docker_hacs.jpg

  • 待提示安装完成,进入设置,搜索并添加 HACS 集成;

详见:hacs-china: HACS 极速版 .

HA MCP 安装

在安装小智 MCP 之前,需要安装 HA 官方 MCP Server 集成;

  • 进入设置,设备与服务,添加集成,搜索 MCP Server 并安装;

ha_mcp_server.jpg

  • MCP 服务器将在 HA 实例中本地运行,网址为 http://localhost:8123/mcp_server/sse

Xiaozhi MCP 安装

  • 在 HACS 中搜索并下载 Xiaozhi MCP,同样进入设置,添加该集成;

xiaozhi-mcp_hacs.jpg

  • 配置 Xiaozhi MCP 参数,包括 HA 长期访问令牌 (Long-Lived Access Token)、小智 MCP 端点 (Xiaozhi MCP Endpoint);

xiaozhi_mcp.png

  • 完成 Xiaozhi MCP 集成的添加;
原理

小智 MCP 接入 HA 运行原理

flowchart_xiaozhi-mcp.jpg

特点

核心架构特点如下

  • 采用官方 MCP 服务器,所有 MCP 功能由官方 Home Assistant MCP 服务器集成提供;
  • 作为 SSE 代理,将 MCP 消息通过服务器发送事件转发至官方 MCP 服务器;
  • 本地通信安全,所有 Home Assistant 通信通过官方 MCP 服务器在本地进行;
  • 无需外部 URL,无需将 Home Assistant 实例暴露至互联网;

详见:小智 MCP 接入 Home Assistant .

GitHub 开源地址: Xiaozhi AI chatbot to Home Assistant via MCP .

建立连接

为了使 Xiaozhi 与目标实体设备建立联系,需要将实体公开。

公开实体

  • 进入设置 - 语音助手 - 添加助手,语言为中文;
  • 开启公开新实体;

voice_assistant.png

  • 进入 公开 标签页面,添加目标实体,如温度传感器、开关等设备;

add_real_object.jpg

工程测试

这里使用 MicroPython 开发板作为 HA 终端设备(温度传感器、LED 开关)进行工程测试;

包括流程图、工程代码、固件上传、MQTT 测试等。

流程图

flowchart_ha_mqtt.jpeg

代码

运行 Thonny IDE ,新建文件,添加如下代码

#!/usr/bin/env python3
import json
import network
import time
import random
from machine import Pin, ADC
from umqtt.simple import MQTTClient

# ========== Configuration ==========
WIFI_SSID = "xxx"           # wifi name
WIFI_PASS = "xxx"           # wifi password
ADC_PIN = 16                # ADC pin
LED_PIN = 3                 # LED pin
MQTT_SERVER = "192.168.31.160" # ip address
MQTT_PORT = 32768           # MQTT Broker port
MQTT_USER = "xxx"           # MQTT Broker user
MQTT_PASS = "xxx"           # MQTT Broker password
MQTT_CLIENT_ID = f"ha-client-{random.getrandbits(8)}"

# MQTT topic
PUB_TOPIC = "ha/adc/temp"       # publish topic
SUB_TOPIC = "ha/switch/cmd"     # subscribe LED
STATE_TOPIC = "ha/switch/state" # publish LED state
# ============================

led = Pin(LED_PIN, Pin.OUT, value=0)  # initialize LED

def wifi_connect():
    sta = network.WLAN(network.STA_IF)
    sta.active(True)
    if not sta.isconnected():
        print("Connecting to WiFi...")
        sta.connect(WIFI_SSID, WIFI_PASS)
        for _ in range(20):
            if sta.isconnected():
                break
            time.sleep(1)
    print("WiFi Connected:", sta.ifconfig())

def read_temperature():
    adc = ADC(Pin(ADC_PIN))
    adc.atten(ADC.ATTN_11DB)
    raw = adc.read()
    volt = raw / 4095 * 3.3
    temp = (volt - 0.5) * 100 - 88 # ADC temperature
    return round(temp, 1)

def mqtt_callback(topic, msg):
    topic = topic.decode()
    msg = msg.decode()
    print(f"MQTT Received: {topic} -> {msg}")
  
    if topic == SUB_TOPIC:
        if msg == "ON":
            led.on()
            client.publish(STATE_TOPIC, "ON")
        elif msg == "OFF":
            led.off()
            client.publish(STATE_TOPIC, "OFF")

def mqtt_connect():
    client = MQTTClient(
        MQTT_CLIENT_ID,
        MQTT_SERVER,
        MQTT_PORT,
        MQTT_USER,
        MQTT_PASS,
        keepalive=60
    )
    client.set_callback(mqtt_callback)
    client.connect()
    client.subscribe(SUB_TOPIC)
    print(f"MQTT Connected to {MQTT_SERVER}, subscribed to {SUB_TOPIC}")
    return client

def main():
    wifi_connect()
    global client
    client = mqtt_connect()
  
    try:
        while True:
            client.check_msg()          # check MQTT 
            temp = read_temperature()   # read temperature
            client.publish(PUB_TOPIC, json.dumps({"temperature": temp}))
            time.sleep(1)               # delay
    finally:
        client.disconnect()
        print("MQTT Disconnected")

if __name__ == "__main__":
    main()

保存代码,配置解释器,运行程序。

MQTTX 测试

  • 下载、安装并运行 MQTTX 软件;
  • 添加连接,配置 MQTT 通信参数,点击连接;
  • 添加订阅主题,包括 ADC 温度传感器、开关控制和状态;
  • 设置发送主题,通过消息指令实现开关控制及状态反馈;

mqttx_test.jpg

效果演示

这里展示小智接入 HA 并获取 ADC 温度传感器数据、以及控制开关 LED 的测试效果。

传感器读取

语音获取温度传感器数值

temp_ha.png

视频演示

https://www.bilibili.com/video/BV1K6tpzaEJM/

对话:

Q: 你好,小安

A: 我在

Q: 接入家庭助理

A: 已接入 Home Assistant 家庭助理

Q: 温度的值

A: 当前温度是 114.1 摄氏度 …

PS:调整 ADC 温度算法(增加偏移量),以测试小智是否获取 HA 传感器数据并严格执行播报。

语音控制

语音控制 打开关闭 Switch 开关

switch_temp.jpg

视频演示

https://www.bilibili.com/video/BV1VstpzkECR/

对话:

Q: 你好,小安

A: 我在

Q: 打开 Switch

A: 好的,正在打开 ……

Q: 关闭 Switch

A: 好的,已关闭 ……

Shell 打印

小智语音发送 MQTT 消息控制开关,同时终端打印通信消息及开关状态

shell_print.jpg

总结

本文介绍了 小安AI - AiPi-PalChatV1 语音开发板通过 MCP 接入 Home Assistant 并实现智能家居终端设备读取和控制的项目设计,为该套件在物联网领域的开发设计及应用提供了参考。

──── 1人觉得很赞 ────

使用道具 举报

2025-8-8 23:17:42
优秀,点赞!
2025-8-8 23:27:22
iiv 发表于 2025-8-8 23:17
优秀,点赞!

紧跟大佬的步伐
2025-8-9 13:14:58
当前温度是 114.1 摄氏度
2025-8-9 15:25:42
hdydy 发表于 2025-8-9 13:14
当前温度是 114.1 摄氏度

没错,为了整活儿
证明小智会严格地传递传感器数据
2025-8-10 09:25:40
博士佬太优秀了
2025-8-10 17:47:55
哇塞!你简直优秀得让人惊叹不已呀!真的是无与伦比的优秀呢!你瞧瞧,方方面面都表现得如此卓越,这出色的程度简直超乎想象啦!太厉害啦,必须得给你大大的赞!
2025-8-11 11:06:24
熬夜写的帖子,辛苦了~
2025-8-11 11:34:49
爱笑 发表于 2025-8-11 11:06
熬夜写的帖子,辛苦了~

嘿嘿,稳~
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 29632 个
  • 话题数: 43027 篇