官方推荐通过HA的add-on安装,但我之前安装的Core不含add-on,那么在HA的树莓派上跑ESPHome的docker容器?并不是最佳选择。

ESPHome是一套用配置文件就能简单管理众多ESP开发板的强大系统。通过编写YAML配置文件就能给开发板方便地添加各种传感器,且支持OTA更新固件。

需求

  1. ESPHome主要用来编译和上传固件。这要求运行的机器性能越强越好。树莓派的arm64交叉编译esp32效率较低,就算是x86的NAS一般性能还是比不上主力机的。
  2. 没必要24X7运行。数据采集直接通过HA,HA上可以设置传感器下线的通知,这时再跑ESPHome进行串口调试查错。
  3. 手动安装要建立虚拟环境,升级时特别要注意python版本(否则无法取得最新版)和相关依赖,没有docker方便。

通过Docker部署ESPHome

这里采用docker compose的方式,方便调整运行参数和添加watchtower进行自动更新等。我是将docker镜像挂载的配置放/opt/docker方便备份,而docker compose配置文件则放~/docker-compose下。

编辑~/docker-compose/esphome/docker-compose.yaml

1
2
3
4
5
6
7
8
9
10
11
version: '3'
services:
esphome:
container_name: esphome
image: esphome/esphome
volumes:
- /opt/docker/esphome/config:/config
- /etc/localtime:/etc/localtime:ro
restart: always
privileged: true
network_mode: host

启用privileged让镜像能直接调用USB等接口,这样无需特别指定挂载如/dev/ttyUSB0等设备,由于串口芯片的不同不同板子有可能是ttyUSBttyACMttyS等。

然后运行:

1
docker compose up -d

浏览器打开http://localhost:6052访问ESPHome Dashboard。

对接Home Assistant的亮灯程序

Web UI右下角绿色按钮+ NEW DEVICE - CONTINUE。给个名字如esp32-test然后输入无线网络SSID和密码,这样就不用每次增加设备都输一次,而且方便分享配置文件。密码文件位于/opt/docker/esphome/config/secrets.yaml

2022-10-17_21-14

选设备,没找到就选ESP32。然后SKIP

2022-10-17_21-16

此时主界面会出现新建的设备,点EDIT,board的完整列表见这里,名称就是其网址最后html的名字,比如nodemcu-32s

ESP32-DOIT-DEVKIT-V1-Board-Pinout-30-GPIOs

记住随机生成的api:encryption:key:,HA连接要用到。

文件末尾添加板载LED的配置:

1
2
3
4
switch:
- platform: gpio
name: "Board LED"
pin: 2

其中的pin根据所用开发板的板载LED对应的针脚自行修改。name建议用英文,否则传到HA的sensorID会用拼音。在HA里再改中文名。

点击右上角SAVE然后INSTALL。选Plug into the computer running ESPHome Dashboard,然后选对应的端口开始编译上传。

2022-10-17_21-27

上传成功后HA会自动发现。

浏览器打开HA的网址(如何安装Home Assistant)。

此时会有通知发现新设备,配置——设备与服务——集成中会新增ESPHome: esp32-test,点配置,输入刚才记下的apikey即可连通。

2022-10-17_21-37s

概览中会增加Board LED,点击按钮能控制板载LED的亮灭。

2022-10-17_21-41

之后更新代码无需连主机的USB,INSTALL后选Wireless进行OTA升级即可。

参考资料

Getting Started with the ESPHome Command Line