科技一站

 找回密码
 立即注册
查看: 123|回复: 1

智能家居初探小记

[复制链接]

2

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-12-10 13:03:09 | 显示全部楼层 |阅读模式

十月中旬,临近搬家,机缘之下得到了Bosch2022 AIoT 奖学金,以此为契机,购入了一批家居物联网配件,在新家里进行了一番折腾。为期15天,体验了米家的生态,初步学习了HomeAssistant平台(后面简称HA)的使用,并把米家的设备桥接到了苹果的HomeKit里,在此做一些记录,也希望可以抛砖引玉,为未来想要尝试智能家居的小伙伴排一些坑,在配置和设计上提供一些思路。
1. 设备清单




设备清单

1.1 灯具与户型

由于厨房灯、阳台灯、走廊灯、外卫灯、入户灯为非智能灯具,故采用智能开关控制。客厅的落地灯和主卧的床头灯也非智能灯具,通过米家智能插座3控制通断。
在装修时,已经购买了欧普的智能吸顶灯,分布于客厅、餐厅、主卧、次卧、书房和多功能房,安装后调试发现一个问题,如果用传统的开关进行通断,灯的色温、亮度会按预设的四个模式进行变换,不能让灯记住上一次开灯时的色温亮度并保持(厂商称之为记忆功能),但是连入米家APP,在软件上进行开关,灯色是可以记忆的,为此给各个房间配置了小米无线开关来控制灯的亮灭(没必要使用智能开关,因为智能开关的本质还是控制物理线路的通断),废弃原本安装好的传统开关(小坑,有点亏)。
主卧、次卧、书房、多功能房四室,需要做灯光控制,每个房间配备一个人体传感器和一个门窗传感器;开放空间为厨房、餐厅、客厅、阳台,从北至南连贯一体,考虑以后可以加装人体存在传感器(等等党终将胜利,期待子擎的Pro版人在传感器),暂时未作灯光控制。
1.2 人体传感器选择

除大门外的入户厅使用小米人体传感器2,其余房间均使用青萍人体传感器。一开始小米和青萍的各买了一个测试:青萍耗电更多(青萍两块纽扣电池,米家一块)、探测角度更小(青萍120°,米家130°),但是CD时间短(青萍可以5秒检测一次,米家只能30秒检测一次)、光照感应可调节(青萍可调整光强触发阈值和实时监测环境光照强度,米家只能看到环境光亮/暗没有光强数值)、安装更方便(青萍是半圆磁吸底座,小米是支架安装底座),所以综合考虑后来补了几个青萍人体传感器,米家人体传感器2就放在大门外面,用来触发门外的入户灯。
1.3 智能网关选择

就性能和稳定性而言,小米的中枢网关、多模网关2都比多模网关1性能好,不过中枢网关无Zigbee协议支持,需要多模网关作为子网关,使结构更加复杂,目前的简单应用不需要这么复杂;多模网关2不再支持接入苹果Homekit,考虑到之后接入苹果生态的尝试,所以选择了多模网关1
在上面的清单列表中,小米无线开关需要Zigbee协议支持,小米智能开关、人体传感器、门窗传感器都需要蓝牙/蓝牙Mesh协议支持,这些设备必须接入智能网关中才能使用。
1.4 家庭网络设计



家里智能箱放置电信的光猫、通往各个房间的交换机和搭载了软路由系统Openwrt的R2S。R2S在家庭网络系统中不仅是核心路由器的角色(放在多功能房和书房的无线路由器只负责实现无线信号覆盖,不负责IP分配,也就是不开启DHCP功能),在之后还会利用其上的Docker,部署智能家居控制中心HomeAssistant 和 内网测速服务器Iperf3 等附加服务。
R2S已经玩了有一年多了,之前的一个出给了学弟,如今又买了一个。曾经试过恩山论坛的不少Openwrt固件,都会有各种不稳定的问题,哪怕天天定时重启也会发生两三天后断连的情况,本次使用的是Github biliwala的固件biliwala/nanopi-openwrt,这个系列的固件功能精简,但是我所需要的功能应有尽有,相对可靠稳定,最不需要操心和折腾(广告屏蔽功能有坑,开了直接上不了网,干脆不开了)。
烧录方式非常简单:准备一张TF卡、一个读卡器,电脑上下载BalenaEtcher烧录软件,读卡器接上TF卡插入电脑USB。下载好固件包解压出img文件,打开BalenaEtcher,选择该img文件,选择烧录对象为TF卡,烧录,Bingo~
由于Openwrt是另一个有点复杂的系统,需要另行介绍,在此按下不表,日后有缘再续。
<hr/> 2. 平台部署

