基于树莓派4B的智能家居中枢搭建
为什么选择树莓派4B?
性能不再是瓶颈
- 四核Cortex-A72 @ 1.5GHz,性能接近入门级笔记本;
- 内存最高支持 8GB LPDDR4,足以同时承载多个服务而不卡顿;
- 配备 千兆以太网口(实测900Mbps+),网络通信更稳定;
- 双USB 3.0接口,外接设备传输不再龟速。
这意味着你可以放心地让它同时运行:
介绍使用树莓派4B搭建本地智能家居中枢的完整流程。涵盖操作系统安装、Docker环境部署、Home Assistant配置、Zigbee2MQTT接入及MQTT消息总线搭建。通过具体案例演示自动化场景设置,并提供USB SSD启动、安全加固及远程访问等进阶优化方案,实现设备本地化控制与隐私保护。
这意味着你可以放心地让它同时运行:
这一切都在一台小板子上安静运转,功耗却不到10W。
| 接口 | 用途示例 |
|---|---|
| GPIO 40针 | 接DS18B20温度传感器、继电器模块、OLED屏 |
| USB 3.0 ×2 | 插Zigbee棒、Z-Wave Stick、4G Dongle |
| Micro-HDMI ×2 | 调试时接显示器,或输出监控画面 |
| PCIe Gen2 via GPIO | 外接M.2 NVMe SSD,告别SD卡崩溃风险 |
💡 小贴士:虽然官方标称支持PCIe,但需要通过特殊转接板才能启用。对于大多数用户,使用USB 3.0启动SSD已是成熟且稳定的替代方案。
目前主流选择有三种:
这里推荐使用 Raspberry Pi OS (Legacy),因为它兼容性最好,后续安装Docker、Node.js等工具毫无压力。
Raspberry Pi OS (Legacy) with desktop如果你不想接键盘显示器,可以在烧录后做两件事让树莓派开机即联网:
在SD卡 boot 分区根目录创建一个空文件,名为 ssh(无后缀)。这样系统首次启动时会自动开启SSH服务。
在同一目录下创建文件 wpa_supplicant.conf,内容如下:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=CN network={ ssid="你的WiFi名称" psk="你的WiFi密码" key_mgmt=WPA-PSK }
保存后弹出SD卡,插入树莓派,通电启动。 几分钟后,通过路由器后台查看其分配的IP地址,即可用SSH登录:
ssh pi@<树莓派IP> # 默认密码:raspberry
sudo apt update && sudo apt full-upgrade -y
sudo rpi-update # 更新固件(可选)
sudo reboot
同时建议修改默认密码,并设置静态IP,避免下次找不到它。
为什么不直接刷HA OS?因为我们要的是 自由度。用Docker部署,既能享受隔离性,又能随时添加其他服务。
| 优势 | 实际意义 |
|---|---|
| 环境隔离 | 卸载干净,不影响主机系统 |
| 数据持久化 | 配置独立存储,重装容器不丢数据 |
| 快速备份恢复 | 打包 /config 目录即可迁移整个中枢 |
| 易于升级 | docker pull 拉取新镜像即可更新 |
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker pi
重启终端后验证是否成功:
docker --version
执行以下命令创建并运行容器:
docker run -d \
--name homeassistant \
--privileged \
--restart=unless-stopped \
-e TZ=Asia/Shanghai \
-v /home/pi/hass-config:/config \
-v /run/dbus:/run/dbus:ro \
--device=/dev/ttyUSB0 \
--device=/dev/ttyACM0 \
-p 8123:8123 \
ghcr.io/home-assistant/home-assistant:stable
解释几个关键参数:
-v /home/pi/hass-config:/config:将配置文件存在外部目录,防止容器删除后丢失;--device=/dev/ttyUSB0:允许容器访问USB串口设备(比如Zigbee棒);-p 8123:8123:开放Web界面端口;--privileged:赋予必要权限(安全起见,仅用于HA这类可信容器)。等待几分钟,访问 http://<树莓派IP>:8123,你会看到熟悉的Home Assistant欢迎页面。
首次进入会引导你设置用户名、密码、位置信息等。完成后就能看到仪表盘了。
Wi-Fi设备虽多,但功耗大、电池撑不了几天。真正的智能家居传感器(门磁、人体感应、温控阀),大多走的是 Zigbee 协议。
但我们手里的树莓派并不原生支持Zigbee。怎么办?加个'翻译官'——Zigbee协调器。
| 型号 | 芯片 | 是否推荐 | 说明 |
|---|---|---|---|
| CC2531 | TI | ❌ 不推荐 | 性能弱,仅支持少量设备 |
| CC2652R / CC2652P | TI | ✅ 强烈推荐 | 支持路由功能,稳定性强 |
| nRF52840 | Nordic | ✅ 推荐 | 支持蓝牙/Zigbee双模,价格稍贵 |
我用的是 Sonoff Zigbee 3.0 USB Dongle Plus(CC2652P版),信号好、兼容性强,插上即用。
Home Assistant本身不能直接读取Zigbee信号,我们需要中间件—— Zigbee2MQTT。
它的作用是:
Zigbee2MQTT基于Node.js开发,先装环境:
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
cd /opt/zigbee2mqtt
npm install
编辑 /opt/zigbee2mqtt/data/configuration.yaml:
frontend:
port: 8080
mqtt:
base_topic: zigbee2mqtt
server: 'mqtt://localhost'
serial:
port: /dev/ttyUSB0
确保 port 正确指向你的设备(可用 ls /dev/tty* 查看)。
npm start
打开浏览器访问 http://<树莓派IP>:8080,可以看到Zigbee2MQTT的管理界面。
Zigbee2MQTT需要一个MQTT Broker来转发消息。我们可以用Docker快速部署一个Mosquitto。
docker run -d \
--name mosquitto \
--restart=unless-stopped \
-p 1883:1883 \
-p 9001:9001 \
-v /home/pi/mosquitto/config:/mosquitto/config \
eclipse-mosquitto
创建配置目录和基础配置文件:
mkdir -p /home/pi/mosquitto/config
echo "listener 1883" > /home/pi/mosquitto/config/mosquitto.conf
echo "allow_anonymous true" >> /home/pi/mosquitto/config/mosquitto.conf
⚠️ 生产环境中应关闭匿名访问并设置账号密码!
现在Zigbee2MQTT就能连接到 mqtt://localhost:1883 了。
重启Zigbee2MQTT服务后,在HA中添加MQTT集成,输入相同Base Topic( zigbee2mqtt),所有已配对设备将自动出现在HA中。
让我们来做一个实用又温馨的功能: 夜间起夜小夜灯。
当晚上11点到早上6点之间,卧室的人体传感器检测到动作,且主灯关闭时,自动点亮走廊的小夜灯(亮度30%),5分钟后关闭。
binary_sensor.motion_bedroomlight.hallway_night_lightoff, To: on, Entity: binary_sensor.motion_bedroom23:00 and 06:00, AND State of light.bedroom_main is offlight.hallway_night_light, Brightness: 30%, Then delay 5 minutes, Turn Off light.hallway_night_light保存后,这个自动化就生效了。
一套好用的系统不仅要功能完整,还得经得起时间考验。
SD卡频繁读写容易损坏。树莓派4B支持USB启动,只需一次设置:
# 查看当前启动模式
vcgencmd bootloader_config
# 若返回 NO_EEPROM_UPDATE,则需更新固件
sudo rpi-eeprom-update -a
sudo reboot
更新后进入 raspi-config → Advanced Options → Boot Order → 设为'USB Boot First'。然后将系统克隆到SSD,拔掉SD卡也能正常启动。
无线网络不稳定会影响设备响应。建议:
sudo nmcli radio wifi off )sudo apt install fail2ban
想在外面控制家里设备?两种安全方式:
零配置内网穿透,基于WireGuard加密隧道:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
登录后,直接通过局域网IP访问HA,就像在家一样。
适合已有域名用户:
server {
listen 443 ssl;
server_name hass.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://localhost:8123;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
配合Let's Encrypt免费证书,既安全又专业。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online