最近要在 Docker 上跑个测试项目,于是我又翻出了树莓派来练手。用什么来练呢?当然还是来实现自己的一个需求。
看过我之前文章的朋友们应该知道,Home Assistant(以下简称 HA) 是一个开源的智能家居平台,几乎可以接入市面上所有的智能家居品牌(个别型号不支持),同时还可以实现自动化操作和事件通知。
如果家里是 Apple 全家桶,那可以直接用 Apple 自带的 HomeKit,而如果需要兼容安卓,可玩性更高一点,HA 就再适合不过了。而且 HA 还可以反向操作,通过 HA 让原本不支持 HomeKit 的设备可以在 HomeKit 中控制。
总之,很强大就是了。
我在写 正当有用时 这篇文章的时候,其实已经搭好了一个测试用的树莓派 + HA,并且实现了一个简单的控制屏的界面效果。为什么又要开始折腾呢?
当初搭的时候,为了省事,直接给树莓派烧录了 HA 官方提供的操作系统 —— HASS,也不需要额外的配置,装完启动即可,适合新手小白。但如今这块树莓派还需要做其他用处,直接用 HASS 系统有些限制,于是我又烧回了 Pi 的原生系统。
为了不影响 Pi 本身的开发环境,我决定把 HA 装在 Docker 里,本文用来记录树莓派 + Docker + Home Assistant 的安装过程,从树莓派原生系统的安装开始,到 HomeAssistant 跑起来,为止。
树莓派 3B(32位)
一张 SD 卡(16GB 以上)
烧录软件(以 MacBook 上的 Balena Etcher 下载地址1 为例)
Wi-Fi 或者 有线网络
显示器 + HDMI 线 + 鼠标 + 键盘(可选)
树莓派官网2
树莓派提供两种安装方式:Raspberry Pi Imager 和 手动安装,手动安装即下载操作系统镜像文件+自行烧录到 SD 卡的方式。
Pi Imager 以前没留意过,不知道是不是这两年新加的,看介绍是只需要在电脑上(支持 Mac,Windows,Ubuntu)下载一个「Pi Imager」的应用程序,然后把 SD 卡插到电脑上,运行应用程序即可。我猜是把下载和烧录的工作在 Imager 里一起实现了,新手可以试试这种方式。
以下以手动安装方式为例:
还是刚才的网页,往下翻到「Manually install an operating system image」,点击「See all download options」
新手可以选择第一个选项,自带了图形操作界面和必要的软件,熟悉 SSH 操作的可以选择其他选项。
下载下来是一个 Zip 文件,然后我们插上 SD 卡,打开预先安装好的 Balena Etcher 软件,「Select Image」选到下载的 Zip 文件,「Select Target」选到 SD 卡,点击「Flash」,即开始烧录,等个几分钟。
将烧录完成的 SD 卡插到树莓派,给树莓派接上网线,有条件的可以用 HDMI 线连上显示屏,同时给树莓派配上鼠标键盘,当作一台电脑来操作。不具备这些条件也没关系,我们可以通过 Terminal 用 SSH 连接进去。
通过路由器查看树莓派的 IP 地址,一般在路由器上显示名称就是「Raspberry Pi」(建议在路由器上设置成静态 IP,绑定一下 mac 地址)。找到 IP 地址后,我们打开 Mac 上的 Terminal(Windows 下可以用 SSH CRT 或者 Putty),<host> 即树莓派的 IP,pi 是树莓派的默认用户名,初始密码是 raspberry
ssh pi@<host>
Docker 的安装比较简单,同样是几行命令就能搞定。
# 下载安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
# 执行脚本(过程有点长)
sudo sh get-docker.sh
# 修改用户权限
sudo groupadd docker
sudo usermod -aG docker pi
# 添加 Docker 服务到自启动
sudo systemctl enable docker
sudo systemctl start docker
运行一个 Hello-World 测试容器试一下
docker run hello-world
看到以下提示说明安装测试通过(首次运行的时候会从远程下载镜像)
Docker 安装完成后,可以通过命令行来管理,常见命令有
# 查看镜像
docker image ls
# 查看容器
docker ps
方便起见,我们安装一个图形化界面来操作容器 —— Portainer
# 拉取 Portainer 最新的镜像
docker pull portainer/portainer:latest
# 启动容器
docker run -d -p 9000:9000 --name portainer --restart=always -e TZ="Asia/Shanghai" -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
执行完成后,访问 http://<host>:9000
,<host> 为树莓派的 IP,首次访问需要注册一个管理员账户。连接方式选择「Local」
登录成功后就可以查看和操作容器了,重启、删除、查看状态等等。
Home Assistant 官网 3
官网的 Installation 指导提供了多种介质的安装方式,我们是安装在树莓派的 Docker 中,Docker 是一种容器,所以选择「Raspberry Pi」中的「Home Assistant Container」的安装方式
打开的页面中滚动到「Install Home Assistant Container」位置
可以看到 Raspberry pi 3 的 Install 下就一行脚本,对,执行它就可以了,是不是很简单。其中 /PATH_TO_YOUR_CONFIG
是你准备存放 HA 配置文件的位置,建议新建一个文件夹,比如 /home/pi/ha
之类的。那么,我们实际的安装脚本就是
# 创建配置文件的保存目录
mkdir /home/pi/ha -p
# 通过 Docker 运行 HA
docker run --init -d \
--name homeassistant \
--restart=unless-stopped \
-v /etc/localtime:/etc/localtime:ro \
-v /home/pi/ha:/config \
--network=host \
homeassistant/raspberrypi3-homeassistant:stable
这个安装过程会需要点时间,耐心等待,如果其中出现网络连接错误,重试即可。
安装完成后,我们就可以通过浏览器访问 HA 了,http://<host>:8123
,host 是指树莓派的 IP 地址。
首次打开 HA 页面,会要求注册,参考 Onboarding Home Assistant 4 设置一个管理员账户即可。
在设置区域和地图的时候,拖动地图选到自己家所在的位置,下拉选择一下时区,我选的是「Asia/Shanghai」。
下一步是添加智能家居设备,可以先跳过,后续再添加。设置成功后,就可以看到我们的 HA 首页了。默认 UI 只有几张卡片,稍稍做了一些调整,让它看起来好看一点:
可别小看了这个 UI 界面,不仅仅是一个智能家居的控制中心,而且也是一个非常强大的展示中心,我找了几个例子,可以感受一下。
也可以基于 HA 打造一个我们自己的「魔镜」,非常酷炫了。
至此,我们就完成了树莓派 + Docker + Home Assistant 的安装。步骤虽然有点繁多,但每一步其实都不复杂,新手小白也可以折腾起来。但真要实现我们理想中的智能家居终端,这还只是万里长征第一步 —— 搭好了环境。
慢慢来吧!
1. Balena Etcher 下载地址:https://balena.io/etcher ↩︎
2. 树莓派官网:https://www.raspberrypi.org/software/operating-systems/ ↩︎
3. Home Assistant 官网:https://www.home-assistant.io/installation/ ↩︎
4. 启动 Home Assistant:https://www.home-assistant.io/getting-started/onboarding/ ↩︎
发送给作者