Hass.io Amd64 Debian 9 安装到配置插件全过程

概述

本文安装操作系统如下:

  • Debian 9
  • CPU 2核
  • 内存 2G

环境搭建

参考自https://github.com/home-assistant/hassio-build/tree/master/install

注意:本文写编写日期为2017年11月30日,以后更新可能出现增加依赖的情况,故建议先阅读上方参考文档再进行安装操作

依赖清单

  • docker
  • bash
  • socat
  • jq
  • curl
  • avahi-daemon
  • dbus-daemon

Docker 搭建

参考自[Docker — 从入门到实践/Debian 安装 Docker CE/使用脚本自动安装

](https://yeasy.gitbooks.io/docker_practice/content/install/debian.html)

在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,Debian 系统上可以使用这套脚本安装:

1
2
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的 Edge 版本安装在系统中。

启动 Docker CE

1
2
$ sudo systemctl enable docker
$ sudo systemctl start docker

Debian 7 Wheezy 请使用以下命令启动

1
$ sudo service docker start

建立 docker 用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

建立 docker 组:

1
$ sudo groupadd docker

将当前用户加入 docker 组:

1
$ sudo usermod -aG docker $USER

测试 Docker 是否安装正确

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1\. The Docker client contacted the Docker daemon.
2\. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3\. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4\. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/

若能正常输出以上信息,则说明安装成功。

镜像加速器 Ubuntu 16.04+、Debian 8+、CentOS 7

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

1
2
3
4
5
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}

之后重新启动服务。

1
2
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

修复 not support swap limit capabilities 错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Adjust memory and swap accounting
When users run Docker, they may see these messages when working with an image:
WARNING: Your kernel does not support cgroup swap limit. WARNING: Your
kernel does not support swap limit capabilities. Limitation discarded.
To prevent these messages, enable memory and swap accounting on your system. To enable these on system using GNU GRUB (GNU GRand Unified Bootloader), do the following.
Log into Ubuntu as a user with sudo privileges.
Edit the /etc/default/grub file.
Set the GRUB_CMDLINE_LINUX value as follows:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Save and close the file.
Update GRUB.
$ sudo update-grub
Reboot your system.

安装剩余依赖

  • bash
  • socat
  • jq
  • curl
  • avahi-daemon
  • dbus-daemon
1
$ sudo apt install socat jq curl avahi-daemon dbus-daemon

dbus-daemon Debian 9 最小化安装默认也带了,所以不需要安装。

安装 Hass.io

切换到 root ,不能用 sudo

1
$ sudo -s

执行以下命令

1
2
3
4
5
6
7
8
# curl -sL https://raw.githubusercontent.com/home-assistant/hassio-build/master/install/hassio_install | bash -s
[INFO] Install supervisor docker
[INFO] Install generic HostControl
[INFO] Install startup scripts
[INFO] Init systemd
Created symlink /etc/systemd/system/multi-user.target.wants/hassio-supervisor.service → /etc/systemd/system/hassio-supervisor.service.
[INFO] Start services

