通过ESXi安装Home Assistant OS/Install Home Assistant OS on ESXi
因为米家APP本身的功能实在太少了而且有很大的局限性,因此想把支持米家的设备都接入到Home Assistant中。
大概了解了一下,当下比较可靠且好用的方案是用Xiaomi Miot Auto来集成米家设备。根据其文档描述,需要先给Home Assistant安装HACS(社区商店),然后才能从HACS中安装。
因此本次的目标是:通过ESXi安装Home Assistant OS
,然后安装HACS扩展
,最后通过
Xiaomi Miot Auto
集成米家。
Home Assistant的官方文档中提供了多种安装方式,网上随手一搜比较常见的是docker
安装,不过根据官方功能对比,其他安装方式在功能上多少都有点局限性。而Home Assistant OS
作为官方封装的操作系统,自然是推荐的安装方式,并且功能完全解锁的。刚好家里搭了ESXi虚拟化平台,选择OS方式安装再合适不过。
ESXi所在的机器是一台畅网J4125 i226
,拥有32G内存,最终分配了4G内存用于HA OS。
各个软件的版本号如下:
VMware ESXi 7.0.3
Home Assistant 13.2
最终花了一路下来还是踩了不少坑,不过基本上是网络相关的问题。
安装Home Assistant OS
下载文件
首先需要下载 Home Assistant的虚拟机文件,这里用的版本是Home Assistant 13.2,下载其中的haos_ova-13.2.vmdk.zip
,然后解压出haos_ova-13.2.vmdk
备用。
创建目录并上传文件
进入EXSi管理后台,然后打开存储
中的数据存储浏览器
,创建一个目录,目录名与后续虚拟机的名称一致,我这里用的是HomeAssistant-13.2
。然后将前面解压出来的haos_ova-13.2.vmdk
上传到这个目录中。
创建虚拟机
我这里的方式是通过创建新的虚拟机
,然后通过挂载现有硬盘也就是前面的vmdk
文件来完成安装。其实应该也是可以用从OVF或OVA文件部署虚拟机
,目前(2024.11.24)官方文档中通过ESXi安装似乎就是给了个OVA文件。不过我习惯用vmdk来做,就没去试OVA。
所以第一步选择创建新虚拟机
,然后下一页到输入名称,名称和之前的目录名一致:HomeAssistant-13.2
。下面的选项没啥影响,随便选个差不多的完事。
在下一页进行配置的设置。
官方推荐的最小配置是:
2GB 内存
32GB 存储空间
2个CPU核心数
我这里设置CPU核数为2
,内存分配4GB
。
因为我们是通过添加现有硬盘来安装的,因此默认的那个硬盘可以移除掉,没必要再额外创建一个多余的硬盘。
然后光驱这种没用到的也可以移除掉,当然不移除也没啥影响。
然后添加一个现有硬盘,选择vmdk文件,并将该硬盘的控制器位置
由SCSI控制器0
改为IDE控制器0
。
在同一步骤的上方,点击VM选项,找个引导选项,将固件改为EFI
。
然后完成后,打开电源等待启动完毕即可。进入控制台,会加载出Home Assistant的logo以及访问URL等信息,至此安装完毕。
配置和使用
安装Home Assistant其实很简单,并没有遇到什么问题。但是接下来有挺多坑。
Home Assistant中会用到Github
以及Docker
进行服务和插件之类的下载,由于网络的原因,基本上不可能直接使用。
在安装完毕之后,需要进行初始化。访问URL会进入一个初始化界面,需要初始化的时间大概10-20分钟左右,但是大概率会卡在docker相关的操作,导致无法完成初始化。
所以第一步想到的就是:SSH到服务器上进行某些配置的修改
但是在安装完毕后,并没有看到系统账号密码相关的信息,直接去SSH 22端口也会发现并不能连接。因此只能先通过ESXi的控制台访问。
打开控制台,默认进入到一个有Home Assistant Logo的界面,这个界面其实并不是通常意义上系统的Shell,而是Home Assistant command line
,一个用来操作Home Assistant
的命令行工具。此时输入ls
之类的linux命令是没用的。
翻阅了一些资料,发现想要从Home Assistant Cli 切换为Shell,我们只需要输入login
命令,不需要输入账号密码,此时就能进入shell,然后就能使用熟悉的ls
等命令了。
因为我本身有个旁路网关
,因此进入Shell后,我首先想到的是修改网卡的配置,修改成指定的静态IP,然后设置成旁路由的网关和DNS。但是最终发现这么做并没什么用,虽然能让初始化正常进行,但是后续的下载插件无法正常请求。并且修改网络配置在后续初始化完成后,进入系统的设置-系统-网络
中有GUI可以设置,因此完全没必要做这一步。
不过还是记录一下相关的操作:
-
显示所有的连接
nmcli connection
-
修改某一连接,我这里的是`Supervisor enp2s1
nmcli con edit "Supervisor enp2s1"
-
查看IPV4信息
print ipv4
-
修改IPV4的IP/DNS/GATEWAY
# 设置想要的静态IP 比如192.168.80.100 set ipv4.addresses 192.168.80.100/24 # 设置DNS set ipv4.dns DNS的IP # 设置网关 set ipv4.gateway 网关的IP # 保存设置 save # 退出 q
在我配置完网关等信息后,发现下载插件会报Docker请求相关的错误。于是决定还是通过修改/etc/docker/daemon.json
文件来加速访问。结果发现在Home Assistant OS下,该文件是只读的,无法直接进行修改。
{
"storage-driver": "overlay2",
"log-driver": "journald",
"experimental": true,
"iptables": true,
"log-opts": {
"tag": "{{.Name}}"
},
"data-root": "/mnt/data/docker",
"deprecated-key-path": "/mnt/overlay/etc/docker/key.json",
"bip": "172.30.232.1/23"
}
找了半天,并没有发现官方的解决方案能修改。最后在一个俄罗斯博客中发现了解决方案,大意是可以在/etc/udev/rules.d
中建立两个文件,一个是规则文件00-docker-mirrors-workaround.rules
,用于在开机的时候通过配置的规则覆盖默认的daemon.json
。另一个是自定义的docker-daemon.json
,用来覆盖默认的文件。
00-docker-mirrors-workaround.rules
的内容是:
ENV{ID_FS_LABEL}="hassos-overlay", ACTION=="change", RUN+="/usr/bin/systemd-mount --no-block -o bind /etc/udev/rules.d/docker-daemon.json /etc/docker/daemon.json"
而docker-daemon.json
的内容根据自己的情况,在所有的基础上添加或修改所需要的配置。我这里的配置是私有的,就不贴出来了,无非就是加registry-mirrors
或者proxies
。
因为没法直接上传,而直接手写又很容易错。所以我是在外面修改完毕了,起了一个本地的Web服务,然后通过curl命令
下载。然后重启系统即可,第一次重启后执行cat /etc/docker/daemon.json
发现内容并没有变化,然后再次重启后才被覆盖。此时就可以在后台中的设置-加载项
中正常添加插件了。我觉得很有必要先添加的两个插件:
Samba share
,开启SMB功能,方便访问文件。在配置页可以配置账号密码,建议和后台的一致,方便管理。然后启动即可。访问路径\\HA的IP地址
即可Terminal & SSH
,提供了一个Web 终端界面进行SSH。
安装HACS
HACS是The Home Assistant Community Store
的缩写,也就是Home Assistant的社区商店,提供了一个额外的页面来安装管理更多的插件/集成。
此次我安装HACS的目的就是为了集成米家,需要的集成叫Xiaomi Miot Auto
。
安装HACS有两种方式,可以通过 HACS文档 中的下载HACS插件
来下载HACS。也可以到Github仓库中的Release中手动下载安装。
最终实际上都是在HA系统的config
目录下,创建一个custom_components
目录,然后在这个目录中,再创建一个hacs
目录,将HACS
的压缩文件中的内容解压到其中,然后重启即可。
安装Xiaomi Miot Auto
在安装完HACS并重启后,Home Assistant后台的左侧栏会多一个HACS的图标,在其中搜索xiaomi
然后找到Xiaomi Miot Auto
并下载即可。也可以参照文档进行手动安装。