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 日志)
  1. docker-compose.yml 配置文件

    建议按我的目录放 /opt/docker/docker-compose.yml

    version: "3"
    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
    
  2. 启动

    docker compose -f /opt/docker/docker-compose.yml up -d
    
  3. 更新启动并删除旧的镜像(一条龙)

    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
    
  4. 日志查看

    查看 HASS 的实时日志

    docker logs -f --tail 1000 homeassistant
    
  5. 其他命令

    查看所有正在运行的容器

    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 仓库设置成私有的防止泄露个人信息

hass-soft1

添加、备注、提交

git add . && git commit -m update && git push

.gitignore 忽略文件

*.db*
*.log*
containerd
google
.git
*.mp3
*.wav
*.onnx

效果

hass-soft2