如何在 Home Assistant 上实现防止猫咪出逃的自动化

2022-04-02 更新:
Home Assistant 已经支持小米智能多模网关。之前的硬件已经不适用。详细说明请见如何在 Home Assistant 上实现防止猫咪出逃的自动化(更新)

(一)需求的来源

家里有两只猫咪,曾经有一次,我早晨上班忘记关大门了,导致猫咪出逃。好不容易才把她们寻找回来,因此一直在考虑,如何才能够实现:忘记关门超过30秒,手机会收到忘记关门的告警推送。

(二)市面上现有的智能家居APP和设备无法满足

市面上常见的有小米、萤石的硬件和APP,但这些并不能满足我的需求。因此我把目光朝向一些开源的智慧家庭平台。

(三)Home Assistant 的选择

开源的平台有很多,在网上多次寻找和对比后,我选择了 Home Assistant 的平台。该平台可以使用小米的硬件,还可以实现可编程的自动化,因此正好满足我的需求。

(四)树莓派的硬件平台

Home Assistant 基于 Python3,硬件可以是PC或其他设备,从家庭自动化的角度,需要一个长期运行的低功耗硬件,因此树莓派是比较合适的选择。
Home Assistant 安装的 Python 的版本必须在3.7以上(请参考Installation of Home Assistant),因此建议安装最新的 Raspbian buster 版本(旧的版本,比如说 jessie ,Python 版本无法更新到最新,需要下载源代码编译)。如果树莓派不使用桌面方式,可以安装 Raspbian Buster Lite(精简版本),只有四百多兆,下载和安装都非常方便。最新版本下载链接在 这里。
下载完毕后,通过 https://www.raspberrypi.org/documentation/installation/installing-images/ 烧写到 sd 卡上。
新烧写的 Raspbian 由于安全原因,远程的 ssh server 缺省是关闭的,因此第一次上电,需要通过 hdmi 接口连接显示器,usb 口连接键盘。登录后(缺省用户名是 pi 密码 raspberry),通过 sudo raspi-config 开启 ssh-server。
Raspbian 的更新源很慢,建议使用阿里云的更新源。

(五)Home Assistant 在树莓派上的安装

这里是安装方式 Manual installation on a Raspberry Pi。安装完毕后,因为 Home Assistant 需要下载一些插件,第一次启动耗时比较久(大约15分钟吧),之后启动就很快了。在浏览器打开 http://树莓派ip地址:8123,看到UI界面后,就表明安装成功了。
配置树莓派重启后自动启动 Home Assistant,见这里 https://www.home-assistant.io/docs/autostart/systemd/。

(五)远程控制 Home Assistant

安装 Home Assistant APP 到手机上,由于树莓派安装在内网中,因此远程是无法连接的。需要通过端口映射 + 共有云的方式。网上有很多方法,这里就不展开了。

(六)Aqara 的空调伴侣升级版(lumi.acpartner.v3)和门磁

首先安装米家APP,并接入绿米的空调版本升级版和门磁。
接下来需要将 Aqara 的空调伴侣升级版接入到 Home Assistant 中。这个步骤相对要麻烦一些:

  • 按照绿米的AIOT论坛,局域网开发支持的网关目前只有:空调伴侣升级版(lumi.acpartner.v3),固件版本需达到1.4.1_109以上。
  • 原先从 APP 获取网关 key 的方法已经无法使用,需要登录绿米的 AIOT 网站申请个人开发者才可以。
  • 公开的协议来自 网关局域网通信协议V2.0
    获取key之后,在 /home/homeassistant/.homeassistant/configuration.yaml 添加
xiaomi_aqara:
  discovery_retry: 5
  gateways:
    - key: xxxxxxxxxxxxxxxx

重启 homeassistant 服务后,如果在 web UI 界面看到门磁,就表明接入成功。

(七)自动化一:实现开门30秒以上,推送告警

“Web UI -> 配置->自动化” 设置如下即可实现开门30秒以上,推送告警:


设置触发条件
设置动作

(八)自动化二:实现开门30秒以上,关门,推送告警解除

只通过 UI 上的基础组件是无法实现这个自动化,需要增加一个 input_boolean 服务(https://www.home-assistant.io/integrations/input_boolean/)。这个服务有点类似于一个布尔全局变量。在自动化一发生时,将该变量置为 true。在自动化二中,如果门从 on 变为 off,则在环境条件中检查该变量,然后再判断是否触发告警解除。

  • 新增 input_boolean 服务
    在 /home/homeassistant/.homeassistant/configuration.yaml 添加
input_boolean:
  notify_door_open:
    name: Notify door opening last than 30s
    initial: off
    icon: mdi:door-open

重启 homeassistant 服务

  • 重写自动化一


    触发条件不变
新增对 input_boolean 的处理
  • 自动化二


    触发条件
设置环境条件
设置动作

(九)测试

手机的推送测试

你可能感兴趣的:(如何在 Home Assistant 上实现防止猫咪出逃的自动化)