树莓派 + Home Assistant + HomeKit 从零开始打造个人智能家居系统 篇四:自动化(Automation)

2017-09-04 21:30:00 119点赞 1072收藏 68评论

通过本篇教程,你将了解 Home Assistant 自动化概念,以及自动化的组成,并通过一些例子学习如何编写自己的自动化配置。( 官方文档官方示例

提示:慎入!这是一篇非常无趣的基础技术文。(这是我完成此文前后的状态,完成前:自动化(Automation) ,完成后:自动化(Automation)。 )

智能家居为人诟病的一点往往是它不够“智能”,而国内的厂家又爱拿“智能”、“云”、“物联网+”之类高大上的词语做噱头,当你将这些设备买回家后,你发现它没有想象中的那么好用,难免就会失望。目前的智能家居系统,与其强调“智能”(Smart),我认为不如 Home Assistant 中的描述的“自动化”(Automation)来的贴切,事实上,在 HomeKit 以及 米家 App 中的都是以“自动化”来命名它们的。

正是“自动化”的加入,使得 Home Assistant 不再呆板,在特定情况下,你甚至可以不再使用那些操作界面,让一切自动运转,真正的“智能”起来。以我自己举例,家中除了我,没人捣鼓这些东西,都是靠“自动化”设置,实现灯光、新风、监控、警戒、夜间空调等的日常使用。

一、自动化基础

HomeKit 新建自动化

为了让大家对相关概念有一个更直观的认识,我先以 HomeKit 为例做一个展示。

▲HomeKit 新建自动化▲HomeKit 新建自动化

▲HomeKit 新建自动化▲HomeKit 新建自动化

如图所示我新建了“星期日落日后就打开餐厅的落地灯”这样一个自动化(仅作示例),可见 iOS 的家庭 App 新建自动化非常直观。

▲HomeKit 自动化▲HomeKit 自动化

在这个自动化中,我们的触发条件是一个时间,即“落日”并且限制在“星期日”,当到达这一时间点时,系统自动执行“打开餐厅落地灯”这一动作。这样一个最简单的自动化,由三个不同的部分组成:触发(Trigger条件(Condition动作(Action

这里我们也可以看到一般为了简化操作与保证设置的可行性,如 HomeKit、米家、阿里智能,都仅提供了较少的触发条件与可执行项,这大大限制了我们发挥的余地。

自动化组成

触发:即触发自动化规则,比如到达特定的时间点、到达某一地点、天气变化、系统变化。

条件:条件是可选的,可以将自动化规则限制为仅在特定情况下执行。如一周之中我们只在周日让这个自动化起作用。

动作:当规则被触发并满足所有条件,将被执行,如开灯、调节温度、激活场景。

以官方一个简单的 Home Assistant 自动化配置为例,格式如下:

automation:

- alias: 'Rainy Day' #自动化名称

trigger: #触发

- platform: state

entity_id: sensor.precip_intensity

to: 'rain'

condition: #条件

- condition: state

entity_id: group.all_devices

state: 'home'

- condition: time

after: '14:00'

before: '23:00'

action: #动作

service: light.turn_on

entity_id: light.couch_lamp

对应流程如下:

▲自动化流程▲自动化流程

这个自动化表示,在下雨天,下午到晚上有人在家的话,就打开灯。

自动化配置在 "configuration.yaml" 中,"automation: "字段下,也可以使用 "automation: !include automations.yaml" 将所有自动化信息独立出来。

系统内部参数

在上篇 Home Assistant 的进阶设置中我们讲到过,Home Assistant 的每一个一个设备或服务,都是通过自身唯一的实例 IDEntity ID)被系统调用的,而在自动化配置中,我们设置触发、条件、动作的对象,也是如此。

▲获取设备 ID▲获取设备 ID

在上图所示界面,我们可以获得一个设备或服务的ID(Entity ID)、状态(State)及附加属性(Attributes)。

设备参数设备参数

这些实例状态的变化,被用作触发源,而其实时状态用作判断能否执行条件

在 Home Assistant 中,所有设备或服务,包括灯、开关、人,甚至太阳等等,都被视为一个实例(Entity)。

所有的动作Action)都被称作服务Services),所有可执行的服务都可以在下图开发者工具(Developer Tools)中找到,包括自定义的设备与服务。比如上例中的 light.turn_on 能够打开系统中的任何灯,只需要添加类似 entity_id: light.couch_lamp 的指定参数即可。

▲Services 工具▲Services 工具

二、自动化编辑器

0.45 版本之后,Home Assistant 还提供了一个自动化编辑器,在侧边栏找到 Configuration > Automations

▲自动化编辑器▲自动化编辑器

继续以上个自动化为例,用图像界面编辑器添加,如下图所示:

▲自动化“Rainy Day”▲自动化“Rainy Day”

自动化编辑器能够使得相关配置工作简化,它提供了触发、条件和动作的类别选择,但是你还需要在开发者工具(Developer Tools)中找到你需要的实例 ID(Entity ID)、状态(State)和服务(Service)的详细信息并手动填入编辑器。

注意:自动化编辑器 Data 参数采用 JSON 格式,与配置文件 YAML 语法有所不同,请按开发者工具(Developer Tools)中的示例编写。

因为自动化编辑器需要调用 automations.yaml 文件,需要采用 automation: !include automations.yaml 将自动化信息独立出来。

三、自动化详解

触发(Trigger

触发是启动自动化的规则,可以为同一规则设置多个触发器。一旦触发,Home Assistant 将验证相关条件,并执行动作

事件触发

automation:
trigger:
platform: event
event_type: MY_CUSTOM_EVENT
# 可选
event_data:
mood: happy

Home Assistant 触发

由 Home Assistant 的启动或停止来触发。

automation:
trigger:
platform: homeassistant
event: start # 或者是 'shutdown'

MQTT触发

收到来自 topic 的消息后触发。

automation:
trigger:
platform: mqtt
topic: living_room/switch/ac
payload: 'on' # 可选项

数值触发

设备的状态达到预设范围时触发,如温度低于xx度。

automation:
trigger:
platform: numeric_state
entity_id: sensor.temperature
value_template: '{{ state.attributes.battery }}' # 可选 定义数据格式
# above below 至少有一个
above: 17
below: 25

状态触发

设备的状态变化来触发。

automation:
trigger:
platform: state
entity_id: device_tracker.paulus, device_tracker.anne_therese
# from to 可选一个或全部
from: 'not_home'
to: 'home'
# 可选项 状态为1:10:05时触发
for:
hours: 1
minutes: 10
seconds: 5

日出日落触发

顾名思义,日出或日落时触发,可设置提前或推迟时间。

automation:
trigger:
platform: sun
event: sunset # sunset或sunrise
offset: '-00:45:00' # 可选项,此例为日落前 45 分钟触发

模板触发

模板值为 True 时触发。

automation:
trigger:
platform: template
value_template: "{% if is_state('device_tracker.paulus', 'home') %}true{% endif %}"

时间触发

在某时刻触发。

automation:
trigger:
platform: time
# 每小时的第5分钟触发
minutes: 5
seconds: 00

automation 2:
trigger:
platform: time
# 15:32:00 触发
at: '15:32:00'

automation 3:
trigger:
platform: time
# 每 5分钟 触发一次
minutes: '/5'
seconds: 00

区域触发

到达或离开某地时触发,目前仅支持 OwnTracks 平台以及 iCloud 平台

automation:
trigger:
platform: zone
entity_id: device_tracker.paulus # 此设备到达 home 时触发
zone: zone.home
# 到达或离开时触发
event: enter # or "leave"

多个触发

触发其中一个,自动化就会被被执行。

automation:
trigger:
# 第一个
- platform: time
minutes: 5
seconds: 00
# 第二个
- platform: sun
event: sunset

条件(Condition

条件是自动化规则的可选部分,用来限制触发后的执行,防止误操作。

逻辑关系

与(AND)

同时满足所有条件才执行。

condition:
condition: and
conditions:
- condition: state
entity_id: 'device_tracker.paulus'
state: 'home'
- condition: numeric_state
entity_id: 'sensor.temperature'
below: '20'

或(OR)

只要满足一个条件就执行。

condition:
condition: or
conditions:
- condition: state
entity_id: 'device_tracker.paulus'
state: 'home'
- condition: numeric_state
entity_id: 'sensor.temperature'
below: '20'

混合 AND 和 OR

示例:下雨或者温度低于20℃,同时有人在家时执行。

condition:
condition: and
conditions:
- condition: state
entity_id: 'device_tracker.paulus'
state: 'home'
- condition: or
conditions:
- condition: state
entity_id: sensor.weather_precip
state: 'rain'
- condition: numeric_state
entity_id: 'sensor.temperature'
below: '20'

条件类型

数值条件

condition:
condition: numeric_state
entity_id: sensor.temperature
above: 17
below: 25
# 可选
value_template: {{ float(state.state) + 2 }}

状态条件

condition:
condition: state
entity_id: device_tracker.paulus
state: not_home
# 可选
for:
hours: 1
minutes: 10
seconds: 5

日出日落条件

condition:
condition: sun
after: sunset
# 可选
after_offset: "-1:00:00"

模板条件

condition:
condition: template
value_template: '{{ states.device_tracker.iphone.attributes.battery > 50 }}'

时间条件

condition:
condition: time
# 需要以下至少一项
after: '15:00:00'
before: '02:00:00'
weekday:
- mon
- wed
- fri

区域条件

condition:
condition: zone
entity_id: device_tracker.paulus
zone: zone.home

示例

condition:
- condition: numeric_state
entity_id: sun.sun
value_template: ''
below: 1
- condition: state
entity_id: light.living_room
state: 'off'
- condition: time
before: '23:00:00'
after: '14:00:00'
- condition: state
entity_id: script.light_turned_off_5min
state: 'off'

动作(Action

动作通过服务或事件与其他内容进行交互。在服务中需要指定实例 ID(entity_id)和可选的参数(data)。

automation:
# 日落后将厨房与客厅的灯打开,并调到 亮度150,红色。
trigger:
platform: sun
event: sunset
action:
service: light.turn_on
entity_id:
- light.kitchen
- light.living_room
data:
brightness: 150
rgb_color: [255, 0, 0]

automation 2:
# 推送消息
trigger:
platform: sun
event: sunset
offset: -00:30
action:
# 可以有多个service
- service: notify.notify
data:
message: Beautiful sunset!
- delay: 0:35
- service: notify.notify
data:
message: Oh wow you really missed something great.

四、后期预告

说实话,没有想到大家有如此高的热情,毕竟除开一些演示图片,技术文当真是枯燥又无趣,而自动化这一篇更是其中的巅峰,还好到这里整个系列文章算是告一段落。

每个人的情况不同、设备不同,由于篇幅有限,这些基础篇章中我没有非常具体的讲一些设备和组件,当然我也不可能做到面面俱到,但是我希望通过之前的文章能够引领大家入门,能够让大家少走些弯路。除了官方文档官方论坛,大家还可以到中文论坛瀚思彼岸进行 Home Assistant 相关讨论,其中有很多具体的设备接入与插件配置。

这个系列不会结束,但是应该不会如此密集地发文了,后期或许会做一两期个性化的内容,比如 Floorplan 或是 HADashboard,有机会再做智能音箱接入的内容。同时希望能与大家分享更多关于智能家居的内容,用心打造我们每一个人自己的智能家居与生活。

效果展示:

▲Floorplan▲Floorplan

▲Floorplan▲Floorplan

▲HomeKit▲HomeKit

▲Floorplan via Carlo▲Floorplan via Carlo

▲Floorplan via Carlo▲Floorplan via Carlo

PS:这种嵌入插座哪里能买得到……

当然,你也可以采用这样的形式:

▲3D Floorplan▲3D Floorplan

展开 收起

乐天派 人体存在传感器居基础感应控制Matter双生态多平台Mijia IOS Homekit六种数据探测 传感器

乐天派 人体存在传感器居基础感应控制Matter双生态多平台Mijia IOS Homekit六种数据探测 传感器

259元起

MIJIA 米家 MJYDOAYL 自动感应夜灯 白色

MIJIA 米家 MJYDOAYL 自动感应夜灯 白色

19.9元起

京东京造 TH1 时钟温湿度计 白色

京东京造 TH1 时钟温湿度计 白色

29.9元起

Xiaomi 小米 米家智能插座3

Xiaomi 小米 米家智能插座3

49.9元起

Xiaomi 小米 ZSWG01CM 智能中枢网关 黑色

Xiaomi 小米 ZSWG01CM 智能中枢网关 黑色

191.79元起

Xiaomi 小米 DMWG03LM 智能多模网关2 白色

Xiaomi 小米 DMWG03LM 智能多模网关2 白色

181.8元起

MIJIA 米家 1S 增强版 智能台灯 白色

MIJIA 米家 1S 增强版 智能台灯 白色

156元起

linptech 领普 智能无线开关KS1Pro屏显温湿度传感器智能联动免布线遥控开关

linptech 领普 智能无线开关KS1Pro屏显温湿度传感器智能联动免布线遥控开关

53.2元起

Xiaomi 小米 SJWS01LM 水浸卫士 白色

Xiaomi 小米 SJWS01LM 水浸卫士 白色

55元起

玺加 智能窗帘宝X3 光能充电窗帘伴侣

玺加 智能窗帘宝X3 光能充电窗帘伴侣

暂无报价

HUAWEI 华为 智能门锁 Plus AI 3D人脸解锁快准稳 AI指纹锁

HUAWEI 华为 智能门锁 Plus AI 3D人脸解锁快准稳 AI指纹锁

2899元起

Xiaomi 小米 无线开关 蓝牙版

Xiaomi 小米 无线开关 蓝牙版

32.9元起

米家 人体传感器2S 居 智能监测联动

米家 人体传感器2S 居 智能监测联动

61.99元起

Xiaomi 小米 MCCG02HL 小米门窗传感器 2 米家

Xiaomi 小米 MCCG02HL 小米门窗传感器 2 米家

34.9元起

MIJIA 米家 空调伴侣2 智能插座 白色

MIJIA 米家 空调伴侣2 智能插座 白色

68元起

卡萨帝(Casarte)掌静脉人脸识别带可视猫眼密码锁入户门带摄像头指纹锁电子锁智能门锁CFA-X70-CAU1罗曼金

卡萨帝(Casarte)掌静脉人脸识别带可视猫眼密码锁入户门带摄像头指纹锁电子锁智能门锁CFA-X70-CAU1罗曼金

6009元起
68评论

  • 精彩
  • 最新
  • 非常感谢作者的详尽教程,我已经按照你的教程初步打造了自己的homekit家庭智能体系,不过在做进一步扩展研究的时候,发现终端在SSH进入Pi后,sudo、apt-get、npm等命令都用不了,提示command not found,请问作者能简要介绍一下怎么安装Node.js和miio吗,谢谢了

    校验提示文案

    提交
    Hass.io 默认SSH不支持这些操作,要想实现一些功能,一个是等插件出来,另一个是安装Hassbian版本。Hass.io基于ResinOS不支持这些命令。

    校验提示文案

    提交
    收起所有回复
  • 这几篇入门提高教程真的是太棒了,想请问,在哪里可以查询得到ha所有支持的设备品牌等?

    校验提示文案

    提交

    校验提示文案

    提交

    校验提示文案

    提交
    收起所有回复
  • 感谢作者,已经关注准备好好研究。现在为我妈装修,及时看到这篇文章,深表感谢。在选择开关时发现zigbee没有三开的,lifesmart有三开的,如果买lifesmart是不是必须要买它家的网关呢,感觉他家网关好贵

    校验提示文案

    提交
    需要网关。
    lifesmart我没有使用过,他们之前宣传官方支持HomeKit,如果有这个需求选他们会方便很多。

    校验提示文案

    提交
    收起所有回复
  • 请问homekit要支持外网控制必须通过apple tv4或者ipad吗?有没有第三方类似homebridge的方法
    外网控制不方便的话,感觉还不如米家自带的app

    校验提示文案

    提交
    是的,homekit的机制就是这样,你的家庭数据不向外网传送,没有像小米那样的服务器,需要通过 iPad 或 Apple TV4 中转。

    校验提示文案

    提交
    收起所有回复
  • 很好,感谢你,platform 几时才要在前面加- 我没搞懂,另外,请教那嵌入式插座和ipad帖墙的东西在哪买?

    校验提示文案

    提交
    多个platform时,与缩进配合,表示层级。值得买移动端的代码都取消缩进了,所以在 PC 端浏览会容易理解些。那个插座我也没找到,上墙可以搜“神奇胶垫”或“iPad磁力贴”。

    校验提示文案

    提交
    明白了,再请教如何查看设备有哪些属性和状态,比如home,还有个not_home,两种状态,我要写的时候如何系统地知道设备有哪些状态和属性

    校验提示文案

    提交
    收起所有回复
  • 目前没有人体存在感应器,怎么判断家里是否有人在,想法很好,目前实现不了吧

    校验提示文案

    提交
    去看看去看看等,目前有很多了,还有很多可以DIY的

    校验提示文案

    提交
    可以通过手机定位判断呢,比如定位不在网络栅栏内判断无人

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 文章很棒,赞一个,之前也自己倒腾了homekit,用的平台跟这个一样,不过楼主用的更加整合,所以觉得把自己家重新来一次,另外一个就是不知道楼主有没有博联的设备,因为博联的RM2带射频,所以可以整合到homeassistant中,然后就是可以siri控制车库门了,当然可以控制所有的红外及射频设备,弥补了米家无法控制的一些设备

    校验提示文案

    提交
    Home Assistant 官方支持 BroadLink 设备的接入。 [邪恶]

    校验提示文案

    提交
    收起所有回复
  • 请问是否有可能控制智能灯泡人来的时候渐亮人离开了渐暗?我想知道的不是人体感应触发而是能不能控制灯泡渐变亮度

    校验提示文案

    提交
    理论上是可以实现的,需要灯泡支持调节亮度。

    校验提示文案

    提交
    收起所有回复
  • 楼主找到那种嵌入式插座了吗?

    校验提示文案

    提交
    [哭泣] 还没有找到

    校验提示文案

    提交
    收起所有回复
  • 目前在用domoticz。对于HASS有个问题,是否可以做到一个指令。按顺序执行多个操作?例如开投影的时候顺便关灯,开音响。

    校验提示文案

    提交
    可以用场景实现。去看看,利用自动化延迟指令可以也实现。

    校验提示文案

    提交
    收起所有回复
  • 想请问一下,如果部分设备是直接连接的homekit,部分设备是连接的Home Assistant,那么是否依然可以在Home Assistant里设置自动化的配置?另外,十分感谢楼主的文章,真心对我们即将装房的人帮助巨大!

    校验提示文案

    提交
    不接入 Home Assistant 那么用不了 Home Assistant 的自动化啊

    校验提示文案

    提交
    写的真好,是智能家居的从业者还是有意从业啊,另外天气插件 用的是那个api呢 能否告知

    校验提示文案

    提交
    收起所有回复
  • @Jun-long 楼主,我想用树莓派接显示器当这种控制面板挂墙上可以吗,或者像你文章中写的直接将ipad弄墙上,要怎么做呢

    校验提示文案

    提交
  • 我有两个场景怎么想都想不出该怎么写
    1,进门检测门磁自动开灯默认2分钟后关灯,到这里都没问题,再接下来就搞不定了 [大囧] 这两分钟里如果物理上或者ha里动过这个灯的开关了那之前设置的两分钟后关灯就需要不执行,这个怎么实现 [哭泣]
    2,灯带调亮度这没问题,但我怎么能通过ha在指定时长内把亮度从a渐变到b [狂汗]

    校验提示文案

    提交
  • 收藏备用。

    校验提示文案

    提交
  • 厉害了。。。。沙发慢慢看

    校验提示文案

    提交
  • 很有趣也很枯燥,等有闲心了再来折腾

    校验提示文案

    提交
  • 一直想看具体的使用展示

    校验提示文案

    提交
  • HA和domoticz哪个好

    校验提示文案

    提交
    domoticz啊~~~

    校验提示文案

    提交
    收起所有回复
  • 技术小白买了树莓派折腾止步于Homekit [吐血]

    校验提示文案

    提交
    我看了此文章买的树莓派 已经添加了网关和灯 其它就不知道怎么搞了

    校验提示文案

    提交
    我解决了网关灯/Zigbee开关/空气净化器/扫地机器人/目前最想添加的就是摄像头到Homekit

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • 是群里哪位麽? [惊喜] [惊喜] [惊喜]

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
1.0K
扫一下,分享更方便,购买更轻松