HomeAssistant 科学养龟指北

November 25, 2018

前言

实验室龟缸改造流水账。

背景

实验室有个博士小姐姐养了只赫曼陆龟。到了冬天,给它配了个带温控器的龟缸,白天(9:00-17:00)需要手动调到 26~28°C,晚上(17:00-次日9:00)需要手动调到 21~23°C。为了补充紫外线光照,配了一盏灯,也是需要手动打开。因为北方冬天干燥的原因,时不时的需要去喷点水,给龟缸增加一些湿度。

有时博士小姐姐有事无法在实验室照看乌龟,一些调温喷水的活就交给了实验室的伙伴。

blog-ha-1

思路历程

作为程序员,是拒绝重复劳动的,一切能自动化的尽量让机器来干。我不懂硬件,但是又对 IoT 的东西充满了兴趣。所以,在想怎么去和手头的树莓派结合一下,正好自己可以玩玩 HomeKit。

最开始的简陋想法是用树莓派 + GPIO 扩展板,或者接一个面包板,看看能不能把接到温控器的按钮上,把温控器当做一个黑盒,我就不需要管它内部的实现了。但是经过拆解(偷偷拆解的,没有告诉博士小姐姐)发现不好做,他的电路板上是轻触开关,把开关卸下来换成导线?通过树莓派给他短暂接通一下。不可行的原因是,开关是焊在上面的,没有电洛铁、吸锡器和锡,还比较考验手活。所以放弃了这种办法。

blog-ha-2

方案一

通过拆解发现,这个温控器包括一个温度传感器和继电器。其工作原理很简单粗暴,通过温度传感器读来的数据和预设的数据做比较,控制加热电路是否闭合。该温控器用的温度传感器为 DS18B20。转念一想,如果不能再利用这个温控器,那么我需要用树莓派来做一个温控器,我只需要一个温度传感器和一个继电器就可以完成。那么,我的准备清单为:

  • 树莓派继电器,98 元
  • 温度传感器,DS18B20,6元
  • 面包板、电阻、跳线等

blog-ha-3

方案二

其实,继电器控制加热器电路闭合的功能可以用无线开关来代替。同样,传感器也可以用米家温湿度传感器来代替。所以,采用了米家的解决办法。

  • 米家网关2
  • 无线开关
  • 温湿度传感器

开始动手

1. 软件平台搭建

软件平台一共有三个,HomeKit(苹果),米家(小米)以及 HomeAssistant(开源社区)。经过考量,选择了 HomeAssistant。

米家的配件不能直接被 HomeKit 所识别。所以需要用 HomeBridge 将米家的应用“桥接”到 HomeKit,用 Home App 来控制。在树莓派上安装简单无坑。Home 的 Automation 需要有一个家庭 Home Hubs,相当于各种智能家具的总控,可以用 Apple TV 或者 iPad。但是,经过实际上手发现 Automation 里面的条件实在简陋,无法满足本文的需求。

米家 App 里面的条件其实能满足本文自动化的需求,但是为了考虑后续实现更好玩的骚操作,还是选择更牛逼的 HomeAssistant。

关于 HomeAssistant

HomeAssistant 很强大,开源社区的力量真是不可估量。里面的玩法太多了,只有你想不到。关于介绍以及使用说明,可以看其官方文档,HAChina 中文网瀚思彼岸Home Assistant 中文文档

我一开始在树莓派上安装,Raspbian、Hass.io、Hassbian、Mossbian 四种安装方式我都尝试过了,都没有成功,因为墙的原因以及其他乱七八糟的问题。Raspbian 的安装方法在 Debian 系 Linux 发行版是通用的。所以,在 Ubuntu 上尝试了两次就成功了。

具体的安装步骤建议以官方为准,辅以各种论坛方法。我安装的是 Home Assistant 0.82.1,需要 Python 3.5.3 以上版本,我的 Ubuntu 16.04 Python3 升级完大概到 3.5.2 版本,所以我下载了 3.6 版本,替换了系统的 Python3。安装最大的坑就是你没升级就安装,不管是 apt-get 还是 pip3 最好升级到最新版本再安装。安装完成后,初次启动 Home Assistant,也要等几十分钟,后台会下载一些依赖。

整个安装过程的心得就是耐心。

blog-ha-4

blog-ha-5

2. 将米家配件连接至 HomeAssistant

这个过程十分简单,网上太多教程。只要你在 configuration.yaml 配置了网关的 Mac 地址以及密码,在重启 HomeAssistant 的过程就会自动识别网关,而且把连接至网关的其他米家配件一并添加。

3. 配置自动化

我的需求是在白天(9:00-17:00)温度控制在 26~28°C,晚上(17:00-次日9:00)温度控制在 21~23°C。我设置了四个自动化,分别为 Day_on(白天打开加热器)、Day_off(白天关闭加热器)、Night_on(晚上打开加热器)和 Night_off(晚上关闭加热器)。以 Day_on 为例,一开始,我设置的是触发条件为温度传感器低于 26°C,环境条件为从 09:00 到 17:00,动作是设置加热开关为开。