目前比较成熟的智能家居生态平台有华为、小米和苹果,华为平台不支持接入HA,苹果平台需要钞能力,小米平台设备最容易获得、最具性价比、可以接入HA,目前可玩性最高,所以选择的产品都是支持米家生态的产品。
不同产品怎么接入米家APP,产品说明书上都清楚明白,在此就不赘述了,假设购买的设备已将全部连接入米家APP,直接开始自动化配置的操作。
米家的自动化在有了多模网关之后,可以部分实现**本地化自动控制**(哪怕断了互联网,只要家庭内部的局域网还在运作,自动化就仍然可以运行),但是由于目前米家的限定过于严格,只有极其简单的规则才可以本地化(具体规则可参考视频 怎么样让米家自动化本地运行)。比如说,“人体传感器检测到有人移动就开灯”是可以实现本地控制(设备-网关-设备)的,但是“人体传感器检测到有人移动,如果灯关着就开灯”已经需要经过云端了(设备-网关-米家服务器-网关-设备)。从感应到触发开灯的延时变长暂且不说,就这几年米家服务器几次崩溃,就导致了所有使用米家APP做自动化的家庭/公司无法让智能设备正常联动(所以步子也不能迈大了,好歹保留些可以物理控制 手动控制的方案)。
为了保障家中设备在没有外网后依然可以正常联动,也为了在自动化配置上拥有更多灵活性(米家自动化毕竟是低代码平台,连个中间变量都不能引入,对于程序员老哥们并不是很舒畅),决定在R2S上用Docker容器的方式部署HA。
2.1 安装HomeAssistant

本步骤适用于在任意安装了Docker平台的设备上使用。
2.1.1 桥接 br-lan 网络
由于我这回部署的位置相对特殊,是在网关上,所以需要做一步网络桥接,让之后搭建的容器可以作为网络中的一个子设备,拥有独立的IP,否则在之后设备接入苹果Homekit时会有问题(一开始我没注意踩坑了),如果在非网关上安装HomeAssistant,可以跳过这个步骤。
# 为docker建立交接网络 子网subnet需要按照自己家里的实际情况填写,一般就是192.168.X.0/24,网关gateway就是路由器的IP地址,一般是192.168.X.1 , 将该桥接网络命名为 lan_net 这个名称可自行更换
docker network create -d bridge --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o "com.docker.network.bridge.name"="br-lan" lan_net2.1.2 下载镜像
# 稳定优先,所以我选择了stable版本
docker pull homeassistant/home-assistant:stable2.1.3  运行容器
docker run -d --restart=unless-stopped \          # 运行容器 静默运行 每次重启机器时自启动
              --name="HA"                          # 容器名 HA 可以自己取
              -e TZ=Asia/Shanghai \                  # 地区 亚洲/上海
              -v /opt/docker/HA/onfig:/config \  
              # 把容器的/config目录映射到设备的自定义目录,可自行更改
              --network lan_net \                  # 容器网络 使用刚刚创建的 桥接网络 lan_net
              --ip=192.168.1.119 \                  
              # 自定义容器IP地址 跟之前设置网络的网段一样,最后一位100-255选一个没有设备占用的IP即可
              homeassistant/home-assistant:stable # 镜像选择刚刚下载好的镜像当运行了一小段时间后,打开浏览器,输入自己设置的ip:8123(我这里是192.168.1.119:8123)就可以看到已经在运行的HomeAssistant网页了。按引导进行简单的配置就可以进入控制台了。
2.2 HACS安装