验证是否运行成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# systemctl status hassio-supervisor
● hassio-supervisor.service - Hass.io supervisor
Loaded: loaded (/etc/systemd/system/hassio-supervisor.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-11-30 13:14:42 CST; 1min 9s ago
Process: 4560 ExecStartPre=/usr/bin/docker stop hassio_supervisor (code=exited, status=1/FAILURE)
Main PID: 4566 (hassio-start)
Tasks: 9 (limit: 4915)
Memory: 5.6M
CPU: 84ms
CGroup: /system.slice/hassio-supervisor.service
├─4566 /bin/bash /usr/bin/hassio-start
└─4591 docker run --name hassio_supervisor -v /var/run/docker.sock:/var/run/docker.sock -v /var/run/hassio-hc.sock:/var/run/hassio-hc.sock -v /usr/share/hassio:/data -v /var/log/supervisor-lo
11月 30 13:14:43 docker hassio-start[4566]: 17-11-30 05:14:43 INFO (MainThread) [__main__] Setup HassIO
11月 30 13:14:43 docker hassio-start[4566]: 17-11-30 05:14:43 INFO (SyncWorker_0) [hassio.dock.supervisor] Attach to supervisor homeassistant/amd64-hassio-supervisor with version 0.75
11月 30 13:14:53 docker hassio-start[4566]: 17-11-30 05:14:53 INFO (MainThread) [hassio.host_control] Send 'info' to HostControl.
11月 30 13:14:54 docker hassio-start[4566]: 17-11-30 05:14:54 INFO (MainThread) [hassio.host_control] Receive from HostControl: { "type": "generic", "version": "0.3", "last_version": "0.3", "hostname": "
11月 30 13:14:54 docker hassio-start[4566]: 17-11-30 05:14:54 INFO (MainThread) [hassio.homeassistant] No HomeAssistant docker homeassistant/qemux86-64-homeassistant found.
11月 30 13:14:54 docker hassio-start[4566]: 17-11-30 05:14:54 INFO (MainThread) [hassio.homeassistant] Setup HomeAssistant landingpage
11月 30 13:14:54 docker hassio-start[4566]: 17-11-30 05:14:54 INFO (SyncWorker_2) [hassio.dock.interface] Pull image homeassistant/qemux86-64-homeassistant tag landingpage.
11月 30 13:14:57 docker hassio-start[4566]: 17-11-30 05:14:57 INFO (SyncWorker_2) [hassio.dock.interface] Tag image homeassistant/qemux86-64-homeassistant with version landingpage as latest
11月 30 13:14:57 docker hassio-start[4566]: 17-11-30 05:14:57 INFO (SyncWorker_1) [hassio.dock.homeassistant] Start homeassistant homeassistant/qemux86-64-homeassistant with version landingpage
11月 30 13:14:57 docker hassio-start[4566]: 17-11-30 05:14:57 INFO (MainThread) [hassio.addons.git] Clone addon https://github.com/home-assistant/hassio-addons repository

设置开机启动及管理命令

开机启动命令

1
$ sudo systemctl enable hassio-supervisor

重启命令

1
$ sudo systemctl restart hassio-supervisor

停止命令

1
$ sudo systemctl stop hassio-supervisor

配置文件及目录介绍

如果用一键安装脚本安装的 Hass.io,那么配置文件目录会在 /usr/share/hassio

1
2
3
4
5
6
7
8
9
10
11
12
nero@docker:/usr/share/hassio$ ll
总用量 48
drwxr-xr-x 6 root root 4096 11月 30 13:14 addons
-rw-r--r-- 1 root root 10997 12月 1 11:33 addons.json
drwxr-xr-x 2 root root 4096 11月 30 13:14 backup
-rw-r--r-- 1 root root 191 12月 1 10:21 config.json
drwxr-xr-x 10 root root 4096 11月 30 14:40 homeassistant
-rw-r--r-- 1 root root 125 11月 30 14:57 homeassistant.json
drwxr-xr-x 2 root root 4096 11月 30 13:14 share
drwxr-xr-x 2 root root 4096 11月 30 15:36 ssl
drwxr-xr-x 2 root root 4096 11月 30 13:14 tmp
-rw-r--r-- 1 root root 76 12月 1 06:27 updater.json
  • addons:所有插件的共享目录都在这里
  • addons.json:所有插件的配置文件都在这里
  • backup:应该是升级备份目录
  • config.json: hassio 主配置文件
  • homeassistant: HomeAssistant 的配置文件目录
  • homeassistant.json: HomeAssistant的信息,猜测是hassio来连接 homeassistant api 的参数,里面包含密码端口等
  • share: 外部磁盘挂载地,可以将U盘挂载到这个目录让homeassistant能读取
  • ssl: SSL证书目录
  • tmp:临时目录
  • updater.json:记录了当前的hassio和homeassistant版本

如果你是从 hassbian 之类的自搭建环境下迁移过来,那么可以将 ~/.homeassistant 目录直接覆盖掉上述的 homeassistant 目录。
注意如果你的HomeAssistant配置文件是设置了密码,请到homeassistant.json文件里面填写自己的密码格式如下:

1
2
3
4
5
6
7
8
{
"boot": true,
"devices": [],
"watchdog": true,
"ssl": false,
"port": 8123,
"password": "你的密码"
}

插件安装

Mariadb

Mariadb 是 Mysql 的分支,自从被 Oracle 收购后发行版提供的免费安装包全部都转到 Mariadb,据说性能比 Mysql 要好。

如果机器内存足够,可以给 HomeAssistant 部署上,默认的 Sqlite 性能如果数据大了的话(比如一年的记录量什么的)可能读取速度会比较慢。

下面是步骤截图,由于我已经部署了一遍,后面再写的记录,所以界面会有所不同。但是操作是一样的。

安装 Mariadb

mariadb_01

mariadb_02

mariadb_03

配置 Mariadb

安装完后可以到回 Hass.io 首页找到 Mariadb,点进去,我们在 Options 下修改下配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"databases": [
"homeassistant"
],
"logins": [
{
"username": "hass",
"host": "homeassistant",
"password": "你的密码"
}
],
"rights": [
{
"username": "hass",
"host": "homeassistant",
"database": "homeassistant",
"grant": "ALL PRIVILEGES ON"
}
]
}

注意:要修改数据库密码。
注意:配置文件格式有可能根据版本更新而更新,最终配置文件格式请到官网上参考https://home-assistant.io/addons/mariadb/

最后因为我们的数据库只是给 HomeAssistant 使用所以 Network 里面把端口删掉,让 mysql 全程走 Docker 内部网络。

mariadb_04

修改 configuration.yaml 应用 Mariadb

在没有安装 Samba 插件之前,我们可以在终端上用 VIM 编辑 configuration.yaml 文件添加如下配置:

1
2
3
4
recorder:
purge_interval: 2
purge_keep_days: 5
db_url: mysql://hass:数据库密码@addon_core_mariadb/homeassistant?charset=utf8

最后重启 HomeAssistant 的 Docker

1
$ docker restart homeassistant

如果 HomeAssistant 页面没有报错的话,那么就代表设置正常,在页面查看历史数据正常的话就代表设置已经完成了。

这时候你可以将你的 homeassistant_v2.sql 这个文件删除了,和 Sqlite 说拜拜。

Samba

Samba,是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。

可以通过网络共享访问 Hass.io 的配置文件目录方便管理和修改配置文件。

安装方法和 Mariadb 雷同,我这边就不一一截图直接跳到配置文件编写部分。

设置 Samba

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"workgroup": "WORKGROUP",
"name": "hassio",
"guest": false,
"map": {
"config": true,
"addons": true,
"ssl": false,
"share": true,
"backup": true
},
"username": "用户名",
"password": "密码",
"interface": "网络接口"
}