但是翻车了。平常测试都没事,但是第二天 9 点钟总不能触发条件。经过猜测和验证,HomeAssistant 判定条件的问题是,它所谓的低于 26°C,更指的是从高于 26°C 的地方降到 26°C 以下,如果温度本来就低于 26°C,那么是不会触发这个触发条件的。

所以翻车的这两个场景是这样的

  1. 第二天上午 09:00,此时温度大约在 21~23°C 范围,本来就低于 26°C,不算是从高于 26°C 的温度降到 26 °C 以下,所以不算触发。
  2. 下午 17:00,此时温度大约在 26~28 °C 范围,本来就高于 23°C,不算是从低于 23°C 的温度超过 23°C,所以也不算触发。

那么,针对这两个场景的自动化,需要另外添加触发条件以及环境条件。以 Day_on 为例,触发条件为温度低于 26°C 和 09:02 分钟触发,环境条件为时间从 09:00 到 17:00 以及温度在 26°C 以下。如下图所示。

用人话来说就是,到了早上 09:02 我就根据当前温度是不是在 26°C 以下,来判断是否触发加热开关。

blog-ha-6

4. SSH 隧道内网穿透

实验室有一个可以分配公网 IP 的路由器,但是是 5G 的。由于米家不支持 5G WiFi,所以只能用一个内网的路由器。怎么方便从公网访问 HomeAssistant,也是需要考虑的。本文选取了一个比较简单的方式。通过 SSH 隧道将处于内网的 HomeAssistant 服务器端口映射到处于公网的服务器的某个端口。需要注意的是,SSH 一段时间没有活动的话,系统会将隧道关闭。网上有个保持连接的参数的方法 TCPKeepAlive=yes,不过我没有测试过。因为我给 HomeAssistant 的服务器配了个显示器,一直打开着公网的 HomeAssistant 页面(HomeAssistant 网页一直在异步刷新,只要网页不关,SSH 隧道一直是活跃的)。

网上也有教程,下面是把内网机器的 8123 端口映射到公网机器的 56777 端口。

ssh -f -NT -R \*:56777:localhost:8123 fashioncj@10.10.10.10 -p 22 -o TCPKeepAlive=yes

内网 HomeAssistant 怎么公网访问的教程,论坛里有很多。这是一个通用的问题,其他能内网穿透的方法一样适用。

养龟

回到本文的主题来。怎么用数据来指导科学养龟。。

关于温度

之前实验室的博士小姐姐白天都是一直开着龟箱的盖子(为了散龟粮的味道),加热器又在龟箱的上方,实际上热空气全部直接冒出来了(热胀冷缩,夏天空调扇叶朝上吹快速降温一个道理),龟箱底部的温度一直是室温(23~24°C),所以之前白天那个加热器一直是工作状态,因为温度传感器在龟箱底部一直测着温度不够 26°C,一直在加热。所以,当把上盖放下来,就能实现温控了。事实证明,房屋如果没有房顶,比打开窗户更能降温。

关于湿度

blog-ha-7

其实龟箱的湿度一直达不到陆龟的标准,尤其是在北方的冬天。博士小姐姐在里面放了个小水池,增加湿度,数据表示放下盖子来更能维持室内湿度。

图中湿度的突然暴增,是由于喷水的原因。除了喷水的节点,其实温度和湿度的斜率大致是相反的。加热器打开,温度上升,湿度下降。加热器关闭,温度下降,湿度上升。

blog-ha-8

关于通知

HomeAssistant 提供了 iOS App,但是我目前并没有配置。目前是通过米家的应用来做通知。由于北方的冬天室内干燥,当湿度低于 30% 时,给手机发送通知提醒喷水。当温度高于 30°C 或者低于 19°C 时,手机收到温度异常通知,以防万一。

blog-ha-9

最后

关于科学养龟(其实也没有多科学)的初步介绍就结束了,龟缸的自动化改造还未完成,比如给紫外线灯再配一个无线开关的方式来自动控制白天打开,晚上关闭,还可以配一个微型加湿器来维持龟箱湿度,当然了还可以弄个自动投食机。。。

这么折腾,也不只是为了小乌龟,早就想玩 HomeKit 了,不过这一次也没有最终部署在 HomeKit 上。由于 HomeAssistant 的强大,目前也不需要我手动写一些脚本。HomeAssistant 的许多其他功能也没有探索。

这次的几点感悟是

  • 开源社区的力量真强大,HomeAssistant 真香。HomeAssistant 在软件方面的可用性远超于布局智能家居的苹果小米等企业。
  • 程序的稳定性比你想象的重要。这次的程序关系着乌龟的生存,头几天翻车的时候,真的是压力挺大的,就怕晚上还是什么时候温度控制异常,把一条鲜活的生命害死了咋整。

最后感谢给我买树莓派的猪。让我这个软件狗可以接触一下硬件。真香。

You can contact me on Twitter @Ji4n1ng

Email me if you need anything.
contact@jianing.wang

All background images are from DesignCode. iOS app and this website are made entirely by @Ji4n1ng. © 2019