有了平台,就好比有了一部新手机,肯定需要安装一些应用,在手机上可以通过应用商店安装应用,HACS就是HA平台的应用商店。安装完成后可以安装各种前端插件和集成包,为了把米家设备连入HA,需要下载Xiaomi Gateway3 和 Xiaomi MIoT Auto集成包。
2.2.1 登入宿主机的命令行界面(SSH)
我的HA宿主机是Openwrt,IP是192.168.1.1,使用MobaXterm或其他网络设备连接软件连接上对应IP的SSH命令行界面。
cd /opt/docker/HA/onfig                  # 这个路径与创建HA容器时设置的链接文件夹一致
mkdir custom_components                  # 新建 custom_components 文件夹 这个文件夹名字不可更改
cd custom_components                         # 进入 custom_components 文件夹
wget -O - https://hacs.vip/get | bash -  # 安装    HACS 极速版
docker restart HA  # 重启HA容器
# 因为我在创建容器时给它命名为HA,所以写HA,应输入自己创建时取的容器名2.2.2 安装HACS集成
清除浏览器缓存后(本步骤不可省略),登入HA控制台,单击左下角的管理员账户,下拉找到“高级模式”,开启高级模式。
左下角 配置-设备与服务,右下角添加集成,搜索 “HACS” ,一路点击安装。
左下角 开发者工具-重新启动
再次登入HA控制台,就可以看到左侧栏目中增加了HACS条目,至此HACS安装完成。
2.3 接入米家设备

2.3.1 下载 Xiaomi 相关集成
Xiaomi的HA集成种类很多,在此先下载三个:①Xiaomi MIoT  ②Xiaomi MIoT Auto  ③Xiaomi Gateway 3。
下载好集成包后重启HA,单击左下角 配置-设备与服务,右下角添加集成,分别完成三个集成包的安装。
Xiaomi Gateway 3 目的是连接所有需要多模网关联动的设备,主要是各种开关、门窗传感器和人体传感器等。
在这里有个坑,米家的智能多模网关的固件版本和能否正常接入HA有直接关系,Github上该集成的官方描述XiaomiGateway3 提供了更完整的信息,目前(2022.11)最合适的多模网关固件版本为v1.5.0_0102。需要将多模网关设置到对应固件版本号,才可以顺畅的进行自动化配置,下一小节会介绍如何刷写多模网关固件。
Xiaomi MIoT Auto 用于连接绝大部分完全支持本地自动化控制的设备,比如各种灯、智能插座等。
Xiaomi MIoT 用于接入一些必须要联网才能控制的设备,在Xiaomi MIoT Auto集成中,这些设备无法正常使用,如小爱音箱、扫地机器人。
2.3.2 多模网关固件刷写
①找到并下载多模网关的固件包mgl03_fw
这里我选择的是 mgl03_1.5.0_0102_mod20210816 版本,日后情况可能会有变化,以 XiaomiGateway3 官方描述为准。
②将网关先添加到 XiaomiGateway3 一次
第一次添加 XiaomiGateway3 集成,可以看到自己多模网关的IP地址,再一次选择添加 XiaomiGateway3 集成,就可以将多模网关连入了。根据官方文档的指引,我们需要在最后一栏输入以下代码:
{"method":"set_ip_info","params":{"ssid":"\"\"","pswd":"123123 ; passwd -d admin ; echo enable > /sys/class/tty/tty/enable; telnetd"}}
这一步激活了多模网关的telnet功能,为我们向其中刷写固件提供了可能性。
③telnet连接多模网关 传入待刷写的固件包
使用MobaXterm或其他支持Telnet连接的软件登入多模网关的IP,用户名为admin
使用everything等软件,将我的电脑作为一个临时的HTTP服务器。


打开浏览器,找到固件包的文件路径,将对应文件wget到多模网关里,在这里,我的电脑的IP是192.168.1.121,自己电脑的IP可以通过ipconfig(Windows)或ifconfig(Linux)查询到。
cd /tmp    # 进入tmp目录
# 分别从我的电脑中下载固件包、内核包和蓝牙包 到多模网关中
wget 192.168.1.121/E%3A/mgl03_1.5.0_0102_mod20210816/root_1.5.0_0102_mod20210816.bin
wget 192.168.1.121/E%3A/mgl03_1.5.0_0102_mod20210816/linux_1.5.0_0102.bin
wget 192.168.1.121/E%3A/mgl03_1.5.0_0102_mod20210816/full_ble_1.5.0_0102.gbl③完成刷写
fw_update /tmp/linux_1.5.0_0102.bin
fw_update /tmp/root_1.5.0_0102_mod20210816.bin
run_ble_dfu.sh /dev/ttyS1 /tmp/full_ble_1.5.0_0102.gbl 123 1
reboot至此,已完成多模网关的固件更新,再次打开HA平台的XiaomiGateway3 集成,重载多模网关或干脆删除后重新加入多模网关,一段时间后,就可以看到多模网关连接的所有设备,已经连入HA成为一个个实体了。
<hr/>3. 自动化设计