注:网络接口可以通过 ifconfig 命令获得。
注2:如果输入ifconfig显示找不到该文件或文件夹可以使用如下命令安装。

1
$ sudo apt-get install net-tools

map 里面的参数可以调整 hassio 里面的文件夹是否显示在 Samba 里,一般按照默认设置就可以了。

配置好后按 Start 即可。

然后在 Windows 资源管理器中输入 //hassio 输入用户名密码即可访问,我们就可以像本地一样编辑配置文件了。

Let’s Encrypt

Let’s Encrypt 是一个免费的 SSL 证书提供机构,他们可以免费为你签发 SSL 证书使用,为你提供 SSL 加密服务。

而这个插件就是为你自动签发 SSL 证书并且自动更新证书。

设置 Let’s Encrypt

设置之前请将 Hass.io 主机的 443 端口映射到公网,而且您的域名必须指向你的公网IP。

安装好插件后我们只需写入如下配置文件。

1
2
3
4
5
6
7
8
9
{
"challenge": "https",
"email": "你的邮箱",
"domains": [
"你的域名"
],
"certfile": "fullchain.pem",
"keyfile": "privkey.pem"
}

保存后点击 Start 即可。

此时你可以发现 ssl 目录下会出现 fullchain.pemprivkey.pem两个证书文件。

为我们部署 nginx 做准备。

NGINX Home Assistant SSL proxy

Nginx(发音同engine x)是一个 Web服务器,也可以用作反向代理,负载平衡器和 HTTP缓存。该软件由 Igor Sysoev 创建,并于2004年首次公开发布。同名公司成立于2011年,以提供支持。

Nginx 是免费的开源软件,根据类似 BSD许可证的条款发布。大部分 Web服务器通常使用 NGINX 作为负载均衡器。

