树莓派+Docker—轻松打造自己的智能家居控制中心

作者 donggua

2017-08-25 02.开源硬件, 04.智联网 无评论 脚印:

本质上我只是个懒癌患者,不过看到值友的这篇群晖上用容器来运行 HomeAssistant (后文简称为 hass)和 Homebridge,来了点兴致,就继续来装个逼就跑吧树莓派+Docker—轻松打造自己的智能家居控制中心

感觉可以写个《安装 HomeAssistant 有几种方法》的系列文章

没有树莓派?没关系,手机也行!闲置安卓设备打造智能家庭中枢起因在大妈上闲逛,看到这个智能家庭的文章。虽然租住的小地方里一件智能家居设备都没有,不过看了下感兴趣的人还是挺多的。树莓派打造家庭中枢教程(完整版)树莓派打造家庭中枢教程(完整版)追加修改(2017-05-0123:38:35):实话讲,不知道…比你多活一天|141评论137收藏1k查看详情之前我有投过一篇利用安卓设备来跑 hass 的,原意是想着用平板来运行,然后平板直接开着 hass 的管理页面,挂在墙上也是个不错的点子;或者直接用安卓盒子来跑也应该挺不错,在电视机上就能用 hass 页面来管理也应该挺溜的啊树莓派+Docker—轻松打造自己的智能家居控制中心 。

不过似乎我用手机来做例子,把大家都带到沟里去了树莓派+Docker—轻松打造自己的智能家居控制中心。当然,我不会告诉你们这篇文章是因为在评论里挖了坑来填坑的树莓派+Docker—轻松打造自己的智能家居控制中心

树莓派+Docker—轻松打造自己的智能家居控制中心

同样的,本文也并不能教会一个小白如何使用 HomeAssistant,内容方面也仅仅是如何使用 Docker 在树莓派上安装 HomeAssistant 而已,不会讲如何配置。

要有派 

树莓派3_淘宝搜索淘宝搜索是最智能的商品搜索引擎,通过大数据的运营,准确的理解商品与用户,提供精准的个性化搜索体验。s.taobao.com去看看推荐是树莓派3B,不过 2B 和 zero 也是可以的,然后安装好最新的 Raspbian Jessie Lite。简单来说就是在这  下载好 Raspbian Jessie Lite 的 IMG 镜像文件,然后写到 TF 卡中,插入树莓派的卡槽就可以了树莓派+Docker—轻松打造自己的智能家居控制中心

这里有个需要注意的地方,新版 raspbian 默认没有开启 ssh,所以写好 TF 卡之后,还需要在 TF 卡中的  /boot/ 目录下创建一个 ssh 文件(没有后缀,内容为空即可,Windows 用户请开启文件后缀显示来确认文件不带任何后缀——比如 ssh.txt 这种就不行。)。

Windows 上的镜像写入工具我个人推荐 Rufus,在我之前的原创中有介绍——开源、免费、有绿色版(Portable)、还自带简体中文树莓派+Docker—轻松打造自己的智能家居控制中心!可以在它的官下载。

如果是 Mac 或者 Linux 用户,可以用 DD 命令(要注意别写错盘了树莓派+Docker—轻松打造自己的智能家居控制中心),或者用 Etcher 这个工具,同样是开源、免费、有绿色版(Portable),不过没中文树莓派+Docker—轻松打造自己的智能家居控制中心。可以在它的官网 下载。

Windows 上的终端软件还是继续推荐 XShell 和 XFtp,虽然最近有爆出官方后门,不过最新版已经解决了。只是家用的话,后门也可以说没啥影响,当然,你觉得不能接受的话可以用其他软件代替。另外要注意的是,国内代理商是家挺恶心的公司(思杰马克丁,有兴趣了解的话可以去逼乎搜一下),有修改官方安装包和证书,而且价格比原厂还贵,所以强烈建议直接到官方网站下载安装,家庭和学校使用是可以免费使用的(国内代理有修改安装包,没有家用或者学校这个选项)。