HA控制台中, 左下角 配置-场景自动化 中,可以设计各种自动化规则,网上也有很多人用NodeRed来编辑规则,我一时懒得学了,就选择直接在 场景自动化里手码了。
在这里有一点需要说明,在配置自动化的过程中,可以尽量使用“调用服务”的方法完成设备的控制,一方面能有更丰富的控制选项,比如灯光的调色调亮,另一方面在重载各个设备或者集成重新接入时,不容易丢失设备实体名称,如果用“设备”的方法控制,在换一个容器重新载入设备的时候就会因为名称实体发生变化而丢失所有和“设备”有关的自动化规则信息,算是一个小坑吧。
3.1 入户前厅自动化

入户前厅是电梯到家门口的一个小空间,这个空间四四方方非常规整,不存在什么视觉死角,要实现的功能也最简单,人来亮灯-人在保持-人走熄灯,算是作为起步练手了。
通过两条自动化即可实现功能:
在HA界面中可以通过低代码的方式 友善地完成自动化规则的编写,但不利于展示,在此直接展示在config文件夹下automations.yaml文件中的成品。
3.1.1 前厅人来亮灯
- id: '1666974303864'
  alias: 前厅来人亮灯 - 自动化
  description: 前厅有人运动,开前厅灯
  /* 触发条件:
          入户传感器检测到有人移动(设备条件)
          或
          入户传感器的动作传感器从OFF跳转为ON(状态条件,更推荐)
  */
  trigger:
  - type: motion
    platform: device
    device_id: 76365cd62b002bab22b5ff02ae7bc514
    entity_id: binary_sensor.54ef44c5ed68_motion
    domain: binary_sensor
  - platform: state
    entity_id:
    - binary_sensor.54ef44c5ed68_motion
    from: 'off'
    to: 'on'
  /* 环境条件:
          入户灯的状态为关闭(状态条件,推荐)
  */
  condition:
  - condition: state
    entity_id: switch.ccb5d1a8ef2f_switch
    state: 'off'
    enabled: true
  /* 动作:
          打开入户灯(服务调用,推荐)
  */
  action:
  - service: switch.turn_on
    data: {}
    target:
      entity_id: switch.ccb5d1a8ef2f_switch
  mode: single
3.1.2 前厅无人熄灯
- id: '1666974486493'
  alias: 前厅无人熄灯 - 自动化
  description: 前厅检测到没人,熄灯
  /* 触发条件:
          入户传感器不再检测到有人移动(设备条件)
          或
          入户传感器的动作传感器从ON跳转为OFF(状态条件,更推荐)
  */
  trigger:
  - type: no_motion
    platform: device
    device_id: 76365cd62b002bab22b5ff02ae7bc514
    entity_id: binary_sensor.54ef44c5ed68_motion
    domain: binary_sensor
  - platform: state
    entity_id:
    - binary_sensor.54ef44c5ed68_motion
    from: 'on'
    to: 'off'
  /* 环境条件:
          入户灯的状态为开启(状态条件,推荐)
  */
  condition:
  - condition: state
    entity_id: switch.ccb5d1a8ef2f_switch
    state: 'on'
  /* 动作:
          关闭入户灯(服务调用,推荐)
  */
  action:
  - service: switch.turn_off
    data: {}
    target:
      entity_id: switch.ccb5d1a8ef2f_switch
  mode: single
3.2 工作空间自动化

