解决的问题
家里叫吃饭、喊孩子洗澡,以前得一个个房间跑。小爱音箱自带的全屋广播功能?先喊"小爱同学"→ 等它回应 → 再说"全屋广播"→ 再说内容,三步下来火气比声音先到,而且经常莫名其妙的广播失败。后来用 HA 的 TTS,打字太慢;用微信发语音,还得掏出手机解锁。就想像对讲机那样——按住按钮说话,松手全屋播放。
效果
打开手机浏览器访问一次 → 添加到主屏幕 → 之后就当 App 用:
- 🟢 每个房间一张卡片,按住圆按钮说话,松手就播
- 📢 顶部的「全部广播」卡片,一键喊全屋
- 🟢/⚫ 每个房间名旁有个指示灯,绿色代表音箱在线,灰色离线
- 录音时按钮变绿 + 波纹扩散动效,发送时有光环绕圈,发送成功显示大对勾
- 🌐 支持中英文,右上角一键切换

架构
手机PWA → HA 原生集成 → Home Assistant API → 智能音箱
↕
configuration.yaml / UI 配置
(或 Docker 独立部署,仍支持)
v2.0.0 起推荐使用 HA 原生集成,直接跑在 Home Assistant 里,零额外容器。同时兼容 Docker 独立部署。
Flask 干所有事:收音频、PCM 封 WAV、调 HA 的 media_player.play_media 播放。
不需要 ffmpeg:浏览器原生录音 + 纯 Python PCM→WAV,Docker 镜像只有 131MB。
全屋广播:录一次 → 并行发给所有房间,fire-and-forget。
怎么用
方式一:HA 集成(推荐 · v2.0.0+)
1. 安装(HACS 或手动)
HACS:添加自定义仓库 https://github.com/mdj2812/home-intercom`[/url] → 搜索 "Home Intercom" → 安装。
手动:
cd /config/custom_components
curl -LO [url=https://github.com/mdj2812/home-intercom/releases/latest/download/home_intercom.zip]https://github.com/mdj2812/home- ... d/home_intercom.zip
unzip -o home_intercom.zip -d home_intercom && rm home_intercom.zip
ha core restart
2. 配置
设置 → 设备与服务 → 添加集成 → 搜索 "Home Intercom" → 选择区域、播放器 → 完成。
已有 YAML 配置(configuration.yaml)会自动导入,无需手动迁移。
3. 添加到侧边栏
创建仪表盘 → 添加网页卡片 → URL 填 /home_intercom
方式二:Docker(旧版,仍支持)
git clone https://github.com/mdj2812/home-intercom.git
cd home-intercom
cat > docker/.env << EOF
HA_URL=http://192.168.1.10:8123
HA_TOKEN=你的HA长期令牌
EOF
export IMAGE=ghcr.io/mdj2812/home-intercom:v2.0.0
docker compose -f docker/docker-compose.example.yml up -d
⚠️ Docker 模式下必须配置 HTTPS(Caddy/Nginx 反代),否则浏览器不给麦克风权限。
链接
欢迎 star、提 issue、PR。有任何部署问题直接回帖问我。
ESP32 实体按键已开源
更新
v2.0.0(2026-07-16)— 正式版 🎉
- 原生 HA 集成:不再依赖 Docker,直接跑在 HA 里。支持 Config Flow(UI 添加房间)、Options Flow(UI 管理参数)、Device Registry(房间自动注册为 HA 设备)
- 双配置入口:YAML + UI 共存,自动合并,UI 配置优先
- PWA 认证修复:改用共享密钥认证,Companion App WebView 稳定工作
- 小爱屏幕修复:播报后自动清除播放信息,不再显示随机云数据
- HTTP 安全提示:通过非 HTTPS 访问时自动禁用按钮,提示用户切换外部地址
- 三层播放策略:Music Assistant
play_announcement → repeat_set(off) → 定时暂停,根据音箱能力自动选最优方案
Docker: ghcr.io/mdj2812/home-intercom:v2.0.0
HACS: 添加自定义仓库后一键安装
v1.6.3:房间卡片显示设备名称,离线音箱按钮自动灰显,STATE_TIMEOUT 适配蓝牙/MA 慢设备,UI 翻新。
v1.6.2:门铃提示音——按下对讲话筒先响"叮"再播报。MA 播放器原生支持,标准播放器直接拼进音频。房间可配播报音量、离线音箱自动灰掉。
v1.6.1:三层自动停止。MA 播放器原生 play_announcement → HomePod/Chromecast 用 repeat_set(off) → 小爱等用 PAUSE_BUFFER 可配定时暂停。