总的来说,你应该已经安装好 raspbian 并且能用终端连接上树莓派之后就可以开始下一步了。

要有容器

好消息是有官方支持,所以我们只需要执行一行命令,然后等着就行了树莓派+Docker—轻松打造自己的智能家居控制中心

curl -sSL https://get.docker.com | sh

坏消息是 Docker 官方源在国外,由于国家法律法规政策影响,安装速度无法保证,可能你需要重试几次并且多等等才能安装成功,总的来说失败就重新执行一下树莓派+Docker—轻松打造自己的智能家居控制中心

sudo usermod -aG docker $USER

安装成功之后,需要把 pi 用户添加到 docker 用户组,这样在执行 docker 命令时就不需要每次都带 sudo,当然,你可以不做这个操作,但是每次执行 docker 命令时要带 sudo。

上面的操作都执行完之后,断开终端重新链接一下树莓派,可以用以下命令查看是否安装成功(如果没有操作将 pi 用户添加到 docker 组,则需要在命令前加上 sudo ,以下皆是如此,不再重复提醒)。

docker info

如果有显示 docker 的版本安装信息,那么安装就完成了。如果有报错的话,就先重启再来试试树莓派+Docker—轻松打造自己的智能家居控制中心

Ship & Run

Docker 官方宣传语就是 Build, Ship, and Run Any App, Anywhere。这里我们不需要自己来 Build(构建)Image(镜像),只需要将别人构建好的镜像以 Pull(拉取)的方式 Ship 到本地,然后就可以 Run (运行)了树莓派+Docker—轻松打造自己的智能家居控制中心

有一点要注意,Docker 不是虚拟机,可运行的镜像是受宿主机内核限制的,树莓派属于 arm 架构,raspbian 属于 linux ,因此只能运行同样基于 arm 架构 linux 的镜像(不能运行 x86 linux 镜像),通常 DockerHub 上可以在树莓派上运行的镜像都是以 rpi 开头的,或者在 tag(标签)里有写是 arm 架构镜像。

为了尽量减少使用命令行操作,这里先来跑一个基于 Web 页面管理容器的应用——Portainer。

docker pull registry.docker-cn.com/portainer/portainer:linux-arm-1.14.0

这里 registry.docker-cn.com 是 Docker 中国的加速地址,后面 portainer/portainer:linux-arm-1.14.0 则表示获取 portainer 用户 portainer 应用的 linux-arm-1.14.0 版本镜像(也可以直接使用 linux-arm 标签来获取 linux-arm 的最新版,但是不同时间获取的“最新版”其实是不同的,建议先到 DockerHub 上查看具体的版本号)。