工作空间指多功能房和书房,这两个空间内会有人长期驻留,但是动作微小,人体传感器难以察觉;也可能出现人经过一下去一些东西就走的情况,另外,不同时间段可以配置不同的灯光效果。为了适应上述需求,引入了一个人员状态开关,设计了六条自动化规则。在此以书房为例以总结注释的形式展示运作过程。
3.2.1 书房人来开启人员状态
为了规避在房间外走动误触发状态,将人体传感器安排在房间内墙壁上方的一角,书房门外部走道不在人体传感器的检测范围内,实测从进入书房到调整状态,再到书房灯光控制逻辑触发开灯,延时在1秒左右,正好快要走到书房的书桌前,尚可接受。
alias: 书房人来 - 自动化检测
description: 书房有人来或者关门就激活 书房人员状态 为 有人
/*
触发条件:
  书房传感器不再检测到有人移动
  或
  书房传感器的动作传感器从OFF跳转为ON
  或
  书房门状态由开启跳转为关闭

环境条件:
  书房人员状态开关为关闭状态

动作:
  开启书房人员状态开关
*/
3.2.2 书房人走关闭人员状态
由于人体传感器对有人移动敏感,对无人移动不敏感,实测不管是小米人体传感器还是青萍人体传感器,都需要在房间没人后90秒到120秒才会触发不再检测到有人的状态,相当于自身加了一个两分钟左右的延迟,可惜这个延迟并不能够进一步缩短,不过也算实现了人走熄灯的功能。
在环境条件中加了书房门为开启状态的条件,也就是说,如果我长期在房间内工作,可以关上房门,表示房间有人,这样即使我动作微小,人体传感器检测不到我的移动,也可以保持亮灯而不触发本条自动化。
alias: 书房人走 - 自动化检测
description: 人体传感器未检测到有人,书房门也开着,就调整 书房人员状态 为 无人
/*
触发条件:
  书房传感器不再检测到有人
  或
  书房传感器的动作传感器从ON跳转为OFF

环境条件:
  书房人员状态开关为开启状态
  并
  书房门为开启状态

动作:
  关闭书房人员状态开关
*/
3.2.3 书房无线开关单击 开关顶灯
为解决之前所述物理开关通断会强行改变灯光色温亮度问题,使用无线开关控制灯的亮灭,本条规则非常符合直觉,就是最简单的单击开关顶灯。
alias: 书房无线开关单击 开关吸顶灯 - 半自动化
description: 在书房内,单击无线开关,切换 书房灯状态,并调整 书房人员状态 为 有人
/*
触发条件:
  书房无线开关发出 单击 动作

环境条件:
  无

动作:
  开启书房人员状态
  转换书房顶灯的亮灭状态
*/
3.2.4 书房无线开关双击 手动离开
3.2.2已经实现了自动化的人走熄灯,不过需要人走后90秒到120秒才会触发,因此设计了双击手动离开的规则,双击无线开关后,会先关闭人来灯亮的检测(3.2.1),延时十秒后,关闭书房人员状态,再开启人来亮灯(3.2.1)和人走熄灯(3.2.2)的自动化规则。
alias: 书房无线开关双击 离开房间 - 半自动化
description: 双击书房无线开关,延时10秒后,调整 书房人员状态 为 无人
/*
触发条件:
  书房无线开关发出 双击 动作

环境条件:
  无

动作:
  关闭书房人走检测
  延时10秒
  关闭书房人员状态
  开启书房人来检测 和 书房人走检测
*/
3.2.5 书房无线开关长按 关闭“书房人走”自动化
书房人来检测(3.2.1) 和 书房人走检测(3.2.2)需要通过关门锁定书房人员状态,如果想在房间内办公,又想开着门通风,那人体传感器势必会误判无人,因此,只有临时手动关闭书房人走检测,才可以保持书房人员状态为开启(有人)状态。本条规则需要与上一条双击手动离开联合使用,就可以在离开房间后,重新开启“书房人走”规则。
如果长按后无灯光变化,难以知晓长按是否成功执行,因此在此设计让房间灯光闪烁两下再恢复原态。
alias: 书房无线开关长按 模式调整 - 半自动化
description: 长按书房无线开关,暂时关闭人走熄灯功能
/*
触发条件:
  书房无线开关发出 长按 动作

环境条件:
  无

动作:
  打开书房人走检测
  如果书房灯亮:
     亮度100-10-100-10 闪烁两轮
     书房灯恢复正常亮度
  否则:
     亮度100-10-100-10 闪烁两轮
     书房灯关闭
*/  
3.2.6 书房灯光控制逻辑
此灯光控制逻辑用来控制不同时间段,房间内的灯光状态。当书房人员状态发生变化时,就会自动调用此自动化。
此自动化 与 单击 双击 长按 无线开关 配合,既实现了夜间人来灯亮人走灯熄,又为白天开关灯、开关门等不同情景提供了可以变通的可行性。
在此写了一个简单版本,实际上,可通过多层的条件判断,实现不同的灯光自动化效果,比如根据不同时间段设置不同灯光亮度变化,也可以设置不同灯的亮灭规则。
alias: 书房灯光控制 - 自动化执行
description: 通过读取 书房人员状态 和 书房灯光状态,调整对应的灯光效果
/*
触发条件:
  书房人员状态 发生变化(无人->有人 或 有人->无人)

环境条件:
  无

动作:
  如果书房人员状态关闭(无人):
     关闭书房顶灯和台灯
  否则:
     再判断是否满足以下任一条件:
        时间在16:00-7:00之间
        人体传感器接受光照亮度低于20lx
        书房灯开着
        书房台灯开着
     如若满足就打开书房顶灯和台灯
*/  
3.3 休息空间自动化

