HASS-软件
安装 HASS 的方式很多,OS、Docker、Pip 等。初期只有 Pip 方式安装就是 Python 的包,这种方式问题很多(破坏系统结构,回滚麻烦等)有了 Docker 后这些问题被很好的解决。很多人喜欢虚拟机跑 OS,但我从来不推荐用 OS,因为国内的网络环境 OS 很多需要科学上网才能解决,而且相比其他,OS 更浪费系统资源。而 Docker 这种应用层的虚拟化更适合 HASS(不破坏系统结构,管理方便,备份简单),其实不止 HASS,任何服务应用只要能 Docker 都建议 Docker
系统
用 Linux 10 年了,服务器系统只推荐用 Linux,而且只推荐 Ubuntu 或基于 Ubuntu 的比如 Armbian 的 Ubuntu 版本。用过不少 Linux 发行版,Centos、Debian、Manjaro 用来用去还是 Ubuntu 好用,这个看你个人喜好,有这两个这两点原因让我坚持使用 Ubuntu
- 用户量大,社区支持好(Ubuntu 的用户量不用多说,大厂出的软件很多都是默认提供 deb 的包,网上关于 Ubuntu 的问题很容易搜索解决)
- 驱动支持更多(很多老硬件都能很好支持,相比他爸 Debian 和其他 Linux,能省很多事, HASS 里常用的蓝牙驱动会支持的更好基本都免驱)
就以上两点,就为我省了很多事,所以我是个 Ubuntu 的忠实用户
虚拟化
如果你执意要玩 OS,那虚拟机肯定是最好的选择,虚拟机的图形化简介明了,备份方便。常用的有以下几个
- PVE(基于 Debian 扩张性强)
- EXSI(闭源,商用稳定)
- Hyper-V(Win10+自带,资源占用低)
- LXD(无界面,基于 LXC)
如果是个人并且你刚接触虚拟化,我建议从 PVE 开始,因为基于 Debian 驱动这块相比 EXSI 稍微好点。但如果你买的服务器厂家提供 EXSI 的镜像那 EXSI 就是个不错的选择。至于 Hyper-V,我完全不建议,除非你和我一样必须用 Win 的桌面,偶尔有需要 Linux 编译。那 Win 里用 Hyper-V 装个 Linux 不错。还有个更好高端点的玩法,那就是 LXD,相当于 LXC 的升级版具体教程可以看看我单独写的笔记,不需要界面更适合 Linux 熟练后的你。虚拟化的教程太多了,我就不说了,只推荐看看 LXD 的笔记
Docker
Docker 的好处就是不破宿主机的文件结构,未作映射的情况下文件都在容器内增删改查,一般我们只需要将如配置、数据、日志映射到宿主机的目录即可,方便我们在不进入容器的内部修改配置,备份数据配置等。我的个人习惯是把容器的配置都映射到 /opt 目录下方便管理
root@ji:/opt# tree -L 2
.
├── ac2mqtt
│ └── conf
├── containerd
│ ├── bin
│ └── lib
├── docker
│ ├── build
│ └── docker-compose.yml
├── esphome
│ └── conf
├── homeassistant
│ ├── conf
│ └── ssh
├── mosquitto
│ ├── conf
│ ├── data
│ └── logs
├── naive-http
│ └── conf
├── naive-socks
│ └── conf
├── nodered
│ └── data
├── piper
│ └── data
└── whisper
└── data
结构清晰,每个容器一个目录
安装
Docker 安装最简单的就是 Goolge 看下官方教程,有人喜欢一条命令的,但我更建议从头打一遍
HASS 全家桶
全家桶常用的几个
- homeassistant(HASS)
- nodered (自动化必备)
- mosquitto(MQTT 服务)
- esphome (DIY 智能家居必备)
- postgres (数据库,存储 HASS 日志)
-
docker-compose.yml
建议按我的目录放 /opt/docker/docker-compose.yml
services: homeassistant: image: homeassistant/home-assistant:2023.5.4 container_name: homeassistant volumes: - /etc/localtime:/etc/localtime:ro - /opt/homeassistant/conf:/config - /mnt:/mnt - /opt/homeassistant/ssh:/root/.ssh - /run/dbus:/run/dbus:ro environment: - TZ=Asia/Shanghai network_mode: host restart: always privileged: true nodered: image: nodered/node-red:3.0.2 container_name: nodered volumes: - /etc/localtime:/etc/localtime:ro - /opt/nodered/data:/data environment: - TZ=Asia/Shanghai network_mode: host restart: always mosquitto: image: eclipse-mosquitto:latest container_name: mosquitto volumes: - /etc/localtime:/etc/localtime:ro - /opt/mosquitto/conf:/mosquitto/config - /opt/mosquitto/data:/mosquitto/data - /opt/mosquitto/logs:/mosquitto/log environment: - TZ=Asia/Shanghai network_mode: host restart: always stdin_open: true tty: true esphome: image: esphome/esphome:2023.5.3 container_name: esphome volumes: - /etc/localtime:/etc/localtime:ro - /opt/esphome/conf:/config - /dev:/dev environment: - TZ=Asia/Shanghai network_mode: host restart: always privileged: true postgres: image: timescale/timescaledb-ha:pg15.2-ts2.10.0-p0 container_name: postgres volumes: - /etc/localtime:/etc/localtime:ro - /mnt/db/postgres/data:/var/lib/postgresql/data environment: - TZ=Asia/Shanghai - PGDATA=/var/lib/postgresql/data/pgdata - POSTGRES_PASSWORD=postgres network_mode: host restart: always
-
启动
docker compose -f /opt/docker/docker-compose.yml up -d
-
更新启动并删除旧的镜像(一条龙)
docker compose -f /opt/docker/docker-compose.yml pull --ignore-pull-failures && docker compose -f /opt/docker/docker-compose.yml up -d --remove-orphans && docker system prune --volumes -af && docker buildx prune -af
-
日志查看
查看 HASS 的实时日志
docker logs -f --tail 1000 homeassistant
-
其他命令
查看所有正在运行的容器
docker ps
强制停止并删除容器
docker rm -f homeassistant
删除无用镜像
docker system prune -af
数据库
非必要,但数据库是为了更好的查看 HASS 的历史日志,比如电量统计。这里只推荐基于 Postgres 的时序数据库 TimescaleDB。安装注意目录权限具体教程可以看看 Docker Hub
HASS 的 configuration.yaml 添加
# Recorder
recorder:
db_url: postgresql://名称:密码@192.168.2.12:5432/数据库名
purge_keep_days: 365
备份
其实使用 Docker 去管理应用后,备份只需要通过 Git 就能很好实现,基本只需要备份配置即可,日志大部分情况是可以忽略的,而且 Git 很方便查看历史,万一后悔删了啥也能找回来。Git 教程就太多了这里不过多介绍,我都是备份到 GitHub,结构和上面说到的系统 /opt 目录是一致的。注意备份的 Git 仓库设置成私有的防止泄露个人信息
添加、备注、提交
git add . && git commit -m update && git push
.gitignore 忽略文件
*.db*
*.log*
containerd
google
.git
*.mp3
*.wav
*.onnx
效果