跳到主要内容智能家居笔记:Home Assistant 与小智 AI 搭建指南 | 极客日志PythonAI
智能家居笔记:Home Assistant 与小智 AI 搭建指南
综述由AI生成记录了基于 Home Assistant 的智能家居系统搭建过程。架构包括小智 ESP32 作为语音前端,树莓派运行 HAOS 作为中控,后端连接阿里云服务器通过 FRP 内网穿透。集成了 Frigate 进行摄像头管理,Music Assistant 播放本地音乐和播客,并接入甲醛检测仪、小米摄像头及拓竹 3D 打印机等设备。涉及 ESPHome 自定义组件开发、Python 脚本抓取播客及视频硬解配置等技术细节。
嘘34 浏览 设备框架图
概述: 总体而言借用各种开源项目,致力做到好用可控。输入设备小智 AI 作为用户前端,后端用小智 AI 华南理工开源服务器。智能家庭中控采用树莓派 5 搭载 HAOS,用 homeassistant,包括手机 APP。各种终端设备,支持 zigbee 通信协议,wifi 通信协议,小米设备支持 miloco 的设备可以连接,其他类似美的海尔的设备也看 home assistant 的插件支持程度,没有本身开源的使用舒适。

主机:thinkpad-S5-yoga 地址 xxxxxxxxxxxx 用户:xxxxxxxxxxx
| 服务 | 备注 | 服务端口 |
|---|
| frigate | | 5000 |
| samba | mnt/media/usbshare | |
| http | /mnt/usb_share/podcast | 10086 |
| mediamtx.service | xxxxxxxxxxx | 8554 |
| napcat | | |
| koi | | |
| miloco | | |
| micam | xxxxxxxxxxxxxx | |
| astra-color.service | | |
| zaokafei-fetch.timer | /mnt/usb_share/podcast/zaokafei | |
| bambucam.service | Desktop/bambustudio/bambucam | 5004 |
| glances.service | | 61208 |
主机:MacBookAir 地址:xxxxxxxxxxxxx 用户:xxxxxxxxxxxxx
| 服务 | 备注 | 服务端口 |
|---|
| intel-color | | |
| ir | | |
| switch | Desktop/swtich_rtsp/swtich_rtsp.py | |
| mediamtx | xxxxxxxxxxxxx | 8554 |
主机:PC 地址:xxxxxxxxxxxxxxx 用户:xxxxxxxxxxx

小智 ESP32 嵌入式前端
前端若需要连 M3.5 的扬声器接口,可换 PCM5102A 模块
小智 ESP32 后端服务器
也尝试用 xiaozhi-server 贡献的 home assistant 代码,其实用了 home assisttant 的 API,好处是可以精简 MCP,对音乐播放进行了一些修改。
Home Assistant
公网访问
感觉有一个 bug,重启 HAOS 之后,自启动 FRP Client,但是 FRP Server 会还在重新尝试原先的客户端,就会崩溃。因此必须开崩溃自动恢复。
网络存储
此处用部署在局域网的 samba 服务,用户名:admin
Music Assistant
使用 provider 模式,youtube music 等使用延迟较大,因此还是本地使用方案。
歌曲下载地址
podcast 收听地址