休息空间指主卧与次卧,在深夜休息时,人在房间内却不要开灯,而未睡时又需要开灯照明 ,因此,在人员状态的基础上又引入了灯光状态开关和睡眠状态开关,灯光状态开关在正常照明时无需使用,在睡眠状态开关开启时作为起夜灯光开关的标志。在正常模式下(未睡眠情况),休息空间情况与工作空间基本无异,由人来检测、人走检测、无线开关单击开关灯、无线开关双击离开、无线开关长按关闭人走检测和灯光控制六项自动化规则构成。其中,灯光控制结合了灯光状态开关和睡眠开关的状态,除了夜晚固定的亮灯模式外,在每日22:00之后或者睡眠状态开关被开启之时,可开启夜灯模式。
在上述自动化规则的基础上,又引入了进入睡眠、结束睡眠的自动化检测,还有每日22:00自动进入睡眠状态、每日9:00自动解除睡眠状态的定时规则,以增加自动化执行的稳定性。
在此以次卧为例,展示自动化规则的逻辑。
3.3.1 进入睡眠 自动化检测
本规则执行的条件较为严格,经过一段时间的测试,还是定时进入睡眠状态(深夜状态)更为稳定可靠,不过在此也先写下设计的规则,待日后进一步优化。
alias: 次卧进入睡眠 - 自动化检测
description: 当次卧人体传感器在21:00之后检测到次卧有人情况下灯全关,亮度降为2lx以下,就开启睡眠模式
/*
触发条件:
  次卧顶灯或床前灯 由 开 变为 关

环境条件:
  时间在21:00-次日6:00之间

动作:
  延时15分钟(人体传感器内的光照传感器需要10分钟才会跳转,故延时等待)
  如果 次卧灯全关 或者 光照传感器测得亮度低于2:
     关闭 次卧灯光控制 自动化规则
     关闭次卧灯光状态
     打开次卧睡眠状态
     开启 次卧结束睡眠 自动化规则
     关闭 次卧人来、次卧人走、次卧进入睡眠 自动化规则
*/  
3.3.2 结束睡眠 自动化检测
本规则通过判断在上午打开卧室房门触发,结合时间段和睡眠状态,决定是否要对卧室人员状态、灯光状态和睡眠状态进行调整。
alias: 次卧结束睡眠 - 自动化检测
description: 6:00之后房门开启就判定睡眠结束
/*
触发条件:
  次卧房门被打开
  或
  次卧房门状态 由 关闭 变 开启

环境条件:
  时间在6:00-次日21:00之间
  且
  次卧睡眠状态开关开启

动作:
  延时5分钟(避免起夜误触发)
  如果 次卧门仍然为 开启 状态:
     关闭 次卧人员状态 次卧灯光状态 次卧睡眠状态
     开启 次卧人来 次卧人走 次卧进入睡眠 自动化规则
     关闭 次卧结束睡眠 自动化规则
*/
3.3.3 次卧22:00自动开启睡眠状态
由于3.3.1 自动化检测进入睡眠 触发条件过于严格,经过而一段时间的测试,还是定时进入睡眠(深夜)模式更便于使用。
alias: 次卧22:00自动开启睡眠 - 自动化
description: 次卧22:00以后自动进入睡眠模式
/*
触发条件:
  时间为22:00

环境条件:
  家里有人-确认 状态开启 (此开关在3.3节将进行说明)

动作:
  关闭 次卧灯光控制 自动化规则
  如果次卧人员状态开启 且次卧灯光状态关闭:
     开启次卧灯光状态(此状态用于表示睡眠模式下灯光的开关情况)
  开启 次卧睡眠状态
  开启 次卧灯光控制 次卧结束睡眠 自动化规则
  关闭 次卧人来 次卧人走 次卧进入睡眠 自动化规则
*/
3.3.4 次卧9:00自动结束睡眠状态
本自动化规则可在睡觉不关房门的情况下自动结束睡眠状态,由于次卧在睡觉时有窗帘遮挡,有起床拉开窗帘的习惯,所以还添加了光照强度大于 20 lx 的规则,避免睡懒觉的时候误触发结束睡眠。
alias: 次卧09:00自动结束睡眠 - 自动化
description: 次卧09:00自动关闭睡眠模式
/*
触发条件:
  时间为09:00

环境条件:
次卧睡眠状态 开启

次卧人体传感器接收光照强度 大于 20 lx

动作:
  关闭 次卧人员状态 次卧灯光状态 次卧睡眠状态
  开启 次卧人来 次卧人走 次卧进入睡眠 自动化规则
  关闭 次卧结束睡眠 自动化规则
*/
3.3.5  次卧灯光控制逻辑
卧室的灯光控制规则较工作空间更为复杂,涉及到不同时间段和是否睡眠,在此简化流程简单介绍。
alias: 次卧灯光控制 - 自动化执行
description: 通过读取 次卧人员状态、次卧灯光状态 和 次卧睡眠状态,调整对应的灯光效果
/*
触发条件:
  次卧人员状态 次卧灯光状态 次卧睡眠状态 发生改变

环境条件:
  无

动作:
  如果次卧人员状态关闭(无人):
     关闭次卧顶灯和床头灯
  否则(次卧人员状态开启):
     如果 次卧睡眠状态 关闭:
        如果为22:00-6:00深夜时间段:
           如果灯光状态关闭:
              关闭次卧顶灯和床头灯
           否则(次卧灯光状态 开启):
              开启并调整次卧顶灯和床头灯 色温偏暖 亮度20%
        否则(6:00-22:00时间段):
           如果满足以下任一条件:
              时间在16:00-22:00之间
              人体传感器接受光照亮度低于20lx
              次卧灯开着
              次卧床头灯开着
           就:
              开启并调整次卧顶灯和床头灯 色温中性 亮度70%
      否则(次卧睡眠状态开启):
         如果灯光状态关闭:
            关闭次卧顶灯和床头灯
         否则(次卧灯光状态 开启):
            开启并调整次卧顶灯和床头灯 色温偏暖 亮度20%
*/
3.4 离家 归家 自动化