关于 Docker 中国可以访问 查看更多信息,可以通过官方中文文档对 Docker 做进一步了解(不过大部分还是英文树莓派+Docker—轻松打造自己的智能家居控制中心

portainer 的信息则可以在 DockerHub 上查看(可能会因为法律法规影响访问速度比较慢树莓派+Docker—轻松打造自己的智能家居控制中心)。

mkdir -p ~/portaniner/data

首先为 portainer 创建保存数据的目录,然后就是要运行 portainer 容器了。

docker run -d –name portainer –restart unless-stopped -p 9000:9000 -v ~/portaniner/data:/data -v /var/run/docker.sock:/var/run/docker.sock registry.docker-cn.com/portainer/portainer:linux-arm-1.14.0

因为大妈编辑器不支持插入代码,以上是一行命令,而不是多行,复制粘贴时要注意。

-d 表示以后台方式运行,–name 表示为容器命名,–restart 表示容器的重启策略,-p 表示容器暴露的端口,-v 表示挂载宿主机到容器的路径,最后的 registry.docker-cn.com/portainer/portainer:linux-arm-1.14.0 表示使用的镜像。

docker ps -a

然后执行上面的命令查看容器是否开始运行,如果一切正常的话,应该可以看到 NAME(名称) 为 portainer 的容器 STATUS(状态) 为 Up x seconds,如果状态是 Exited 的话,就说明运行失败了。

docker rm portainer

可以执行上面的命令来移除未运行的容器,也可以用 CONTAINER ID(容器 ID) 来代替容器名称,然后再重新输入运行容器的命令(docker run 那一段),仔细检查看是否有输入错误。

如果一切顺利我们就可以开始下一步了——用 Web 来管理树莓派上的 Docker。

英语是一门很重要的语言

在浏览器中输入树莓派的 IP 地址,然后加上端口号 9000 (端口号受到 docker run 的 -p 参数影响,如果有变化的则需要相应的变化)

https://192.168.x.x:9000

首次打开 portainer 需要先为管理员设置一个密码,至少8位。

树莓派+Docker—轻松打造自己的智能家居控制中心

设置好之后就可以登录了,然后就是配置管理的 Docker 主机,由于这里是管理本机的 Docker,所以要选择第一项,然后点击 connect 按钮继续。

树莓派+Docker—轻松打造自己的智能家居控制中心

在管理页面可以看到当前的容器数量,运行中的和停止的,镜像数量等信息。因为 portainer 是以容器方式运行的,所以这里最少有一个运行中的容器、一个镜像。

树莓派+Docker—轻松打造自己的智能家居控制中心

为了解决拉取镜像速度慢的问题,需要配置一下 registries (镜像库),在左侧菜单中点击 registries,然后就可以看到添加 registries 的界面了,然后点击 Add Registry 按钮。

树莓派+Docker—轻松打造自己的智能家居控制中心

选择 Custom registry,然后在 Name 中输入 DockerCN,在 Registry URL 中输入 registry.docker-cn.com,点击 Add Registry 之后就可以在 Registry 列表中看到添加好的镜像库了。

这里要注意,Registry URL 只能输入支持 https 的地址,如果第三方提供的加速地址是 http 开头的那么是不能在这里添加的(添加会成功,但是无法拉取镜像)。

接下来就是获取 hass 的 Docker 镜像了,点击左侧菜单的 Images,进入到镜像管理页面。

树莓派+Docker—轻松打造自己的智能家居控制中心

在 Name (镜像名)中输入 lroguet/rpi-home-assistant,然后将 Registry 选择为我们添加的 DockerCN,然后点击 pull(拉取)按钮。

这里拉取是异步操作的,开始拉取之后可以离开页面,根据镜像的大小耗时也会有变化,耐心等待即可(不过也没有地方看进度条就是了树莓派+Docker—轻松打造自己的智能家居控制中心)。镜像拉取成功之后就会显示在下方的镜像列表中了。

开始运行 hass 镜像之前先为 hass 配置文件创建好本地目录

mkdir -p ~/hass/config

点击左侧菜单的 Containers,进入到容器管理页面,可以看到当前正在运行的容器,并且可以进行各种操作。接着点击 Add Container 按钮,进入添加容器的页面。

树莓派+Docker—轻松打造自己的智能家居控制中心

为容器命名为 hass,然后在 Image configuration 中的 Name 中输入 lroguet/rpi-home-assistant:latest,同时记得将 Registry 选择为 DockerCN。

还需要修改下方  Advanced container settings 中的 Volumes、Network 设置。

树莓派+Docker—轻松打造自己的智能家居控制中心

点击 Volumes 后,通过 map additional volume 按钮添加挂载参数,挂载模式要选择 Bind。

第一条挂载参数,container 和 host 都输入 /etc/localtime,但是 host 这里要选择 Read-only。

第二条挂载参数,container输入 /config,host 输入 /home/pi/hass/config。

树莓派+Docker—轻松打造自己的智能家居控制中心

点击 Network 之后将 Network 选择为 host即可。

树莓派+Docker—轻松打造自己的智能家居控制中心

然后点击 Start container 运行容器,就可以看到 hass 开始运行了。通过点击容器名称,可以查看容器的运行状态。

树莓派+Docker—轻松打造自己的智能家居控制中心

Stats 中有容器的CPU占用,IO,内存占用等信息。比较有用的是 Logs(容器内部运行日志),Console(容器内部控制台)。

树莓派+Docker—轻松打造自己的智能家居控制中心

通过查看 Logs 可以检查一下容器内部运行情况,排除一些问题。比如这里,hass 首次运行时因为 python 包安装失败,hass 启动失败了。通过 restart (重启)容器重新尝试安装才成功。

树莓派+Docker—轻松打造自己的智能家居控制中心

Console 则可以直接在容器中操作控制台,额外做一些安装,比如一些额外插件之类的。

ls ~/hass/config

我们回到终端软件中,可以查看之前创建的 ~/hass/config 目录下的变化

树莓派+Docker—轻松打造自己的智能家居控制中心

可以看到 hass 的配置文件还有使用的数据库文件都已经在这里了,后续修改只需要使用 XFtp 连接树莓派然后进行编辑就可以了,剩下的操作跟普通安装情况下就是一样的了。

还能再简单点吗?

可以树莓派+Docker—轻松打造自己的智能家居控制中心

首先 docker 的安装步骤不能跳过,安装完毕后接着安装 docker-compose

sudo apt-get -y install python-pip

sudo pip2 install -U pip

sudo pip2 install docker-compose

然后创建好需要使用的目录

mkdir -p ~/portainer/data

mkdir -p ~/hass/config

然后创建 docker-compose.yaml 文件

touch ~/docker-compose.yaml

将下面的内容添加到 docker-compose.yaml 文件中

version: “2”

services:

portainer:

container_name: portainer

image: registry.docker-cn.com/portainer/portainer:linux-arm-1.14.0

restart: unless-stopped

volumes:

– /var/run/docker.sock:/var/run/docker.sock

– /home/pi/portainer/data:/data

ports:

– “9000:9000”

hass:

container_name: hass

image: registry.docker-cn.com/lroguet/rpi-home-assistant:latest

restart: unless-stopped

volumes:

– /etc/localtime:/etc/localtime:ro

– /home/pi/hass/confg:/config

network_mode: “host”

注意,所有缩进都必须是空格,不能用 tab。如果想在 Windows 上创建好文件然后复制进去,不要使用系统的文本编辑器,而是使用 notepad++ ,编码改成 utf-8。

cd ~

docker-compose up -d

然后在 ~ 目录下执行命令即可,会自动拉取镜像然后根据 docker-compose.yaml 的配置启动容器。运行成功之后,可以使用 docker ps -a 查看状态,如果都在运行就可以打开 portainer 的页面管理了。

FAQ

Q:为啥没有 Homebridge?

A:因为我是个谷粉树莓派+Docker—轻松打造自己的智能家居控制中心

Q:为啥把简单的方法写后面?

A:因为我发现很多人都不看完,所以把简单的留在后面当是送给看完的人的礼物好了。

Q:楼主你写的玩意看起很厉害但是完全不懂啊?

A:心里默念三个六,然后点收藏按钮就行了树莓派+Docker—轻松打造自己的智能家居控制中心

Q:还能干嘛?

A:理论上其他需要在树莓派上手动安装的应用都可以用 docker 的方式部署,只要有镜像。而且还不存在因为运行库依赖或冲突产生的问题——因为这些都已经在镜像中打包好了。

本文著作权归作者本人和什么值得买共同所有,未经许可不得转载。文章仅代表作者看法,如有更多内容分享或是对文中观点有不同见解,值客原创欢迎您的投稿。点此投稿

发表评论

电子邮件地址不会被公开。 必填项已用*标注