我刚学 Linux 的时候就学了它,然后就没法再学习 Apache 了,因为 Nginx 的配置实在太简单了。

设置 NGINX Home Assistant SSL proxy

注:部署 NGINX Home Assistant SSL proxy 之前必须先获得 SSL 证书。

获取证书不一定要用 Let’s Encrypt,如果你的域名购买的时候有证书,也可以,甚至你可以买证书,但是证书必须放到 /usr/share/hassio/ssl目录下。

在 Options 写下如下配置

1
2
3
4
5
{
"domain": "你的域名",
"certfile": "fullchain.pem",
"keyfile": "privkey.pem"
}

注意:这里的域名必须与你签发的证书域名一致

点 Save 保存后,点 Start 运行。

这时候我们在浏览器输入 https://你的域名 这时候就能够访问到 HomeAssistant 的页面了。

部署 Nginx 后,访问的速度会比原先的速度要好一些,而且页面是使用 HTTP2 协议,会对网页元素进行压缩传输,效率比传统的 HTTP 1.0 协议快很多。

Mosquitto broker

使用 Sonoff 开关的话,我们就必须部署 Mosquitto broker 了,安装后写入如下配置。

配置 Mosquitto broker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"plain": true,
"ssl": false,
"anonymous": true,
"logins": [
{
"username": "mqtt的用户名",
"password": "mqtt的密码"
}
],
"customize": {
"active": false,
"folder": "mosquitto"
},
"certfile": "fullchain.pem",
"keyfile": "privkey.pem"
}

点击 SAVE 保存,再点击 START 即可。

在 Configuration.yaml 添加 mqtt 服务信息

1
2
3
4
5
6
7
mqtt:
broker: addon_core_mosquitto
port: 1883
client_id: home-assistant-1
keepalive: 60
username: mqtt用户名
password: mqtt密码

配置好后重启 HomeAssistant。

1
$ docker restart homeassistant

Homebridge

首先点击 Hass.io 页面右上角的购物袋图标,在Add-On Repositories输入https://github.com/hassio-addons/repository后点SAVE,点击右上角刷新按钮。

刷新完后找到 Homebridge 点击 install。

配置 Homebridge

Options输入一下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"log_level": "info",
"avahi_interfaces": "ens192",
"avahi_hostname": "",
"avahi_domainname": "local",
"enable_ipv6": false,
"packages": [],
"init_commands": [
"npm config set registry https://registry.npm.taobao.org",
"sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk update"
],
"plugins": []
}
  • log_level: 日志等级,默认即可。
  • avahi_interfaces: 监听的网络接口,建议通过 ifconfig 找到主宿机器的网络接口名称写上,官方说法不写也是没问题的。
  • avahi_hostname: 保持默认即可。
  • avahi_domainname: 保持默认即可
  • enable_ipv6: 一般家庭网络没有 IPv6 建议使用false关闭此选项。(默认true)
  • packages: 自动 Alpine 的软件包,可以装类似 ffmpeg 等。但是由于默认的源太慢了,而 packages 动作比下面的 init_commands 要前,所以导致初始化过程十分长,我建议在下一个选择再安装包
  • init_commands: 可以运行用户自定义的 shell 命令,我在此添加了阿里云的源方便安装软件。并且将 npm 的源也切换到淘宝源,为下面的插件安装做准备。
  • plugins: 可以安装自定义的 npm 插件。仅需写上插件名称即可。

下面是我安装 ffmpeg 插件的范例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"log_level": "info",
"avahi_interfaces": "ens192",
"avahi_hostname": "",
"avahi_domainname": "local",
"enable_ipv6": false,
"packages": [],
"init_commands": [
"npm config set registry https://registry.npm.taobao.org",
"sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk update && apk add ffmpeg"
],
"plugins": [
"homebridge-camera-ffmpeg"
]
}

完成配置后点击 SAVE 保存,点击上方的 START 运行即可。

IPhone 添加 Homebridge

点击下方的 Logs,不断点击等待刷出八位 code 为止。

1
2
3
4
5
Or enter this code with your HomeKit app on your iOS device to pair with Homebridge:
┌────────────┐
│ 123-45-678 │
└────────────┘

至此可以在 iphone 或者 ipad 中的 HomeKit 添加配件了。