离家、归家相关自动化,需要记录家庭成员的在家情况方可判断,在网上查阅到两种方式都可以实现成员是否在家的检测,分别是网络连接和地理围栏。
对于苹果设备使用地理围栏的触发方式更为简单,直接安装HomeAssistant APP,即可实现设备地理位置的检测,安卓设备需要安装 GPSLogger 等第三方软件才可以实现(Home Assistant 通过GPSLogger实现手机定位)。
网络连接方式相对稳定,虽然存在20秒左右的延迟(连接上家里局域网后,需要20秒左右,才能激发为在家状态),但可靠性还能接受。使用这种方法需要在HA平台安装Nmap集成(Home Assistant判断是否在家配置最简单且相对稳定的方法)。
为了实现离家 归家的状态自动判断,引入“家里有人-预备”和“家里有人-确认”两个状态开关,通过“离家检测”、“回家预备检测”、“回家预备状态清空”、“回家确认”、“回家异常”五个自动化规则,实现状态的触发和设备的联动。
3.4.1 离家确认
结合地理围栏和网络连接的双重判断可以保障不误触发该自动化规则。
alias: 离家确认 - 自动化
description: 所有家庭成员的手机均未连入家庭网,判定为都已经离开了家,关闭所有灯,调整为 无人状态
/*
触发条件:
   当任意家庭成员的手机不再连接家庭网
   或
   家庭成员手机离开 家周围100米区域

环境条件:
   无

动作:
  判断是否满足如下所有条件:
     家里有人-确认 状态开关 为 开启状态
     所有家庭成员网络连接状态均为 离家 或 未知
     所有家庭成员手机 全部离开 家周围100米区域
  如若满足,就:
     关闭 主卧、次卧、书房、多功能房、客厅、餐厅、卫生间 的所有灯具
     断开 厨房、阳台、走廊的开关
     关闭所有状态管理开关(人员状态、灯光状态、睡眠状态、家里有人-预备、家里有人-确认)
     打开 回家预备 自动化规则
*/
3.4.2 回家预备 检测
回家预备作为家庭成员即将回家的准备信号,通过手机连入家庭网络 或 进入地理围栏范围内 触发,开启回家预备状态。此状态的开闭可用于区分是家庭成员进入家中还是其他人员闯入。
alias: 回家预备 - 自动化检测
description: 在所有人都不在家的状态下,任意一人回家,都会触发 家里有人-预备状态
/*
触发条件:
   当任意家庭成员的手机连接入家庭网
   或
   家庭成员手机进入 家周围100米区域

环境条件:
   家里有人-预备 开关 为关闭状态

动作:
  开启家里有人-预备 状态开关
*/
3.4.3 回家预备 延时清空
家里有人-预备状态只持续5分钟,正常情况下从触发“3.4.2回家预备 检测”到进入家中只需2~3分钟,因此延时对“家里有人-预备”状态进行释放。
alias: 回家预备 - 状态延时清空
description: 当回家预备激活后,五分钟自动还原预备状态
/*
触发条件:
   家里有人-预备 状态由 关 变 开

环境条件:
   无

动作:
  延时5分钟
  关闭 家里有人-预备 状态
*/
3.4.4 回家确认
当 回家预备 开启后,等待五分钟,如若期间大门触发开启,即为正常回家,启动对应自动化。
alias: 回家确认 - 自动化
description: 家里有人-预备状态触发后,等待大门开启,开启的时刻,触发家里有人-确认状态,之后开启客厅灯和餐厅灯
/*
触发条件:
   家里有人-预备 状态由 关 变 开

环境条件:
   无

动作:
  五分钟内等待大门被打开
  如若触发,就:
     打开 家里有人-确认 状态
     如果时间段为6:00-22:00:
             如果客厅灯和餐厅灯均未打开:
                开启客厅灯和餐厅灯 灯光调至柔和光色
     否则(时间段为深夜):
        如果客厅灯、餐厅灯、落地灯均未打开:
           开启落地灯(避免打扰已休息人员)
*/
3.4.5 回家异常
如果家门被打开,但是家里有人-预备 和 家里有人-确认 均为关闭状态,说明此时既不是成员回家,也不是接待访客,属于异常状态,需要通知家庭成员。
alias: 回家异常 - 自动化
description: 如果在 家里没人 且 家里有人-预备 未开启时,大门打开,视为 异常回家,通知家庭成员
/*
触发条件:
   家中大门由 关 变 开

环境条件:
   无

动作:
  如果 家里有人-预备、家里有人-确认 均为关闭状态:
     通知家人,家中有异常人员
*/
4. 接入Apple HomeKit

HomeAssistant设备接入到HomeKit

5. 后记

本文记述了购买设备、平台安装、自动化规则设置的一系列流程,然而HA圈内玩法众多,如何美化中控界面、如何使用Node-Red实现更复杂高效的自动化流程,仍然有许多值得深挖玩味的地方,奈何一时时间有限,待日后另行研究记述。
回复

使用道具 举报

5

主题

11

帖子

27

积分

新手上路

Rank: 1

积分
27
发表于 2025-4-14 22:18:52 | 显示全部楼层
前排支持下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|科技一站

GMT+8, 2025-8-21 16:20 , Processed in 0.101855 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表