<?xml version='1.0' encoding='UTF-8'?> <rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> <channel> <title>声动早咖啡</title> <link>http://192.168.1.100:10086/</link> <description> 一个十五分钟的晨间仪式,轻松同步日常生活与商业世界。 工作日早晨更新,来自声动活泼的清晨播客。 </description> <itunes:image href="http://192.168.1.100:10086/cover.png" /> <image> <url>http://192.168.1.100:10086/cover.png</url> <title>声动早咖啡</title> <link>http://192.168.1.100:10086/</link> </image> <item><title>咖啡豆|18 世纪就被誉为「全球最好」的美利奴羊毛,为何最近在国内热度大增?</title><pubDate>Thu, 08 Jan 2026 23:00:00 +0000</pubDate><guid isPermaLink="false">695fce90d4b8fa56f5f949fe</guid><enclosure url="http://192.168.1.100:10086/2026-01-08%20-%20%E5%92%96%E5%95%A1%E8%B1%86%EF%BD%9C18%20%E4%B8%96%E7%BA%AA%E5%B0%B1%E8%A2%AB%E8%AA%89%E4%B8%BA%E3%80%8C%E5%85%A8%E7%90%83%E6%9C%80%E5%A5%BD%E3%80%8D%E7%9A%84%E7%BE%8E%E5%88%A9%E5%A5%B4%E7%BE%8A%E6%AF%9B%EF%BC%8C%E4%B8%BA%E4%BD%95%E6%9C%80%E8%BF%91%E5%9C%A8%E5%9B%BD%E5%86%85%E7%83%AD%E5%BA%A6%E5%A4%A7%E5%A2%9E%EF%BC%9F.m4a" length="14036410" type="audio/mp4" /></item><item><title>图拉斯|必胜客推出独立汉堡门店,外卖大战补贴降温</title><pubDate>Wed, 07 Jan 2026 23:00:00 +0000</pubDate><guid isPermaLink="false">695e474fc1e012a7abdcfb1e</guid><enclosure url="http://192.168.1.100:10086/2026-01-07%20-%20%E5%9B%BE%E6%8B%89%E6%96%AF%EF%BD%9C%E5%BF%85%E8%83%9C%E5%AE%A2%E6%8E%A8%E5%87%BA%E7%8B%AC%E7%AB%8B%E6%B1%89%E5%A0%A1%E9%97%A8%E5%BA%97%EF%BC%8C%E5%A4%96%E5%8D%96%E5%A4%A7%E6%88%98%E8%A1%A5%E8%B4%B4%E9%99%8D%E6%B8%A9.m4a" length="16226181" type="audio/mp4" /></item><item><title>没有鱼子酱饮食传统的中国,为何成为全球鱼子酱的主要产地?</title><pubDate>Tue, 06 Jan 2026 23:00:00 +0000</pubDate><guid isPermaLink="false">695d07efc1e012a7abad496a</guid><enclosure url="http://192.168.1.100:10086/2026-01-06%20-%20%E6%B2%A1%E6%9C%89%E9%B1%BC%E5%AD%90%E9%85%B1%E9%A5%AE%E9%A3%9F%E4%BC%A0%E7%BB%9F%E7%9A%84%E4%B8%AD%E5%9B%BD%EF%BC%8C%E4%B8%BA%E4%BD%95%E6%88%90%E4%B8%BA%E5%85%A8%E7%90%83%E9%B1%BC%E5%AD%90%E9%85%B1%E7%9A%84%E4%B8%BB%E8%A6%81%E4%BA%A7%E5%9C%B0%EF%BC%9F.m4a" length="14320957" type="audio/mp4" /></item><item><title>山姆中国付费会员首次破千万,泡泡玛特将加速海外扩张</title><pubDate>Mon, 05 Jan 2026 23:00:00 +0000</pubDate><guid isPermaLink="false">695bafd9bdbeb6a09ee00719</guid><enclosure url="http://192.168.1.100:10086/2026-01-05%20-%20%E5%B1%B1%E5%A7%86%E4%B8%AD%E5%9B%BD%E4%BB%98%E8%B4%B9%E4%BC%9A%E5%91%98%E9%A6%96%E6%AC%A1%E7%A0%B4%E5%8D%83%E4%B8%87%EF%BC%8C%E6%B3%A1%E6%B3%A1%E7%8E%9B%E7%89%B9%E5%B0%86%E5%8A%A0%E9%80%9F%E6%B5%B7%E5%A4%96%E6%89%A9%E5%BC%A0.m4a" length="11324711" type="audio/mp4" /></item><item><title>频繁发射火箭的 SpaceX 今年上市,为什么星链服务是其价值关键?</title><pubDate>Sun, 04 Jan 2026 23:00:00 +0000</pubDate><guid isPermaLink="false">695a8775b9fb62614108f66e</guid><enclosure url="http://192.168.1.100:10086/2026-01-04%20-%20%E9%A2%91%E7%B9%81%E5%8F%91%E5%B0%84%E7%81%AB%E7%AE%AD%E7%9A%84%20SpaceX%20%E4%BB%8A%E5%B9%B4%E4%B8%8A%E5%B8%82%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E6%98%9F%E9%93%BE%E6%9C%8D%E5%8A%A1%E6%98%AF%E5%85%B6%E4%BB%B7%E5%80%BC%E5%85%B3%E9%94%AE%EF%BC%9F.m4a" length="15438817" type="audio/mp4" /></item></channel>
Frigate
视频硬解适配
在我的配置中,用 vappi 对 H264 硬解,对 H265 软解
hwaccel_args: preset-vaapi
hwaccel_args: --hwaccel vaapi --hwaccel_device /dev/dri/renderD128 --hwaccel_output_format yuv420p
视频推流
各种嵌入式设备
Marshall 音箱
因为该音箱是一个有源音箱,连接方式有蓝牙和 3.5mm 连接两种
music assistant 安装 snapcast provider
甲醛检测仪
具体代码
esphome:
name: ze08-ch2o
friendly_name: ZE08 CH2O
esp32:
board: esp32dev
framework:
type: arduino
wifi:
ssid: "xxxxxxxxxxxxx"
password: "xxxxxxxxxxx"
logger:
baud_rate: 0
api:
ota:
- platform: esphome
external_components:
- source:
type: local
path: components
components: [ ze08_ch2o ]
uart:
id: uart_ze08
rx_pin: GPIO3
tx_pin: GPIO1
baud_rate: 9600
data_bits: 8
parity: NONE
stop_bits: 1
ze08_ch2o:
id: ze08_sensor
uart_id: uart_ze08
ch2o_ppb:
name: "CH2O (ppb)"
ch2o_mg_m3:
name: "CH2O (mg/m³)"
sensor:
- platform: template
name: dummy_sensor
id: dummy_sensor
lambda: |- return 0.0;
update_interval: 1h
internal: true
import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.components import uart, sensor
from esphome.const import CONF_ID
ze08_ns = cg.esphome_ns.namespace("ze08_ch2o")
ZE08CH2OUart = ze08_ns.class_("ZE08CH2OUart", cg.Component, uart.UARTDevice)
CONF_PPB = "ch2o_ppb"
CONF_MGM3 = "ch2o_mg_m3"
CONFIG_SCHEMA = cv.Schema(
{
cv.GenerateID(): cv.declare_id(ZE08CH2OUart),
cv.Required(CONF_PPB): sensor.sensor_schema(
unit_of_measurement="ppb",
accuracy_decimals=0,
icon="mdi:molecule",
),
cv.Required(CONF_MGM3): sensor.sensor_schema(
unit_of_measurement="mg/m³",
accuracy_decimals=3,
icon="mdi:molecule",
),
}
).extend(uart.UART_DEVICE_SCHEMA).extend(cv.COMPONENT_SCHEMA)
async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID])
await cg.register_component(var, config)
await uart.register_uart_device(var, config)
ppb = await sensor.new_sensor(config[CONF_PPB])
mgm3 = await sensor.new_sensor(config[CONF_MGM3])
cg.add(var.set_sensors(ppb, mgm3))
#pragma once
#include "esphome/core/component.h"
#include "esphome/components/uart/uart.h"
#include "esphome/components/sensor/sensor.h"
namespace esphome {
namespace ze08_ch2o {
class ZE08CH2OUart : public Component, public uart::UARTDevice {
public:
ZE08CH2OUart() : uart::UARTDevice(nullptr) {}
explicit ZE08CH2OUart(uart::UARTComponent *parent) : uart::UARTDevice(parent) {}
void set_sensors(sensor::Sensor *ppb, sensor::Sensor *mgm3) {
ch2o_ppb_ = ppb;
ch2o_mg_m3_ = mgm3;
}
void loop() override {
while (available()) {
uint8_t b = read();
if (idx_ == 0) {
if (b != 0xFF) continue;
buf_[idx_++] = b;
continue;
}
buf_[idx_++] = b;
if (idx_ >= 9) {
parse_frame_();
idx_ = 0;
}
}
}
protected:
sensor::Sensor *ch2o_ppb_{nullptr};
sensor::Sensor *ch2o_mg_m3_{nullptr};
uint8_t buf_[9]{0};
uint8_t idx_{0};
void parse_frame_() {
if (buf_[0] != 0xFF) return;
if (buf_[1] != 0x17) return;
if (buf_[2] != 0x04) return;
uint16_t sum = 0;
for (int i = 1; i <= 7; i++) sum += buf_[i];
uint8_t cs = (uint8_t)(~(sum & 0xFF) + 1);
if (cs != buf_[8]) return;
uint16_t ppb = ((uint16_t) buf_[4] << 8) | buf_[5];
float mgm3 = (ppb / 1000.0f) * 1.25f;
if (ch2o_ppb_) ch2o_ppb_->publish_state(ppb);
if (ch2o_mg_m3_) ch2o_mg_m3_->publish_state(mgm3);
}
};
}
}
刷机页面
IntelRealsense 摄像头/astra_color 摄像头
夜视模式根据灰度直方图判断自动切换切换夜里用 IR 流和 RGB 流,同一个流输出
小米 4C 摄像头
由于小米摄像头本身无提供 RTSP 视频流,使用小米官方开源的 miloco 项目接受 websocket 流,之后三方的 micam 将此流转换为 rtsp 视频流,官方用 go2rtc 推流,我这边改用了 mediamtx,另外小米 4C 为 H265 编码,docker 运行
miloco
micam
拓竹 A1 mini
但我是 A1 mini 似乎智能获取 HTTP 视频流,效果如下
ESPHOME 排插/MQTT 插座/zigbee 插座
淘宝购入 zigbee 信号接收器插在跑 HA 的树莓派上
在 homeassistant/configuration.yaml 配置
终端设备淘宝非常多,几种通信协议的设备都能够支持,参考店家说明配置没啥难度
Tasmota 设置 Set'Option 为 OFF 时为 switch,设置为 ON 时为 light
相关免费在线工具
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online