起因
家里的智能家具的数量在逐渐增长,入坑了8266之类的单片机,又自己做了一些小玩意儿,智能家具的数量增速很快。同时,我也不想依赖于小米的智能家具,不想靠任何商业机构(开源,永远的神!),我想将自己的设备都接入。所以,我迫切需要一个家庭的智能家具服务器。把云服务,变成本地服务!
P.S.第一次安装homeassistant的时候,我家还没有智能家具。我也不知道装来干啥 (逃
服务器选择
说说部署到服务器的过程。家里有我之前配的一台 IDC 下来的华为 RH2288v2 。48线程128G的内存,虽然配置不错,但是太吵了!不可能一直开着!我的树莓派还有其它用处,我还在用它做一些东西,树莓派的性能实在太弱。
偶然间,从写字桌下翻出了吃灰多年的一台索尼笔记本,一眼认定,就是你了!
于是乎,我开始把这台快十年的老电脑,改成服务器!
正因如此, HomeAssistant 我将采用 docker 的方式进行安装。
配置概览
说起改造,人们大多认为,肯定要花点钱换换笔记本零件,然而过于平穷。所以硬件改造就算了,我们开始换它的系统吧!首先说说配置:
- CPU:Intel Core 2 Duo T7250 双核移动端CPU
- GPU:Intel Mobile GM965/GL960
没想到吧,我有独立显卡!没有卵用的显卡 - RAM:2GB
频率什么的已经无所谓了 - HDD: 250G
硬盘电机还能转读写速度比树莓派的 16G tf 卡快! - NET:令我没有想到的是它有一块千兆网卡!实测能跑到 850Mbps
然而就是这样一台电脑,到写博客为止,已经稳定运行了十天了!没有出任何问题。
P.S.老笔记本电脑的键盘真不错!
系统选择
一句话:商业发行版 爬!
在此基础上,我需要一个面向服务器的专用发行版,所以,毫不犹豫地,我使用了 Debian 11 。
对于这台服务器,我不需要任何图形化的桌面,这样可以极大程度地降低内存使用以及减少硬盘读写,这就像VPS一样,能ssh就足够了。至于笔记本的屏幕,把笔记本的合上就行了这样屏幕就不会亮了。
至于怎么安装 Debian 11 、换更新源、配置等基础操作,本文就不再解释了。
网络
由于部署的对象是 HomeAssistant 这类服务不应该部署在公网,例如VPS上。然而在国内使用,我们必须要一个可靠的网络环境,无论是 docker 还是访问 GitHub ( HACS 插件下载) 因此,我们必须要使用一个透明代理!(不嫌烦的话可以一个一个配置代理)因为我们要使用 docker ,我个人不建议使用 tproxy 的方式去代理,这样做的话会配置一系列的 nftable 规则,影响docker网络,还需要进一步配置才能为所有容器配置代理。
我选择采用 redirect 方式进行代理。在使用该方式的时候,UDP将不被代理,然而对于智能家具的中枢,压根不需要 UDP 代理。
将代理服务器运行在本地虽然增加了运行程序的数量,但我认为这明显是利大于弊的,这样可以保持它不受其他设备影响,保持较为稳定的运行状态。
你也可以使用这个项目来快速配置透明代理,基于 web 的控制界面非常适合这种情况,可以在其它设备上进行配置。
选择Docker
只要能装 docker 的服务器都是好服务器!
在透明代理的帮助下安装 docker 只需要按照官方指导进行安装,这里不再赘述。至于是使用 docker 镜像部署透明代理还是先部署透明代理再部署 docker 就是一个先有鸡还是现有蛋的问题,我选择先部署代理,这样可以不受到 docker 影响,以及获得一个“干净”的使用环境。
HomeAssistant 常用三种部署方式,树莓派配合镜像、虚拟机、docker。对于虚拟机方案,由于设备本身的原因,不太适合再搭建虚拟化平台,主要是核心数和内存限制,再者,运行效率肯定是要比 docker 低一些的。使用 docker 还有一个好处, Debian 下可以给出更多的操作可能性相比 HomeAssistant 的 Supervised 和 Add-ones 还是要强很多的。
官方页面中的安装方式比较这一节中,Container 这一列的不支持选项完全可以完美解决,而且还会提供更多的可能性。我们可以做到全系统级的备份,你可以参考《建立强大的备份系统》这篇博文进行全系统文件级备份。只要你对 Linux 了解一点点,这些完全不是问题。
部署
为了以后不用经常 ssh 到笔记本上进行维护,以及为了部署阶段方便管理,我选择了使用 Portainer 来使容器可视化。Portainer 本身作为一个容器进行部署,使用 web 界面进行管理,把渲染的任务交给客户端,使用体验还不错。
使用命令行的部署方式如下:
docker run -d \
--name homeassistant \
--privileged \
--restart=unless-stopped \
-e TZ=Asia/ShangHai \ #设置时区,可省略,配置过程中可自动更新
-v /PATH_TO_YOUR_CONFIG:/config \ #HomeAssistant 的配置文件存储位置,非常重要!
--network=host \
ghcr.io/home-assistant/home-assistant:stable #你也可以使用 Docker Hub 拉取镜像
对应 Portainer 的 GUI 操作就不说了,会命令行,GUI 也是非常简单的,但是要注意一定将配置输入完全!
配置
部署完成后,访问 http://ip地址:8123 即可对其进行配置,这都是可视化的,配置起来也非常简单,也就是时区,家庭地址,登录用户名、密码之类的简单操作,如果你不太会可以参照官方的 Onboarding 页面。配置完后跳转到主页,我们的 HomeAssistant 就初步建好了!接下来我将使用 HACS 来进行集成(integration)的安装。
安装HACS
HACS 全名:Home Assistant Community Store 。它是一个非常优秀的集成和前端下载器,可以快速部署集成,不用一个个地手动修改配置文件,使用起来非常方便,通常都是一键点击,便可完成下载、安装。
注意:HACS 并不能安装插件。在 HomeAssistant 使用的外界资源中有三个概念
- 集成 Integration
- 插件 Add-ones
- 前端
集成 Integration 是用来安装一些较为上层的东西,不改变系统本身的功能,在原有基础上进行操作,例如增加对某种智能家具产品的支持
插件 Add-ones 是用来改变较为底层的一些功能,例如实现 FTP 、数据库、使用 MQTT 通信等
前端 则是用来改变一些布局和主题的东西,为你的 HA 添加展示卡片。
这三个东西可以理解成浏览器的控件、插件、主题。判断前两个的区别就是是否需要改变系统,给系统安装新的东西。我们使用 Docker 部署是不支持使用插件的,但是我们完全可以依靠 Linux 搞出更多花活操作。
这就是为什么我提前安装了透明代理,否则 HACS 无法从 Github 上下载资源,你需要一个一个地手动安装。
对于安装 HACS 的条件,官方指出
- Home Assistant 2021.2.0 版本以上
- 一个 GitHub 账户
- 支持的 安装方式
- 可以访问 Home Assistant 的文件系统
- 你知道怎样查看 Home Assistant 的日志
- 可靠的互联网
以上内容为 2021.9.4 的中文翻译,具体情况可能发生变化,请访问 Prerequisites 页面来获取最新信息!
对于 Docker 部署的情况,安装 HACS 只需要在容器内执行命令即可
docker exec -it homeassistant bash #进入 docker 容器终端
wget -O - https://get.hacs.xyz | bash - #下载并安装 HACS
灯带脚本执行完成后,再次等待一段时间,直到 HomeAssistant 页面的 HACS 目录下提示准备完成,接下来,链接你的 GitHub 账户,重启 HomeAssistant 容器。 HACS 的安装就告一段落了。
安装一些必要的集成和前端
集成
- Spotcast:将 Spotify 连入 HA
- Xiaomi MIoT:支持大部分米家设备
前端
- Sun Card:日出日落显示
- RGB Light Card:RGB灯光调整
- Weather Card:更多天气信息
- Swipe Card:允许滑动操作便于触控设备
- button-card:大量的卡片按钮
- Mini Media Player:媒体控制
- mini-graph-card:多种统计图表
- Light Entity Card:灯光详细管理
在安装过程中,你可能需要频繁重启 docker 容器来适配更改。你还可以根据自己的智能家具使用情况安装更多的集成和前端,实现更多的设备接入以及智能家具的可视化。
设备接入
如果你安装了对应的插件,你就可以实现与支持设备的通信,注意,一般 HA 是以网络的方式接入智能家具的,无法使用 Zigbee 或 蓝牙,你需要使用一个网关来控制这些设备,这样将网关接入 HA ,通过给网关来实现和这些设备之间的来连接,从而控制设备。
同样的,路由器和电脑、手机之类的设备也可以通过这个方式接入,来实现多个层面的管理,例如,通过手机的WiFi连接状态确定人员的在家情况,电脑开启后按时休息提醒等。
设备与实体
购买来的智能家具,称为一个设备,例如:新风机、空气净化器、智能灯等,而实体(entity)是每一个可控制的选项.以一个新风机为例,它的实体有
- 风扇等级
- 辅热等级
- 二氧化碳浓度
- PM2.5浓度
- 各级滤芯的使用时常
- 各级滤芯的剩余寿命
- 动作列表
可以看到一个设备可以有十来个实体,有的实体是可以操作,可以有多个值,也可以只有一个值。有的实体则是不可操作的,例如二氧化碳浓度。
可视化
借助 HA 的概览面板我们可以制作出一个美观漂亮的智能家居可视化面板,虽然这个面板对于智能家具来说,用处并不是很大,不过可以做出类似 Magic Mirror 那样的效果,将大量信息显示到一个屏幕上,还可以配合人体传感器实现屏幕开关。
简单添加几个卡片,写一下 yaml 就可以获得一个不错的效果, yaml 使得界面高度可定制化,唯一缺点就是使用起来相对繁琐。
后续
后续工主要是设置自动化,不用张嘴就能控制家具,以及接入 ESP8266 设备,你可以使用 ESP home。之前使用 Awtrix 项目做了一个像素灯,它的服务端也就顺便搬到了这台电脑的 docker 上了。
后续的文章内容我会跟进 WS2812B 可寻址 LED 灯的原理 WLED 项目以及接入,MQ 传感器原理说明等。